Beamer:揭开下支架的面纱

Beamer:揭开下支架的面纱

我有一个下括号(\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

虽然你必须定义你的术语,那是\underbraced 两次,在我的快速破解中,透明颜色是上面提到的颜色,因为我没有发现我是否可以以某种方式得到它\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}
   }%
}%

相关内容