Manim 开发环境搭建
本文将详细说明如何搭建 Manim 的开发环境以及如何编写一个简洁、生动、形象的数学动画,演示公式
[ (a+b)^2 = a^2 + 2ab + b^2 ] 的证明过程。
第一部分 开发环境搭建
为了顺利运行 Manim 并生成动画,需要配置以下几项环境组件:安装 LaTeX 发行版与 FFmpeg。下面根据不同操作系统介绍具体步骤。
Windows 环境
1. 安装 LaTeX 发行版
- 推荐使用 MiKTeX
2. 安装 FFmpeg
下载 ffmpeg-git-full.7z 版本
解压后,将 bin 文件夹添加至系统 PATH
或者使用 Chocolatey 安装:
choco install ffmpeg
Linux 环境 (Ubuntu/Debian)
1. 安装 LaTeX 发行版
通过包管理器安装 TeX Live 全部组件:
sudo apt-get install texlive-full
2. 安装 FFmpeg
使用包管理器安装:
sudo apt-get install ffmpeg
macOS 环境
1. 安装 LaTeX 发行版
- 推荐使用 MacTeX
2. 安装 FFmpeg
使用 Homebrew 安装:
brew install ffmpeg
3. 创建 Python 环境
建议使用 Conda 创建一个独立的 Python 环境以避免依赖冲突。以 Python 3.11 为例:
conda create --name manim python=3.11 -y
conda activate manim
4. 安装 Manim 社区版及其依赖
安装 Manim 以及一些必要的依赖库。你可以通过 pip 自动安装所需依赖(如 numpy、Pillow、opencv-python 等)。例如:
pip install manim
# Text and LaTeX rendering
pip install manimpango
pip install latex
# 音频相关
pip install moviepy
pip install requests
此外,还需要确保系统上安装了 LaTeX 发行版和 FFmpeg,以便正确渲染文本和生成视频文件。
安装字体
Für Linux (z.B. Ubuntu, CentOS, Amazon Linux)
CJK-Schriftarten installieren:
- Stellen Sie sicher, dass Schriftarten installiert sind, die chinesische Zeichen enthalten. Ein guter Satz ist Noto CJK.
- Für Debian/Ubuntu:
sudo apt update sudo apt install fonts-noto-cjk
- Für RHEL/CentOS/Amazon Linux:
sudo yum install google-noto-cjk-fonts # Oder spezifischer für Chinesisch, falls verfügbar: # sudo yum groupinstall -y "Chinese Support"
- Andere gängige Pakete könnten
wqy-zenhei
oderfonts-arphic-uming
sein.
Font-Cache aktualisieren:
- Nach der Installation neuer Schriftarten muss der System-Font-Cache aktualisiert werden, damit Anwendungen (einschließlich LaTeX) sie finden können.
sudo fc-cache -fv
- Nach der Installation neuer Schriftarten muss der System-Font-Cache aktualisiert werden, damit Anwendungen (einschließlich LaTeX) sie finden können.
Vollständige LaTeX-Distribution sicherstellen:
- Manchmal fehlen in minimalen LaTeX-Installationen wichtige Pakete für CJK-Unterstützung oder
fontspec
. - Für Debian/Ubuntu (TeX Live):
sudo apt install texlive-full # Sehr groß, aber umfassend # Oder gezielter: # sudo apt install texlive-xetex texlive-lang-chinese texlive-latex-extra
- Für RHEL/CentOS/Amazon Linux (TeX Live):
sudo yum install texlive-scheme-full # Sehr groß # Oder gezielter, falls die Pakete so benannt sind.
- Wenn Sie TeX Live manuell oder über
tlmgr
verwalten, stellen Sie sicher, dass die Paketectex
,fontspec
undxecjk
(oderluatexja
für LuaLaTeX) installiert sind:sudo tlmgr update --self sudo tlmgr install ctex fontspec xecjk # oder luatexja
- Manchmal fehlen in minimalen LaTeX-Installationen wichtige Pakete für CJK-Unterstützung oder
Manim-Konfiguration:
- Stellen Sie sicher, dass in Ihrem Manim-Skript
config.tex_template = TexTemplateLibrary.ctex
gesetzt ist, damit Manimxelatex
oderlualatex
mit demctex
-Paket verwendet.
- Stellen Sie sicher, dass in Ihrem Manim-Skript
macOS
CJK-Schriftarten:
- macOS wird normalerweise mit guten CJK-Schriftarten ausgeliefert (z.B. PingFang SC, Hiragino Sans CNS). Es ist unwahrscheinlich, dass hier Schriftarten fehlen, es sei denn, sie wurden manuell entfernt.
- Falls doch benötigt, können Schriftarten über die "Schriftsammlung" (Font Book) installiert werden oder indem
.ttf
/.otf
-Dateien in~/Library/Fonts
(für den Benutzer) oder/Library/Fonts
(systemweit) abgelegt werden.
Font-Cache:
- macOS verwaltet seinen Font-Cache meist automatisch. Bei hartnäckigen Problemen kann ein Zurücksetzen des Font-Caches helfen (erfordert oft einen Neustart):
sudo atsutil databases -remove # Anschließend Neustart des Macs
- macOS verwaltet seinen Font-Cache meist automatisch. Bei hartnäckigen Problemen kann ein Zurücksetzen des Font-Caches helfen (erfordert oft einen Neustart):
LaTeX-Distribution (MacTeX):
- Die Standard-LaTeX-Distribution für macOS ist MacTeX. Eine vollständige Installation von MacTeX sollte alle notwendigen Komponenten für CJK-Unterstützung enthalten.
- Stellen Sie sicher, dass Ihre MacTeX-Installation aktuell ist.
- Verwenden Sie den TeX Live Utility (Bestandteil von MacTeX) oder
tlmgr
im Terminal, um sicherzustellen, dass die Paketectex
,fontspec
undxecjk
(oderluatexja
) installiert sind:sudo tlmgr update --self sudo tlmgr install ctex fontspec xecjk
Manim-Konfiguration:
- Wie bei Linux, stellen Sie sicher, dass
config.tex_template = TexTemplateLibrary.ctex
in Ihrem Manim-Skript gesetzt ist.
- Wie bei Linux, stellen Sie sicher, dass
Allgemeine Fehlerbehebung (für beide Systeme)
- Überprüfen Sie die LaTeX-Logdatei:
- Manim gibt den Pfad zur
.log
-Datei aus, wenn ein LaTeX-Fehler auftritt (z.B.cache/.../Tex/...log
). Diese Datei enthält die detaillierten Fehlermeldungen vonxelatex
/lualatex
und kann oft genauere Hinweise geben, welche Schriftart fehlt oder welchesfontspec
-Problem vorliegt.
- Manim gibt den Pfad zur
- Minimales LaTeX-Beispiel testen:
- Erstellen Sie eine minimale
.tex
-Datei außerhalb von Manim, diectex
und chinesische Zeichen verwendet, und versuchen Sie, sie direkt mitxelatex yourfile.tex
zu kompilieren. Dies hilft, das Problem auf die LaTeX-Konfiguration zu isolieren. Beispieltest.tex
:
Kompilieren mit:\documentclass{article} \usepackage{ctex} % oder \usepackage[UTF8]{ctex} \begin{document} 三角函数 \end{document}
xelatex test.tex
- Erstellen Sie eine minimale
Durch Befolgen dieser Schritte sollten Sie in der Lage sein, die notwendigen Schriftarten und LaTeX-Pakete zu installieren und zu konfigurieren, damit Manim chinesische Zeichen korrekt rendern kann.
第二部分 入门示例:证明 ((a+b)^2 = a^2 + 2ab + b^2)
示例说明
本示例旨在用 Manim 展示一个几何证明思路:
- 绘制一个边长为 (a+b) 的大正方形。
- 在正方形内部画出分割线,将正方形划分为四个部分:
- 左上角为边长为 (a) 的小正方形(面积 (a^2));
- 右下角为边长为 (b) 的小正方形(面积 (b^2));
- 剩余的两个矩形面积分别为 (ab),共计 (2ab);
- 最后,在动画中添加数学公式 ((a+b)^2 = a^2 + 2ab + b^2) 以验证证明过程。
示例代码
下面是一个名为 binomial_square.py
的示例代码,该代码使用 Manim 来演示上述证明过程。你可以根据需要保存该文件并使用 Manim 运行它。
from manim import *
class BinomialSquare(Scene):
def construct(self):
# Define constants
a = 2
b = 1
square_side = a + b
# Create the main square
main_square = Square(side_length=square_side).set_color(BLUE)
# Add labels (a+b) on sides
label_a_top = Text("a", font_size=24).next_to(main_square, UP).shift(LEFT * b / 2)
label_b_top = Text("b", font_size=24).next_to(main_square, UP).shift(RIGHT * a / 2)
label_a_left = Text("a", font_size=24).next_to(main_square, LEFT).shift(UP * b / 2)
label_b_left = Text("b", font_size=24).next_to(main_square, LEFT).shift(DOWN * a / 2)
# Create dividing lines
v_line = Line(main_square.get_corner(UP) + DOWN * a,
main_square.get_corner(DOWN) + UP * b)
h_line = Line(main_square.get_corner(LEFT) + RIGHT * a,
main_square.get_corner(RIGHT) + LEFT * b)
# Create smaller squares and rectangles
a_square = Square(side_length=a).set_color(RED).move_to(main_square.get_corner(UP + LEFT))
b_square = Square(side_length=b).set_color(YELLOW).move_to(main_square.get_corner(DOWN + RIGHT))
ab_rect1 = Rectangle(width=a, height=b).set_color(GREEN).next_to(a_square, RIGHT)
ab_rect2 = Rectangle(width=b, height=a).set_color(GREEN).next_to(a_square, DOWN)
# Animation sequence
self.play(Create(main_square))
self.play(Write(label_a_top), Write(label_b_top),
Write(label_a_left), Write(label_b_left))
self.play(Create(v_line), Create(h_line))
self.play(FadeIn(a_square), FadeIn(b_square),
FadeIn(ab_rect1), FadeIn(ab_rect2))
# Formula text
formula = MathTex(r"(a+b)^2 = a^2 + 2ab + b^2").to_edge(DOWN)
self.play(Write(formula))
self.wait(2)
if __name__ == "__main__":
# Basic configuration
config.pixel_height = 1080 # Set resolution height
config.pixel_width = 1920 # Set resolution width
config.frame_rate = 30 # Set frame rate
config.output_file = "CombinedScene" # Specify output filename
config.disable_caching = True # Disable caching
# Set output directory using placeholder for Java replacement
config.media_dir = "#(output_path)" # IMPORTANT: Use the placeholder
# Create and render the scene
sence = BinomialSquare()
sence.render()
print(f"Scene rendering finished. Output in: {config.media_dir}")
代码说明
大正方形的绘制:
使用Square
类创建一个边长为 (a+b) 的正方形,并将其上移以便下方留出位置显示公式。分割线:
通过Line
类分别绘制一条垂直分割线和一条水平分割线,将正方形划分为四个部分。各区域的构造与标注:
- 左上角的正方形代表面积 (a^2);
- 右下角的正方形代表面积 (b^2);
- 剩下两个矩形分别代表面积 (ab),共计 (2ab);
使用MathTex
对象在各个区域中添加文本标注。
公式展示:
最后在动画底部显示公式 ((a+b)^2 = a^2 + 2ab + b^2),帮助观众直观理解各部分面积之和即为整个正方形的面积。
在 windows 平台,生成的文件 路径是 media\videos\1080p60\BinomialSquare.mp4
总结
本文详细介绍了如何搭建 Manim 开发环境,包括安装 LaTeX、FFmpeg、创建 Python 环境以及安装 Manim 及其依赖。随后,通过一个入门示例展示了如何用 Manim 编写动画来证明公式 ((a+b)^2 = a^2 + 2ab + b^2) 的几何证明过程。希望这篇文档能帮助你快速上手 Manim,创作出更多生动有趣的数学动画。