我正在尝试通过标识符引用我的投影仪覆盖,就像在这个问题中一样:参考带名称的覆盖编号。
由于我正在使用\visible<+->{}
(beamerpauses 计数器在执行命令后递增),所以我想使用此评论和此评论以便能够定义偏移。
当使用替代\savepause
定义时,我收到错误:
"You can't use \`\unhbox' after \advance. \end{frame}"
当使用替代方案时\usepauseoffset
,我收到错误...
"undefined control sequence".
实际上,这两种情况都有很多错误。我对 LaTeX 的了解还不够,无法编写宏并理解这些错误消息。
以下是 MWE:
\documentclass{beamer}
% Save overlays by name
\makeatletter
\DeclareRobustCommand*{\savepause}[1]{\only<1>{\immediate\write\@auxout{\string\pauseentry{\the\c@framenumber}{#1}{\the\c@beamerpauses}}}}
%\DeclareRobustCommand*{\savepause}[2][0]{\only<1>{\advance\c@beamerpauses by#1\relax\immediate\write\@auxout{\string\pauseentry{\the\c@framenumber}{#2}{\the\c@beamerpauses}}\advance\c@beamerpauses by-#1\relax}}
\newcommand*{\usepause}[1]{\@ifundefined{pauses@\the\c@framenumber @#1}{1} {\@nameuse{pauses@\the\c@framenumber @#1}}}
\def\usepauseoffset[#1]#2{\number\numexpr\usepause{#2}+#1\relax}
\newcommand*{\pauseentry}[3]{\global\@namedef{pauses@#1@#2}{#3}}
\makeatother
\begin{document}
\begin{frame}
\visible<+->{Overlay 1 \savepause{first} (Counter: \usepause{first})}
\visible<+->{Overlay 2 \savepause{second} (Counter: \usepause{second})}
\visible<\usepause{first}->{Should be shown together with "Overlay 1".}
%\visible<\usepauseoffset[1]{second}->{Should be shown together with "Overlay 2".} % Does not compile.
\end{frame}
\end{document}
很抱歉我没有在原始问题下发表评论,但我还没有评论的权限。
如果我的解释有任何遗漏,请告诉我。我刚刚加入 Stackexchange。
提前致谢!
答案1
有两件不同的事情需要修复。
\relax
首先,的定义中有一些拼写错误\usepauseoffset
。代码的特殊突出显示暗示了这一点。e
和之间有一些不可见的字符l
。删除这些字符后,您的代码就可以在最后一行未注释的情况下进行编译。
更根本的是,新提出的定义版本\savepause
确实存在问题。您无需步进计数器,只需保存调整后的值即可,例如通过进行计算\numexpr
。
\DeclareRobustCommand*{\savepause}[2][0]{\only<1>{%
\immediate\write\@auxout{\string\pauseentry
{\the\c@framenumber}{#2}{\number\numexpr\c@beamerpauses-#1\relax}}}}
把它们放在一起,第一张幻灯片就是
其它幻灯片均按要求运行。
\documentclass{beamer}
\makeatletter
\DeclareRobustCommand*{\savepause}[2][0]{\only<1>{%
\immediate\write\@auxout{\string\pauseentry
{\the\c@framenumber}{#2}{\number\numexpr\c@beamerpauses-#1\relax}}}}
\newcommand*{\usepause}[1]{\@ifundefined{pauses@%
\the\c@framenumber @#1}{1}{\@nameuse{pauses@\the\c@framenumber @#1}}}
\def\usepauseoffset[#1]#2{\number\numexpr\usepause{#2}+#1\relax}
\newcommand*{\pauseentry}[3]{\global\@namedef{pauses@#1@#2}{#3}}
\makeatother
\begin{document}
\begin{frame}
\visible<+->{Overlay 1 \savepause[1]{first} (Counter:~\usepause{first})}
\visible<+->{Overlay 2 \savepause[1]{second} (Counter:~\usepause{second})}
\visible<\usepause{first}->{Should be shown together with ``Overlay 1''.}
\visible<\usepause{second}->{Should be shown together with ``Overlay 2''.}
\end{frame}
\begin{frame}
\visible<+->{Overlay 1 \savepause[1]{first}
(Counter:~\usepause{first})}
\visible<+->{Overlay 2 \savepause[1]{second}
(Counter:~\usepause{second})}
\visible<\usepauseoffset[1]{first}->{Should be shown together with
``Overlay 2''.}
\visible<\usepause{second}->{Should be shown together with ``Overlay
2''.}
\end{frame}
\end{document}