替换枚举环境中的项目

替换枚举环境中的项目

我正在尝试创建一个带有项目逐项列表的框架。

我希望这些项目在每一帧中被逐一替换,并且使用不同的内容。

基本上,这个想法是显示:

  • 仅在第 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}

这段代码基本没问题,问题是:

  1. 我发现它的构建和维护极其复杂,
  2. 我希望我能提前在列表中预留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

  1. 它显示最后一帧的两倍

删除最后一个\pause(其他所有停顿也是不必要的)

  1. 我希望我能在列表中提前为过度支撑和不足支撑预留空间

您可以通过组合\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}

在此处输入图片描述

相关内容