split を使用して stackrel サインを互いに整列させる

split を使用して stackrel サインを互いに整列させる

split私は、等号を正確に下揃えにするために、 を使って帰納法による証明をタイプセットしています。 記号の 1 つには、そのステップで帰納法の仮説が使用されていることを示すために、その上に「IH」を付ける必要がありますstackrel。 そのために を使用しています。 しかし、 は\stackrel{IH}{=}よりも幅が広いため=、うまく整列しません。split(記号の&前または後=)とalignedat(を使用して 2 つのことを試しましたが、これは中央の列が中央揃えになっている場合にのみ機能しますが、中央揃えになっていません。左揃えになっています。 コード例とその出力を参照してください。

\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

または(Andrewに感謝)\mathmakeboxから\mathclapmathtools

\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}

ここに画像の説明を入力してください

andalign*の代わりにalsoを使うこともできる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

形
(ソース:フラクサスウイルス

答え3

私は 3 つの戦略を提案します。1 つ目は、\iheqと同じ幅になるようにいくらかのパディングを加えた等号を出力するコマンドを定義することです。\overset{\mathrm{IH}}{=}これは、 で簡単に取得できます\iheq*

2つ目の戦略は、横に「(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}

ここに画像の説明を入力してください

3 番目の戦略: 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*}

これが結果だ alignwithphantom 看板の周囲に大きなスペースがあれば、長いラベルにも使えます=

さらに、次の異常な例のように、長さの異なる複数のラベルを処理するために、\mathmakeboxfrom コマンドと組み合わせることができることに注意してください。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*}

その結果は alignwithphantomandmathmakebox

関連情報