我想利用 -package 用 LaTeX 实现一个简单的“飞入”动画animate
。我的想法是插入一个\hspace
长度参数递减的动画。但是,根本没有动画。
MWE(改编自http://texample.net/tikz/examples/animated-definite-integral/):
\documentclass{beamer}
\usepackage{animate, ifthen}
\newcounter{m}
\setcounter{m}{0}
\newlength{\dummy}
\setlength{\dummy}{8cm}
\begin{document}
\begin{frame}[fragile]
\begin{animateinline}{2}
\whiledo{\them < 21} { % Execute 21 times
\hspace{\dummy} Hello.
\addtolength{\dummy}{-.4cm} % Decrease \dummy
\stepcounter{m}
\ifthenelse{\them < 21} {
\newframe % Create new frame, if condition satisfied
}{
\end{animateinline}\relax % Otherwise end environment
}
}
\end{frame}
\end{document}
也许我应该只使用 TikZ 来修改这样的坐标/参数,但我最初认为,这应该可行,并且是一种实现我的目标的更简约的方式。
为什么这不起作用?如果我的方法错了,有什么更好的方法吗?
答案1
不推荐使用\whiledo
for 围绕参数化动画帧构建循环。这可能会导致意外结果,因为\newframe
嵌入到其循环主体中可能会隐藏维度和计数器的本地分配。
相反,使用 pkganimate
的内置命令\multiframe
:
\documentclass{beamer}
\usepackage{animate}
\begin{document}
\begin{frame}{Fly-in example}
\begin{animateinline}[autoplay]{20}
\multiframe{21}{dim=8cm+-0.4cm}{
\makebox[\widthof{\hspace{8cm}Hello.}][l]{\strut\hspace{\dim}Hello.}
}
\end{animateinline}
\end{frame}
\end{document}