此页面记录了 ManimGL 中文本和 LaTeX 的渲染功能,解释了如何在动画中创建、自定义和操作文本元素。ManimGL 中的文本系统提供了用于渲染纯文本、标记格式文本和 LaTeX 数学表达式的类。
如果您想了解如何转换和动画化文本对象,请参阅 动画系统 和 基本动画。
ManimGL 为文本渲染提供了三个主要类:
Text - 用于带样式的纯文本MarkupText - 用于带有 Pango 标记格式的文本Tex - 用于 LaTeX 数学表达式Manim 中的所有文本类都利用基于 SVG 的渲染管道,其中文本首先使用外部库(文本使用 manimpango,公式使用 LaTeX)转换为 SVG 格式,然后解析为 Manim 的基于矢量的对象。
来源: manimlib/mobject/svg/text_mobject.py15-192 manimlib/mobject/svg/tex_mobject.py1-271 manimlib/utils/tex_file_writing.py39-148
文本渲染系统建立在一系列共享通用功能但为不同文本格式需求提供专业特性的类之上。
来源: manimlib/mobject/svg/string_mobject.py25-585 manimlib/mobject/svg/text_mobject.py103-424 manimlib/mobject/svg/tex_mobject.py24-271
Text 类提供了向动画添加文本的最简单方法。它处理纯文本,并提供样式、字体选择和颜色选项。
| 参数 | 类型 | 描述 |
|---|---|---|
text | str | 文本内容 |
font | str | 字体系列(默认为系统字体) |
font_size | int | 文本大小(默认为:48) |
color | ManimColor | 整体文本颜色 |
t2c | dict | 文本到颜色的映射 |
t2f | dict | 文本到字体的映射 |
t2w | dict | 文本到字重的映射 |
t2s | dict | 文本到倾斜的映射 |
line_spacing | 浮点数 | 行间距 |
alignment | str | 文本对齐(“LEFT”、“CENTER”、“RIGHT”) |
来源: manimlib/mobject/svg/text_mobject.py388-423
MarkupText 通过支持 Pango 标记来扩展文本功能,它允许使用像 <b>、<i> 等标签直接在文本字符串中使用丰富的文本格式。
| 标签 | 效果 | 等效设置 |
|---|---|---|
<b>text</b> | 粗体文本 | font_weight="bold" |
<i>text</i> | 斜体文本 | font_style="italic" |
<u>text</u> | 带下划线的文本 | underline="single" |
<s>text</s> | 删除线 | strikethrough="true" |
<sub>text</sub> | 下标 | baseline_shift="subscript" |
<sup>text</sup> | 上标 | baseline_shift="superscript" |
<span attr="value">text</span> | 自定义样式 | 各种属性 |
来源: manimlib/mobject/svg/text_mobject.py103-192
ManimGL 提供了一个上下文管理器来临时注册自定义字体。
来源: manimlib/mobject/svg/text_mobject.py457-497
ManimGL 为渲染 LaTeX 表达式和公式提供了 Tex 类,为不带数学环境的简单文本提供了 TexText。
| 参数 | 类型 | 描述 |
|---|---|---|
tex_strings | str | LaTeX 表达式(多个字符串会被连接) |
font_size | int | 表达式的大小(默认为:48) |
tex_environment | str | LaTeX 环境(默认为:“align*”) |
tex_template | str | 要使用的 LaTeX 模板 |
additional_preamble | str | 额外的 LaTeX 包或命令 |
tex_to_color_map | dict | LaTeX 文本到颜色的映射 |
isolate | 选择器 | 用于动画的隔离子字符串 |
Tex 和 TexText 的主要区别在于,Tex 默认将内容包装在 align* 环境中,而 TexText 不使用任何环境。
来源: manimlib/mobject/svg/tex_mobject.py24-272 manimlib/utils/tex_file_writing.py30-48
ManimGL 通过使用 LaTeX 编译器和 dvisvgm 将其转换为 SVG 来渲染 LaTeX。
来源: manimlib/utils/tex_file_writing.py50-148
ManimGL 中的所有文本类都继承了 StringMobject 强大的子字符串选择功能,允许您对文本的特定部分进行样式设置或动画。
对于 LaTeX,也存在类似的功能。
来源: manimlib/mobject/svg/string_mobject.py434-583 manimlib/mobject/svg/tex_mobject.py190-205
ManimGL 为文本和 LaTeX 对象提供了专门的转换。
TransformMatchingParts 动画(及其别名 TransformMatchingShapes 和 TransformMatchingTex)旨在转换文本,同时保持对应部分之间的关系。
对于具有相似子字符串的文本,TransformMatchingShapes 会将每个字符转换为新文本中的对应字符。
来源: manimlib/animation/transform_matching_parts.py21-191
Code 类派生自 MarkupText,为代码片段提供语法高亮。
Code 类使用 pygments 库根据指定的语言高亮语法。
来源: manimlib/mobject/svg/text_mobject.py426-454
LaTeX 错误:LaTeX 编译错误可能很晦涩。如果您的 Tex mobject 未能渲染,请检查 LaTeX 语法是否存在常见问题。
字体可用性:并非所有字体都可在所有系统上使用。使用常用字体或使用 register_font() 注册自定义字体。
性能:具有许多隔离部分的复杂文本可能会影响性能。仅隔离您需要操作的部分。
Unicode 支持:使用 MarkupText 以获得更好的 Unicode 支持。
LaTeX 模板:对于复杂的 LaTeX 需求,请考虑创建一个自定义 LaTeX 模板,其中包含您需要的包。
文本大小:使用 height 参数而不是 font_size,以在不同文本内容之间保持一致的大小。
转换:使用 TransformMatchingTex 进行 LaTeX,使用 TransformMatchingShapes 进行文本,以获得外观更好的转换。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(f47378)