使用动画包时无法按指定次数获取闪光效果

使用动画包时无法按指定次数获取闪光效果

文本闪烁效果是以下简单代码的目的。一些文本应该通过循环命令闪烁给定次数(这里是九次)\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}

相关内容