我想用命令在 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
\minx
,\min
在宽度为 的框中右对齐的\max
。\minxx
,即\min
在\llap
a 末尾的 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}