如何使用自动播放(在动画包内)以及每次播放结束时暂停?

如何使用自动播放(在动画包内)以及每次播放结束时暂停?

我正在尝试包含以下动画 gif:

在此处输入图片描述

进入 beamer 文档并且我正在使用animate包。

当我按照以下说明操作时: http://www.geogebratube.org/forum/viewtopic.php?f=20&t=25986生成的图片与原始图片的不同之处在于,在一个循环结束时,运动没有停滞。所需的停滞可能是通过在某个时间段内重复一帧来实现的。但是,当按照说明将原始 gif 分解为帧时,就不会出现重复的帧(这会导致最终出现不必要的平滑运动)。我正在寻找某种方法来调整自动播放,使其从第一帧 0 到最后一帧(假设为第 22 帧),然后在再次跳到开头之前,它会重复最后一帧(第 22 帧)一段时间。谢谢你的建议。

答案1

最简单的方法是使用animateinline环境,然后“手动”包含图像,最后使最后一幅图像具有较慢的帧速率。

不过,我想向你们展示一下animate包裹。

在此过程中,图像和框架之间的区别并不明显。如有疑问,请询问。

动画问题

在文件中包括动画通常会创建巨大的pdf 通常是不是可取的。

避免这种情况的一种方法是关于-只要图像有共同点,就使用它们。因此,对于情节来说,动画中不变的一些东西是:

  1. 轴线
  2. 勾选描述
  3. 传说
  4. 标题
  5. 常见数据点
  6. ETC。

除非小心地重复使用它们,否则所有这些都会存储在每个框架中。正如已经暗示的那样,这可以大大减少 pdf 文件的大小(特别是如果许多框架可以重复使用,或两者结合)。

该功能称为时间线为了animate包可以处理这些事情。
时间线可以重复使用多张图片,而无需占用更多空间。

在下面的例子中我将证明这一点。

animateinline

环境animateinline是包含图像的手动方式,而不是使用\animategraphics。它还提供了一些控制动画的好功能:

  1. \newframe解析当前帧并转到下一帧
  2. \newframe*解析当前帧并转到下一帧,但是,在该帧中插入瞬时暂停。
  3. \newframe[<frame rate>]解析当前帧并转到下一帧,但是,剩余动画的帧速率设置为<frame rate>(注意,循环时会重置)
  4. 允许 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与现成的动画创作相比,它具有很大的使用优势。正如前面提到的,您可以处理透明度并按您希望的方式组合每一帧。

基本思想是时间线保存有关何时的信息的文件如何利用每个框架。

每行由三列组成,每列之间用 分隔:。三列包含以下信息:

  1. 提供星号 ( *)或者无(*暂停)
  2. 提供一个整数 ( f)或者无(f帧速率)
  3. 提供框架格式字符串
    • 每种格式都以逗号 ( ,) 分隔(最左边的格式是当前帧中的底部格式)
    • 一个简单的整数格式(i)告诉动画使用i,帧从计数 0 开始(i与 相同ix1
    • 格式为ixn,其中in是整数(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}

这将在当前文件夹中创建几个文件。

尺寸减小

让我们比较一下上一节中创建的图像(在我的个人电脑上):

  1. fig<0-4>.pdf为 18kb(所有信息)
  2. background.pdf为 17kb(仅轴描述和轴线)
  3. 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}

相关内容