调整了带姓名的叠加数字的引用

调整了带姓名的叠加数字的引用

我正在尝试通过标识符引用我的投影仪覆盖,就像在这个问题中一样:参考带名称的覆盖编号

由于我正在使用\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}{\t‌​he\c@beamerpauses}}\‌​advance\c@beamerpaus‌​es 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\re‌​lax}
\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}

相关内容