Ecuaciones en bloque, alineadas y numeradas

Lo difícil de una fórmula en display de varias líneas en LaTeX no es decidir dónde cortar. Es cuántos números de ecuación acaba llevando: align da uno por línea, multline uno a toda la fórmula, y split no lleva ninguno y toma prestado uno de lo que lo envuelve. Equivocarse ahí desplaza todos los números siguientes y arrastra consigo las referencias cruzadas. Esta página ordena los entornos de amsmath —equation, align, gather, multline, split y cases— siguiendo ese único eje, y después trata el control de la numeración con \notag, \tag y subequations, y las referencias con \label y \eqref. Termina con eqnarray y con una medición que explica por qué no debe volver a usarse.

Cargue amsmath primero y no deje nunca una línea en blanco

Todos los entornos de esta página salvo equation vienen de amsmath, así que una línea en el preámbulo es la condición previa para todo lo demás. amsmath cubre un terreno en el que LaTeX puro no ofrecía casi nada, y añade align y align*, gather y gather*, multline y multline*, alignat y alignat*, flalign y flalign*, además de split. Para números en el margen izquierdo pase \usepackage[leqno]{amsmath}; a la derecha (lo predeterminado en escritura horizontal), [reqno]; y para displays alineados a la izquierda, [fleqn].

latex
\usepackage{amsmath}

Antes que nada, desactive la primera mina: nunca deje una línea en blanco dentro de estos entornos. Si lo hace, obtendrá ! Paragraph ended before \align was complete. La razón es histórica. Las notas técnicas de la AMS explican que estos entornos en display leen su contenido como un argumento de macro delimitado y lo procesan en varias pasadas para calcular anchuras y posiciones, con algoritmos heredados del amstex.tex de Michael Spivak. Una línea en blanco es un \par para TeX, y un \par no puede atravesar el argumento de una macro que no se declara \long. Ese mensaje de error es prueba directa de que amsmath sigue llevando la sangre del AMS-TeX de los años ochenta.

Una sola línea numerada: el entorno equation

El punto de partida es el entorno equation. Coloca su contenido en una línea propia y añade un número correlativo en el margen derecho (lo predeterminado en escritura horizontal). El número lo lleva el contador equation, y un \label{…} permite invocarlo desde el texto con \ref{…} o \eqref{…}. Si solo quiere quitar el número, use equation* con estrella, que con amsmath cargado es exactamente lo mismo que \[\]. En resumen: equation da un número a una línea de fórmula, ni más ni menos.

latex
\begin{equation}
  \label{eq:euler}
  e^{i\pi} + 1 = 0
\end{equation}

Esto compone la identidad de Euler centrada en una línea propia, con un número como (1) en el margen derecho (es el conteo corriente del documento, no necesariamente 1). Para una fórmula que no cabe en una línea, o para varias fórmulas que quiera alinear, pase a los entornos de abajo. Una advertencia: nunca anide un entorno numerado dentro de \[\]. Escribir \[ \begin{align} … \end{align} \] produce ! Package amsmath Error: Erroneous nesting of equation structures;: el \[\] exterior sobra.

Alinear varias fórmulas: align frente a gather

align alinea en la relación; gather apila centrado y no alinea nada. Esa es toda la diferencia, y ambos numeran cada línea (los estrellados align* y gather* no). En align se separan las líneas con \\ y se pone un & en el punto que se quiere alinear, por convención justo antes de una relación como un signo igual o una desigualdad. Todo lo que está a la izquierda de & se compone a la derecha y todo lo que le sigue a la izquierda, de modo que ambos lados se encuentran exactamente en la relación. El manual de amsmath dice sin rodeos que poner & después de la relación estropea el espaciado normal, que es precisamente como estaba diseñado el viejo eqnarray.

latex
\begin{align}
  (x + y)^2 &= x^2 + 2xy + y^2 \\
  (x - y)^2 &= x^2 - 2xy + y^2
\end{align}

Esto apila las dos fórmulas con ambos signos igual en la misma posición horizontal y un número a la derecha de cada línea. No ponga \\ después de la última línea: el manual de amsmath lo advierte de forma explícita, porque añade un espacio vertical indeseado bajo la fórmula. El desliz más frecuente es teclear & dentro de gather: allí no hay columna de alineación, así que aparece ! Extra alignment tab has been changed to \cr. El mismo mensaje surge si pone dos & en una línea de un split.

align también puede colocar varias fórmulas una junto a otra. El & hace de marca de alineación y de separador de columna a la vez: un grupo se escribe «parte alineada a la derecha & relación con parte alineada a la izquierda», y otro & lo separa del siguiente. amsmath inserta automáticamente un hueco fijo entre columnas. Si quiere controlar ese hueco, use alignat, que toma el número de pares de columnas como argumento y no deja espacio entre ellas para que lo ponga usted con \quad; y use flalign cuando quiera empujar las columnas hasta el ancho completo de la caja de texto.

