multido 中的多帧不起作用

multido 中的多帧不起作用

我尝试\multiframes使用进行多次\multido。但以下最小示例程序(应产生不断增大的旋转楔形的动画)给出了错误: ! Package animate Error: Content of first frame must not have zero width.代码如下所示

\documentclass{article}
\usepackage{pst-sigsys}
\usepackage{multido}
\usepackage[final]{animate}

\newcommand{\mywedge}[2]{%
    \pspicture*(-5,-5)(5,5)
    \degrees[4]
    \pscircle(0,0){#2}
    \pswedge[linestyle=solid,fillcolor=teal,fillstyle=solid]{#2}{#1}{\inteval{#1+1}}
    \endpspicture
}

\begin{document}
\begin{animateinline}[controls={play,step}]{2}
\multido{\iradius=1+1}{4}{%
    \multiframe{4}{iangle=0+1}{%
        \mywedge{\iangle}{\iradius}
    }
    \newframe
}
\end{animateinline}
\end{document}

省略\multido和 则无用\newframe(并提供一个数字而不是\iradius作为 的第二个参数\mywedge)会给出预期结果(但楔形当然不会再增长)。为什么这不起作用?我该如何让它起作用?

答案1

\multido 带有嵌入式 \newframe在里面不能很好地工作animateinline\newframe关闭一个 TeX 组,从而隐藏\iradius由 本地定义的组\multido

为解决这个问题,我会使用 LaTeX3 步进函数之一,例如 \int_step_inline:nnnn。(请参阅texdoc interface3。)此外,最后一次循环迭代不应插入\newframe。否则,将在动画末尾插入一个空帧。使用整数条件来防止这种情况。

\documentclass{article} 
\usepackage{pst-sigsys} 
\usepackage[final]{animate} 
 
\ExplSyntaxOn 
\let\intStepInlinennnn\int_step_inline:nnnn 
\let\intComparenT\int_compare:nT 
\ExplSyntaxOff 
 
\newcommand{\mywedge}[2]{% 
    \pspicture*(-5,-5)(5,5) 
    \degrees[4] 
    \pscircle(0,0){#2} 
    \pswedge[linestyle=solid,fillcolor=teal,fillstyle=solid]{#2}{#1}{\inteval{#1+1}} 
    \endpspicture 
} 
 
\begin{document} 
\begin{animateinline}[controls={play,step}]{2} 
\intStepInlinennnn{1}{1}{4}{% 
  \multiframe{4}{iangle=0+1}{% 
      \mywedge{\iangle}{#1} 
  } 
  \intComparenT{#1<4}{\newframe} 
} 
\end{animateinline} 
\end{document}

答案2

\begin{animateinline}[controls={play,step}]{2}
    \psLoop{4}{%
        \multiframe{4}{iangle=0+1}{%
            \mywedge{\iangle}{\psLoopIndex}
        }
        \newframe
    }
\end{animateinline}

相关内容