在 Beamer 中,我需要让文本和/或图片的部分以循环的方式周期性地出现,每个部分在这个循环内都有不同的开始和结束。
这是我通常使用的代码类型。
\uncover<5-8,17-20,29-32>{First,} \uncover<7-14,19-26,31-38>{second.}
我想参数化这些值,以便上面的代码看起来像这样:
\def\startLoop{4}
\def\nLoop{12}
\def\startA{1}
\def\stopA{4}
\def\startB{3}
\def\stopB{10}
\uncover<{\startLoop+\startA} - {\startLoop+\stopA} , {\startLoop+\startA+\nLoop} - {\startLoop+\stopA+\nLoop}, {\startLoop+\startA+2*\nLoop} - {\startLoop+\stopA+2*\nLoop}>{First,} \uncover<{\startLoop+\startB} - {\startLoop+\stopB} , {\startLoop+\startB+\nLoop} - {\startLoop+\stopB+\nLoop}, {\startLoop+\startB+2*\nLoop} - {\startLoop+\stopB+2*\nLoop}>{second.}
有没有什么办法可以计算出揭露结果?
答案1
我们可以用 eTeX 原语在扩展处理器级别准备参数\expanded
,然后运行\uncover
宏。改用\euncover
,\uncover
它表示“评估揭示”。
\def\startLoop{4}
\def\nLoop{12}
\def\startA{1}
\def\stopA{4}
\def\startB{3}
\def\stopB{10}
\def\euncover<#1>{\expandafter\uncover\expanded{<\euncoverA#1\end>}}
\def\euncoverA#1#2{\the\numexpr#1\relax
\ifx\end#2\else #2\expandafter\euncoverA\fi}
\euncover<{\startLoop+\startA} - {\startLoop+\stopA} , {\startLoop+\startA+\nLoop} - {\startLoop+\stopA+\nLoop}, {\startLoop+\startA+2*\nLoop} - {\startLoop+\stopA+2*\nLoop}>{First,}
\euncover<{\startLoop+\startB} - {\startLoop+\stopB} , {\startLoop+\startB+\nLoop} - {\startLoop+\stopB+\nLoop}, {\startLoop+\startB+2*\nLoop} - {\startLoop+\stopB+2*\nLoop}>{second.}
答案2
我将在揭示宏之前计算值,例如
\documentclass{beamer}
\newcounter{counta}
\newcounter{countb}
\begin{document}
\begin{frame}
\def\startLoop{4}
\def\nLoop{12}
\def\startA{1}
\def\stopA{4}
\def\startB{3}
\def\stopB{10}
\setcounter{counta}{\numexpr\startLoop+\startA}
\setcounter{countb}{\numexpr\startLoop+\stopA}
\uncover<\thecounta-\thecountb>{second.}
\end{frame}
\end{document}