Alinear los letreros de stackrel uno debajo del otro usando división

Alinear los letreros de stackrel uno debajo del otro usando división

Estoy escribiendo una prueba por inducción usando splitpara 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 stackrelpara 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}

ingrese la descripción de la imagen aquí

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 splittambién serían perfectas. ¿Cómo puedo hacer que esto funcione?

Respuesta1

Puedes usar \mathmakeboxo \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}

ingrese la descripción de la imagen aquí

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 IHa \mathrm{IH}. (Gracias a egreg).

Respuesta2

De hecho, las soluciones anteriores no son óptimas porque el ejemplo dado es un caso muy especial: IHtiene 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,ILse 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) ( \stackrelpropuesto anteriormente) y (1.3) ( \leftstackrel) en la siguiente figura

cifra
(fuente:fluxus-virus.com)

Respuesta3

Sugiero tres estrategias. La primera es definir un comando \iheqque 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}

ingrese la descripción de la imagen aquí

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}

ingrese la descripción de la imagen aquí

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 \phantomcomando 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 alinear con fantasma 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 \mathmakeboxcomando from mathtoolspara 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*}

cuyo resultado es alinear con fantasma y matemáticas hacer caja

información relacionada