使用 againframe 在 Beamer 中使用框架标签发出多重定义标签警告

使用 againframe 在 Beamer 中使用框架标签发出多重定义标签警告

这个问题与据我所知,这是来自 comp.text.tex 的未解答问题,目前,这是 Google 上针对此问题搜索到的最大搜索结果:当在 Beamer 中指定框架标签并打算通过命令使用它们时\againframe,LaTeX 开始报出“多重定义的标签”错误。

这是一个具体的可编译示例来演示此问题:

\documentclass{beamer}
\begin{document}

\begin{frame}<1>[label=firstframe]{The first frame}
    \begin{itemize}
        \item This is not the fourth slide
            \pause
        \item Ah, but now it \emph{is} the fourth slide!
    \end{itemize}
\end{frame}

\begin{frame}{The second frame}
    This is a boring second slide.
\end{frame}

\againframe{firstframe}

\end{document}

这里的目的是在第一张幻灯片中显示第一帧的第一个要点,然后在第三张幻灯片上再次显示,然后在第四张幻灯片上显示两个要点。

LaTeX 在编译此演示文稿时将报告以下警告:

LaTeX Warning: Label `firstframe<1>' multiply defined.


LaTeX Warning: Label `firstframe' multiply defined.

除了避免使用之外,如何消除这些警告的出现\againframe

答案1

您添加第二个\pause并使用覆盖规范。像这样

\begin{frame}<1>[label=firstframe]{The first frame}
    \begin{itemize}
        \item This is not the fourth slide
            \pause \pause
        \item Ah, but now it \emph{is} the fourth slide!
    \end{itemize} \end{frame}

\begin{frame}{The second frame}
    This is a boring second slide. \end{frame}

\againframe<2-3>{firstframe}

beamer是的,这个解决方案有点愚蠢,但这与内部如何处理命令有关\againframe。该命令旨在“继续”一个框架,而不是“重复”一个框架。(您收到重复标签警告的原因是每个框架/覆盖层都在内部进行了标记(以便各种 TOC 跳转和超链接可以正常工作)。如果您标记一个框架,则内部标签将用于name<n>该框架的第 n 个覆盖层。)

答案2

Link Willie Wong 表示,

该命令是为了“继续”一个框架,而不是“重复”一个框架而建立的。

因此代码:

\begin{frame}[label=firstframe]{The first frame}
   ....
\end{frame}

创建一个元素“firstframe <1>”和代码:

\againframe{firstframe}

还创建一个名为“firstframe<1>”的元素,这显然是不可能的。

解决方案很简单:更改覆盖 ID,以使其不会与此框架的现有覆盖冲突。

例子:

\begin{frame}[label=firstframe]{The first frame}
   ....
\end{frame}

\againframe<2>{firstframe}

答案3

如果您确实在幻灯片中使用标签,这可能会或可能不会破坏某些东西,但如果您仅标记要使用的框架,\againframe 那么以下快速而肮脏的破解可能会做到这一点:

\documentclass{beamer}

\makeatletter
\define@key{beamerframe}{relabel}{%\def\beamer@againname{#1}%
  \def\beamer@undolabels{{\let\@elt\beamer@restorecounter\beamer@overlaycounterresets}}%
}
\makeatother

\begin{document}

\begin{frame}<1>[label=firstframe]
\frametitle{The first frame}
    \begin{itemize}
        \item This is not the fourth slide 
            \pause
        \item Ah, but now it \emph{is} the fourth slide!
    \end{itemize}
\end{frame}

\begin{frame}
\frametitle{The second frame}
    This is a boring second slide.
\end{frame}

\againframe{firstframe}

\end{document}

相关内容