由于空间原因,我想将itemize
列表的内容分成单独的幻灯片,使用 我一直这样做,没有遇到太大问题\only
。但是,以下最小文档抱怨标签eq:formula
未定义:
\documentclass{beamer}
\begin{document}
\begin{frame}{Title}
\begin{itemize}
\only<1>{
\item Item 1.
} % Comment
\only<2>{ % these lines
\item Item 2, with equation
\begin{equation}
\label{eq:formula}
xyz
\end{equation}
\item Item 3, with reference \eqref{eq:formula}.
}
\end{itemize}
\end{frame}
\end{document}
如您所见,它定义清晰。如果您注释掉标记的行(因此,将所有内容打印在一张幻灯片上),问题就会消失。我看到在 beamer 中\tracingmacros
对 进行了严重的重新定义\label
,因此,这似乎是检测标签打印在哪张幻灯片上的错误。
对吗?解决方案是什么?
答案1
beamer
也是\label
覆盖感知的。以下\show\label
(外部环境frame
),你会注意到
> \label=macro:
->\@ifnextchar <{\beamer@label }{\beamer@label <1>}
这意味着\label{<stuff>}
没有覆盖规范默认\label<1>{\stuff>}
仅在幻灯片 1 上显示标签。这当然解释了为什么只有一张幻灯片才能使引用按预期工作。因此,使用\label<2>{eq:formula}
标签在幻灯片 2 上处于活动状态。
以下是完整的 MWE:
\documentclass{beamer}% http://ctan.org/pkg/beamer
\begin{document}
\begin{frame}{Title}
\begin{itemize}
\only<1>{%
\item Item 1.
}
\only<2>{%
\item Item 2, with equation
\begin{equation}
\label<2>{eq:formula}
xyz
\end{equation}
\item Item 3, with reference \eqref{eq:formula}.
}
\end{itemize}
\end{frame}
\end{document}
\label
没错,如果能够自主感知滑动就好了……