Manim 中文渲染与 LaTeX 公式环境配置(含中文公式完整方案)
Chinese text in Manim splits into two separate problems. For plain text, Text() renders through Pango, so any font installed on your OS works: pass font="Microsoft YaHei" / "SimHei" / "Noto Sans CJK SC" and check font_manager if glyphs come out as boxes. For Chinese inside formulas, MathTex compiles through LaTeX, where CJK characters fail unless the ctex package is loaded. The fix is a custom TexTemplate: either TexTemplate.from_package_once("ctex") or add_to_preamble(r"\usepackage{ctex}")... in practice, add_to_preamble(r"\usepackage[UTF8]{ctex}") on a default template, then pass tex_template= to MathTex. This guide covers MiKTeX vs TeX Live package installation, dvisvgm requirements, per-OS font names, mixing Text and MathTex on one line, and a minimal test scene that isolates each failure layer.
先分清两个"中文问题"
| 症状 | 走的通道 | 解决方向 |
|---|---|---|
| Text("中文") 显示方块/豆腐块 | Pango + 系统字体 | 指定已安装的中文字体 |
| MathTex 里含中文报错 | LaTeX 编译 | ctex 宏包 + 自定义 TexTemplate |
两条通道互不影响,排查时先用下面的最小场景把问题隔离到其中一层。
一、Text 中文:指定字体就行
Text 走 Pango 渲染,系统里装了什么字体就能用什么:
from manim import *
class CnText(Scene):
def construct(self):
t1 = Text("中文正常显示", font="Microsoft YaHei", font_size=44)
t2 = Text("黑体粗字", font="SimHei", font_size=44).next_to(t1, DOWN)
self.play(Write(t1), Write(t2))
self.wait()
各平台可用字体名(必须是系统里真实存在的):
- Windows:
Microsoft YaHei(微软雅黑)、SimHei(黑体)、KaiTi(楷体)、SimSun(宋体) - macOS:
PingFang SC、Heiti SC、Songti SC - Linux:
Noto Sans CJK SC(装 fonts-noto-cjk)
显示成方块 = 系统没有这个字体或名字写错。用 manim --config 或在 Python 里 import manimpango; print([f for f in manimpango.list_fonts() if 'YaHei' in f or 'Hei' in f]) 查看真实可用字体名。
二、MathTex 中文公式:ctex 方案
LaTeX 默认不支持中文。MathTex(r"\text{面积}=\pi r^2") 会直接报错。标准解法是让公式模板加载 ctex 宏包:
from manim import *
# 方案 A: 让整个文档用 ctex 文档类
cn_template = TexTemplate.from_package_once("ctex")
# 方案 B: 默认模板的导言区加 ctex
cn_template = TexTemplate()
cn_template.add_to_preamble(r"\usepackage[UTF8]{ctex}")
class CnFormula(Scene):
def construct(self):
f = MathTex(r"\text{圆的面积} = \pi r^2", font_size=60,
tex_template=cn_template)
self.play(Write(f))
self.wait()
中文必须包在 \text{} 里——数学模式只接受公式符号,文字(含中文)都要进 text 框。
首次渲染会触发 ctex 宏包下载:MiKTeX 弹窗选"安装";TeX Live 用户确保装过 texlive-lang-chinese;macOS 的 MacTeX 全量版自带。
三、中英混排一行:Text 与 MathTex 组队
大多数教学场景更推荐"中文用 Text、变量公式用 MathTex、VGroup 拼接"的写法,渲染最稳、不用碰 LaTeX 中文:
class Mixed(Scene):
def construct(self):
cn = Text("勾股定理:", font="Microsoft YaHei", font_size=44)
math = MathTex("a^2+b^2=c^2", font_size=60)
line = VGroup(cn, math).arrange(RIGHT, buff=0.25)
self.play(Write(line))
self.wait()
四、排查清单(按顺序执行)
latex --version、dvisvgm -v有输出 → LaTeX 层 OK(没有见安装报错全解)- 渲染纯英文
MathTex("x^2")成功 → 模板默认可用 - 渲染
Text("中文")成功 → 字体层 OK - 再上 ctex 模板渲染中文公式 → 四层全部打通
常见残留问题
- ctex 报错 fontset 未找到:加选项
\usepackage[UTF8, fontset=windows]{ctex}(macOS 用 fontset=mac,Linux 用 fontset=fandol)。 - 公式里中文字体太丑:ctex 的 fontset 参数换成 windows/mac 后会调用系统字体,观感立刻正常。
- 部分中文仍报错:确认 .py 文件本身保存为 UTF-8(Windows 记事本另存时选 UTF-8)。