/ LaTeX  

LaTeX札记(一):插入动画

LaTeX\LaTeX札记(一)——插入动画

⚠新坑警告

准备把学习LaTeX过程中探索到的一些有用的、好玩的方法都记录下来。

同时还有新坑:“MATLAB札记”

引入

记得在刚开学的时候,看到一个信号老师公众号,分享了一个其他学校的信号幻灯片。那篇文章的主旨不是讲那个幻灯片怎么样,但我一看发现是用LaTeX\LaTeX写的,居然还说有动画,我就在想这是怎么实现的呢?LaTeX\LaTeX生成的不都是PDF嘛,怎么会动呢?但是我依稀记得,Adobe Acrobat是可以导入swf动画的,所以应该是可以实现的。当时没多想,直到……

做电磁场实验的时候实验3、4,其实都是动态的过程,一个是电磁波的透射与反射实验、还有一个是电磁波的极化。虽然题目要求的是截三张图即可,但是我还是想试试,在PDF里怎么搞个动画,所以就有了这篇文章。

总体大概是这么些步骤:

  • Step 0:获得一组动画

  • Step 1:转图片格式

  • Step 2:在导言区引入animate

  • Step 3:在正文中使用animate创建动画

前期准备——转图片格式

Step 0:获得一组动画

这个前期准备可能会是MATLAB札记的第一篇文章,会谈谈怎么从MATLAB中导出GIF动画。

假设我们已经获得了一个GIF动画,或者获得了一组视频,这是前提条件。

Step 1:转图片格式

需要注意的是,在LaTeX\LaTeX中使用animate宏包插入的实际上是一组带编号的图像序列,而非是真正意义上的GIF动画或者视频。

分不同的格式,可以用两种方法来解决。

GIF转图片序列

这里使用的软件叫做 ImageMagick ,这是一个开源软件,但是他是使用命令行指令进行操作的。

安装好 ImageMagick 之后,我们就可以用它提供的 convert 命令将 GIF 格式的动图逐帧地切分成一系列图片了。假设你的目标图片是 lab031.gif,那么使用如下命令可以得到一系列图片:lab031-0.png, lab031-1.png, lab031-2.png, …

1
magick convert lab031.gif -coalesce lab031.png

值得注意的是,在使用这条指令的时候需要先将命令行定位到GIF动画所在的文件夹目录下,不然也找不到啊。

这样我们就从GIF获得了图片序列。

视频转图片序列

关于为什么会出现视频格式:在实验四中,我制作了一个GUI界面,但是GUI界面我并没有找到可以内部录制GIF动画的较好的方法,所以这里只好先录屏,再转图片序列咯。当然还可以再多一步,视频->GIF(用格式工厂)->图片序列(用上面的方法)。

这里我使用的是Pr软件。虽然Pr很不稳定,但是还是能用的。这边的操作不复杂,基本不用担心电脑会不会炸。

  • 菜单栏:文件->导出->媒体

  • 格式中选择PNG,预设不用管

  • 下面视频选项中,可以在看得清画面的情况将宽,高调的尽量小,防止导出的PNG序列质量太高,导致最终整个PDF的大小太大。

  • 还是视频选项中,把帧速率设的尽量小,比如我1分半钟的视频,帧速率为1,导出的PNG序列就是90张,过多的图片可能会使PDF中的动画变得更流畅,但是带来的问题就是它的大小会很大。(❗值得注意的是,Pr导出的图像即使画面尺寸不大,大小还是比较大的,所以需要注意一下图像质量和帧率的问题)

    视频转序列

当然格式工厂的方法也是可行的,但格式工厂对于视频的质量压缩的实在是太多了。

格式工厂1

关键步骤——animate宏包的使用

Step 2:在导言区引入animate

和其它宏包一样,在 LaTeX\LaTeX的导言区中使用 \usepackage[<options>]{animate} 即可引入 animate 宏包。

❗值得注意的是

  • 必须在引入 animate 宏包之前,引入 graphicx 宏包。
  • 使用 animate 宏包创建动画,也需要两次编译(第一次创建 JavaScript 内容,第二次在具体位置插入内容),这是由于交叉引用导致的。
1
2
3
% 在导言区插入以下代码
\usepackage{graphicx}
\usepackage{animate}

Step 3:在正文中使用animate创建动画

animate提供的 \animategraphics语句用于在LaTeX中插入一组PNG序列。其基本应用形式为

1
\animategraphics[<options>]{<frame rate>}{<file basename>}{<first>}{<last>}

这个命令的使用其实和普通插入图片的指令\includegraphics和插入小图的\subfigure的应用场景是一致的。就是嵌套在figure环境中使用。

