这个问题与据我所知,这是来自 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}