Subíndices, superíndices y espaciado

Todo el espaciado matemático de LaTeX sale de tres números. Están en las tres últimas líneas de fontmath.ltx: \thinmuskip=3mu, \medmuskip=4mu plus 2mu minus 4mu, \thickmuskip=5mu plus 5mu. Fino, medio y grueso —3, 4 y 5— fijan tanto los huecos alrededor del + de a+b como los del = de a=b. Y el espacio medio puede encogerse 4 mu enteros, es decir, desaparecer del todo, algo que pocas referencias se molestan en señalar. Esta página expone las reglas del superíndice ^ y el subíndice _, y junto a ellas las anchuras medidas de \,, \:, \;, \!, \quad y \qquad. Tanto si ha llegado buscando cómo ajustar el espaciado de una fórmula como persiguiendo un error ! Double superscript, la respuesta está aquí.

^ y _ afectan a un solo token

En modo matemático, ^ produce un superíndice y _ un subíndice, pero cada uno afecta solo al token que sigue: un carácter o una orden. Para elevar o bajar más, agrúpelo con llaves { }. Lo incómodo es que olvidarlas no es un error. x^{10} convierte todo el «10» en exponente, mientras que x^10 sin llaves eleva solo el «1» y deja el «0» a tamaño pleno sobre la línea base. Compila en silencio, así que es el tipo de fallo que se descubre ya impreso. Que la mano lo automatice: llaves alrededor de cualquier índice de más de un carácter.

latex
$x^{10}$    % the whole 10 is the exponent
$x^10$      % only the 1 is raised; the 0 stays full size
$a_{ij}$    % ij together as one subscript
$2^{n+1}$   % n+1 as one exponent
$x_i^2$     % both scripts; the order does not matter

Un mismo símbolo puede llevar superíndice y subíndice a la vez. Escriba x_i^2 o x^2_i: LaTeX los apila igual en cualquier orden. Los índices también se anidan, pero cada nivel necesita sus propias llaves: en x^{y^z}, z es el exponente de y y todo y^z es el exponente de x. Sin llaves, x^y^z provoca el error de la sección siguiente. Tenga en cuenta que en grandes operadores como \sum y \lim, ^ y _ pueden pasar justo encima y justo debajo del símbolo, y que \limits / \nolimits fuerzan la posición; ese comportamiento es del operador y lo cubre la página de sumas, integrales y grandes operadores.

! Double superscript. y ! Double subscript.

Es el error que se obtiene al poner dos veces un superíndice sobre la misma base. Compile $x^y^z$ y pdfLaTeX de TeX Live 2024 se detiene con ! Double superscript.; en los subíndices, $x_i_j$ da ! Double subscript. Ambos significan «esta base ya tiene un índice». La solución es escribir el anidamiento que quería, con llaves: x^{y^z} hace de z el exponente de y, mientras que {x^y}^z eleva todo x^y a la potencia z. Ambas cosas difieren matemáticamente, así que poner una llave donde casualmente calla el error cambia lo que dice la fórmula.

La prima de la derivada, f'(x), y por qué f^' está mal

Basta con teclear el apóstrofo '. Ya es un superíndice, así que nunca añada un ^ propio. En latex.ltx el ' se convierte en carácter activo dentro de las fórmulas y se expande a ^\bgroup\prim@s; medidos, f'(x) y f^{\prime}(x) dan ambos 22,27089 pt, idénticos. Dos primas son f''(x); tres, f'''(x). Lo curioso es que el mecanismo se traga un ^ que venga detrás: f'^2 no da error y se compone a 12,76395 pt, exactamente como f^{\prime2}. Así que si quería decir «prima y luego al cuadrado», compruebe que el resultado dice eso.

Índices a la izquierda: {}^{A}_{Z}X y \sideset

Para poner un superíndice o subíndice a la izquierda de un símbolo —la notación de isótopos, por ejemplo—, use un par de llaves vacías {} como base. {}^{14}_{6}\mathrm{C} coloca {} como símbolo ordinario de anchura cero, le cuelga los índices y luego compone la C. Si omite ese {}, los índices se enganchan a lo que precede: escrito = ^{14}_{6}C, cuelgan del =, y si lo anterior ya lleva índice se obtiene ! Double superscript. Para repartir índices a ambos lados de un gran operador, amsmath ofrece \sideset{_a^b}{_c^d}\sum, pero es una herramienta del operador: véase la página de sumas e integrales. El \prescript de mathtools resuelve la misma necesidad de otro modo.

