我正在尝试包含以下动画 gif:
进入 beamer 文档并且我正在使用animate
包。
当我按照以下说明操作时: http://www.geogebratube.org/forum/viewtopic.php?f=20&t=25986生成的图片与原始图片的不同之处在于,在一个循环结束时,运动没有停滞。所需的停滞可能是通过在某个时间段内重复一帧来实现的。但是,当按照说明将原始 gif 分解为帧时,就不会出现重复的帧(这会导致最终出现不必要的平滑运动)。我正在寻找某种方法来调整自动播放,使其从第一帧 0 到最后一帧(假设为第 22 帧),然后在再次跳到开头之前,它会重复最后一帧(第 22 帧)一段时间。谢谢你的建议。
答案1
最简单的方法是使用animateinline
环境,然后“手动”包含图像,最后使最后一幅图像具有较慢的帧速率。
不过,我想向你们展示一下animate
包裹。
在此过程中,图像和框架之间的区别并不明显。如有疑问,请询问。
动画问题
在文件中包括动画通常会创建巨大的pdf 通常是不是可取的。
避免这种情况的一种方法是关于-只要图像有共同点,就使用它们。因此,对于情节来说,动画中不变的一些东西是:
- 轴线
- 勾选描述
- 传说
- 标题
- 常见数据点
- ETC。
除非小心地重复使用它们,否则所有这些都会存储在每个框架中。正如已经暗示的那样,这可以大大减少 pdf 文件的大小(特别是如果许多框架可以重复使用,或两者结合)。
该功能称为时间线为了animate
包可以处理这些事情。
时间线可以重复使用多张图片,而无需占用更多空间。
在下面的例子中我将证明这一点。
animateinline
环境animateinline
是包含图像的手动方式,而不是使用\animategraphics
。它还提供了一些控制动画的好功能:
\newframe
解析当前帧并转到下一帧\newframe*
解析当前帧并转到下一帧,但是,在该帧中插入瞬时暂停。\newframe[<frame rate>]
解析当前帧并转到下一帧,但是,剩余动画的帧速率设置为<frame rate>
(注意,循环时会重置)- 允许 2. 和 3. 的组合!
现在,您可以推断出您的解决方案。只需使用以下命令:
\begin{animateinline}[controls,loop]{5}
\multiframe{5}{i=0+1}{%
\includegraphics{fig\i.pdf}
}
\newframe
\includegraphics{fig4.pdf}
\newframe[1]
\includegraphics{fig4.pdf}
\end{animateinline}
如果你没有三次添加最后一张图片,你也会经历悬挂在第 4 帧和第 5 帧之间。因此,您需要将其包含三次。尝试并亲自体验。
时间轴,动画的伟大之处
这可能是animate
与现成的动画创作相比,它具有很大的使用优势。正如前面提到的,您可以处理透明度并按您希望的方式组合每一帧。
基本思想是时间线保存有关何时的信息的文件和如何利用每个框架。
每行由三列组成,每列之间用 分隔:
。三列包含以下信息:
- 提供星号 (
*
)或者无(*
暂停) - 提供一个整数 (
f
)或者无(f
帧速率) - 提供框架格式字符串
- 每种格式都以逗号 (
,
) 分隔(最左边的格式是当前帧中的底部格式) - 一个简单的整数格式(
i
)告诉动画使用帧i
,帧从计数 0 开始(i
与 相同ix1
) - 格式为
ixn
,其中i
和n
是整数(x
实际上是x
)。i
指示使用哪个帧并n
指示它将在动画上停留多少帧。 因此:2x2
将指示动画插入第 2 帧并停留总共 2 帧。 如果n=0
它将在动画的剩余部分中存在。 - 清除
c
透明度堆栈。这对于删除ix0
插入的任何帧很有用。
- 每种格式都以逗号 (
例如,请参阅animate
。
示例框架
这里有一些用于生成几个感兴趣的帧的代码。
\documentclass{article}
\pagestyle{empty}
\usepackage{tikz,pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
% As one would normally do it...
\tikzsetfigurename{fig}
\foreach \x in {1,2,...,5} {
\begin{tikzpicture}
\path[use as bounding box] (-.4,-.4) rectangle (5.1,4.3);
\begin{axis}[small,xmin=-1,xmax=6,ymin=-1,ymax=6]
\addplot coordinates {(0,0) (\x,\x)};
\end{axis}
\end{tikzpicture}
}
% Utilizing the transparency features of animate
% First we need a plot of the background
% This should also include any labels inserted
\tikzsetnextfilename{background}
\begin{tikzpicture}
\path[use as bounding box] (-.4,-.4) rectangle (5.1,4.3);
\begin{axis}[small,xmin=-1,xmax=6,ymin=-1,ymax=6]
% empty
\end{axis}
\end{tikzpicture}
% Then all the fill, notice that we limit to only the "changing"
% data in this regard
\tikzsetfigurename{fig_no_axis}
\foreach \x in {1,2,...,5} {
\begin{tikzpicture}
\path[use as bounding box] (-.4,-.4) rectangle (5.1,4.3);
\begin{axis}[small,xmin=-1,xmax=6,ymin=-1,ymax=6,hide axis]
\addplot coordinates {(0,0) (\x,\x)};
\end{axis}
\end{tikzpicture}
}
\end{document}
这将在当前文件夹中创建几个文件。
尺寸减小
让我们比较一下上一节中创建的图像(在我的个人电脑上):
fig<0-4>.pdf
为 18kb(所有信息)background.pdf
为 17kb(仅轴描述和轴线)fig_no_axis<0-4>.pdf
为 1.4kb(仅数据点)
好的,所以您已经可以推断出我所说的尺寸减小的意思。应该注意的是,这些图像不包含很多数据点。因此,尺寸减小幅度大于大型数据集的预期,但是,如果帧数非常大,它也会对大型数据集产生影响。此外,从 pdf 创建动画通常可以使用类似的东西(因此 pdf 图像的尺寸变化很小)。
注意图像透明度
当在图片上使用透明度时(即0x0,1,2
),图像必须包含 alpha 通道,即:透明度。我建议使用png
图像。
通过时间轴进行动画
以下是产生相同动画的两段代码:
\animategraphics[controls,loop]{5}{fig}{0}{4}
并使用时间轴上的恒定背景:
% \usepackage{filecontents}
\begin{filecontents}{smallsize.tml}
::0x0,1
::2
::3
::4
::5
\end{filecontents}
\begin{animateinline}[controls,loop,timeline=smallsize.tml]{5}
\includegraphics{background.pdf}
\newframe
\multiframe{5}{i=0+1}{%
\includegraphics{fig_no_axis\i.pdf}
}
\end{animateinline}
请注意,我们对整个动画使用第 0 帧,并且在第一帧上有第 1 张图像(0x0,1
)。
按照您的要求在最后一帧插入暂停可以这样做:
% \usepackage{filecontents}
\begin{filecontents}{smallsizepause.tml}
::0x0,1
::2
::3
::4
::5
:1:5
\end{filecontents}
\begin{animateinline}[controls,loop,timeline=smallsizepause.tml]{5}
\includegraphics{background.pdf}
\newframe
\multiframe{5}{i=0+1}{%
\includegraphics{fig_no_axis\i.pdf}
}
\end{animateinline}
注意现在它的长度又增加了一张图片,最后一张图片的帧速率发生了变化。通过这个,你可以微调动画中的帧速率、暂停等。
请注意,通过先使用background.pdf=fig_no_axes0.pdf
和,可以使它变得更短。fig_no_axes<0-4>.pdf=fig_no_axes<1-5>.pdf
\animategraphics[timeline=<name>.tml]{5}{fig_no_axes}{0}{5}