惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 司徒正美
Last Week in AI
Last Week in AI
爱范儿
爱范儿
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
量子位
V
V2EX
博客园 - 叶小钗
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 分享一下笔者的 Mac 装机必备软件 第30篇文章:一个大三计科生的自白 Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解
Manim如何在数学公式中完美显示中文?
wang_yb · 2026-04-19 · via 博客园_首页

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

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

# 错误示范 ❌
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
  • 代码示例
# 正确示范 ✅
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*"
  • 代码示例
# 正确示范 ✅
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 ✅ 是 ❌ 否 tex_template=TexTemplateLibrary.ctexTex ✅ 是 ✅ 是 tex_template=..., tex_environment="align*"Title ✅ 是 ✅ 是 同 Tex 组件
组件类型 是否需要中文模板? 是否需要指定环境? 关键参数设置

小贴士:

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

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