文本闪烁效果是以下简单代码的目的。一些文本应该通过循环命令闪烁给定次数(这里是九次)\foreach
。但是,它无法通过编译。始终给出此错误消息:
Package animate Error: Contents of first frame must not have zero width.
这段代码有什么问题?
\documentclass{article}
\usepackage{pgffor,animate}
\begin{document}
\begin{animateinline}[autoplay,scale=1]{2}
flash something
\foreach \x in {1,...,9}{% flash nine times
\newframe
\newframe flash something
}
\end{animateinline}
\end{document}
答案1
TikZ/PGF 的实现\foreach
存在缺陷。
任何 LaTeX3 逗号列表映射命令(例如\clist_map_inline:nn
)在这里都可以做得更好:
\documentclass{article}
\usepackage{animate}
\ExplSyntaxOn
\cs_set_eq:NN\clistMapInlinenn\clist_map_inline:nn
\ExplSyntaxOff
\begin{document}
\begin{animateinline}[autoplay]{2}
\strut flash something: 0
\clistMapInlinenn{1,2,3,4,5,6,7,8,9}{
\newframe
\newframe\strut flash something: #1
}
\end{animateinline}
\end{document}
请注意,该包animate
提供了自己的循环命令来增加动画帧:
\documentclass{article}
\usepackage{animate}
\begin{document}
\begin{animateinline}[autoplay]{2}
\multiframe{9}{i=0+1}{ % 2nd argument may be left empty,
\strut flash something: \i % if a loop variable is not needed
\newframe % <--- This one creates the blank in-between frame.
}
\newframe
\strut flash something: 9
\end{animateinline}
\end{document}
使用没有错\foreach
里面框架定义。只是不要嵌入\newframe
到\foreach
主体中。例如:
\documentclass{article}
\usepackage{animate}
\usepackage{pgffor}
\begin{document}
\begin{animateinline}[autoplay]{2}
\multiframe{9}{i=0+1}{
\strut flash something:\makebox[1.2in][l]{%
\foreach \x in {0,...,\i}{ \x}}
\newframe
}
\newframe
\strut flash something:\makebox[1.2in][l]{%
\foreach \x in {0,...,9}{ \x}}
\end{animateinline}
\end{document}