latex
\begin{align}
  x      &= y       & X      &= Y       & a   &= b + c \\
  x'     &= y'      & X'     &= Y'      & a'  &= b      \\
  x + x' &= y + y'  & X + X' &= Y + Y'  & a'b &= c'b
\end{align}

gather, en cambio, no alinea nada: cada línea se centra por su cuenta. Las líneas se separan con \\ y cada una recibe un número (gather* no da ninguno). Recuerde align como «alinear en la relación» y gather como «apilar centrado, sin más», y la elección se resuelve sola. Una línea suelta de un gather puede contener un split (más abajo), de modo que solo esa línea se parta en varias.

latex
\begin{gather}
  a^2 + b^2 = c^2 \\
  e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}
\end{gather}

Cuando un align largo se topa con un salto de página, LaTeX no lo parte por omisión: amsmath fija \interdisplaylinepenalty en su valor máximo. En un documento con desarrollos de decenas de líneas, escribir \allowdisplaybreaks en el preámbulo relaja esa prohibición. El argumento opcional va de [1] a [4], de reticente a permisivo, y el valor por omisión es el más permisivo, [4]. Para impedir un corte tras una línea concreta, escriba el \\ de esa línea como \\*.

Partir una fórmula larga: multline y split

Dos entornos parten una sola fórmula que no cabe en una línea, y ambos se distinguen de forma decisiva de align/gather: una fórmula, un número. multline no alinea nada. Coloca la primera línea a la izquierda y la última a la derecha, con las intermedias centradas. «A la izquierda» no es del todo al borde: medido, la primera línea empieza 10pt hacia dentro del margen, el valor por omisión de \multlinegap. El número de toda la fórmula aparece en la última línea (la primera, con leqno). Al ser una fórmula con un número, no debe suprimir líneas sueltas con \notag. Para empujar una línea intermedia hacia un lado, entregue la línea entera —sin el \\ siguiente— a \shoveleft{…} o \shoveright{…}. La forma sin numerar es multline*.

latex
\begin{multline}
  a + b + c + d + e + f \\
  + g + h + i + j + k + l + m + n
\end{multline}

Cuando las líneas partidas deben quedar alineadas, se usa split. Como align, split alinea en &, pero solo admite una columna de alineación (un & por línea) y no lleva número propio. Colóquelo dentro de una estructura numerada como equation (o align, o gather) y el conjunto recibirá un único número de su anfitrión. Usado por su cuenta produce ! Package amsmath Error: \begin{split} won't work here. El cuerpo de un split debe ocupar todo el anfitrión; solo pueden acompañarlo comandos sin salida, como \label. No puede ir dentro de multline.

latex
\begin{equation}
  \label{eq:cosh}
  \begin{split}
    \cosh x &= \frac{e^x + e^{-x}}{2} \\
            &= 1 + \frac{x^2}{2!} + \frac{x^4}{4!} + \cdots
  \end{split}
\end{equation}
EntornoFórmulas y númerosAlineaciónUso principal
equationuna / unoningunauna sola línea en display
alignvarias / por líneaen &apilar y alinear en las relaciones
gathervarias / por líneaninguna (cada una centrada)apilar centrado, sin alinear
multlineuna / uno (en la última línea)ninguna (izquierda a derecha)partir una fórmula larga, sin alinear
splituna / el número lo da el anfitriónuna columna &alinear las líneas de una fórmula partida

Definiciones por casos: cases

Para definir una función por casos se usa el entorno cases. La llave izquierda grande aparece sola; dentro de cada fila un & separa el valor de la condición, y las filas se separan con \\. Si escribe las palabras de una condición («if …») tal cual, salen inclinadas y apretadas, porque siguen en modo matemático: envuélvalas en \text{…}. cases no lleva número propio, así que suele ir dentro de una equation que da un número al conjunto.

latex
\begin{equation}
  |x| =
  \begin{cases}
    x  & \text{if } x \ge 0, \\
    -x & \text{if } x < 0.
  \end{cases}
\end{equation}

Esto coloca dos filas a la derecha de una llave grande —x (condición x ≥ 0) y −x (condición x < 0)— con un único número procedente de equation. Tanto la columna de valores como la de condiciones van alineadas a la izquierda. Un tropiezo: cases compone su contenido en estilo texto. Medido, las cifras de un \frac{1}{2} dentro de cases miden 6,19pt de alto frente a 8,85pt de la misma fracción en un display corriente. Si quiere la fracción a tamaño completo, use dcases del paquete mathtools, el mismo entorno compuesto en estilo display.

Controlar los números: \notag, \tag, subequations

