数学¶
影片代码
import manimgx as m
class MathHero(m.Scene):
def construct(self) -> None:
before = m.MathTex("a^2", "+", "b^2", "=", "c^2", font_size=96)
after = m.MathTex("a^2", "=", "c^2", "-", "b^2", font_size=96)
before[2].set_color(m.YELLOW)
after[4].set_color(m.YELLOW)
self.play(m.Write(before))
self.play(m.TransformMatchingTex(before, after))
self.wait()
MathTex 排版以 LaTeX 书写的公式:分数、根号、求和与积分、矩阵、
cases、希腊字母。请用原始字符串 r"..." 书写,以便 Python 保留其反斜杠。LaTeX 宏包和
\def 不起作用;ManimGX 不认识的命令会以其名称中止场景。
为 MathTex 提供多个字符串,每个字符串都是公式的一个组成部分,可单独着色、移动或制作
动画:MathTex("a^2", "+", "b^2")[2] 是 b²。在两个公式中以相同方式书写的部分,可通过
TransformMatchingTex 相互变换。
Tex 是包含公式的文本,公式位于 $ 符号之间。如果你熟悉 Typst,可直接
书写:Typst 接受 Typst 标记,MathTypst 接受以
Typst 数学语法书写的公式。
MathTex
¶

代码
import manimgx as m
class MathTexLatexExample(m.Scene):
def construct(self) -> None:
limit = r"\lim_{n \to \infty} \left(1 + \frac{1}{n}\right)^n = e"
formulas = m.VGroup(
m.MathTex(r"\int_0^1 x^2 \, dx = \frac{1}{3}"),
m.MathTex(r"\begin{pmatrix} a & b \\ c & d \end{pmatrix}"),
m.MathTex(limit),
m.MathTex(r"\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}"),
)
self.add(formulas.arrange_in_grid(rows=2, buff=1).scale(1.3))
LaTeX 数学,在引擎中排版,每个字符串为一个部分:MathTex("a^2", "+",
"b^2")[2] 为 \(b^2\),可着色、移动或与另一公式匹配。
无需 LaTeX 安装:LaTeX 转换为 Typst(由 mitex,引擎的一部分)并以
展示样式排版,使用 New Computer Modern Math,未加样式时为白色。大部分
LaTeX 数学可转换:分数、根号、求和与积分、
矩阵(pmatrix、bmatrix、array)、cases 和 aligned、重音、\mathbb
和其他字母表、\text、\left 和 \right、\color、\newcommand。
包不可——\usepackage 及其命令(如 \ce 或 \SI)——\def 也不可:
mitex 不知的命令引发
TypstError。
各字符串为一个公式,由 arg_separator 连接并整体排版,因此分割
公式不会移动任何字形。每个字符串为一个部分,即其添加字形的
MathTexPart,双花括号在字符串内设置独立
部分:MathTex("{{a^2}} + {{b^2}} = {{c^2}}") 有下面第一个示例的五个
部分。独立存在的字符串(其花括号、环境和 \left…\right 在其中闭合)
恰好持有其字形。其余,如分数的横线或 "^2" 等片段的字形,归入
其周围独立字符串之间的第一个片段:在
MathTex(r"\frac{", "a", "}{", "b", "}") 中横线属于闭合的 "}",TeX
在此绘制它,而在 MathTex(r"e^{i", r"\pi}") 中,在项内分割,每个字形
属于第一个部分。无法区分部分的公式引发 ValueError。
substrings_to_isolate 和 tex_to_color_map 进一步分割字符串;
set_color_by_tex 和
get_part_by_tex 按其 LaTeX 查找部分,
TransformMatchingTex 将每个部分移至
另一公式中以相同方式书写的部分。作为文本读取(见 Tex),
字符串以同样方式成为一个文本,含空格。
*tex_strings公式,以 LaTeX 表示:每个字符串为一个部分(数字写为 字符串),字符串内的每个
{{…}}也为一个部分。arg_separator将字符串连接为
tex_string的分隔符,即它们排版的 公式(或文本)。substrings_to_isolate使其各自成为部分的子串:每个字符串在每个 子串的每次出现处分割。
tex_to_color_map每个子串的颜色,子串成为独立部分 并着色。
tex_environment字符串的读取方式:名称含 "align"(默认 "align*")为数学;任何其他或 None 为 LaTeX 文本,数学 在
$符号之间。font_size文本的大小:一个 em 为
font_size / 96场景单位,默认时为 0.5, 48(Text 按其大写字母确定大小:48 时高 0.449 单位)。typst_preamble在文档之前设置的 Typst 代码:
#set和#show规则、#let定义、导入(默认为 "")。font_paths字体文件(.ttf、.otf、.ttc、.otc)的目录,在 manimgx 附带的字体之前 连同其子目录一起搜索;指向文件的路径不添加任何内容 (默认为 None)。
should_centermobject 是否居中于原点(默认为 True)。
height将 mobject 缩放至的高度,以场景单位计,而非按
font_size确定大小 (默认为 None)。width将 mobject 缩放至的宽度,以场景单位计,而非按
font_size确定大小; 若同时给出height,则宽度最后设置(默认为 None)。package_pathTypst 包导入的目录,将包存放为
namespace/name/version目录:#import "@preview/name:1.0.0"读取preview/name/1.0.0(默认为 None: 除 mitex 外无任何包,mitex 由 manimgx 的引擎持有)。不下载任何内容。background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 样式关键字。
源码
manimgx\mobjects\text.py
1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 | |
tex_strings
¶
各字符串,每个为一个部分:参数,在 {{…}} 处和孤立子串
周围分割。
tex_string
¶
整个公式或文本的 LaTeX:字符串由
arg_separator 连接。
get_parts_by_tex
¶
查找 LaTeX 包含 tex 或等于 tex 的部分。
tex要查找的 LaTeX。
substringLaTeX 包含
tex的部分是否匹配;若否,仅 LaTeX 等于tex的部分。case_sensitive大小写是否区分。
返回 各部分本身按顺序组成的新组。
源码
manimgx\mobjects\text.py
get_part_by_tex
¶
查找首个 LaTeX 包含 tex 或等于 tex 的部分。
tex要查找的 LaTeX。
substringLaTeX 包含
tex的部分是否匹配;若否,仅 LaTeX 等于tex的部分。case_sensitive大小写是否区分。
返回 部分本身,若无匹配则为 None。
源码
manimgx\mobjects\text.py
index_of_part
¶
查找部分在公式各部分中的位置;非部分的 mobject 引发 ValueError。
part其中一个部分。
返回 其索引,从 0 开始。
set_color_by_tex
¶

