Alinhando sinais de stackrel uns abaixo dos outros usando divisão

Alinhando sinais de stackrel uns abaixo dos outros usando divisão

Estou compondo uma prova por indução para splitalinhar sinais de igualdade precisamente um abaixo do outro. Um dos sinais deve ter 'IH' no topo para indicar que a hipótese de indução foi utilizada naquela etapa. Estou usando stackrelpara isso. No entanto, como \stackrel{IH}{=}é mais largo que =, ele não se alinha bem. Tentei duas coisas com split( &antes ou depois do =sinal) e também com alignedat(mas isso só funcionaria se a coluna central estivesse alinhada ao centro, o que não é, está alinhada à esquerda. Veja o exemplo de código e sua saída:

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

insira a descrição da imagem aqui

Como você pode ver, os sinais de igualdade e os sinais de igualdade com 'IH' acima dele não estão exatamente abaixo um do outro.

Eu nãoprecisarpara usar split, então soluções sem splittambém seriam perfeitas. Como posso fazer isso funcionar?

Responder1

Você pode usar \mathmakeboxou \mathclap(graças a Andrew) demathtools

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

insira a descrição da imagem aqui

Você align*também pode usar em vez de equation*esplit

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

Observe que mudei IHpara \mathrm{IH}. (Graças a egreg).

Responder2

Na verdade, as soluções acima não são ótimas porque o exemplo dado é um caso muito especial: IHtem quase a mesma largura que =, portanto não há problema no lado direito. Mas considere o que acontece quando precisamos de algo significativamente maior que IH, como em

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

Então a parte direita IH,IG,IK,ILse sobreporá à fórmula!

Minha solução é definir \leftstackrel, que alinha perfeitamente à esquerda, mas adiciona o espaço em branco necessário à direita para que não haja sobreposição. Aqui está o código:

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

e pode ser usado simplesmente como:

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

Compare (1.1) (legado \stackrel), (1.2) ( \stackrelproposto acima) e (1.3) ( \leftstackrel) na figura abaixo

figura
(fonte:fluxus-virus.com)

Responder3

Sugiro três estratégias. A primeira é definir um comando \iheqque imprima um sinal de igual com algum preenchimento para ter a mesma largura que \overset{\mathrm{IH}}{=}, o que pode ser obtido simplesmente com \iheq*.

A segunda estratégia é adicionar “(IH)” ao lado.

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

insira a descrição da imagem aqui

Terceira estratégia: diminuir o IH e garantir largura zero.

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

insira a descrição da imagem aqui

Responder4

Como esse é um problema que sempre me incomoda, deixe-me colocar minha opinião.

Uma solução que pode não ser tão elegante, mas que me agrada pelo seu resultado, é usar um \phantomcomando para deixar todos os outros =sinais tão grandes e tão altos quanto o do incriminado, como no seguinte

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

Este é o resultado alinhar com fantasma e funciona também para etiquetas mais longas, desde que você aprecie um grande espaço ao redor da =placa.

Observe que, além disso, pode ser combinado com o \mathmakeboxcomando from mathtoolspara lidar com múltiplos rótulos de diferentes comprimentos, como no seguinte exemplo patológico:

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

cujo resultado é alinhar com fantasma e matemática fazer caixa

informação relacionada