Estou compondo uma prova por indução para split
alinhar 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 stackrel
para 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}
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 split
também seriam perfeitas. Como posso fazer isso funcionar?
Responder1
Você pode usar \mathmakebox
ou \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}
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 IH
para \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: IH
tem 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,IL
se 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) ( \stackrel
proposto acima) e (1.3) ( \leftstackrel
) na figura abaixo
(fonte:fluxus-virus.com)
Responder3
Sugiro três estratégias. A primeira é definir um comando \iheq
que 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}
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}
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 \phantom
comando 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
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 \mathmakebox
comando from mathtools
para 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*}