每帧触发 \addtocounter(不是幻灯片!)

每帧触发 \addtocounter(不是幻灯片!)

我尝试让 Beamer 自动将我的演示文稿的总播放时间添加到注释中。但是,计数器似乎是在每张幻灯片上触发,而不是每帧。

\documentclass[14pt]{beamer}
\newcounter{lessontime}
\newcounter{activitytime}

\begin{document}

\begin{frame}{Frame 1}
\setcounter{activitytime}{10}
\addtocounter{lessontime}{\value{activitytime}}
\only<1>{One}
\only<2>{Two}
\only<3>{Three}
\end{frame}

\begin{frame}{Frame 2}
\setcounter{activitytime}{5}
\addtocounter{lessontime}{\value{activitytime}}
Total time is \thelessontime. It should be 15.
\end{frame}

\end{document}

实际\thelessontime是 35(10*3+5),但我希望是 15(10+5)。

有没有办法\addtocounter每隔一段时间触发一次框架而不是每张幻灯片一次?

答案1

借助计数器,\beamer@slideinframe您可以将命令限制在第一张幻灯片中:

\documentclass[14pt]{beamer}
\newcounter{lessontime}
\newcounter{activitytime}

\makeatletter
\newcommand{\addtime}[1]{%
    \ifnum\the\beamer@slideinframe=1%
        \setcounter{activitytime}{#1}%
        \addtocounter{lessontime}{\value{activitytime}}%
    \fi%
}
\makeatother

\begin{document}

\begin{frame}{Frame 1}
\addtime{10}%
\only<1>{One}
\only<2>{Two}
\only<3>{Three}
\end{frame}

\begin{frame}{Frame 2}
\addtime{5}%
Total time is \thelessontime. It should be 15.
\end{frame}

\end{document}

答案2

也许你应该换一种方式来处理这个问题。不要将计数器设置和添加作为 的一部分frame,而是将其设置在 之外frame

\documentclass{beamer}

\newcounter{lessontime}
\newcommand{\activitytime}[1]{\addtocounter{lessontime}{#1}}

\begin{document}

\activitytime{10}
\begin{frame}{Frame 1}
  \only<1>{One}
  \only<2>{Two}
  \only<3>{Three}
\end{frame}

\activitytime{5}
\begin{frame}{Frame 2}
  Total time is \thelessontime. It should be 15.
\end{frame}

\end{document}

根据您的示例,我通过宏稍微简化了输入\activitytime{<time>},默认将其添加<time>到计数器lessontime

相关内容