我在 beamer 中定义了一个计数器。但是当暂停命令发生时,计数器会自动添加。我该怎么做才能使计数器对暂停命令不敏感?以下是用于测试的 tex 代码。
\documentclass[serif,envcountsect]{beamer}
\newcounter{DefNum}
\usecounter{DefNum}
\newcommand{\defi}{\noindent\text{Definition \arabic{DefNum}}\refstepcounter{DefNum}}
\setcounter{DefNum}{1}
\begin{document}
\begin{frame}{test}
\defi
\defi
test hello ~\\ \pause
hello test \pause
\begin{itemize}
\item aa \pause
\item bb \pause
\item cc
\item \defi
\end{itemize}
\defi
\end{frame}
\end{document}
答案1
出现这种行为的原因是,每次执行时,\pause
您实际上都会在生成的 PDF 中创建一个新页面。这意味着,每次\pause
执行时,编译器都会再次循环遍历整个框架。因此,在第一次运行后,计数器处于4,处理下\pause
一个新帧,它将继续5。
这samcarter 的回答是一个优雅的解决方案,以下是一个快速而粗糙的解决方法:
您只需将帧开头的计数器重置为创建第一帧之前的值:
\setcounter{preFrameDefNum}{\value{DefNum}}
\begin{frame}{test}
\setcounter{DefNum}{\value{preFrameDefNum}}
您可以通过以下方式自动执行第一个命令:
\usepackage{etoolbox}
\AtBeginEnvironment{frame}{\setcounter{preFrameDefNum}{\value{DefNum}}}
完整 MWE
\documentclass[serif,envcountsect]{beamer}
\newcounter{DefNum}
\newcounter{preFrameDefNum}
\usecounter{DefNum}
\newcommand{\defi}{\noindent\text{Definition \arabic{DefNum}}\refstepcounter{DefNum}}
\setcounter{DefNum}{1}
\begin{document}
\setcounter{preFrameDefNum}{\value{DefNum}}
\begin{frame}{test}
\setcounter{DefNum}{\value{preFrameDefNum}}
\defi
\defi
test hello ~\\ \pause
hello test \pause
\begin{itemize}
\item aa \pause
\item bb \pause
\item cc
\item \defi
\end{itemize}
\defi
\end{frame}
\end{document}
答案2
如果您不介意的话,我想建议一种替代方法来解决您的实际问题:
Beamer 已经有机制来显示编号定义等。通常它们位于 beamer 块内,但如果您希望它们像您的示例中那样内联,您只需调整它们的定义即可。
\documentclass{beamer}
\usecolortheme{orchid}
\makeatletter
\setbeamertemplate{theorem begin}{%
\inserttheoremname
\inserttheoremnumber
\space
}
\setbeamertemplate{theorem end}{}
\makeatother
\begin{document}
\begin{frame}{A theorem in a box}
\begin{definition}
bla
\end{definition}
\begin{definition}
bla
\end{definition}
test hello ~\\ \pause
hello test \pause
\begin{itemize}
\item aa \pause
\item bb \pause
\item cc
\item \begin{definition}
bla
\end{definition}
\end{itemize}
\begin{definition}
bla
\end{definition}
\end{frame}
\end{document}