Beamer 枚举,继续计数但将项目保持在固定位置,II

Beamer 枚举,继续计数但将项目保持在固定位置,II

我有类似的问题Beamer 枚举,继续计数但将项目保持在固定位置. 但提供的解决方案https://tex.stackexchange.com/a/188046无法使第二页上的其他计数器工作(例如步骤和被引用)。

我知道我应该直接在问题答案下发表评论,但我不能,因为我的声誉没有 50 点。

平均能量损失

\documentclass{beamer}
\usepackage{etoolbox}
\makeatletter
\def\c@slideinframe{\beamer@slideinframe}
\def\beamerslideinframe{\beamer@slideinframe}
\makeatother
\def\AdvCnt{\setcounter{enumi}{\numexpr\arabic{slideinframe}-1\relax}}
\pretocmd{\item}{\AdvCnt}{}{}
\begin{document}
\begin{frame}
\begin{enumerate}
\only<+>{
  \item Item 1 \label{enu:1}
  \begin{equation}
  a+b=c\label{equ:1}
  \end{equation}
}
\only<+>{
  \item Item 2 \label{enu:2}
  \begin{equation}%\refstepcounter{equation}
  d+e=f\label{equ:2}
  \end{equation}
}
\end{enumerate}
\ref{enu:1}, \eqref{equ:1}, \ref{enu:2}, \eqref{equ:2}.
\end{frame}
\end{document}

在此处输入图片描述 在此处输入图片描述

答案1

默认情况下,\label宏将尝试在第一个覆盖层上创建标签。由于您的某些项目/方程式未出现在第一个覆盖层上,因此您会得到未定义的引用。

为了避免这种情况,您可以使用\label<>{...}链接到特定的覆盖:

\documentclass{beamer}

\makeatletter
\def\c@slideinframe{\beamer@slideinframe}
\def\beamerslideinframe{\beamer@slideinframe}
\makeatother
\def\AdvCnt{\setcounter{enumi}{\numexpr\arabic{slideinframe}-1\relax}\setcounter{equation}{\numexpr\arabic{slideinframe}-1\relax}}
\pretocmd{\item}{\AdvCnt}{}{}

\begin{document}
\begin{frame}

\begin{enumerate}
\only<+>{
  \item Item 1 \label{enu:1}
  \begin{equation}
  a+b=c\label{equ:1}
  \end{equation}
}
\only<+>{
  \item Item 2 \label<.>{enu:2}
  \begin{equation}
  d+e=f\label<.>{equ:2}
  \end{equation}
}
\end{enumerate}

\ref{enu:1}, \eqref{equ:1}, \ref{enu:2}, \eqref{equ:2}.
\end{frame}
\end{document}

在此处输入图片描述

恕我直言,您选择一次显示一个项目的方法非常具有侵入性,并且会改变演示文稿中所有项目的行为。我建议采用这种侵入性较小的方法:

\documentclass{beamer}

\begin{document}
\begin{frame}

\begin{enumerate}
\alt<1>{
  \item Item 1 \label{enu:1}
  \begin{equation}
  a+b=c\label{equ:1}
  \end{equation}
}{
  \refstepcounter{enumi}
  \refstepcounter{equation}
  \item Item 2 \label<2>{enu:2}
  \begin{equation}
  d+e=f\label<2>{equ:2}
  \end{equation}
}
\end{enumerate}

\ref{enu:1}, \eqref{equ:1}, \ref{enu:2}, \eqref{equ:2}.
\pause
\end{frame}
\end{document}

相关内容