安装问题

安装时最好不要看README.md自己研究, 推荐一视数学卷毛杨的两个教程:

Python问题

Q1: 使用anaconda,命令行输入python无反应或报错

考虑path环境变量是否填全 1path变量里应该有:

<your_path>\Anaconda3;
<your_path>\Anaconda3\Scripts;
<your_path>\Anaconda3\Library\bin;

Q2: pip install ...时满屏红字报错,或者安装过慢

更换国内镜像源,使用

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

代替 2

pip install -r requirements.txt

Q3: pip安装pycairo总是失败

下载pycairo对应版本的whl3

pycairo......whl

并手动安装

pip install pycairo......whl

Q4: pip安装过包,但运行时提示没有模块

考虑电脑上是否有多个Python,确定pip把包装到了需要使用的Python上面。

Q5: 关于scipy有报错

可能是版本不对,使用pip uninstall后重新pip install scipy

运行时问题

import问题

Q1: 没有模块big_ol_pile_of_manim_imports

将文件中的

from big_ol_pile_of_manim_imports import *

改成

from manimlib.imports import *

LaTeX问题

Q1: 报错Latex error converting to dvi

先不要管错误在哪,先把manimlib/constants.py中的TEX_USE_CTEX改成True再运行

Q2: 报错 xelatex error converting to xdv

若为Windows系统,先把manimlib/constants.py的第29行:

MEDIA_DIR = "./media"

改成

MEDIA_DIR = os.path.join(os.getcwd(), "media")

再进行尝试

  1. 若安装的TeX发行版为MiKTeX

    1. MiKTeX的有关路径是否添加到环境变量中

    2. 是否有包没有装全

    对于2.,可以正常运行一遍WriteStuff场景,看是否有框弹出提示install什么东西, 如果有,则install,并重复运行安装运行安装…直到不报错为止。
    或者使用TeX编辑器TeXStudio 并使用xelatex手动编译media/Tex文件夹中的 .tex文件,查看是否有包没有安装。

    对于没有1.2.问题却依旧报错的,可以选择重新安装新版MiKTeX或者安装TeXLive-full版。

  2. 若安装的TeX发行版为TeXLive

    1. TeXLive有关路径是否添加到环境变量中

    2. 安装的是否为full版本

  3. 若安装的TeX发行版不为以上两款

    建议换成TeXLive-full版或者MiKTeX,并且在重新安装前请删除旧版

Q3: 报错在文件夹内找不到svg文件

清空media/Tex文件夹内全部内容,再次运行带文字的场景,查看Tex文件夹中的内容:

  1. 若仅有tex文件和log文件,按照[sub:Q2]中方法处理

  2. 若含有xdv文件但没有svg文件

    1. divsvgm是否添加到环境变量,可以使用dvisvgm –version观察是否由报错来检查

    2. dvisvgm版本是否过低,若dvisvgm –verison的输出版本号为1开头,
      请更换新版dvisvgm 4,并注意将含有dvisvgm的文件夹添加到环境变量中

中文显示问题

Q1: 含有中文的TextMobject编译报错,Latex error converting to dvi

manimlib/constants.py中的TEX_USE_CTEX改成True再尝试

Q2: 英文可以正常显示,中文不报错,但不显示

考虑使用的是否为TextMobject而不是TexMobject

文字问题

Q1: TextMobjectTexMobject有什么区别

TextMobjectTexMobject使用的都是LaTeX语法

其中TextMobject文字模式相当于直接在LaTeX环境下书写

TexMobject公式模式使用的是LaTeX的 \begin{align*} 环境或者可以看成加了\(\texttt{\$}\texttt{\$}\)的环境

使用TextMobjectTexMobject书写公式时:

Q2: TextMobject中怎么改字体样式

TextMobject中只能使用LaTeX的字体样式

字体常用样式命令见表:

字体样式

LaTeX命令

字体样式

LaTeX命令

roman

\textrm{…}

bold face

\textbf{…}

sans serif

\textsf{…}

medium weight

\textmd{…}

typewriter

\texttt{…}

italic

\textit{…}

Small Caps

\textsc{…}

slanted

\textsl{…}

upright

\textup{…}

严格地讲中文字体并没有衬线、无衬线、等宽、斜体等概念

Q3: 想自定义字体怎么办

使用新版manim特有的Text()类, 方法如下Text("文字", font="字体"), 其中字体要填写在计算机内存储的格式 5,但是不能使用LaTeX语法书写公式

Q4: 想用自定义字体写公式怎么办

可以使用群文件里cigar666编写的MyText()

Q5: TexMobject中换行是什么

四个右划线\\\\Python转义右划线,所以涉及到\的均要写成两个\\, 而换行在LaTeX中是两个右划线,所以要写成四个 6

