通过计算值来揭示?

通过计算值来揭示?

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

相关内容