自动叠加规范在投影机中如何工作?

自动叠加规范在投影机中如何工作?

我曾尝试阅读优秀的 Beamer 用户指南,但未能理解。

我理解基本思想:有一个计数器beamerpauses,它由覆盖规范内部的 推进+。例如,您可以写入\item<+>,您将获得一个仅显示当前值为 beamerpauses 的幻灯片的项目。此外,beamerpauses 会增加一。

到目前为止一切都很好。

可以这样写\item<.>。这样可以打开 beamerpauses 的先前值 (-1) 的项目,并且不会增加计数器。

伟大的。

现在这里发生了什么(经过编辑以便做一些有趣的事情:)

\only<.(2)-+(6)>{\alert<+->{foo}\alert<+->{bar}} \only<-.(2)>\alert<-+>{BAR}\alert<-+(1)>{FOO}}
      (1)          (2)            (3)                (4)                         (5)

它是否等同于

 \only<3-7>{\alert<2->{foo}\alert<3->{bar}}\only<-6>\alert<-5>{BAR}\alert<-7>{FOO}}

具体来说:(1) 处的增量何时发生?在处理两个参数之前还是之后?在评估 (4) 和 (5) 时,(2) 和 (3) 处的增量是否会影响计数器?

在这种情况下,计数器如何变化?它在每个点的值是多少?我如何才能找到答案?我尝试过书写,\thebeamerpauses但这个计数器似乎没有随着幻灯片而变化。是否有一个计数器可以保存幻灯片编号?

答案1

增量叠加规范的规则如下:

  1. \beamerpauses最初设置为 1
  2. 如果+在覆盖规范中遇到,则所有出现的+都会被替换为\beamerpauses,然后\beamerpauses增加
  3. 如果.在覆盖规范中遇到,则所有出现的.都会被替换为\beamerpauses-1;\beamerpauses不会改变

如果你假设这一点可能会更容易理解,据我所知,这是等价的:

  1. \beamerpauses最初设置为 0
  2. 如果+在覆盖规范中遇到,\beamerpauses则递增,并且所有出现的都+被替换为\beamerpauses
  3. 如果.在覆盖规范中遇到,则所有出现的.都会被替换为\beamerpauses\beamerpauses不会改变

如果你也假设这\alt是聪明的,并且吞噬了不活跃的论点,而不是扩展它,你会猜到

\alt<-+>{\alert<+>{foo}\alert<+>{bar}}{\alert<.>{bar}\alert<.>{foo}}

是相同的

\alt<-1>{\alert<+>{foo}\alert<+>{bar}}{\alert<.>{bar}\alert<.>{foo}}

在幻灯片 1 上,第一个参数\alert<+>{foo}\alert<+>{bar}被展开,结果为

\alert<2>{foo}\alert<2>{bar}

在第 1 张幻灯片之后,第二个参数\alert<.>{bar}\alert<.>{foo}被扩展,结果是

\alert<1>{bar}\alert<1>{foo}

因此总的来说,这个组合相当于

\alt<-1>{\alert<2>{foo}\alert<2>{bar}}{\alert<1>{bar}\alert<1>{foo}}

将它们放在同一框架中,您会看到它们执行相同的操作。

表示-间隔,因此<2-4>表示“在幻灯片 2 到 4 上”。如果没有明确的端点,则将替换第一张和最后一张幻灯片。因此,第一个<-+>规范相当于<1-1>,而这又相当于<1>

一张张幻灯片下来,我们得到:

  1. 扩展,因为是 1 \alt,所以与\alert<2>{foo}\alert<2>{bar}\beamerpauses{foo}{bar}

  2. 展开\alt\alert<1>{bar}\alert<1>{foo}因为\beamerpauses2 与 相同{bar}{foo}

高级增量叠加规范涉及\beamerpauses用括号中的数字进行偏移,例如\alert<.(2)->{foo}\alert<+->{bar},这将首先提醒,bar然后提醒foobar。这就是您可以让框架的各个部分(例如,tikzpictures 的各个部分)动态更改的方式,而无需让它们都按照框架上排版的顺序排列,或者对幻灯片编号进行硬编码。

编辑Yossi 问道这是否\alt真的是“智能”。如果你查看源代码,beamerbaseoverlay.sty你会发现:

%
% \alt and \altenv
%
\def\alt{\@ifnextchar<{\beamer@alt}{\beamer@alttwo}}
\long\def\beamer@alttwo#1#2{\beamer@ifnextcharospec{\beamer@altget{#1}{#2}}{#1}}
\long\def\beamer@altget#1#2<#3>{%
  \def\beamer@doifnotinframe{#2}\def\beamer@doifinframe{#1}%
  {\beamer@masterdecode{#3}}\beamer@donow}
\long\def\beamer@alt<#1>#2#3{%
  \def\beamer@doifnotinframe{#3}\def\beamer@doifinframe{#2}%
  {\beamer@masterdecode{#1}}\beamer@donow}

\alt<#1>{#2}{#3}在我看来, 的效果就像#2#3保存在宏中,这些宏会根据是否#1适用于当前框架而扩展。我不完全理解扩展,但我相信当\def扫描参数文本时,它不会扩展该文本直到替换点(与 不同\edef,它会在将参数文本分配给 之前扩展它#n)。所以是的,\alt是“智能的”,因为有条件包含的文本在被包含之前不会扩展。我想你可以做一个\tracingall来确定。

拐弯处危险 后期编辑

忍不住粘贴了我现在正在处理的这个框架。

\begin{frame}[label=integral-of-x]{Example: Integral of $x$}
\begin{example}<+->
Find $\int_0^3 x\,dx$
\end{example}
\begin{solution}<+->
\action<.->{For any $n$ we have $\alert<.(5)>{\Delta x = \frac{3}{n}}$ and for each $i$ between $0$ and $n$, $\alert<.(4)>{x_i = \frac{3i}{n}}$.}
\action<+->{For each $i$, take $x_i$ to represent the function on the $i$th interval.}
\action<+->{So}
\begin{align*}
    \action<.->{\int_0^3 x\,dx = \lim_{n\to\infty} R_n }
        \action<+->{&= \lim_{n\to\infty} \sum_{i=1}^n \alert<.(1)>{f(x_i)}\,\alert<.(2)>{\Delta x}}
        \action<+->{ = \lim_{n\to\infty}\sum_{i=1}^n 
            \alert<.>{\left(\frac{\alert<.(2)>{3}i}{\alert<.(2)>{n}}\right)}
            \alert<+>{\left(\frac{\alert<.(1)>{3}}{\alert<.(1)>{n}}\right) }\\}
        \action<+->{&= \lim_{n\to\infty}\alert<.>{\frac{9}{n^2}} \alert<.(1)>{\sum_{i=1}^n i}}
        \action<+->{ = \alert<.(1)>{\lim_{n\to\infty}}\frac{9}{\alert<.(1)>{n^2}} 
            \cdot \alert<.>{\frac{\alert<.(1)>{n(n+1)}}{2}}}
        \action<+->{= \frac{9}{2}\alert<.>{\cdot 1}}
\end{align*}
\end{solution}
\end{frame}

示例代码输出

答案2

从下面的简单示例中可以看出,内部\alert正在\alt决定第二张幻灯片应该是什么,并且这会覆盖第二个参数\alt认为它应该是什么的内容。

\alt<+->{%
  \alert<+>{foo} bar%
}
{barfoo}

相关内容