Q6: 公式怎么对齐

  1. 直接在TexMobject中使用&对齐

  2. 两个mobject对齐,使用obj2.next_to(obj1, DOWN, aligned_edge=LEFT)使obj2obj1下方,并左对齐

  3. VGroup内对齐,使用group.arrange(DOWN, aligned_edge=LEFT)使VGroup中的子元素依次向下排开,并左对齐

写公式的示例:

https://github.com/Elteoremadebeethoven/AnimationsWithManim/blob/master/English/3_text_like_arrays/scenes.md

Q7: TexMobject上色问题的处理办法

  1. 将上色的字符分开,使用text[i].set_color(color) 来上色

  2. 将上色的字符分开,使用text.set_color_by_tex_to_color_map(t2c)传入t2c字典来对相同的字符串上色

  3. 只传入一个字符串,但同时传入tex_to_color_map=t2c来自动拆分上色(容易出问题)

  4. 只传入一个字符串,使用text[0][i]来对细小的路径上色(一般是一个字符一个下标)

Q8: TexMobject的下标怎么分析

  1. 使用debugTeX 7,先self.add(tex)然后再debugTeX(self, tex), 导出最后一帧 8,观察每段字符上的标号,即为下标

  2. 使用自带的函数get_submobject_index_labels获取下标的VGroup,然后添加

Q9: TexMobject使用 \frac 拆分时出错

这个是Granttex_file_writing.py 的一个bug, 建议使用{分子 \over分母} 来代替 \frac{分子}{分母}

Q10: 括号匹配不全

显示不全的例子

\[\begin{split}\begin{cases} a+b\\ b+a \end{cases}\end{split}\]
TexMobject(r"\left\{\begin{matrix} a+b \\ b+a \\ \end{matrix}\right.")

matrix这样的写法在manim中会报错,无法生成dvi, 原因是manim会自动寻找相对应的括号来匹配,这里缺少了右边的大括号

所以推荐使用cases环境,效果是一样的:

\[\begin{split}\begin{cases} a+b \\ b+a \\ \end{cases}\end{split}\]
TexMobject(r"\begin{cases} a+b \\ b+a \\ \end{cases}")

素材引用问题

Q1: 使用SVGMobject找不到svg文件

  1. 直接使用绝对路径引用svg文件

  2. svg文件放到assets/svg_images/文件夹中

Q2: 如何使用jpg或者png文件

  1. 直接使用绝对路径引用,并使用ImageMobject

  2. jpg/png文件放到assets/raster_images/文件夹中

Q3: 能否导入gif文件

可以使用ImageMobject导入,但是只保留第一帧,不会显示动图

其它问题

Q1: 有什么manim教程

https://github.com/manim-kindergarten/manim这里的README文件中也有整合

  1. MK制作的系列视频教程(制作中)

  2. 群主cigar666的B站专栏

  3. pdcxs大大转载的manim教程

  4. GitHubcai-hust的中文教程

  5. manim源码

Q2: 没有manim源码

最好不要使用pip install manimlib来装manim,请在GitHubclone下来manim的全部内容, 可以选择MK修改的版本:https://github.com/manim-kindergarten/manim

Q3: 群友用的manim都是什么版本

manim不看版本,一般使用的都是最新库,release里面带版本号的都可以看作旧版

Q4: 如何使用傅里叶级数作图

套用 Grant 写好的文件

from_3b1b/active/diffyq/part2/fourier_series.py
from_3b1b/active/diffyq/part4/fourier_series_scenes.py
from_3b1b/active/diffyq/part4/long_fourier_series.py

Q5: 傅里叶级数作图如何调整时长

CONFIGrun_time无法控制,使用slow_factorn_cycles来控制

\(\mathtt{\dfrac{1}{slow\_factor}}\)为一个循环的时间,n_cycles为循环的个数

只需要更换svg素材即可 9

Q6: svg用什么软件制作

Adobe Illustrator(简称 AI)或者inkscape(简称 ink)

尽量不要使用网页版编辑器

目前manimSVG的解析很局限,推荐使用AI导出

Q7: 动画怎么显示旋转一个物体

使用RatateRotating,区别在群文件中有视频

Q8: TransformReplacementTransform有什么区别

  1. Transform(A, B)在画面上A变成了B的样子,但是画面上的物体名字还叫A

  2. ReplacementTransform(A, B)在画面上A变成了B的样子,并且画面上的物体名字叫B

所以以下两个效果相同

self.play(Transform(A, B))
self.play(Transform(A, C))
self.play(ReplacementTransform(A, B))
self.play(ReplacementTransform(B, C))

Q9: 怎么控制物体移动或者Transform的速率

使用rate_func,一些manim中已经定义的在群文件中有视频

https://fastly.jsdelivr.net/gh/manim-kindergarten/CDN@master/manim_assets/image/rate_functions.png

Q10: 数学符号/公式 用LaTeX怎么打

