Estoy escribiendo una prueba por inducción usando split
para alinear los signos de igualdad con precisión uno debajo del otro. Uno de los letreros debe tener "IH" encima para indicar que se ha utilizado la hipótesis de inducción en ese paso. Estoy usando stackrel
para eso. Sin embargo, como \stackrel{IH}{=}
es más ancho que =
, no se alinea bien. Intenté dos cosas con split
(el &
antes o el después del =
signo) y también con alignedat
(pero eso solo funcionaría si la columna central estuviera alineada en el centro, lo cual no es así, está alineada a la izquierda. Vea el ejemplo de código y su resultado:
\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 puede ver, los signos de igualdad y los signos de igualdad con 'IH' encima no están exactamente uno debajo del otro.
Nonecesidadpara usar split
, por lo que las soluciones sin ellas split
también serían perfectas. ¿Cómo puedo hacer que esto funcione?
Respuesta1
Puedes usar \mathmakebox
o \mathclap
(gracias a Andrew) desdemathtools
\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}
Puedes usar align*
también en lugar de equation*
ysplit
\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}
Tenga en cuenta que he cambiado IH
a \mathrm{IH}
. (Gracias a egreg).
Respuesta2
De hecho, las soluciones anteriores no son óptimas porque el ejemplo dado es un caso muy especial: IH
tiene casi el mismo ancho que =
, por lo que no hay problema en el lado derecho. Pero considere lo que sucede cuando necesitamos algo significativamente más grande que IH
, como en
\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*}
¡Entonces la parte derecha de IH,IG,IK,IL
se superpondrá a la fórmula!
Mi solución es definir \leftstackrel
, que se alinea perfectamente a la izquierda pero agrega el espacio en blanco necesario a la derecha para que no se superponga. Aquí está el 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}}}
y se puede utilizar simplemente 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) (heredado \stackrel
), (1.2) ( \stackrel
propuesto anteriormente) y (1.3) ( \leftstackrel
) en la siguiente figura
(fuente:fluxus-virus.com)
Respuesta3
Sugiero tres estrategias. La primera es definir un comando \iheq
que imprima un signo igual con algo de relleno para que tenga el mismo ancho que \overset{\mathrm{IH}}{=}
, que se puede obtener simplemente con \iheq*
.
La segunda estrategia es agregar "(IH)" al 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}
Tercera estrategia: hacer el IH más pequeño y garantizar que tenga un ancho cero.
\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}
Respuesta4
Dado que este es un problema que siempre me molesta, permítanme aportar mi granito de arena.
Una solución que quizás no sea tan elegante, pero que me gusta por su resultado, es utilizar un \phantom
comando para hacer que todos los demás =
signos sean tan grandes y tan altos como el incriminado, como en el siguiente
\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 es el resultado
y funciona también para etiquetas más largas, siempre que se aprecie un gran espacio alrededor del =
cartel.
Tenga en cuenta que, además, se puede combinar con el \mathmakebox
comando from mathtools
para tratar con múltiples etiquetas de diferente longitud, como en el siguiente ejemplo 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*}