latex公式斜体_3Blue1Brown 动画制作教程(4)--曼妙的数学公式

latex公式斜体_3Blue1Brown 动画制作教程(4)--曼妙的数学公式_第1张图片

曼妙的数学公式

数学公式是 manim 除图形与文本文字外最核心的展示对象,用 LaTeX 写过论文或作业的人一定会对其公式输出印象深刻,而用 manim 制作的画面中的公式正是采用 LaTeX 格式生成的。如果没有任何关于 LaTex 的编程经验,可以去网上搜索一些基本的教程,也可以用网页版的公式编辑器,包含预览,用一下应该就会了,例如 codecogs 和 latex4technics 。

实际上,知乎的公式编辑器用的就是LaTeX,只不过功能较为简单,想输入矩阵的时候没有对应的模板,一般的公式还是可以应付的。

latex公式斜体_3Blue1Brown 动画制作教程(4)--曼妙的数学公式_第2张图片

在 LaTeX 文本中的公式部分通常是用两个 Dollor 符号“$ $” 包含起来表示的。但是在使用 manim 输出公式的时候,会有一点不同,那就是遇到转义字符 “ ” 的时候,需要将转义字符写两遍 “ ”。例如,如果用 TextMobject() 方法去生成

,为了告诉系统这里是想表达数学公式,就要在两端加 Dollor 符号,但这里不只是用“$alpha$”,而是用“$alpha$”。

这样无异于给编程带来的不少麻烦,不过还有另外一种方法,用 TexMobject() 方法去生成

,注意前面TextMobject() 方法,这里是TexMobject() 方法。与 TextMobject() 默认生成文本文字不同的是,TexMobject() 默认生成公式,所以不需要在字符串两端加 Dollor 符号,而且如果在引号前面添加原始字符串文字标志 r 。那么字符串中的内容就和一般 LaTeX 的表述一致了,不需要将 "" 改为 "",如果想生成
,则输入参数为 r"alpha"。

看一个简单实例,打开 manim 根目录下的 manim_tutorial_P37.py 教程文件,找到其中名为 BasicEquations 的类:

1. class BasicEquations(Scene):
2.     #A short script showing how to use Latex commands
3.     def construct(self):
4.         eq1=TextMobject("$vec{X}_0 cdot vec{Y}_1 = 3$")
5.         eq1.shift(2*UP)
6.         eq2=TexMobject(r"vec{F}_{net} = sum_i vec{F}_i")
7.         eq2.shift(2*DOWN)
8. 
9.         self.play(Write(eq1))
10.        self.play(Write(eq2))

第4行用 TextMobject() 定义了一个公式 eq1;第6行用 TexMobject() 定义了一个公式 eq2;5,7行是将两个公式相对画面中心分别上移和下移两个单位距离;9,10行以书写的动画形式依次展现 eq1 和 eq2。

以管理员模式打开 Anaconda Prompt ,跳转到 manim 的根目录,输入:

python -m manim manim_tutorial_P37.py BasicEquations -pl

latex公式斜体_3Blue1Brown 动画制作教程(4)--曼妙的数学公式_第3张图片

上面这个是一个最基本的公式输出实例,实际情况下我们可能还需要添加颜色以及将文本文字和公式同行显示等等。打开 manim 根目录下的 manim_tutorial_P37.py 教程文件,找到其中名为 BasicEquations 的类:

1. class ColoringEquations(Scene):
2.     #Grouping and coloring parts of equations
3.     def construct(self):
4.         line1=TexMobject(r"text{The vector } vec{F}_{net} text{ is the net }",r"text{force }",r"text{on object of mass }")
5.         line1.set_color_by_tex("force", BLUE)
6.         line2=TexMobject("m", "text{ and acceleration }", "vec{a}", ".  ")
7.         line2.set_color_by_tex_to_color_map({
      
8.             "m": YELLOW,
9.             "{a}": RED
10.        })
11.        sentence=VGroup(line1,line2)
12.        sentence.arrange_submobjects(DOWN, buff=MED_LARGE_BUFF)
13.        self.play(Write(sentence))

先看看显示结果,以管理员模式打开 Anaconda Prompt ,跳转到 manim 的根目录,输入:

python -m manim manim_tutorial_P37.py ColoringEquations -pl

latex公式斜体_3Blue1Brown 动画制作教程(4)--曼妙的数学公式_第4张图片

从代码的第4行和第6行可以看出,为了上色,字符串被分成了好几段,第5行和第7行给出了两种上色的方法,两者都是通过匹配相同字段的形式去上色,set_color_by_tex() 是一段一段地上色,set_color_by_tex_to_color_map() 则是可以定义一个字典,同时给好几段上色。

另外,注意到其中有多个 text{} 声明,因为 TexMobject() 方法默认里面的字符串是以公式的形式输出,这样输出的结果是斜体,且不包含空格,为了告诉编译器某一部分是文本文字而非公式,所以需要加上 text{} 声明。

第11行定义了一个组合 sentence,这在上一篇已经说到。

关键是第12行,在最终展示之前,定义了 sentence 组合中各个成分的排列方式,第一个参数 “DOWN” 意味着是按顺序向下排列,第二个参数 buff 则指的是排列间距,MED_LARGE_BUFF 代表半个单位长度,该定义可以在 ~manimmanimlibconstants.py 文件中找到。

最后13行以书写的形式将该公式组合展示出来,展示顺序依据定义组合时参数的输入顺序。

另外,我找到了一个定义文字颜色的更好方法,在这里分享一下。只需要把上面教程里的例子稍微改了改:

1. class ColoringEquationsNew(Scene):
2.     #Grouping and coloring parts of equations
3.     def construct(self):
4.         line1=TexMobject(r"text{The vector } vec{F}_{net} text{ is the net }",r"text{force }",r"text{on object of mass }")
5.         line1[1].set_color(BLUE)
6.         line2=TexMobject("m", "text{ and acceleration }", "vec{a}", ".  ")
7.         line2[0].set_color(YELLOW)
8.         line2[2].set_color(RED)
9.
10.        sentence=VGroup(line1,line2)
11.        sentence.arrange_submobjects(DOWN, buff=MED_LARGE_BUFF)
12.        self.play(Write(sentence))

这里是通过 list 索引的方式去上色的,比教程里给的方法更直观、好用。

小结

公式部分的内容很庞杂,这里暂时只介绍了最基本的公式及其颜色的定义,后面如果有新的想法或更好的技巧会继续更新本文,下一篇介绍二维坐标系及函数绘图。

3Blue1Brown 动画制作教程(5)​zhuanlan.zhihu.com
latex公式斜体_3Blue1Brown 动画制作教程(4)--曼妙的数学公式_第5张图片

更多内容,尽在专栏:

直观の数学​zhuanlan.zhihu.com
856ef6daf202a419e5f31e5afa60a2e4.png

latex公式斜体_3Blue1Brown 动画制作教程(4)--曼妙的数学公式_第6张图片

#原创文章,知乎首发,

未经允许,不得转载#

你可能感兴趣的:(latex公式斜体)