beamer 的 \only 命令,方程计数器增量不会保留在 \only 之外

beamer 的 \only 命令,方程计数器增量不会保留在 \only 之外

我遇到了一个问题,我使用 beamer 的\only命令,但在 中\only,方程式数字增量无法保留。也就是说,我想这样做

\only<1>{
\begin{align}
  equation 1
\end{align}
}

\only<2>{
\begin{align} 
  equation 2 
\end{align} 
}

问题在于两个方程都显示为方程编号 1,而不是第一个方程是方程 1,第二个方程是方程 2。解决这个问题的一种方法似乎是在\refstepcounter{equation}第一个 only 后面添加 ,但这并不理想,而且它取决于第一个\only环境中有多少个方程(如果定义一个宏,比如在 only 的末尾调用 ,也会出现同样的问题\refstepcounter{equation},即,用户需要跟踪每个 中有多少个方程\only)。

有没有更好的方法可以做到这一点?非常感谢!

答案1

以下代码添加了一个命令,用于从每次覆盖后重置的计数器列表中删除方程计数器。(警告:我不太了解 Beamer 的内部结构,因此它可能会破坏一些我不知道的东西(尽管我做了一些测试)。)只需将定义添加到您的序言中(不要忘记\makeatletter),然后使用示例中的命令即可。

\documentclass{beamer}

\makeatletter
% The following two commands should only be given between frames

% Remove the equation counter from the list of counters that are reset after
% each overlay.
\def\donotresetequations{{%
    \let\@@elt\relax
    \def\@elt##1{%
        \expandafter\ifx\csname ##1\endcsname\c@equation%
        \else%
            \@@elt {##1}%
        \fi%
    }%
    \edef\beamer@overlaycounterresets{\beamer@overlaycounterresets}%
    \let\@elt\relax%
    \def\@@elt{\@elt}%
    \xdef\beamer@overlaycounterresets{\beamer@overlaycounterresets}%
}}

% Add the equation counter from the list of counters that are reset after
% each overlay.
\def\resetequations{\resetcounteronoverlays{equation}}
\makeatother

% Example document
\begin{document}

\begin{frame}
    \only<1>{
        \begin{align}equation\ 1.1\end{align}
    }
    \only<2>{
        \begin{align}equation\ 1.2 \end{align}
    }
\end{frame}

\donotresetequations

\begin{frame}
    \only<1>{
        \begin{align}equation\ 2.1\end{align}
    }
    \only<2>{
        \begin{align}equation\ 2.2\end{align} 
    }
\end{frame}

\resetequations

\begin{frame}
    \only<1>{
        \begin{align}equation\ 3.1\end{align}
    }
    \only<2>{
        \begin{align}equation\ 3.2 \end{align}
    }
\end{frame}
\end{document}

答案2

您可以\alt在需要时使用环境来包含方程式,在不需要时增加计数器:

\documentclass{beamer}

\begin{document}
\begin{frame}
\alt<1>{% do this in frame 1
   \begin{align}
      equation 1
   \end{align}
}{% do this not in frame 1
   \stepcounter{equation}
}

\only<2>{
   \begin{align} 
      equation 2 
   \end{align}
}

\end{frame}

\end{document}

答案3

我想我可能偶然发现了一个不需要对投影仪进行任何修改的答案。它使用了投影仪叠印功能和功能\onslide。关键是您\onslide在没有任何括号的情况下使用该功能(即,如果您将下面的更改为使用\onslide<1>{ stuff goes in here },则示例将无法工作,并且内容将继续占用空间。但是,不使用括号(如命令\only)将不会占用任何空间,但会由于某种原因增加方程式编号。我不确定这是否是投影仪的故意行为,但它似乎有效。

\begin{frame}{test slide}
This is some front text to exist on all slides.
\begin{overprint}
\onslide<1>
this goes on slide 1
\begin{align}
  eq 1
\end{align}
\onslide<2>
this goes on slide 2
\begin{align}
  eq 2
\end{align}
\end{overprint}
\end{frame}

相关内容