请见 https://www.luogu.com.cn/blog/IowaBattleship/latex-gong-shi-tai-quan

推荐妈咪叔维护的https://www.latexlive.com/

Q11: 一些特殊LaTeX的外部包

如何使用manim画出上面的音符,或怎么使用这些包?

manimlib目录下的ctex_template.tex或者tex_template.tex文件中 添加外部包的名称 10

就拿上面的音符为例,因为是在harmony包中的,所以在tex文件中添加\usepackage{harmony} 11

然后新建一个py文件,写入代码

from manimlib.imports import *
class TestHarmony(Scene):
    def construct(self):
        # harmony具体用法请百度
        harmony = TextMobject(r"\Ganz \Halb \Vier \Acht \Sech \Zwdr")
        self.play(ShowCreation(harmony))
        self.wait()

运行py文件即可

Q12: 使用LaTeX外部包,编译错误或者无显示

首先,并不是所有外部包都能在manim中顺利使用,大多都不支持xelatex编译, 所以建议需要使用外部包时只用latex编译 12

至于有些群友常用TiKZ这个外部包,也是使用latex才能顺利运行, 在xelatex\draw会无法显示, 需要修改tex_template.tex文件[change],修改成如下:

\documentclass[preview, dvisvgm]{standalone}
\usepackage{tikz}

新建py文件,写入代码来画一条线:

class TestTikz(Scene):
    def construct(self):
        tikz = TextMobject(
            # tikz具体用法请百度
            r"\tikz{\draw (-1, 0) -- (1, 0);}",
            color=WHITE,
            stroke_width=1,
            stroke_opacity=1,
        )
        self.play(ShowCreation(tikz))
        self.wait()

运行py文件即可

Q13: 一些比较复杂,操纵东西比较多的动画怎么做

使用外部剪辑软件,例如Adobe Premiere Pro或者达芬奇

Q14: 一个self.play里写两个ApplyMethod只对一个起作用怎么办

去掉ApplyMethod,例如:

self.play(ApplyMethod(mob.scale, 2), ApplyMethod(mob.shift, DOWN))

改成

self.play(mob.scale, 2, mob.shift, DOWN)

Q15: 如何解决二维画面中的图层问题

可以使用pdcxs添加的plot_depth,具体更改见下图 13

MK fork的版本已经做了修改:https://github.com/manim-kindergarten/manim

imagepd1

imagepd2

Q16: 如何导出gif文件

在新版本中,manim导出gif已经失效,可以导出mp4,后用ffmpeg转换。也可以按照下图修改源码

MK fork的版本已经做了修改:https://github.com/manim-kindergarten/manim

imagegif

改过后,在输入命令时加上-i选项,就能导出gif

Q17: 如何导出透明的图片或者视频

在运行命令的时候加上 -t选项

  • 如果是 -s保存图片,则会存储为背景透明的png图片

  • 如果是 -l/-m/-w保存视频,则会存储为背景透明的mov视频文件,方便pr中的剪辑

Q18: 渲染视频的画质和帧率怎么调整

manim的默认画质有四种

  • -l 最低画质 480P15

  • -m 中等画质 720P30

  • –high_quality 14 高画质 1080P60

  • -w 导出(最高)画质 1440P60(2K)

  • -uhd 超高清 4K120fps(B站最高) 15

不加画质选项,默认使用 -w最高画质 16。 可以通过修改constants.py中对应的画面长宽和帧率来修改 17

一般把 -w最高画质修改成1080P60

Q19: 有没有什么好的场景例子供学习

  1. GitHubmanim-kindergarten/manim_sandbox中的demovideos文件夹中的代码

  2. Grant的代码 18 对应3B1B的视频,可能会有报错,需要魔改

  3. 群文件里“manim相关的python代码及视频结果”

  4. 群里几个B站up主的GitHub库对应他们的代码

1

安装anaconda时是否勾选添加到path变量

2

临时换源

3

群文件中有某个版本的pycairo,注意Python版本和系统版本是否均合适

4

上网下载、或者使用群文件中的版本

5

例如:Microsoft YaHei,Source Han Sans CN(Windows可以打开C:/Windows)

6

或者在字符串前加r,正常书写

7

https://github.com/manim-kindergarten/manim_sandbox/blob/master/utils/functions/debugTeX.py

8

-s 选项

9

自己制作,或者使用群里的svg素材

10

修改TEX_USE_CTEXTrue的,可以只在ctex_template.tex中添加

11

不需要使用的时候记得改回来哦[change]

12

即把TEX_USE_CTEX改为False

13

plot_depth的值越大,运行出来的物体就越在上面

14

没有缩写

15

仅限MK版本manim

16

比如 -p(虽然很多人把 -p当成了 -w。。。)

17

manimlib/constants.py118行开始

18

from_3b1b文件夹中