我有一个下括号(\underbrace{foo}_{bar}
),我想将它揭开(即foo
应该从一开始就存在,而下括号和应该bar
在下一张幻灯片中揭开。我尝试了以下方法,但(毫不奇怪)没有起作用:
\documentclass{beamer}
\begin{document}
\begin{frame}
Without uncover (this is what it should look like on the second subframe):
\begin{displaymath}
\underbrace{foo}_{bar}
\end{displaymath}
With uncover (doesn't work):
\begin{displaymath}
\uncover<2>{\underbrace}{foo}\uncover<2>{_{bar}}
\end{displaymath}
\end{frame}
\end{document}
在第二个中displaymath
,下划线显示在 之前foo
,并bar
作为 的索引foo
,而且下划线立即可见。
请注意,这\only
不是一个解决方案,因为一方面,在我的实际文档中,我使用\setbeamercovered{transparent}
下划线,因此下划线和下面的文本从一开始就应该轻轻可见,另一方面\only
也不会为下划线保留空间。
那么我该如何实现这个目标呢?
答案1
一种方法是使用透明度的定义(背景上 15% 的文本前景,并避免使用建议的“跳跃”这里环境overprint
。
虽然你必须定义你的术语,那是\underbrace
d 两次,在我的快速破解中,透明颜色是上面提到的颜色,因为我没有发现我是否可以以某种方式得到它\usebeamercolor
\documentclass[transparent]{beamer}
\usepackage{amsmath}
\usepackage{cancel}
\begin{document}
\setbeamercovered{transparent}
\begin{frame}%
\begin{overprint}
\onslide<1>\begin{displaymath}
\color{normal text.fg!15!normal text.bg}
\underbrace{\usebeamercolor[fg]{text}foo}_{bar}
\end{displaymath}
\onslide<2>\begin{displaymath}
\underbrace{foo}_{bar}
\end{displaymath}
\end{overprint}
\end{frame}%
\end{document}
并且(感谢@Andrew Stacey)更短的版本只需使用\only
(因为\color
对此很敏感)切换颜色即可
\begin{frame}
\begin{displaymath}
\color{normal text.fg!15!normal text.bg}
\only<2->{\color{normal text.fg}}
\underbrace{\usebeamercolor[fg]{text}foo}_{bar}
\end{displaymath}
\end{frame}
答案2
这是一个仅使用的解决方案\onslide
(因此不需要知道透明度的精确定义):
\documentclass{beamer}
\setbeamercovered{transparent}
\begin{document}
\begin{frame}
\begin{displaymath}
\onslide<2-> \underbrace{ \onslide<1->
foo
\onslide<2-> }_{bar} \onslide<1->
\text{some more stuff for slide 1}
\end{displaymath}
\end{frame}
\end{document}
答案3
根据 Hendrik Vogt 的回答并根据我的需要,我创建了以下命令以使我的生活更轻松:
\newcommand<>{\uncoverubrace}[2]{%
\onslide#3 \underbrace{ \onslide<1->%
#1%
\onslide#3 }_{#2} \onslide<1->%
}
\newcommand<>{\uncoverobrace}[2]{%
\onslide#3 \overbrace{ \onslide<1->%
#1%
\onslide#3 }^{#2} \onslide<1->%
}
现在使用非常简单:
\usepackage{mathtools}
...
\begin{displaymath}
\uncoverubrace<2->{a_i}{\mathclap{\text{$N$ elements}}} =
\frac{
\uncoverobrace<3->{b_j-b_i}{\mathclap{\text{$2N$ items needed}}}
}{2h}
\end{displaymath}
改进空间:允许相对覆盖规范(<+->
)。
答案4
好的,根据超平面的命题,这是的解决方案\overbrace
。如解释的那样Beamer:发现支撑不足和支撑过度的奇怪行为 \overbrace
行为与不同\underbrace
,因此代码需要稍作调整。
\LetLtxMacro{\oldoverbrace}{\overbrace}
\DeclareDocumentCommand{\overbrace}{d<> m e{^}}{%
\IfValueTF{#1}{% IF <overlay-specification> given
% using global onlside flag, cf. p82 beamer manual v3.59
\onslide<#1>\oldoverbrace{\onslide #2}^{#3}\onslide%
}{% ELSE
\oldoverbrace{#2}^{#3}
}%
}%