我们在制作文档、幻灯片时,一些概念性的内容可能通过动画的方式能够更清晰地表达。这些概念性的图通常来说比较简单,使用 的 tikz 宏包或其他类似的绘图语言可以很方便地进行绘制,结合 的发行版提供的 animate 宏包则可以方便地生成动画。本文将对这部分内容进行叙述。
使用 animate 宏包创建 pdf 动画
以 tikzpicture 手动绘制关键帧并结合 animate 进行动态 pdf 文件的制作示例代码如下,其中关于 animate 的用法可参考其使用手册。
1 | \documentclass{standalone} |
上述代码的第 5~10 行用于输出时间线文件 ove.txt 从而可以简化代码的内容,使各关键帧中重复的内容无需重复绘制,当ove.txt 生成后,后续可以注释掉这 5 行代码。代码使用任意 编译引擎编译,可以得到动态的 testgif.pdf 文件(假定代码文件名为 testgif.tex)效果如下:

创建 gif 格式的动画
使用上述方法生成的动画是一个 pdf 文件,可能在 Microsoft Word 文件中或网页文件中并不方便使用,有这种需要时可以提取动画中的关键帧,并使用 Imagemagick 转换为 gif 文件。
使用 animate 宏包创建各关键帧单独成页的 pdf 文件
使用 创建动画时,若需要获取关键帧的图像,则应在 animate 宏包载入时使用 export 选项,或将 export 作为文档类的全局选项加载。将前述 代码的第一行改为:
1 | \documentclass[export]{standalone} |
即可,以此编译出的 testgif.pdf 文件中,关键帧则单独成页。







使用 pdftocairo 输出各关键帧的 png 图像文件
利用 cairo 库可以将 pdf 文件中的各页单独输出为一个 png 图像,命令行执行:
1 | pdftocairo -png testgif.pdf |
在同一目录下则生成 testgif-01.png、testgif-02.png …… 等一系列 png 文件。
使用 Imagemagick 程序命令 magick 输出 gif 文件
安装 Imagemagick 程序后,可以在命令行使用 magick 或 convert 命令将一系列 png 文件转换为 gif 文件。命令名称取决于安装时的设定,在 Linux 下为 convert,Windows 下通常为避免与系统的 convert (Windows 下这个命令用于转换磁盘文件系统格式)重名而使用 magick,当然安装时也可以设定使用 convert 命令,但这时自己必须清楚两个可执行文件的路径在系统变量 PATH 中的排列顺序,从而能准确调用正确的程序。以 Windows 下使用 magick 为例,命令行应执行:
1 | magick -delay 50 -loop 0 *.png output.gif |
其中用 -delay 控制每帧切换的时间,单位为 ms,-loop 控制播放次数,-loop 0 则表示无限循环播放。magick(或 convert)命令的其他参数可以参考其使用手册。
使用 animate 宏包和 dvisvgm 创建动态的 svg 文件
另外一种生成动画文件的方式是生成动态的 svg 文件,这类文件可以在 Chromium 内核的浏览器中查看显示。生成方法是对 animate 宏包使用 dvisvgm 选项。以使用文档类全局选项为例,将代码第一行改为:
1 | \documentclass[dvisvgm]{standalone} |
编译时则应该使用 latex 或 xelatex 进行编译,后者还应该使用 --no-pdf 参数来输出 xdv 文件;随后使用 dvisvgm 命令转换 dvi 文件和 xdv 文件。命令行应执行:
1 | # latex 编译 |
此时得到的 svg 文件即为动画文件,可以将 <svg> 标签内的内容直接写入 html 文件形成动画。