Выравнивание знаков Stackrel друг под другом с помощью Split

Выравнивание знаков Stackrel друг под другом с помощью Split

Я набираю доказательство по индукции, используя 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(спасибо Эндрю) из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*}

чей результат выравнивание сphantomandmathmakebox

Связанный контент