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{} 包裹中文,这样排版会更规范。

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

相关推荐
2301_817672262 小时前
mysql如何通过调整Undo Log优化并发性能_优化innodb_max_undo_log_size
jvm·数据库·python
2301_777599372 小时前
mysql如何配置插件以提升查询性能_安装启用memcached插件
jvm·数据库·python
配奇2 小时前
PyTorch 核心使用
人工智能·pytorch·python
2301_773553622 小时前
Tailwind CSS如何实现固定定位布局_使用fixed与z-index控制CSS层级
jvm·数据库·python
2301_814809862 小时前
Bootstrap 5中浮动标签(Floating Labels)怎么用?
jvm·数据库·python
解救女汉子2 小时前
如何处理SQL存储过程大数据导入_利用数据泵或外部表
jvm·数据库·python
qq_372906932 小时前
HTML函数在系统字体渲染模糊是硬件问题吗_显示输出链路排查【方法】
jvm·数据库·python
Polar__Star2 小时前
如何在 PHP 包含文件中动态排除特定页面的导航项
jvm·数据库·python
码农的神经元2 小时前
2026 MathorCup C 题实战复盘:从高血脂风险预警到 6 个月干预优化的建模思路与 Python 落地
c语言·开发语言·python