菜单

文本和 LaTeX

相关源文件

此页面记录了 ManimGL 中文本和 LaTeX 的渲染功能,解释了如何在动画中创建、自定义和操作文本元素。ManimGL 中的文本系统提供了用于渲染纯文本、标记格式文本和 LaTeX 数学表达式的类。

如果您想了解如何转换和动画化文本对象,请参阅 动画系统基本动画

概述

ManimGL 为文本渲染提供了三个主要类:

  1. Text - 用于带样式的纯文本
  2. MarkupText - 用于带有 Pango 标记格式的文本
  3. 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 类提供了向动画添加文本的最简单方法。它处理纯文本,并提供样式、字体选择和颜色选项。

文本的关键参数

参数类型描述
textstr文本内容
fontstr字体系列(默认为系统字体)
font_sizeint文本大小(默认为:48)
colorManimColor整体文本颜色
t2cdict文本到颜色的映射
t2fdict文本到字体的映射
t2wdict文本到字重的映射
t2sdict文本到倾斜的映射
line_spacing浮点数行间距
alignmentstr文本对齐(“LEFT”、“CENTER”、“RIGHT”)

来源: manimlib/mobject/svg/text_mobject.py388-423

MarkupText

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

LaTeX 渲染

Tex 和 TexText

ManimGL 为渲染 LaTeX 表达式和公式提供了 Tex 类,为不带数学环境的简单文本提供了 TexText

Tex 的关键参数

参数类型描述
tex_stringsstrLaTeX 表达式(多个字符串会被连接)
font_sizeint表达式的大小(默认为:48)
tex_environmentstrLaTeX 环境(默认为:“align*”)
tex_templatestr要使用的 LaTeX 模板
additional_preamblestr额外的 LaTeX 包或命令
tex_to_color_mapdictLaTeX 文本到颜色的映射
isolate选择器用于动画的隔离子字符串

TexTexText 的主要区别在于,Tex 默认将内容包装在 align* 环境中,而 TexText 不使用任何环境。

来源: manimlib/mobject/svg/tex_mobject.py24-272 manimlib/utils/tex_file_writing.py30-48

LaTeX 渲染管道

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 动画(及其别名 TransformMatchingShapesTransformMatchingTex)旨在转换文本,同时保持对应部分之间的关系。

对于具有相似子字符串的文本,TransformMatchingShapes 会将每个字符转换为新文本中的对应字符。

来源: manimlib/animation/transform_matching_parts.py21-191

代码

Code 类派生自 MarkupText,为代码片段提供语法高亮。

Code 类使用 pygments 库根据指定的语言高亮语法。

来源: manimlib/mobject/svg/text_mobject.py426-454

常见陷阱与技巧

  1. LaTeX 错误:LaTeX 编译错误可能很晦涩。如果您的 Tex mobject 未能渲染,请检查 LaTeX 语法是否存在常见问题。

  2. 字体可用性:并非所有字体都可在所有系统上使用。使用常用字体或使用 register_font() 注册自定义字体。

  3. 性能:具有许多隔离部分的复杂文本可能会影响性能。仅隔离您需要操作的部分。

  4. Unicode 支持:使用 MarkupText 以获得更好的 Unicode 支持。

  5. LaTeX 模板:对于复杂的 LaTeX 需求,请考虑创建一个自定义 LaTeX 模板,其中包含您需要的包。

  6. 文本大小:使用 height 参数而不是 font_size,以在不同文本内容之间保持一致的大小。

  7. 转换:使用 TransformMatchingTex 进行 LaTeX,使用 TransformMatchingShapes 进行文本,以获得外观更好的转换。