latex
\[
  {}^{14}_{6}\mathrm{C}, \qquad {}^{t}\!A, \qquad
  x^{y^z} \ne {x^y}^z, \qquad f''(x)
\]

La unidad mu: una dieciochoava de cuadratín, y encoge dentro de los índices

Un mu es 1/18 de cuadratín, así que 18 mu son exactamente un cuadratín. El cuadratín está aquí ligado al tamaño de la fuente de símbolos matemáticos, de modo que un espacio expresado en mu sigue al cuerpo del texto. En un article de 10 pt, la diferencia de anchura entre a\,b y ab mide 1,66662 pt, coincidiendo con 3 mu = 1/6 de cuadratín = 1,6667 pt. Ponga ese mismo \, dentro de un superíndice, como en x^{a\,b}, y mide 1,36574 pt; un nivel más abajo baja a 1,22685 pt. En un documento de 12 pt pasa a 1,99997 pt. El espacio escala realmente con las letras que lo rodean.

Pero \quad y \qquad no pertenecen a esa familia. latex.ltx los define como \def\quad{\hskip1em\relax} y dos cuadratines para \qquad: la unidad no es el mu, sino un cuadratín de la fuente del texto. Por eso no encogen dentro de un índice: medido, x^{a\quad b} es 10,00002 pt más ancho que un simple x^{ab}, un cuadratín entero del cuerpo del texto. Y en un documento de 12 pt, \quad mide 11,74988 pt mientras que 18 mu son exactamente 12 pt, así que \quad y 18 mu no miden lo mismo. El reparto seguro es por función: las órdenes en mu (\,, \:, \;, \!) para el ajuste fino, y las de cuadratín (\quad, \qquad) para las separaciones grandes.

ComandoCantidad definidaMedido en un article de 10 pt
\,\thinmuskip = 3 mu (alias \thinspace)1,66662 pt; el retoque más usado
\:\medmuskip = 4 mu plus 2 minus 4 (\medspace, \>)2,22216 pt; elástico, puede desaparecer
\;\thickmuskip = 5 mu plus 5 (\thickspace)2,77771 pt; puede duplicarse al estirarse
\!−3 mu (idéntico a \negthinspace)−1,66663 pt; el inverso exacto de \,
\negmedspace−4 mu; no hace falta amsmath (está en latex.ltx)−2,22217 pt
\negthickspace−5 mu; también en el núcleo de LaTeX−2,77771 pt
\quad\hskip1em; un cuadratín de la fuente del texto, no mu10,00002 pt; no encoge dentro de los índices
\qquad\hskip2em; el doble de un \quad20,00003 pt
(backslash-space)el espacio de control; como entre palabras3,33332 pt
\enspacemedio cuadratín fijo5 pt

Que \, funcione tanto en el texto corriente como en matemáticas se debe a que \tmspace, en latex.ltx, se bifurca con \ifmmode: en modo matemático emite \mskip\thinmuskip (3 mu); en texto, un \kern .16667em fijo. Una orden, dos sistemas de unidades. En ese mismo archivo, \let\>=\: deja constancia de que \> es alias de \:. Y \negmedspace y \negthickspace de la tabla suelen atribuirse a amsmath, pero ambos están en el núcleo de LaTeX de TeX Live 2024 y se ha comprobado que funcionan sin \usepackage{amsmath}.

Por qué encogen los índices: \displaystyle y los cuatro estilos matemáticos

TeX compone cada fórmula en uno de cuatro estilos, y el estilo decide tanto el tamaño de los caracteres como cuánto vale realmente un mu. De mayor a menor: \displaystyle (fórmulas aparte), \textstyle (en línea), \scriptstyle (índice), \scriptscriptstyle (índice de un índice). Al medir la altura de X en texto de 10pt salen 6,83331pt tanto para display como para text — son idénticos —, luego 4,78334pt para script y 3,41667pt para scriptscript. El encogimiento solo ocurre en los dos pasos hacia los índices, y ahí se detiene: no hay un quinto estilo aún menor. Ese es el mecanismo detrás del encogimiento del mu descrito arriba. Lo que sirve a diario es forzar un estilo: en línea, $\sum_{k=1}^{n}$ queda aplastado a 8,04175pt de alto, mientras que $\displaystyle\sum_{k=1}^{n}$ mide 16,51393pt: la forma de fórmula aparte, con los límites del sumatorio de vuelta arriba y abajo. El precio es un interlineado irregular, así que si uno recurre a él una y otra vez en el texto corrido, probablemente la fórmula pida ir aparte.

