我不想像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
在您的例子中,您希望使用不同的设置多次处理相同的操作。可以通过创建命名覆盖square0
、square1
、... 来确定必要的覆盖规范,这些覆盖指向 绘制的相应正方形的“末端” \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}
该文件必须编制两次以产生正确的结果。
怎么运行的
计数器squares
用于自动创建必要的命名覆盖层。这是通过引入两个新宏来实现的:\squarecompleted
在 的末尾调用\Atom
,它会创建一个新的命名覆盖层square\thesquares
(即square0
、square1
、...)并步进计数器squares
。可以使用 检索此命名覆盖层\currentsquareend
,它返回当前方块的结束帧,并用于
\only<\currentsquareend->{\psset{fillstyle=solid,fillcolor=cyan}}
还要注意\setcounter{squares}{0}
开头的frame
:一定要把它准确地放在那里,而不仅仅放在序言中,因为每个frame
都要经过多次处理才能创建动画。