Manim如何在数学公式中完美显示中文?
为什么会出现报错?
Manim底层使用LaTeX来渲染公式。
标准的LaTeX环境主要针对英文和数学符号设计,如果没有加载特定的中文宏包(如ctex),它就无法识别汉字,从而导致编译失败。
所以,核心思路就是:告诉 Manim 使用支持中文的 LaTeX 模板。
2. 三大组件的中文显示方案
在ManimCE中,常用的可以显示数学公式的三个组件是MathTex、Tex和Title。
它们显示中文的设置略有不同,我们逐个来看。
2.1. MathTex 组件
MathTex主要用于数学公式。要显示中文,只需要添加一个关键参数:tex_template。
- 解决方法:设置
tex_template=TexTemplateLibrary.ctex - 代码示例:
# 正确示范 ✅ tex02 = MathTex( r"\text{勾股定理}: a^2+b^2=c^2", tex_template=TexTemplateLibrary.ctex, # 关键! )注意:中文最好包裹在\text{}中,这样 LaTeX 才知道这是文本而不是数学变量。
2.2. Tex 组件
Tex组件通常用于包含更多文本内容的段落。对于中文显示,它比MathTex多了一个要求。
- 解决方法:需要同时设置
tex_template和tex_environment。 - 关键参数:
tex_template=TexTemplateLibrary.ctextex_environment="align*"
- 代码示例:
# 正确示范 ✅ tex01 = Tex( r"\text{勾股定理}: a^2+b^2=c^2", tex_environment="align*", # 关键! tex_template=TexTemplateLibrary.ctex, # 关键! )2.3. Title 组件
Title组件用于生成标题。很多同学不知道,其实Title底层是继承自Tex组件的。
- 解决方法:既然它继承自
Tex,那么它显示中文的要求也与Tex完全一致。 - 关键参数:同样需要
tex_environment="align*"和tex_template=TexTemplateLibrary.ctex。 - 代码示例:
# 正确示范 ✅ title = Title( r"\text{勾股定理}: a^2+b^2=c^2", tex_environment="align*", # 关键! tex_template=TexTemplateLibrary.ctex, # 关键! )3. 完整代码演示
为了让大家能够直接运行成功,我整理了一份完整的代码示例。你可以直接复制到你的编辑器中尝试。
from manim import * class Keshihua(Scene): def construct(self): # 1. Tex 组件显示中文 # 需要两个参数:tex_environment 和 tex_template tex01 = Tex( r"\text{勾股定理}: a^2+b^2=c^2", tex_environment="align*", tex_template=TexTemplateLibrary.ctex, ).set_color_by_gradient(RED, GREEN) self.play(Write(tex01)) # 2. MathTex 组件显示中文 # 只需要一个参数:tex_template tex02 = MathTex( r"\text{勾股定理}: a^2+b^2=c^2", tex_template=TexTemplateLibrary.ctex, ).set_color_by_gradient(YELLOW, BLUE) tex02.next_to(tex01, DOWN) self.play(Write(tex02)) # 3. Title 组件显示中文 # 因为继承自 Tex,所以参数要求与 Tex 相同 title = Title( r"\text{勾股定理}: a^2+b^2=c^2", tex_environment="align*", tex_template=TexTemplateLibrary.ctex, ) self.play(Write(title)) self.wait()4. 总结与建议
为了方便记忆,我把今天的重点整理成了一个小表格:
| 组件类型 | 是否需要中文模板? | 是否需要指定环境? | 关键参数设置 |
|---|---|---|---|
| MathTex | ✅ 是 | ❌ 否 |
