我发现自己越来越多地使用以下针对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<#->
。新环境采用一个参数,允许定义第一个描述是否立即被揭示(即,将参数设置为 或0
)1
。* 在新环境中,\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}