是否有可能在组合覆盖时实现类似“标签转到”的工作流程?

是否有可能在组合覆盖时实现类似“标签转到”的工作流程?

我不想像6以下代码那样对值进行严格的编码:

  • 我必须手动计算步数。
  • 当一段代码(\Atom在此例中)在同一帧中重复时,该机制就会中断。
\documentclass{beamer}
\usepackage{pstricks}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{pspicture}
\PreviewBorder=12pt

\def\Atom{%
    \bgroup
    \only<6->{\psset{fillstyle=solid,fillcolor=cyan}}
    \pscustom[linejoin=0]
    {
        \only<+->{\moveto(0,0)}
        \only<+->{\lineto(2,0)}
        \only<+->{\lineto(2,2)}
        \only<+->{\lineto(0,2)}
        \only<+->{\closepath}
    }
    \egroup
}

\begin{document}
\begin{frame}
\begin{pspicture}[showgrid](-3,-3)(3,3)
        \Atom
        \psscalebox{-1 -1}{\Atom}
\end{pspicture} 
\end{frame}
\end{document}

是否可以在编写叠加层时实现类似“标签转至”的工作流程?类似于

label xxx:

overlay 1
overlay 2
overlay 3

goto xxx

答案1

您可以使用命名覆盖介绍参考带名称的覆盖编号:一般的想法是有一个命令\savepause{name},它保存计数器的当前值。然后您可以在覆盖规范中beamerpauses使用来引用该值: 。\usepause{name}\only<\usepause{name}->{...}

\Atom在您的例子中,您希望使用不同的设置多次处理相同的操作。可以通过创建命名覆盖square0square1、... 来确定必要的覆盖规范,这些覆盖指向 绘制的相应正方形的“末端” \Atom

\documentclass{beamer}
\usepackage{pstricks}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{pspicture}
\PreviewBorder=12pt

\def\Atom{%
    \bgroup
    \only<\currentsquareend->{\psset{fillstyle=solid,fillcolor=cyan}}
    \pscustom[linejoin=0]
    {
        \only<+->{\moveto(0,0)}
        \only<+->{\lineto(2,0)}
        \only<+->{\lineto(2,2)}
        \only<+->{\lineto(0,2)}
        \only<+->{\closepath}
    }
    \egroup
    \squarecompleted
}

% Reference overlay numbers with names (https://tex.stackexchange.com/a/50493)
\makeatletter
\DeclareRobustCommand*{\savepause}[1]{\only<1>{\immediate\write\@auxout{\string\pauseentry{\the\c@framenumber}{#1}{\the\c@beamerpauses}}}}
\newcommand*{\pauseentry}[3]{\global\@namedef{pauses@#1@#2}{#3}}
\newcommand*{\usepause}[1]{\@ifundefined{pauses@\the\c@framenumber @#1}{1}{\@nameuse{pauses@\the\c@framenumber @#1}}}
\makeatother

\newcounter{squares}
\newcommand*{\squarecompleted}{\savepause{square\thesquares}\stepcounter{squares}}
\newcommand*{\currentsquareend}{\usepause{square\thesquares}}

\begin{document}
\begin{frame}
\setcounter{squares}{0}
\begin{pspicture}[showgrid](-3,-3)(3,3)
        \Atom
        \psscalebox{-1 -1}{\Atom}
\end{pspicture} 
\end{frame}
\end{document}

动画输出结果,共显示11帧

该文件必须编制两次以产生正确的结果。

怎么运行的

计数器squares用于自动创建必要的命名覆盖层。这是通过引入两个新宏来实现的:\squarecompleted在 的末尾调用\Atom,它会创建一个新的命名覆盖层square\thesquares(即square0square1、...)并步进计数器squares。可以使用 检索此命名覆盖层\currentsquareend,它返回当前方块的结束帧,并用于

\only<\currentsquareend->{\psset{fillstyle=solid,fillcolor=cyan}}

还要注意\setcounter{squares}{0}开头的frame:一定要把它准确地放在那里,而不仅仅放在序言中,因为每个frame都要经过多次处理才能创建动画。

相关内容