我使用 tikz 和 animate 包创建了一个漂亮的动画,我以回文形式播放它。它类似于下面的示例,尽管这当然比我的真实文档更简单。问题是我需要它暂停一下在动画的开始和结束时,好像第一帧和最后一帧的持续时间比其他帧更长。有办法吗?
我有一个想法,不是有 11 帧,\rTheta 从 0 到 10,而是有 31 帧,\rTheta 从 -10 到 20。然后可以有一个条件,将 \rTheta 的负值设置为 0,将大于 10 的值设置为 10。这将产生我想要的效果。不确定这是否可行,或者是否有更好的方法。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{animate}
\begin{document}
\begin{frame}
$
\begin{animateinline}[autoplay,palindrome]{10}
\multiframe{11}{rTheta=0+.1}{
\begin{tikzpicture}
\node (a) at (0,0) {a};
\node (b) at (10,0) {b};
\node (c) at ($(0,0)!\rTheta!(10,0)$) {$X$};
\end{tikzpicture}
}
\end{animateinline}
$
\end{frame}
\end{document}
答案1
您可以使用环境timeline
的选项animateinline
。从指定的文件中,您可以描述何时使用animateinline
环境的每个帧、重新排序或重复其中一些,甚至多次更改帧速率。
这里有两种方法可以添加所需的暂停。第二种方法应该更有效率,因为a
和b
节点只在开始时绘制一次。
第一种方式
\begin{filecontents*}{timeline.txt}
:1:0 % change framerate to 1 fps
:10:1 % change framerate to 10 fps
::2
::3
::4
::5
::6
::7
::8
::9
:1:10 % change framerate to 1 fps
\end{filecontents*}
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{animate}
\begin{document}
\begin{frame}
\begin{animateinline}[autoplay,palindrome,timeline=timeline.txt]{10}
\multiframe{11}{rTheta=0+.1}{
\begin{tikzpicture}
\node (a) at (0,0) {a};
\node (b) at (10,0) {b};
\node at ($(a)!\rTheta!(b)$) {$X$};
\end{tikzpicture}
}
\end{animateinline}
\end{frame}
\end{document}
第二种方式
\begin{filecontents*}{timeline2.txt}
:1:0x0,1 % 1 fps; use frame 0 as persistent background
:10:2 % 10 fps
::3
::4
::5
::6
::7
::8
::9
::10
:1:11 % 1 fps
\end{filecontents*}
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{animate}
\begin{document}
\begin{frame}
\begin{animateinline}[autoplay,palindrome,timeline=timeline2.txt]{10}
\begin{tikzpicture}
\node (a) at (0,0) {a};
\node (b) at (10,0) {b};
\end{tikzpicture}%
%
\newframe
%
\multiframe{11}{rTheta=0+.1}{%
\begin{tikzpicture}
\path (a) -- (b); % establish bounding box & size
\node at ($(a)!\rTheta!(b)$) {$X$};
\end{tikzpicture}%
}%
\end{animateinline}
\end{frame}
\end{document}
答案2
该命令\newframe
接受一个可选参数,允许改变动画中的帧速率:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{animate}
\newcommand\animframe[1]{%
\begin{tikzpicture}[every node/.style={anchor=base}]
\path coordinate (a) at (0,0) coordinate (b) at (10,0);
\path[use as bounding box] node at (a) {\phantom{$X$}} node at (b) {\phantom{$X$}};
\path node at (a) {a} node at (b) {b} node at ($(a)!#1!(b)$) {$X$};
\end{tikzpicture}%
}
\begin{document}
\begin{frame}
\begin{animateinline}[autoplay,palindrome]{1} % start with low frame rate
\animframe{0.0}
\newframe[10] % higher frame rate for main part
\multiframe{9}{rTheta=0.1+.1}{\animframe{\rTheta}}
\newframe[1] % end with low frame rate
\animframe{1.0}
\end{animateinline}
\end{frame}
\end{document}