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

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

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

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

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

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

1. 为什么会出现报错?

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

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

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

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

在 ManimCE 中,常用的可以显示数学公式的三个组件是 MathTex、Tex 和 Title。

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

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_template 和 tex_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 Live 或 MiKTeX),并且安装了 ctex 宏包。Manim 调用的是系统本地的 LaTeX 编译器。
  2. 转义字符 :在 Python 字符串中,记得在公式前加 r(如 r"\text{...}"),防止反斜杠被转义。
  3. 文本包裹 :尽量用 \text{} 包裹中文,这样排版会更规范。

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

相关推荐
wang_yb2 天前
使用命令行做描述性统计的技巧
数据分析·databook
zwd20053 天前
Manim 竖屏 1080×1920 配置详解:pixel_width、frame_width 怎么写(0.21.0 / 0.22.0 实测)
python·manim·数学动画·短视频制作·manim教程·竖屏视频
zwd20055 天前
Manim 画布尺寸与像素换算详解:frame_width、frame_height、pixel_width 和画质参数(0.21.0 实测)
python·分辨率·manim·数学动画·frame_width·manim教程
wang_yb5 天前
MinMax vs Standard vs Robust:三种特征缩放怎么选
ai·数据分析·databook
wang_yb7 天前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
ai·databook
wang_yb9 天前
从循环到向量化:NumPy提速的7个关键思维
数据分析·databook
wang_yb11 天前
ManimCE v0.22.0 发布:输出配置大一统与渲染流程重构
databook·manim
wang_yb13 天前
Scikit-Learn实战:5步搞定PCA降维
ai·databook
zwd200514 天前
Manim add_sound 用法详解:time_offset、gain、多条音频与旁白对齐(2026 最新教程,0.21.0)
python·音频·动画·manim·数学动画·add_sound
wang_yb15 天前
什么是范数?用 NumPy 动手算一遍就明白了
数据分析·databook