我正在尝试创建一个带有项目逐项列表的框架。
我希望这些项目在每一帧中被逐一替换,并且使用不同的内容。
基本上,这个想法是显示:
- 仅在第 1 帧:项目 1
- 从第 2 帧开始:项目 1 被其他内容替换
- 仅在第 3 帧:项目 2
- 从第 4 帧开始:项目 2 被其他内容替换
- 仅在第 5 帧:项目 3
- 从第 6 帧开始:项目 3 被其他内容替换
以下是第 1、2 和 3 帧内容的示例:
\begin{enumerate}
\item $x$
\item $\lambda x \cdot x$
\item $(x)y$
\end{enumerate}
以下是第 4、5 和 6 帧内容的示例:
\begin{enumerate}
\item $\overbrace{x}^\text{\strut Variable}$
\item $\overbrace{\overbrace{\lambda}^\text{\strut Symbole} \underbrace{x}_\text{\strut Paramètre} \overbrace{\cdot}^{\mathrlap{\text{\strut Séparateur}}} \underbrace{x}_{\mathrlap{\text{\strut Expression de retour}}}}^\text{Abstraction}$
\item $\overbrace{\underbrace{(x)}_\text{\strut Abstraction}\quad \underbrace{y}_\text{\strut Paramètre}}^\text{Application}$
\end{enumerate}
在发布此消息之前我尝试了很多方法,但无法找到适当的折衷方案,总是出现问题。
我想到最后的例子是:
\begin{enumerate}
\item<1-> \alt<1-3>{$x$}{$\overbrace{x}^\text{\strut Variable}$}
\item<2-> \alt<2-4>{$\lambda x \cdot x$}{$\overbrace{\overbrace{\lambda}^\text{\strut Symbole} \underbrace{x}_\text{\strut Paramètre} \overbrace{\cdot}^\text{\strut Séparateur} \underbrace{x}_\text{\strut Expression de retour}}^\text{Abstraction}$}
\item<3-6> \alt<3-5>{$(x)y$}{$\overbrace{\underbrace{(x)}_\text{\strut Abstraction}\quad \underbrace{y}_\text{\strut Paramètre}}^\text{Application}$}
\end{enumerate}
这段代码基本没问题,问题是:
- 我发现它的构建和维护极其复杂,
- 我希望我能提前在列表中预留
overbrace
和的位置underbrace
你知道我该如何解决这一切吗?
提前致谢。
答案1
您的问题似乎是一个 xy 问题。
- 从第 2 帧开始:项目 1 被其他内容替换
您的实际用例似乎并没有替换项目 1,而是向项目 1 中添加了内容。
因此,您可以调整等式中不同部分的颜色,而不是使用覆盖层。这样可以避免在添加括号时首先出现的元素改变其位置:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{enumerate}
\item<1-> \only<1>{\color{bg}}
$\overbrace{\textcolor{normal text.fg}{x}}^\text{\strut Variable}$\pause
\item<3-> \only<3>{\color{bg}}
$\overbrace{\overbrace{\textcolor{normal text.fg}{\lambda}}^\text{\strut Symbole} \underbrace{\textcolor{normal text.fg}{x}}_\text{\strut Paramètre} \overbrace{\textcolor{normal text.fg}{\cdot}}^\text{\strut Séparateur} \underbrace{\textcolor{normal text.fg}{x}}_\text{\strut Expression de retour}}^\text{Abstraction}$\pause
\item<5-6> \only<5>{\color{bg}}
$\overbrace{\underbrace{\textcolor{normal text.fg}{(x)}}_\text{\strut Abstraction}\quad \underbrace{\textcolor{normal text.fg}{y}}_\text{\strut Paramètre}}^\text{Application}$
\end{enumerate}
\end{frame}
\end{document}
答案2
谢谢@samcarter-is-at-topanswers-xyz谁提供了解决方案。
最后我修改了一些顺序,我不知道该\visible
命令。
\begin{enumerate}
\item \only<1-3>{$x$}\visible<4->{$\overbrace{x}^\text{\strut Variable}$}
\item \only<2-4>{$\lambda x \cdot x$}\visible<5->{$\overbrace{\overbrace{\lambda}^{\mathrlap{\text{\strut Symbole}}} \underbrace{x}_{\mathrlap{\text{\strut Paramètre}}} \overbrace{\cdot}^{\mathrlap{\text{\strut Séparateur}}} \underbrace{x}_{\mathrlap{\text{\strut Expression de retour}}}}^\text{Abstraction}$}
\item \only<3-5>{$(x)y$}\visible<6->{$\overbrace{\overbrace{(x)}^{\mathrlap{\text{\strut Abstraction}}} \underbrace{y}_{\mathrlap{\text{\strut Paramètre}}}}^\text{Application}$}
\end{enumerate}
答案3
- 它显示最后一帧的两倍
删除最后一个\pause
(其他所有停顿也是不必要的)
- 我希望我能在列表中提前为过度支撑和不足支撑预留空间
您可以通过组合\only
和\visible
宏来实现这一点,如下所示:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{enumerate}
\item \only<1>{$x$}\visible<2->{$\overbrace{x}^\text{\strut Variable}$}
\item \only<3>{$\lambda x \cdot x$}\visible<4->{$\overbrace{\overbrace{\lambda}^\text{\strut Symbole} \underbrace{x}_\text{\strut Paramètre} \overbrace{\cdot}^\text{\strut Séparateur} \underbrace{x}_\text{\strut Expression de retour}}^\text{Abstraction}$}
\item \only<5>{$(x)y$}\visible<6->{$\overbrace{\underbrace{(x)}_\text{\strut Abstraction}\quad \underbrace{y}_\text{\strut Paramètre}}^\text{Application}$}
\end{enumerate}
\end{frame}
\end{document}