Los tres casos que de verdad usará: \, antes de dx, \int\!\!\int y tras un nombre de función

Empecemos por la integral. \int f(x)dx mide 38,71877 pt y \int f(x)\,dx, 40,38539 pt: una diferencia de exactamente 3 mu, es decir, 1,66662 pt, y ese espacio fino es lo que separa el integrando del dx. Sin él, f(x)dx se lee como una tira ininterrumpida de símbolos. Luego, las integrales múltiples. \int\!\!\int es el giro clásico de juntar dos signos de integral con dos espacios negativos y, medido, da exactamente la misma anchura que el \iint de amsmath (19,3056 pt ambos; un \int\int simple mide 22,63885 pt). Dicho de otro modo, \iint es ese ajuste artesanal convertido en orden oficial.

latex
\[
  \int f(x)\,dx, \qquad \int\!\!\int f \;(=\ \iint f),
  \qquad \sin x, \qquad \operatorname{sinc} x
\]

El tercer caso es el hueco tras un nombre de función, y ahí no hay que añadir nada a mano. \sin está declarado como operador (Op), de modo que aparece automáticamente un espacio fino entre él y lo que sigue. Medido, \sin x da 19,6597 pt mientras que \mathrm{sin}x da 17,99307 pt: una diferencia de 1,66663 pt, exactamente 3 mu. Escribir un nombre de función propio con \mathrm{} es precisamente lo que hace perder ese espacio. La herramienta correcta es \operatorname{sinc} de amsmath; medido, \operatorname{sin}x da 19,6597 pt, igual que \sin x. Si el nombre se repite, defínalo una vez con \DeclareMathOperator.

Cajas invisibles que igualan alturas y anchuras: \phantom, \vphantom, \mathstrut

«Reservar el sitio sin mostrar nada»: esa necesidad recurrente de la composición es lo que cubre la familia \phantom. \phantom{…} fabrica una caja vacía con la misma altura, profundidad y anchura que su argumento compuesto normalmente. No se imprime nada, pero queda libre exactamente ese espacio. Hay versiones limitadas a una dimensión: \hphantom{…} conserva solo la anchura (altura y profundidad nulas) y \vphantom{…}, solo la altura y la profundidad (anchura nula). \vphantom es el caso de «reclamar la extensión vertical sin ocupar espacio horizontal».

latex
\[
  \sum_{j \in \{0,\ldots,10\} \vphantom{3^{3^{3^j}}}}
  \sum_{i \in \{0,\ldots,3^{3^{3^j}}\}} i \cdot j
\]
% level the radicals: each argument gets a parenthesis of vertical room
$\sqrt{\mathstrut a}\;\sqrt{\mathstrut a^2}\;\sqrt{\mathstrut b}$

El ejemplo de arriba es el caso en que dos sumatorios se niegan a alinearse. El de la derecha lleva en el subíndice la alta torre 3^{3^{3^j}}, así que TeX baja el cuerpo de esa suma para hacer sitio y los dos \sum dejan de estar a la misma altura. Poner \vphantom{3^{3^{3^j}}} en el de la izquierda reserva la misma altura sin dejarse ver, y ambos se alinean. Su pariente cercano \mathstrut es un puntal específico que no toma argumento: internamente es \vphantom(, de modo que tiene la altura y la profundidad de un paréntesis de apertura y anchura cero. Colocado al principio de cada argumento cuando \sqrt{a} y \sqrt{a^2} van juntos, iguala los techos de los radicales y la línea se asienta. En resumen: \hphantom para igualar anchuras, \vphantom o \mathstrut para igualar alturas, \phantom para ambas cosas; todas descansan en una misma idea: manipular solo dimensiones mediante una caja invisible.