Manim如何在数学公式中完美显示中文?

很多刚开始学习 ManimCE 的同学,在兴致勃勃地想要制作中文数学动画时,都会遇到同一个"拦路虎":一旦在公式里输入中文,程序直接报错,红一片!

比如你想写"勾股定理",直接这样写:

python 复制代码
# 错误示范 ❌
tex = MathTex("勾股定理:a^2+b^2=c^2")

运行后,你会得到一堆 LaTeX 编译错误。这是因为默认的 LaTeX 模板是不支持中文字符的。

别担心,今天我们就来彻底解决这个问题,教会大家如何在 MathTexTex 以及 Title 组件中优雅地显示中文。

1. 为什么会出现报错?

Manim 底层使用 LaTeX 来渲染公式。

标准的 LaTeX 环境主要针对英文和数学符号设计,如果没有加载特定的中文宏包(如 ctex),它就无法识别汉字,从而导致编译失败。

所以,核心思路就是:告诉 Manim 使用支持中文的 LaTeX 模板。

2. 三大组件的中文显示方案

ManimCE 中,常用的可以显示数学公式的三个组件是 MathTexTexTitle

它们显示中文的设置略有不同,我们逐个来看。

2.1. MathTex 组件

MathTex 主要用于数学公式。要显示中文,只需要添加一个关键参数:tex_template

  • 解决方法 :设置 tex_template=TexTemplateLibrary.ctex
  • 代码示例
python 复制代码
# 正确示范 ✅
tex02 = MathTex(
    r"\text{勾股定理}: a^2+b^2=c^2",
    tex_template=TexTemplateLibrary.ctex,  # 关键!
)

注意:中文最好包裹在 \text{} 中,这样 LaTeX 才知道这是文本而不是数学变量。

2.2. Tex 组件

Tex 组件通常用于包含更多文本内容的段落。对于中文显示,它比 MathTex 多了一个要求。

  • 解决方法 :需要同时设置 tex_templatetex_environment
  • 关键参数
    1. tex_template=TexTemplateLibrary.ctex
    2. tex_environment="align*"
  • 代码示例
python 复制代码
# 正确示范 ✅
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
  • 代码示例
python 复制代码
# 正确示范 ✅
title = Title(
    r"\text{勾股定理}: a^2+b^2=c^2",
    tex_environment="align*",              # 关键!
    tex_template=TexTemplateLibrary.ctex,  # 关键!
)

3. 完整代码演示

为了让大家能够直接运行成功,我整理了一份完整的代码示例。你可以直接复制到你的编辑器中尝试。

python 复制代码
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 ✅ 是 ❌ 否 tex_template=TexTemplateLibrary.ctex
Tex ✅ 是 ✅ 是 tex_template=..., tex_environment="align*"
Title ✅ 是 ✅ 是 Tex 组件

小贴士:

  1. 环境配置 :确保你的电脑已经安装了 LaTeX 环境(如 TeX LiveMiKTeX),并且安装了 ctex 宏包。Manim 调用的是系统本地的 LaTeX 编译器。
  2. 转义字符 :在 Python 字符串中,记得在公式前加 r(如 r"\text{...}"),防止反斜杠被转义。
  3. 文本包裹 :尽量用 \text{} 包裹中文,这样排版会更规范。

希望这篇教程能帮你扫清障碍,做出更漂亮的中文数学动画!

相关推荐
wang_yb3 天前
用Manim实现动态交点计算--从一个动点问题说起
databook·manim
wang_yb5 天前
从写代码到问问题:2026年,AI如何重构数据科学工作流
数据分析·databook
wang_yb8 天前
逃离SQL丛林:实用主义的数据救赎
数据分析·databook
wang_yb9 天前
理解PDF的设计哲学,省下一半的编辑时间
databook
wang_yb12 天前
理论都会,实战就废?7个分析模板,帮你打通任督二脉
数据分析·databook
wang_yb16 天前
AI价值:理性评估三维度
ai·databook
wang_yb20 天前
别让AI代码,变成明天的技术债
ai·databook
wang_yb24 天前
数据团队该醒醒了:AI智能体不是你的下一个仪表盘
ai·数据分析·databook
wang_yb1 个月前
当AI学会编程,我们还能做什么
ai·databook