MathTex 和 MathTypst 有什么区别?同一个公式的两种写法对照(Manim 0.21)
发布时间:2026/9/28 20:41:36 锦皓数字建站
`)
利益相关本文作者与极坐标⋅XYZjizuobiao.xyz团队有关联。文中代码都在 Manim Community 0.21.0 桌面版里实际跑过结论请自行验证。MathTex 和 MathTypst 有什么区别同一个公式的两种写法对照Manim 0.21MathTex和MathTypst最后都把公式变成一组矢量字形上色、Write、TransformMatchingShapes这些用法一样。区别在三处排版引擎LaTeX 和 Typst本地要装的东西不一样、写法反斜杠加大括号和函数式写法、怎么取公式的一部分按位置和按名字。MathTypst是 Manim Community 0.21.02026 年 8 月 10 日发布新加的MathTex没有被替代旧代码照常跑。下面把两种写法并排放顺带记下我们对照时踩到的几个坑。先看一张表MathTexMathTypst排版引擎LaTeXTypst本地要装TeX Live 或 MiKTeX动辄几个 Gpip install manim[typst]不用装 LaTeXPython 字符串反斜杠多要加r前缀或者每个反斜杠写两遍基本没有反斜杠取公式的一部分{{ }}拆开后按序号取或按子串匹配{{ … : 名字 }}起名select(名字)取网上的教程和示例绝大多数用它刚出来还很少同一个公式两种写法左边是传给MathTex的 LaTeX右边是传给MathTypst的 Typst公式MathTex(r…)MathTypst(…)求根公式x \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}x (-b plus.minus sqrt(b^2 - 4 a c))/(2 a)求和\sum_{k1}^{n} k \frac{n(n1)}{2}sum_(k1)^n k (n(n1))/2定积分\int_0^1 x^2 \, dx \frac{1}{3}integral_0^1 x^2 dif x 1/3矩阵\begin{pmatrix} a b \\ c d \end{pmatrix}mat(a, b; c, d)根号、希腊字母、无穷\sqrt[3]{x} \alpha \inftyroot(3, x) alpha oo欧拉公式e^{i\pi} 1 0e^(i pi) 1 0这六组我们两边各渲了一遍拆出来的字形数量完全一样求根公式都是 16 个矩阵都是 6 个做动画时按字形数对应的写法不用改。换过来要记住的规则不多分数用/分子分母不止一项就加圆括号(n(n1))/2上下标里有多个字符用圆括号不用大括号e^(i pi)、sum_(k1)^n希腊字母、运算符直接写名字alpha、pi、plus.minus、dots.c、integral微分的 d 写dif矩阵分号换行、逗号分列mat(a, b; c, d)公式里夹中文用英文双引号包起来面积 pi r^2最容易踩的一个坑字母连写。LaTeX 里4ac就是 4 乘 a 乘 cTypst 会把连在一起的多个字母当成一个变量名MathTypst(4ac)直接报unknown variable: ac。要写成4 a c字母之间留空格。上面求根公式里的4 a c、2 a就是这么来的。取公式的一部分一个按位置一个按名字把勾股定理左边标蓝、右边标黄MathTex这样写eq MathTex(r{{a^2 b^2}} {{c^2}}) eq[0].set_color(BLUE) # a² b² eq[2].set_color(YELLOW) # c²中间的 占了 eq[1]{{ }}把字符串拆成三段a² b²、、c²按序号取。也可以用eq.set_color_by_tex(c^2, YELLOW)按子串找但要注意一个细节双花括号里别留空格。写成{{ c^2 }}的话拆出来的那一段是带空格的 c^2 set_color_by_tex(c^2, …)就匹配不上不报错但也没有上色。我们在 0.21.0 里对照试过去掉空格就正常了。MathTypst换成给每一组起名字eq MathTypst({{ a^2 b^2 : lhs }} {{ c^2 : rhs }}) eq.select(lhs).set_color(BLUE) eq.select(rhs).set_color(YELLOW)空格随便加不影响。按名字取的好处在公式改动时最明显在前面再插一组{{ x : pre }} MathTex那边的序号全部要往后挪MathTypst这边select(lhs)取到的还是 a² b² 那 5 个字形代码不用动。不起名字也行但编号规则容易搞错没名字的组只在没名字的那几组里从 0 数起。MathTypst({{ a^2 b^2 : lhs }} {{ c^2 }})里c² 要用select(0)取写select(1)会报IndexError: Group index 1 out of range. Available labels: [lhs, _grp-0]所以我们的习惯是每组都起名字。大号符号放进分组两边表现不一样求和号、分数这类大符号放进MathTypst的{{ }}以后会被排成行内的小号样式求和的上下限挪到右边分数也缩小。我们量了一下sum_(k1)^n k (n(n1))/2不分组时整条公式高 1.29两边各包一组以后只剩 0.74。MathTex同样分两组高度前后都是 1.38不受影响。所以公式里有大号求和、积分或分数又要分开上色时目前要么用MathTex要么MathTypst那条就不分组、整条一起上色。a² b²、e^(iπ) 这类普通的项分组没有影响。能不能混着用能。两者都是矢量字形组TransformMatchingShapes在MathTex和MathTypst之间也能直接用。下面这段先用MathTex写出勾股定理再变成MathTypst版我们在 0.21.0 里渲出来正常from manim import * class MixedTexTypst(Scene): def construct(self): old MathTex(r{{a^2 b^2}} {{c^2}}, font_size96) old[0].set_color(BLUE) old[2].set_color(YELLOW) new MathTypst({{ a^2 b^2 : lhs }} {{ c^2 : rhs }}, font_size96) new.select(lhs).set_color(BLUE) new.select(rhs).set_color(YELLOW) self.play(Write(old)) self.play(TransformMatchingShapes(old, new)) self.play(Circumscribe(new.select(rhs), colorYELLOW)) self.wait(0.5)也就是说已有的MathTex项目不用整体迁移新写的公式用MathTypst就行。该用哪个已经有MathTex代码、或者正跟着网上的教程学继续用MathTex0.21 里照常跑教程里的写法都能直接对上。新写公式、不想装 LaTeX、公式经常要改、要按名字拆开做动画MathTypst更省事。大号求和、积分、分数要分组上色目前MathTex更稳原因见上一节。不想装环境怎么试本地用MathTypst只要pip install manim[typst]。连 Python 也不想装的话极坐标⋅XYZ 的网页工作区jizuobiao.xyz/workspace已经是 Manim 0.21.0MathTex和MathTypst都能直接写。第一次用到 Typst 时要下载约 13MB 的编译器之后走浏览器缓存。工作区里的 AI 助手默认还是用MathTex写公式想让它用 Typst在提示词里说「用 MathTypst」。手机 App 里没有 Typst 编译器这类代码要在电脑网页上跑。MathTypst的完整上手步骤和更多示例见极坐标⋅XYZ 的这篇Manim 0.21 的 Typst 公式怎么用不装 LaTeX在浏览器里写 MathTypst。常见问题Q升级到 0.21 以后MathTex 的旧代码要改吗A不用改。MathTex照常能用MathTypst是新增的一个选择。QMathTypst 能写中文吗A能用英文双引号包起来MathTypst(\面积\ pi r^2)。普通文字用Typst类中文直接写公式放在$…$里。QTypst 的完整符号表在哪查ATypst 官方文档的数学部分typst.app/docs/reference/math/ 。来源极坐标⋅XYZjizuobiao.xyz。代码在 Manim Community 0.21.0 桌面版typst 0.15.0里验证2026 年 9 月 27 日。Manim 0.21.0 的发布时间与接口以 Manim Community 官方文档为准。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。