Beamer 叠加规范说明

Beamer 叠加规范说明

我发现自己越来越多地使用以下针对description环境的覆盖规范。

 The Animal Kingdom
 \begin{description}
   \item[Gnus]   \uncover<+->{these are large cow-like animals}
   \item[Gnats]  \uncover<+->{much smaller than gnus}
 \end{description}

理由很简单。我希望我的观众看到我的动物王国里只有两种动物(而且只有两种)。我还想看看这两种动物的名字。然后,我可以继续阐述,首先是 Gnus,然后是 Gnats。

我很高兴能写出这个,而不必在每个标签后重复覆盖规范,例如

 \begin{description}[itemuncover<+->]
   \item[Gnus]  these are large cow-like animals
   \item[Gnats] much smaller than gnus
 \end{description}

将会扩展为

 \begin{description}
   \item[Gnus]  \begin{uncoverenv}<+->
     these are large cow-like animals
    \end{uncoverenv}
   \item[Gnats] \begin{uncoverenv}<+->
       much smaller than gnus
    \end{uncoverenv}
 \end{description}

答案1

以下应该可以满足您的要求 - 即立即显示所有标签,但逐一显示描述。

\documentclass{beamer}

\newcounter{curItem}
\newenvironment{descriptions}[1]{%
    \setcounter{curItem}{#1}
    \let\olditem\item%
    \renewcommand\item[2]{%
        \stepcounter{curItem}
        \olditem[##1] \mbox{}\visible<\value{curItem}->{##2}%
    }%
    \begin{description}%
}{%
    \end{description}%
}

\begin{document}

\begin{frame}{The Animal Kingdom}
    \begin{descriptions}{1}
        \item{Gnus}{these are large cow-like animals}
        \item{Gnats}{much smaller than gnus}
        \item{Gants}{them}
    \end{descriptions}
\end{frame}
\end{document}

它的工作原理如下:我们定义一个新环境descriptions,其中法线description用于可见性由 自动控制的项目\visible<#->。新环境采用一个参数,允许定义第一个描述是否立即被揭示(即,将参数设置为 或01。* 在新环境中,\item重新定义为采用两个参数,第一个是标签,第二个是描述。 的新定义\item会自动设置一个计数器,然后使用它来控制可见性。

*注意:如果幻灯片上还有其他内容是通过叠加完成的,此参数还允许调整环境。例如,考虑以下情况:

\begin{frame}{The Animal Kingdom}
\only<1-2>{The more complex case of introducing the animal kingdom:}
\only<3->{They are described like this:}
\visible<2->{%
    \begin{descriptions}{3}
        \item{Gnus}{these are large cow-like animals}
        \item{Gnats}{much smaller than gnus}
        \item{Gants}{them}
    \end{descriptions}
}
\visible<2>{are the animals in the kingdom.}
\end{frame}

答案2

我想出了几个技巧。但我不确定它们是否足够强大。这一切都取决于你的文件。

首先让我从一个非常非常简单的例子开始:

\documentclass{beamer}
\begin{document}
\begin{frame}{BEFORE}\only<+>{}
    \begin{description}[<+->]
        \item[A] aa aa aa aa aa aa aa aa
        \item[BB] bbbb bbbb bbbb bbbb bbbb bbbb bbbb bbbb
        \item[CCC] cccccc cccccc cccccc cccccc cccccc cccccc cccccc cccccc
        \item[DDDD] dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd
    \end{description}
\end{frame}

它有一个中间幻灯片:

第一个技巧,就像 greyshade 刚才做的那样,是用\item两个参数声明你自己的命令。通过这样做,你几乎可以做任何事情,因为你抓住第二个参数。例如在我的版本中:

\newcommand\jtem[2][{}]{\only<-.>{\item[#1]{\color{white}#2}}\only<+->{\item[#1]{#2}}}
\begin{frame}{AFTER: j}\only<+>{}
    \begin{description}
        \jtem[A] {aa aa aa aa aa aa aa aa}
        \jtem[BB] {bbbb bbbb bbbb bbbb bbbb bbbb bbbb bbbb}
        \jtem[CCC] {cccccc cccccc cccccc cccccc cccccc cccccc cccccc cccccc}
        \jtem[DDDD] {dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd}
    \end{description}
\end{frame}

请注意,在描述出现之前/之后,名称将被分开\only<-.>{}并允许以不同的格式显示。\only<+->{}

如果我们想\item保持与平常相同的语法,事情就会变得复杂。第二个技巧是交替排版名称部分和描述部分。如下所示:

\newcommand\ktem[1][]{\item<*>[#1]\item<uncover@+->}
\begin{frame}{AFTER: k}\only<+>{}
    \begin{description}
        \ktem[A] aa aa aa aa aa aa aa aa
        \ktem[BB] bbbb bbbb bbbb bbbb bbbb bbbb bbbb bbbb
        \ktem[CCC] cccccc cccccc cccccc cccccc cccccc cccccc cccccc cccccc
        \ktem[DDDD] dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd
    \end{description}
\end{frame}

然后我们将得到一张更稀疏的幻灯片:

有一个简单的方法可以修复它:

\newcommand\ltem[1][]{\item<*>[#1]\item<uncover@+->\vspace*{-16.6pt}}
\begin{frame}{AFTER: l}\only<+>{}
    \begin{description}
        \ltem[A] aa aa aa aa aa aa aa aa
        \ltem[BB] bbbb bbbb bbbb bbbb bbbb bbbb bbbb bbbb
        \ltem[CCC] cccccc cccccc cccccc cccccc cccccc cccccc cccccc cccccc
        \ltem[DDDD] dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd
    \end{description}
\end{frame}

16.6是神奇的数字。此技巧会因字体大小不同、行间距不同或任何其他导致行变高的原因而失败。(但在这种情况下,它看起来不错。)

另一方面,如果您没有多行描述部分,只需复制第一个技巧:

\newcommand\mtem[1][{}]{\item<only@-.>[#1]\item<only@+->[#1]}
\begin{frame}{AFTER: m}\only<+>{}
    \begin{description}
        \mtem[A] aa aa aa aa aa aa aa aa
        \mtem[BB] bbbb bbbb bbbb bbbb bbbb bbbb bbbb bbbb
        \mtem[CCC] cccccc cccccc cccccc cccccc cccccc cccccc cccccc cccccc
        \mtem[DDDD] dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd
    \end{description}
\end{frame}

尽管如此,转移如果描述部分更高。

第三个技巧与颜色有关。重点是动态改变颜色。

\newcommand\ntem[1][{}]{\item[#1]\only<-+>{\color{white}}}
\begin{frame}{AFTER: n}
    \begin{description}
        \ntem[A] aa aa aa aa aa aa aa aa
        \ntem[BB] bbbb bbbb bbbb bbbb bbbb bbbb bbbb bbbb
        \ntem[CCC] cccccc cccccc cccccc cccccc cccccc cccccc cccccc cccccc
        \ntem[DDDD] dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd
    \end{description}\only<+>{}
\end{frame}

当然,如果您在单词之间包含任何颜色命令(例如,\alert或者背景不是白色),它就会失败。

同样地,我们也可以处理不透明度。

\newcommand\otem[1][{}]{\item[\pgfsetfillopacity{1}#1\only<-+>{\pgfsetfillopacity{0}}]}
\begin{frame}{AFTER: o}
    \begin{description}
        \otem[A] aa aa aa aa aa aa aa aa
        \otem[BB] bbbb bbbb bbbb bbbb bbbb bbbb bbbb bbbb
        \otem[CCC] cccccc cccccc cccccc cccccc cccccc cccccc cccccc cccccc
        \otem[DDDD] dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd dddddddd
    \end{description}\only<+>{}
\end{frame}

这是最强大的一个,因为多行、高线和颜色都是无害的。唯一的缺点是它可能与beamer自己的透明效果相冲突,例如第 17.6 节。

最后但是同样重要的:

\end{document}

相关内容