En los entornos numerados cada línea se numera automáticamente, y eso se ajusta línea por línea. Un dato tranquilizador: una línea con \notag no consume número. amsmath redefine \nonumber de modo que suprimir una línea también retrocede el contador en uno; amsmath.sty contiene literalmente \addtocounter{equation}\m@ne. Ponga \notag en la segunda de tres líneas de align y los números salen (1), ninguno, (2), y el display siguiente es (3). No queda hueco en la secuencia.

  • Quitar el número de una línea: ponga \notag antes del \\ de esa línea. Su sinónimo es \nonumber; en amsmath, \notag está definido literalmente como alias de \nonumber.
  • Elegir el número usted mismo: \tag{…} compone lo que le dé en lugar del número automático y añade los paréntesis. \tag*{…} no añade paréntesis e imprime el argumento tal cual. \tag{$\star$} da (⋆); \tag*{NP} da NP.
  • Agrupar fórmulas como (4a), (4b): envueltas en subequations, las fórmulas internas toman el número padre más una letra. Un \label colocado justo tras \begin{subequations} apunta al número padre (4), no al hijo (4a).
  • Reiniciar la numeración por capítulo o sección: escriba \numberwithin{equation}{section} en el preámbulo y la primera ecuación de la sección 2 pasa a ser (2.1). Es la forma habitual de evitar números de cuatro cifras en un documento largo.
latex
\begin{align}
  y &= (x + 1)^2    \notag \\
    &= x^2 + 2x + 1 \\
  E &= mc^2         \tag{$\star$}
\end{align}

\begin{subequations}
  \label{eq:max}
  \begin{align}
    \nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \label{eq:gauss} \\
    \nabla \cdot \mathbf{B} &= 0
  \end{align}
\end{subequations}

En el align de arriba, la primera línea queda sin número gracias a \notag, la segunda toma su número automático habitual y la tercera recibe (⋆) en su lugar. Dejar sin numerar los pasos intermedios de una derivación y numerar solo la conclusión es el patrón más frecuente en un artículo. En el subequations siguiente, las dos ecuaciones de Maxwell quedan numeradas (4a) y (4b); \eqref{eq:gauss} devuelve entonces (4a), mientras que \eqref{eq:max} devuelve (4), que representa al grupo entero.

Referirse a una fórmula con \label y \eqref

Etiquete una fórmula numerada con \label{…} y podrá invocarla por número desde el texto. \ref{…} devuelve el número desnudo (por ejemplo 3.2), mientras que \eqref{…} de amsmath añade los paréntesis y devuelve (3.2). En amsmath.sty, todo \eqref va envuelto en \textup{…}, así que los paréntesis se mantienen rectos incluso en un entorno cursivo, una diferencia que se nota la primera vez que se cita una ecuación desde el enunciado de un teorema. En un entorno multilínea, coloque \label en la línea cuyo número desea. Las referencias pasan por el fichero auxiliar, así que compile dos veces para fijarlas.

latex
By~\eqref{eq:euler}, we have $e^{i\pi} = -1$.

% preamble: number equations within sections, giving (2.1), (2.2), ...
\numberwithin{equation}{section}

El aspecto del número lo decide \theequation. En article el valor por omisión es \arabic{equation}; en book y report la definición dice «si el contador de capítulo es mayor que cero, antepón \thechapter. y después el conteo corriente», que es literalmente la línea de book.cls, y por eso las páginas preliminares reciben un número desnudo sin prefijo de capítulo. Puede redefinir el formato directamente, por ejemplo con \renewcommand{\theequation}{\thesection.\arabic{equation}}, pero \numberwithin suele ser más seguro porque además se encarga de reiniciar el contador.

Nunca use eqnarray: es 3,6 veces demasiado suelto

Los documentos antiguos usan eqnarray (y eqnarray*) para matemáticas multilínea. No lo haga. La razón puede darse como medición y no como opinión. En la definición de \eqnarray de latex.ltx hay un \hskip \tw@\arraycolsep a ambos lados de la columna de la relación, y \arraycolsep vale 5pt por omisión: 10pt por lado. Componga la misma fórmula en align o equation y cada lado recibe \thickmuskip, es decir 2,78pt. Medido en un documento de 10pt: 9,97pt frente a 2,77pt, un factor de 3,6. Peor todavía, esos 10pt son una dimensión rígida heredada del espaciado entre columnas de tabla, así que no escala cuando cambia el cuerpo de la fuente matemática.

El segundo daño real es el número de ecuación. Meta una línea larga en un eqnarray y el número se imprime encima de la fórmula. Medido, el último término ocupaba las posiciones horizontales de 483 a 505pt mientras que el número (1) ocupaba de 492 a 505pt: solapamiento pleno. Con el mismo contenido en align, amsmath detecta la colisión y baja el número a una línea propia. Esas son exactamente las dos razones que la Short Math Guide for LaTeX de la AMS esgrime contra eqnarray: espaciado incoherente de los signos igual y ningún intento de evitar que el número se sobreimprima sobre el cuerpo de la ecuación. El manual de amsmath añade una tercera: \qed y \qedhere de los paquetes de teoremas no funcionan dentro de él.

La sustitución es mecánica. Varias fórmulas que alinear: align. Una fórmula que partir: equation más split. El & también se mueve: eqnarray estaba diseñado para poner & después de la relación, mientras que la familia align lo pone antes, así que x &=& y pasa a ser x &= y. Cuando hereda un manuscrito, esa sustitución es el primer trabajo que hacer.