beamer 中的计数器随着暂停而改变

beamer 中的计数器随着暂停而改变

我在 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}

在此处输入图片描述

相关内容