Beamer 中的动画方程

Beamer 中的动画方程

我想用命令在 Beamer 中为方程式制作动画\alt。不幸的是,两个方程式之间存在一些“移动”。请考虑以下示例:

\documentclass{beamer}

\begin{document}
\begin{frame}<-2>{Example}
\[\alt<1>{\max}{\min}(1,2)=\alt<1>{2}{1}\]
\end{frame}
\end{document}

然后,我的\max\min命令的长度并不完全相同。因此,=例如符号(还有(1,2))在幻灯片 1 和 2 之间移动。

有办法避免这种情况吗?

答案1

  1. \minx\min在宽度为 的框中右对齐的\max
  2. \minxx,即\min\llapa 末尾的 ed \hphantom{\max}

使用该mathtools包,人们可以\llap\mathllap\makebox来替换\mathmakebox

\max如果/\min前面有任何内容,则需要额外小心,因为\hphantom\widthof会将该内容隐藏在\max和中\min

代码

\documentclass{beamer}
\usepackage{mathtools}
\newcommand*{\minx}{%
    \mathmakebox[\widthof{$\max$}][r]{\min}%
}
\newcommand*{\maxx}{%
    {\max}%
}
\newcommand*{\minxx}{%
    \hphantom{\max}\mathllap{\min}%
}
\begin{document}
\begin{frame}<-2>{Example}
\[
\alt<1>{{\max}}{\minx}(1,2) = \alt<1>{2}{1}
\]
\[
\alt<1>{{\max}}{\minxx}(1,2) = \alt<1>{2}{1}
\]
\[
\alt<1>{\maxx}{\minxx}(1,2) = \alt<1>{2}{1}
\]
\[
\max(1,2) = 2
\]
\[
\minx(1,2) = 1
\]
\end{frame}
\end{document}

答案2

这是诀窍:

\documentclass{beamer}
\newlength{\widthofamin}

\begin{document}
\begin{frame}<-2>{Example}

\settowidth{\widthofamin}{$\min$}

\[\hspace{-\widthofamin}\alt<1>{\phantom{\min}\max}{\phantom{\max}\min}(1,2)=\alt<1>{2}{1}\]

% Even inline, there's no extra space : $\hspace{-\widthofamin}\alt<1>{\phantom{\min}\max}{\phantom{\max}\min}(1,2)=\alt<1>{2}{1}$\\
% if you compare with $\alt<1>{\phantom{\min}\max}{\phantom{\max}\min}(1,2)=\alt<1>{2}{1}$.
\end{frame}
\end{document}

\max此方法在 前面添加一个虚拟\min,反之亦然,以确保两者都右对齐到相等。但副作用是在等式前面添加了空格,我们用 来修复它\hspace

额外的空间?

我确信使用\savebox和朋友可以找到一种不太麻烦的解决方案,但我对这些命令不够熟悉,无法为您建立示例。

答案3

我尝试使用下面@Qrrbrbirlbel 的回答编写一个宏。我不得不使用该\mathmakebox版本来指定长度并添加 vphantom 以防止幻灯片垂直跳跃。希望有人觉得它有用!

\documentclass{beamer}
\usepackage{mathtools}
\usepackage{calc}

\begin{document}

\newcommand*{\maxwidthof}[2]{\maxof{\widthof{#1}}{\widthof{#2}}}
\newcommand<>*{\robustalt}[2]{
  \alt#3
    {\makebox[\maxwidthof{#1}{#2}]{#1}}
    {\makebox[\maxwidthof{#1}{#2}]{#2}}
}
\newcommand*{\maxwidthofm}[2]{\maxof{\widthof{$#1$}}{\widthof{$#2$}}}
\newcommand<>*{\robustaltm}[2]{
  \alt#3
  {\mathmakebox[\maxwidthofm{#1}{#2}]{#1}\vphantom{#1#2}}
    {\mathmakebox[\maxwidthofm{#1}{#2}]{#2}\vphantom{#1#2}}
}

\begin{frame}%
  \[
    \robustaltm<1>{\max}{\min}(1,2) = \robustaltm<1>{2}{1}.
  \]
  x $\robustaltm<1>{\alpha}{\underbrace{\alpha}_{\rm apples}}$ \uncover<1-3>{done.}\\
  x \robustalt<1>{apples}{oranges} \uncover<1-2>{done.}
\end{frame}%

\end{document}

相关内容