![使用 split 将 stackrel 标志对齐到彼此下方](https://linux22.com/image/476488/%E4%BD%BF%E7%94%A8%20split%20%E5%B0%86%20stackrel%20%E6%A0%87%E5%BF%97%E5%AF%B9%E9%BD%90%E5%88%B0%E5%BD%BC%E6%AD%A4%E4%B8%8B%E6%96%B9.png)
我正在排版归纳证明,使用split
来精确对齐等号。其中一个符号上面应该有“IH”,以表明在该步骤中使用了归纳假设。我使用stackrel
来表示这一点。但是,由于\stackrel{IH}{=}
比 宽=
,因此对齐效果不佳。我尝试了两种方法split
(符号&
之前或之后=
)以及alignedat
(但这仅在中心列居中对齐时才有效,但事实并非如此,它是左对齐的。请参阅代码示例及其输出:
\documentclass{minimal}
\usepackage{amsmath}
\begin{document}
\begin{equation*}
\begin{split}
S_n &= 2^iS_{n-i}+2^i-1\\
&\stackrel{IH}{=} 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&= 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{split}
\end{equation*}
\begin{equation*}
\begin{split}
S_n =& 2^iS_{n-i}+2^i-1\\
\stackrel{IH}{=}& 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
=& 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{split}
\end{equation*}
\begin{equation*}
\begin{alignedat}{2}
S_n &=&& 2^iS_{n-i}+2^i-1\\
&\stackrel{IH}{=}&& 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&=&& 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{alignedat}
\end{equation*}
\end{document}
如您所见,等号和上方带有“IH”的等号并不精确地位于彼此下方。
我不需要使用split
,所以没有的解决方案split
也是完美的。我该如何让它工作?
答案1
您可以使用\mathmakebox
或\mathclap
(感谢 Andrew)mathtools
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{equation*}
\begin{split}
S_n &= 2^iS_{n-i}+2^i-1\\
&\stackrel{\mathmakebox[\widthof{=}]{\mathrm{IH}}}{=} 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&= 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{split}
\end{equation*}
\end{document}
您align*
还可以equation*
使用split
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{align*}
S_n &= 2^iS_{n-i}+2^i-1\\
&\stackrel{\mathclap{\mathrm{IH}}}{=} 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&= 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{align*}
\end{document}
请注意我已改为IH
。\mathrm{IH}
(感谢egreg)。
答案2
事实上,上面的解决方案并不是最佳的,因为给出的示例是一个非常特殊的情况:IH
的宽度几乎与 相同=
,因此右侧没有问题。但考虑一下当我们需要比 大得多的东西时会发生什么IH
,例如
\begin{align*}
S_n &= 2^iS_{n-1}+2^i-1\\
&\stackrel{\mathrm{IH,IG,IK,IL}}{=}2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&= 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{align*}
那么的右边部分IH,IG,IK,IL
就会与公式重叠!
我的解决方案是定义\leftstackrel
,它在左侧完美对齐,但在右侧添加必要的空白,以便不会重叠。以下是代码:
\newlength{\leftstackrelawd}
\newlength{\leftstackrelbwd}
\def\leftstackrel#1#2{\settowidth{\leftstackrelawd}%
{${{}^{#1}}$}\settowidth{\leftstackrelbwd}{$#2$}%
\addtolength{\leftstackrelawd}{-\leftstackrelbwd}%
\leavevmode\ifthenelse{\lengthtest{\leftstackrelawd>0pt}}%
{\kern-.5\leftstackrelawd}{}\mathrel{\mathop{#2}\limits^{#1}}}
并且可以简单地用作:
\begin{align*}
S_n &= 2^iS_{n-1}+2^i-1\\
&\leftstackrel{\mathrm{IH,IG,IK,IL}}{=}2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&= 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{align*}
比较下图中的(1.1)(遗留\stackrel
)、(1.2)(\stackrel
上面提出的)和 (1.3)( )\leftstackrel
(来源:fluxus-virus.com)
答案3
我建议三种策略。第一种是定义一个命令\iheq
,打印一个等号,并添加一些填充,使其宽度与 相同\overset{\mathrm{IH}}{=}
,这可以简单地通过 获得\iheq*
。
第二种策略是在侧面添加“(IH)”。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\NewDocumentCommand{\iheq}{s}{%
\overset{\IfBooleanTF{#1}{\mathrm{IH}}{\hphantom{\mathrm{IH}}}}{=}%
}
\begin{document}
\begin{equation*}
\begin{split}
S_n &\iheq 2^iS_{n-i}+2^i-1\\
&\iheq* 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&\iheq 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{split}
\end{equation*}
\begin{equation*}
\begin{aligned}
S_n &= 2^iS_{n-i}+2^i-1\\
&= 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1 && \makebox[0pt][l]{(IH)}\\
&= 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{aligned}
\end{equation*}
\end{document}
第三种策略:使IH更小并确保其宽度为零。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\NewDocumentCommand{\iheq}{s}{%
\IfBooleanTF{#1}{\overset{\IH}{=}}{=}%
}
\NewDocumentCommand{\IH}{}{%
\hidewidth\scriptscriptstyle\mathrm{IH}\hidewidth
}
\begin{document}
\begin{equation*}
\begin{split}
S_n &\iheq 2^iS_{n-i}+2^i-1\\
&\iheq* 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
&\iheq 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{split}
\end{equation*}
\end{document}
答案4
由于这个问题每次都困扰着我,所以请允许我发表一下我的看法。
一个解决方案可能不是那么优雅,但我喜欢它的结果,就是使用命令\phantom
使所有其他=
标志与被控标志一样大、一样高,如下所示
\begin{align*}
S_n & \stackrel{\phantom{\mathrm{IH}}}{=} 2^iS_{n-i}+2^i-1 \\
& \stackrel{\mathrm{IH}}{=} 2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
& \stackrel{\phantom{\mathrm{IH}}}{=} 2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{align*}
这就是结果
它也适用于较长的标签,只要您喜欢
=
标志周围的大空间即可。
请注意,此外,它还可以与\mathmakebox
from 命令结合使用mathtools
,以处理不同长度的多个标签,如下面的病理示例:
\begin{align*}
S_n & \stackrel{\phantom{\mathrm{IH,(3.14)}}}{=}
2^iS_{n-i}+2^i-1 \\
& \stackrel{\mathrm{IH}}{\mathmakebox[\widthof{$\stackrel{\mathrm{IH,(3.14)}}{=}$}]{=}}
2^i(2^1S_{n-i-1}+2^1-1)+2^i-1\\
& \stackrel{\mathrm{IH,(3.14)}}{=}
2^{i+1}S_{n-i-1}+2^{i+1}-1
\end{align*}