字母与字母在同一空格处

字母与字母在同一空格处

我在 Beamer 演示文稿的不同叠加幻灯片中,公式模式下的字母 y 被 \alert{z} 更改。为了创建叠加幻灯片,我使用了\only<1>{}\only<2>{},因此唯一的变化是更改了该字母。似乎两个字母占用不同的空间,然后公式的其余部分在从一张幻灯片传递到另一张幻灯片时会移动。如何解决这个问题?

答案1

当您将一个字母更改为另一个字母时,两个方面可能会发生变化:深度和/或高度以及宽度。对于深度/高度,您可以直接使用\vphantom{...}。对于宽度,您必须进行测量以了解哪个最宽,然后将每个放入适当大小的框中。

为了方便起见,这里有一个小宏可以自动完成所有这些操作:

\documentclass{beamer}
\usepackage{calc}
\usepackage{mathtools}
\newlength{\letterwidth}
\newcommand{\mathmakeboxlargestof}[3]{%
% #1 = first symbol
% #2 = second symbol
% #3 = what is printed
  \setlength{\letterwidth}{\maxof{\widthof{$#1$}}{\widthof{$#2$}}}%
  \mathmakebox[\letterwidth]{\vphantom{#1}\vphantom{#2}#3}%
}
\begin{document}
\begin{frame}{Title}
$x+\only<1>{\mathmakeboxlargestof{y}{\alert{z}}{y}}\only<2>{\mathmakeboxlargestof{y}{\alert{z}}{\alert{z}}}=1$
\end{frame}
\end{document}

该宏\mathmakeboxlargestof将第一个字母(例如y)作为第一个参数,将第二个字母(例如\alert{z})作为第二个参数,将要打印的内容(例如y\alert{z}或任何您喜欢的内容)作为第三个参数。

答案2

Philippe 给出了一个很好的答案。为了更轻松地使用他的\mathmakeboxlargestof,您可以使用以下包装器\replace

\documentclass{beamer}
\usepackage{calc}
\usepackage{mathtools}
\newlength{\letterwidth}
\newcommand{\mathmakeboxlargestof}[3]{%
    \setlength{\letterwidth}{\maxof{\widthof{$#1$}}{\widthof{$#2$}}}%
    \mathmakebox[\letterwidth]{\vphantom{#1}\vphantom{#2}#3}%
}
\makeatletter
\newcommand\replace{}
\def\replace<#1>#2#3{%
    \only<#1>{\mathmakeboxlargestof{#2}{#3}{#2}}%
    \only<\number\numexpr#1+1>{\mathmakeboxlargestof{#2}{#3}{#3}}%
    }
\makeatother
\begin{document}
\begin{frame}{Title}
$x + \replace<1>{y}{\alert{z}} = 1$
\end{frame}
\end{document}

该宏接受\replace一个数字和另外两个参数。第一个参数放在幻灯片编号 上,第二个参数放在幻灯片编号 上。n<>nn+1

相关内容