我遇到了一个问题,我使用 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}