各成分的含义:

  • <frame rate>:帧速率,差不多就是帧率的意思,即一秒钟多少张PNG

  • <file basename>:图片序列前缀

  • <first><last>:图片序列序号范围

    • ❗使用 ImageMagick和Pr导出的图片序列编号类型并不一样,但是无伤大雅。ImageMagick导出的是自然数编号(例如1-90),而Pr导出的是固定位数编号(例如00-90,或者000-121)之类的。填写这两个{}内容是尊重事实即可,不需要做出调整。
  • <options>:可选项(摘自参考文献2,见下面叙述)

部分可选项

  • 只能用于接口的选项

    这里的接口指的是 animate 宏包提供的用户接口。例如我们已经见过的 \animategraphics 命令,以及下一节会介绍的 animateinline 环境。

  • label=<label text>:为 animate 对象指定唯一的标签,可用于之后的 JavaScript 控制。

  • every=<num>:只为每个第 <num> 帧构建动画,而忽略剩余的帧。

  • 二者皆适用的选项

    • type=<type name>:使用指定的图片类型(而不按照前面提到的顺序搜索)。
  • poster[= first | <num> | last | none]:指定用于打印和默认展示的动画帧,默认是第一帧。

  • autopause:当动画所在页不再呈现时,自动暂停动画。

  • autoresume:当被暂停的动画重新呈现时,自动恢复播放。

  • autoplay:当动画所在页在 PDF 阅读器中呈现时,自动播放动画。

  • loop:播放到最后一帧时,从第一帧开始继续播放;如此往复。

  • palindrome:播放到最后一帧时,逐帧倒退;如此往复。

  • step:忽略 frame rate,只在每次点击鼠标时播放一帧。

  • width=<h-size>, height=<v-size>, totalheight=<v-size>, keepaspectratio:按绝对长度缩放动画的大小。

  • scale=<factor>:按比例缩放动画的大小。

  • controls:展示用于控制动画的按钮。

  • begin=<begin content>

例子(来自电磁场实验3)

1
2
3
4
5
6
7
8
9
% 导言区引用以下代码
% \usepackage{graphicx}
% \usepackage{animate}
\begin{figure}[htbp]
\centering
\animategraphics[autoplay,loop,controls,width=.7\textwidth]{24}{./lab032/lab032-}{0}{361}
\caption{向理想导体垂直入射随相位变化的GIF动画}
\label{fig:gif2}
\end{figure}

这段代码表示帧率为24帧每秒,它的文件来源于图片目录下的lab032文件夹中lab032-为前缀的图片序列,共有0-361总共362张图组成。同时,它具有自动播放、重复播放、具有控制按钮这三个选项,同时所占页宽为0.7倍页宽。下面三张图体现了从GIF到PNG序列再到LaTeX\LaTeX中文件的变化。

lab032

lab032图片序列

EDA_WF_03

(这个格式工厂转的有点问题)

下面这一排按钮不出意外的话,分别表示⏮回到开头,⏪上一帧,⏸暂停(长按才行,不然只会顿一下),⏩下一帧,⏭最后一帧,后三个按钮分别是➖降低帧率、🔛恢复设定的帧率、➕提高帧率。

一些注意事项

  1. 这个功能稍有点复杂,但是应用起来的效果还是很不错的。但是这个功能还是很鸡肋的。这个需要支持Javascript的PDF阅读器,网上整理的有这些

    • Adobe Acrobat / Reader

    • PDF-XChange

    • Foxit Reader

    我目前主要使用的是Adobe Acrobat DC,所以打开没问题。但我vscode里LaTeX\LaTeX环境配套的Sumatra PDF就根本无法播放这个动画。所以很大程度上只能自娱自乐。

    还有同学指出福昕阅读器对于这个的支持也不是很好,一卡一卡的。还有人用iPad上的PDF Expert打开直接死机。所以不到迫不得已我也不会用。

  2. 这个功能用在LaTeX\LaTeX制作Beamer过程中应该还是很不错的。可以在幻灯片中清楚的显示动画效果。

  3. 不是很推荐用格式工厂转,噪点奇多无比,可以试试网上的一些在线转换工具。

参考文献

  1. 林特斯9527.LaTeX 中插入GIF图片[EB/OL].https://www.cnblogs.com/LinTeX9527/p/11122268.html.2019-07-02/2020-05-12 .
  2. 始终.LaTeX 黑魔法(四):插入动画(animate 宏包教程)[EB/OL].https://liam.page/2017/08/10/importing-animate-in-LaTeX/.2017-08-10/2020-05-12.

本文标题:LaTeX札记(一):插入动画

文章作者:Levitate_

发布时间:2020年06月13日 - 11:07:11

原始链接:https://levitate-qian.github.io/2020/06/13/latex-note-01/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。