我尝试让 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
。