我最近需要弥补一些过度和不足的支撑,并在这里找到了解决方案:Beamer:揭开下支架的面纱
然而,我对提供的解决方案并不是 100% 满意,特别是,我的目标是创建命令\underbrace<>{}_{}
,并且\overbrace<>{}^{}
应该像您期望的那样工作,而对覆盖规范或内容没有任何额外的限制。我成功地做到了这一点underbrace
[A],虽然我不知道我的解决方案为什么有效(我很惊讶它有效!)然而,更让我吃惊的是,它不适用于overbrace
!然而,事实证明,只要稍加修改,它就会再次起作用——我再次不明白为什么它在一种情况下完全有效,而在另一种情况下却无效。代码的关键部分是:
% underbrace version A
\onslide<#1>\underbrace{\onslide<1->#2}_{#3}\onslide
% underbrace version B
\underbrace{#2\onslide<#1>}_{#3}\onslide
% overbrace version A
\onslide<#1>\overbrace{\onslide<1->#2}^{#3}\onslide
% overbrace version B
\overbrace{#2\onslide<#1>}^{#3}\onslide
唯一能按预期发挥作用的组合是下支撑版本 B 和上支撑版本 A。但是为什么呢?编辑:我刚才指出,对于\overset
和\underset
,必须反过来做!完整的 MWE:
\documentclass{beamer}
\setbeamercovered{transparent}
\usepackage{xparse}
\DeclareDocumentCommand{\ubraceA}{d<> m e{_}}{%
\IfValueTF{#1}{% IF <overlay-specification> given
\onslide<#1>\underbrace{\onslide<1->#2}_{#3}\onslide
}{% ELSE
\underbrace{#2}_{#3}
}%
}%
\DeclareDocumentCommand{\ubraceB}{d<> m e{_}}{%
\IfValueTF{#1}{% IF <overlay-specification> given
\underbrace{#2\onslide<#1>}_{#3}\onslide
}{% ELSE
\underbrace{#2}_{#3}
}%
}%
\DeclareDocumentCommand{\obraceA}{d<> m e{^}}{%
\IfValueTF{#1}{% IF <overlay-specification> given
\onslide<#1>\overbrace{\onslide<1->#2}^{#3}\onslide
}{% ELSE
\overbrace{#2}^{#3}
}%
}%
\DeclareDocumentCommand{\obraceB}{d<> m e{^}}{%
\IfValueTF{#1}{% IF <overlay-specification> given
\overbrace{#2\onslide<#1>}^{#3}\onslide
}{% ELSE
\overbrace{#2}^{#3}
}%
}%
\begin{document}
\begin{frame}{underA, overA}
\begin{align*}
\ubraceA<5->{p(x\mid y)}_{\text{posterior}}
= \frac{\obraceA<2->{p(y\mid x)}^{\text{likelihood}}
\,\obraceA<3->{p(x)}^{\text{prior}}
}{\ubraceA<4->{p(y)}_{\text{evidence}}}
\end{align*}
\end{frame}
%
\begin{frame}{underA, overB}
\begin{align*}
\ubraceA<5->{p(x\mid y)}_{\text{posterior}}
= \frac{\obraceB<2->{p(y\mid x)}^{\text{likelihood}}
\,\obraceB<3->{p(x)}^{\text{prior}}
}{\ubraceA<4->{p(y)}_{\text{evidence}}}
\end{align*}
\end{frame}
%
\begin{frame}{underB, overA}
\begin{align*}
\ubraceB<5->{p(x\mid y)}_{\text{posterior}}
= \frac{\obraceA<2->{p(y\mid x)}^{\text{likelihood}}
\,\obraceA<3->{p(x)}^{\text{prior}}
}{\ubraceB<4->{p(y)}_{\text{evidence}}}
\end{align*}
\end{frame}
%
\begin{frame}{underB, overB}
\begin{align*}
\ubraceB<5->{p(x\mid y)}_{\text{posterior}}
= \frac{ \obraceB<2->{p(y\mid x)}^{\text{likelihood}}
\,\obraceB<3->{p(x)}^{\text{prior}}
}{\ubraceB<4->{p(y)}_{\text{evidence}}}
\end{align*}
\end{frame}
\end{document}