为 LaTeX 包含 tex 或等于 tex 的部分着色。
tex要查找的 LaTeX。
color它们的颜色。
substringLaTeX 包含
tex的部分是否匹配;若否,仅 LaTeX 等于tex的部分。case_sensitive大小写是否区分。
源码
manimgx\mobjects\text.py
set_color_by_tex_to_color_map
¶
按 LaTeX 为部分着色:每个条目对应 LaTeX 包含它或等于它的 部分。
texs_to_color_map每段 LaTeX 的颜色,按顺序应用。
substringLaTeX 包含该段的部分是否匹配;若否,仅 LaTeX 等于该段的部分。
case_sensitive大小写是否区分。
源码
manimgx\mobjects\text.py
MathTexPart
¶
Tex
¶
LaTeX 文本,在引擎中排版并居中,每个字符串为一个部分:数学在
$ 符号之间。
它是将其字符串作为 LaTeX 文本读取的 MathTex:粗体
(\textbf)、斜体(\emph、\textit)、换行(\\)和行内数学
可转换。文本以 New Computer Modern 排版,如同 LaTeX 所设,数学以 New
Computer Modern Math 排版;未加样式时为白色。各字符串为由
arg_separator(默认为空)连接的一个文本并整体排版,如同 MathTex 的
公式:Tex("Fade", "In") 读取 "FadeIn",分割文本不会移动任何
字形。其部分如同公式一样区分;两个字符串共享的连字
属于第一个。
*tex_strings文本,以 LaTeX 表示:每个字符串为一个部分。
arg_separator将字符串连接为
tex_string的分隔符,即 MathTex 排版的公式, 或 Tex 排版的文本(默认 " ";Tex 为 "")。substrings_to_isolate使其各自成为部分的子串:每个字符串在每个子串的每次出现处 分割(默认 None)。
tex_to_color_map每个子串的颜色,子串如
substrings_to_isolate般成为独立部分 并着色(默认 None)。tex_environment字符串的读取方式:名称含 "align"("align*",MathTex 的 默认)为数学;任何其他("center",Tex 的默认,也使行 居中),或 None 为 LaTeX 文本,数学在
$符号之间。font_size文本的大小:一个 em 为
font_size / 96场景单位,默认时为 0.5, 48(Text 按其大写字母确定大小:48 时高 0.449 单位)。typst_preamble在文档之前设置的 Typst 代码:
#set和#show规则、#let定义、导入(默认为 "")。font_paths字体文件(.ttf、.otf、.ttc、.otc)的目录,在 manimgx 附带的字体之前 连同其子目录一起搜索;指向文件的路径不添加任何内容 (默认为 None)。
should_centermobject 是否居中于原点(默认为 True)。
height将 mobject 缩放至的高度,以场景单位计,而非按
font_size确定大小 (默认为 None)。width将 mobject 缩放至的宽度,以场景单位计,而非按
font_size确定大小; 若同时给出height,则宽度最后设置(默认为 None)。package_pathTypst 包导入的目录,将包存放为
namespace/name/version目录:#import "@preview/name:1.0.0"读取preview/name/1.0.0(默认为 None: 除 mitex 外无任何包,mitex 由 manimgx 的引擎持有)。不下载任何内容。background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 样式关键字。
源码
manimgx\mobjects\text.py
Typst
¶
一个 Typst 文档,在引擎中排版:其排版中的每个字形和形状都是 一个部分,未加样式时为白色。
代码是 Typst 标记,即页面上文档的正文,页面大小恰好容纳其内容:
*strong*、_emphasis_、$ 符号之间的数学、#set 和 #show 规则,
以及 Typst 的其余部分。各部分是 Typst 排版出的内容,按文档顺序排列,
不含空格:字形(TypstGlyph)和
形状(规则、分数的横线、方框)。带标签的方框 #box[…] <name> 是一个
组:select 可获取它。包从 package_path 导入
(以及 mitex,@preview/mitex:0.2.7,来自 ManimGX 的引擎),从不下载;
Typst 无法排版的代码会引发
TypstError。
文本以 Libertinus Serif 排版,数学以 New Computer Modern Math 排版,
即 Typst 的默认值,除非代码设置了其他字体。字体为 ManimGX 附带的字体,
因此文档在每台机器上看起来相同:Typst 自带的(这两种、New Computer
Modern 和 DejaVu Sans Mono)、Noto Sans,以及为上述字体所缺文字体提供的
Noto 字体,从阿拉伯文、希伯来文和天城体到中文、日文和韩文,以及符号和
表情符号;字体缺少的字符会用拥有该字符的字体排版。font_paths 中的
字体优先,仅当代码命名的字体族在上述字体中均无时才读取系统字体。段落
方向和汉字的字形跟随代码的 lang 和 dir(#set text(lang: "ja")、
#set text(dir: rtl));Text 从其字符设置它们。
Typst 以其默认墨色(黑色)绘制的内容取 color,代码设置的颜色予以保留,
除非绘制关键字(fill_color 等)在每个部分之上重新绘制。文档排版一次:
相同的代码在任何进程中从磁盘缓存读回。
typst_code文档:Typst 标记。
font_size文本的大小:一个 em 为
font_size / 96场景单位(48 时 为 0.5)。typst_preamble在文档之前设置的 Typst 代码:规则、定义、 导入。
font_paths字体文件的目录,连同其子目录在 ManimGX 附带的字体 之前搜索。
should_centermobject 是否居中于原点。
height将 mobject 缩放至的高度,以场景单位计;None 则按
font_size确定大小。width在
height之后将 mobject 缩放至的宽度,以场景单位计;None 则按font_size确定大小。package_pathTypst 包导入的目录(作为
namespace/name/version目录),除 ManimGX 引擎持有的 mitex 外; None 表示除 mitex 外无任何包。font_scale文本排版时比
font_size大多少:排版按font_size * font_scale缩放,而 font_size 读取font_size。 Text 将其设为字体自身的缩放比例,使每个字体中 大写字母的高度相同。colorTypst 默认墨色(黑色)的颜色;None 为白色。
fill_color每个部分的填充颜色;None 保留排版的颜色。
fill_opacity每个部分的填充不透明度,从 0 到 1;None 保留 排版的不透明度。
stroke_color每个部分的描边颜色;None 保留排版的颜色。
stroke_opacity每个部分的描边不透明度,从 0 到 1;None 保留 排版的不透明度。
stroke_width每个部分的描边宽度,以百分之一场景单位计; None 保留排版的宽度,其随 mobject 缩放。
opacity每个部分的填充和描边的不透明度,从 0 到 1,在
fill_opacity或stroke_opacity未给出的地方使用;None 保留 排版的不透明度。background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 样式关键字。
源码
manimgx\mobjects\text.py
typst_code
¶
mobject 排版所用的 Typst 代码。
typst_preamble
¶
在其之前设置的 Typst 代码。
font_size
¶
mobject 的有效字号,包含缩放。构造时给出的显式宽度或高度 决定此大小。将其设为正数可将 mobject 缩放至该大小。
select
¶

查找带标签组的各部分:将每个具有该标签的组作为一个整体。
标签为代码中方框命名,#box[…] <name>;
MathTypst 也将 {{ … }} 作为一个组,由
{{ … : name }} 命名或按顺序编号。未知标签引发 KeyError,超出
范围的编号引发 IndexError。
key标签;或 MathTypst 未命名
{{ … }}组的编号,从 0 开始。
返回 各部分本身(非副本)按顺序组成的新组。
源码
manimgx\mobjects\text.py
scale
¶
将 mobject 及其整个族围绕某点缩放,如同
Mobject.scale 所做;排版绘制的描边(规则、
方框轮廓)保持其占部分大小的份额,除非 mobject 由 stroke_width
创建。
scale_factor缩放因子:2 将 mobject 大小加倍,0.5 减半;或 沿 x、y 和 z 的各因子。
scale_stroke其他描边的宽度是否也按因子缩放。
about_point保持不动的点,以场景坐标表示;它优先于
about_edge。about_edgemobject 边界框上保持不动的点,以方向命名: UP 表示其顶边的中点,UR 表示其右上角,ORIGIN 表示其中心。
源码
manimgx\mobjects\text.py
MathTypst
¶
代码
import manimgx as m
class MathTypstExample(m.Scene):
def construct(self) -> None:
formula = m.MathTypst(
"{{ a^2 : a }} + {{ b^2 : b }} = {{ c^2 : c }}", font_size=144
)
formula.select("a").set_color(m.BLUE)
formula.select("b").set_color(m.GREEN)
formula.select("c").set_color(m.YELLOW)
self.play(m.Write(formula))
以 Typst 数学语法表示的公式,以展示样式排版:其部分为 字形和形状,未加样式时为白色。
MathTypst("x^2 + y^2") 排版 $ x^2 + y^2 $,使用 New Computer Modern Math。
双花括号构成组,select 可获取:{{ x^2 }}
按顺序编号,0 为第一个,{{ x^2 : square }} 命名为 "square";花括号
不被排版。
math_expression公式,以 Typst 数学表示。
font_size文本的大小:一个 em 为
font_size / 96场景单位,默认时为 0.5, 48(Text 按其大写字母确定大小:48 时高 0.449 单位)。typst_preamble在文档之前设置的 Typst 代码:
#set和#show规则、#let定义、导入(默认为 "")。font_paths字体文件(.ttf、.otf、.ttc、.otc)的目录,在 manimgx 附带的字体之前 连同其子目录一起搜索;指向文件的路径不添加任何内容 (默认为 None)。
should_centermobject 是否居中于原点(默认为 True)。
height将 mobject 缩放至的高度,以场景单位计,而非按
font_size确定大小 (默认为 None)。width将 mobject 缩放至的宽度,以场景单位计,而非按
font_size确定大小; 若同时给出height,则宽度最后设置(默认为 None)。package_pathTypst 包导入的目录,将包存放为
namespace/name/version目录:#import "@preview/name:1.0.0"读取preview/name/1.0.0(默认为 None: 除 mitex 外无任何包,mitex 由 manimgx 的引擎持有)。不下载任何内容。background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 样式关键字。
源码
manimgx\mobjects\text.py
排版文本的组成部分¶
每个文本和公式都由字形组成,正如 Typst 所排版的那样:每个字形知道自己绘制的是源文本中的 哪些字符。Typst 无法排版的源文本会以 Typst 的错误中止场景。
TypstGlyph
¶
Typst 所设置的一个字形,排版 mobject 的一个部分:其轮廓,已放置,以及 它绘制的源字符。
node 是字形的源节点在 Typst 代码中起始的位置(若不来自代码则为 -1),
drawn 为该节点文本中它绘制的字节,key 为其轮廓,
x_advance 为其以字体单位计的宽度。
color填充与描边共用的颜色(默认白色);None 表示该类的默认值。
fill_color填充的颜色;未给出时为
color。多个颜色沿sheen_direction构成渐变。fill_opacity填充的不透明度,取值从 0 到 1(默认 0:无填充)。
stroke_color描边的颜色;未给出时为
color。多个颜色构成渐变。stroke_opacity描边的不透明度,取值从 0 到 1(默认 1)。
stroke_width描边的宽度,以场景单位的百分之一计(默认 4;0:无描边)。
background_stroke_color绘制于填充之后的轮廓颜色(默认黑色)。
background_stroke_opacity轮廓的不透明度,取值从 0 到 1(默认 1)。
background_stroke_width轮廓的宽度,以场景单位的百分之一计(默认 0:无)。
sheen_factor颜色朝
sheen_direction变亮的程度,取值从 -1 到 1(默认 0); 负值变暗。sheen_direction颜色变亮的方向(默认
UL)。joint_type描边在路径转折处的连接方式:圆角、斜切或斜接,按二维场景的绘制方式 (参见 LineJointType;默认 AUTO:斜接)。
cap_style描边在其显示的每一端的端点样式(开放路径的端点、虚线的端点):圆头、平头 或方头,按二维场景的绘制方式(参见 CapStyleType;默认 AUTO:平头)。
shade_in_3d三维场景的光是否对该 mobject 着色。
material其表面在三维场景中如何反射场景的光(参见 Material);None:Manim 的着色(默认)。
namemobject 的名称;未给出时为其类名。
z_index其在绘制顺序中的位置:索引较高者绘制于较低者之上 (默认 0)。
targetMoveToTarget将 mobject 移动至的状态。
还接受 样式关键字。
源码
manimgx\mobject.py
manimgx.drawing.typesetting.TypstError
¶
当 Typst 无法排版文档,或 LaTeX 无法转换为 Typst 时抛出的错误: 其消息为 Typst(或 mitex)的消息,每个错误附带其所在源码的字节位置, 从整个被排版文档的起始处计数——页面设置和前导部分位于代码之前。
Pivot
¶
变换所保持不动的点:给定的点,或 mobject 边界框上的一个点。
当两个关键字均未指定时,缩放、旋转或拉伸保持 mobject 的中心不动, 而函数或矩阵关于原点应用。
about_point保持不动的点,以场景坐标表示;它优先于
about_edge。about_edgemobject 边界框上保持不动的点,以方向命名: UP 表示其顶边的中点,UR 表示其右上角,ORIGIN 表示其中心。