mathtools

Una vez cargado amsmath y empezada la composición matemática, aparecen algunas necesidades que quedan justo fuera de alcance: los dos puntos de := quedan un poco bajos, quieres etiquetas arriba *y* abajo de una flecha larga que cruza una línea, o quieres que las barras de un valor absoluto se estiren para ajustarse al contenido. mathtools es el paquete que se ocupa de todo esto. Es una extensión que carga amsmath y luego lo mejora, de modo que la línea \usepackage{mathtools} también trae amsmath. Esta página recorre sus añadidos más usados: un := correcto, la flecha extensible \xrightarrow, el \overbracket de esquinas rectas, \DeclarePairedDelimiter con tamaño automático, el \mathclap de ancho cero, el preíndice \prescript y matrices con columnas alineadas mediante matrix*.

Qué es mathtools

mathtools es, en palabras de su manual oficial, “un paquete de extensión para amsmath”. Partiendo de que amsmath es el estándar de facto para componer matemáticas, corrige varias deficiencias y errores restantes y añade herramientas útiles en la composición diaria. El punto clave es que mathtools requiere amsmath internamente y lo carga automáticamente. Por tanto no necesitas nombrar amsmath aparte: basta esta única línea en el preámbulo.

latex
\usepackage{mathtools}

Cuando quieras pasar opciones a amsmath, mathtools las reenvía. Como muestra el manual, \usepackage[fleqn,tbtags]{mathtools} equivale a escribir \usepackage[fleqn,tbtags]{amsmath} seguido de \usepackage{mathtools}. En otras palabras, las opciones que das al cargar mathtools llegan al amsmath subyacente.

El conjunto de funciones de mathtools es amplio y no podemos cubrirlo todo aquí. Esta página se centra en los añadidos de uso frecuente, de los que también trataría una referencia como *Introduction to LaTeX2e* de Okumura. Hay más herramientas, como distinciones de casos extendidas (dcases), control de numeración de ecuaciones (showonlyrefs) o flechas dentro de alineaciones (\ArrowBetweenLines), pero los detalles de alineación pertenecen a la página separada “Ecuaciones en display, alineadas y numeradas”.

mathtools también depende internamente de un pequeño paquete auxiliar llamado mhsetup, que sustenta, entre otras cosas, el mecanismo de delimitadores emparejados de \DeclarePairedDelimiter. Las distribuciones principales como TeX Live lo incluyen, así que normalmente no tienes que pensar en ello. El mantenimiento activo pasó a Lars Madsen, y la versión actual está en CTAN.

Un signo de definición correcto: la familia \coloneqq

Escribir literalmente el “:=” definicional como := en modo matemático produce algo más tosco de lo esperado. El : se trata como puntuación, no como relación, así que el espaciado falla, y los dos puntos quedan un poco por debajo de la línea central del =. \coloneqq de mathtools compone un “:=” con los dos puntos centrados a la altura correcta respecto del igual y con el espaciado de relación adecuado. Para el reverso, “=:”, usa \eqqcolon.

latex
\[
  f(x) \coloneqq x^2 + 1, \qquad y \eqqcolon g(x)
\]

Aquí la fórmula de la izquierda compone el := de “definir f(x) como x²+1”, y la de la derecha el =: de “escribir g(x) como y”, ambos con los dos puntos bien centrados. También existe el doble dos puntos \dblcolon (::) y formas de dos puntos con aproximación o similitud como \colonapprox y \colonsim.

Una advertencia. En una actualización de 2022, mathtools regularizó los nombres canónicos de estos símbolos con dos puntos, para alinearlos con otros paquetes. Los nombres conocidos \coloneqq y \eqqcolon siguen disponibles por compatibilidad, pero en el nuevo esquema \coloneq y afines son las formas canónicas. Los nombres antiguos se conservan para que los documentos existentes sigan compilando.

Flechas extensibles: \xrightarrow y \xleftarrow

Las flechas ordinarias \rightarrow (→) y \Rightarrow (⇒) tienen longitud fija, y se ven torpes cuando la etiqueta superior es más ancha que la flecha. amsmath proporciona exactamente dos flechas que se estiran horizontalmente para ajustarse a una etiqueta: \xrightarrow y \xleftarrow. La sintaxis es \xrightarrow[etiqueta abajo]{etiqueta arriba}: las llaves { } van encima de la flecha y los corchetes [ ] debajo; los corchetes son opcionales. La flecha crece hasta la anchura de las etiquetas.

latex
\[
  A \xrightarrow{f} B \xrightarrow[\sim]{g} C,
  \qquad
  X \xleftarrow[n \to \infty]{\varphi_n} Y
\]

Aquí la flecha de A a B es una flecha extensible hacia la derecha con f encima, y la de B a C lleva g encima y debajo; ambas se estiran hasta la anchura de sus etiquetas. A la derecha hay una flecha hacia la izquierda con la aplicación φ_n encima y la condición límite n→∞ debajo.

amsmath proporciona solo estas dos flechas extensibles, pero mathtools amplía mucho la familia siguiendo el mismo esquema de nombres: las de doble línea \xRightarrow, \xLeftarrow y \xLeftrightarrow; la bidireccional \xleftrightarrow; las con gancho \xhookrightarrow y \xhookleftarrow; la de aplicación \xmapsto; además de arpones y variantes más largas como \xlongrightarrow. Todas usan la misma forma [abajo]{arriba}.

Llaves rectangulares: \overbracket y \underbracket

El LaTeX estándar, y amsmath, ofrecen \overbrace y \underbrace, que dibujan una llave curva encima o debajo de una expresión. mathtools añade \overbracket y \underbracket, que dibujan en cambio un corchete rectangular, de ángulo recto: no la forma curva de una llave, sino una marca cuyos extremos giran en ángulo recto, como “⌜ ⌟”, que puede leerse mejor al señalar la extensión de un diagrama o estructura.

\overbracket toma dos argumentos opcionales: el primero es el grosor de la línea y el segundo la altura del corchete, escritos como \overbracket[grosor][altura]{contenido}. Por defecto el grosor coincide con el de \overbrace, alrededor de 5/18 ex, y la altura es de unos 0,7 ex, valores elegidos para verse bien con cualquier tamaño de letra. Usa los corchetes solo cuando quieras cambiar grosor o altura. La etiqueta superior se añade con ^{ }, o inferior con _{ }, igual que con la forma curva.

latex
\[
  \underbracket{a + b + c}_{\text{3 terms}}
  \quad\text{vs}\quad
  \underbrace{a + b + c}_{\text{3 terms}}
\]

Aquí el mismo “a+b+c” recibe a la izquierda un corchete de ángulo recto de \underbracket y a la derecha una llave curva de \underbrace, ambos con la nota “3 terms” debajo. Puestos lado a lado, la diferencia entre el corchete rectangular y la llave redondeada es clara.

Delimitadores de tamaño automático: \DeclarePairedDelimiter

Al componer un valor absoluto |x| o una norma ‖x‖, una barra de tamaño fijo se queda corta y se ve torpe si el contenido es alto, como una fracción. El manual de amsmath sugiere una definición casera \newcommand*\abs[1]{\lvert#1\rvert}; aunque obtiene bien el espaciado horizontal, las barras no crecen con un contenido alto como \abs{\frac{a}{b}}, y el resultado falla. \DeclarePairedDelimiter de mathtools define de una vez ese par de delimitadores, con tamaño automático incluido. Escríbelo en el preámbulo.

latex
\DeclarePairedDelimiter\abs{\lvert}{\rvert}
\DeclarePairedDelimiter\norm{\lVert}{\rVert}

Con esto, \abs y \norm adquieren tres modos de uso. Primero, \abs{x} sin más compone barras de tamaño fijo, suficiente cuando el contenido es bajo. Segundo, la forma con estrella \abs*{x} envuelve el cuerpo con \left … \right y se estira automáticamente a su altura. Tercero, la forma con argumento opcional \abs[\big]{x} fija el tamaño a mano, eligiendo entre los cuatro pasos \big, \Big, \bigg y \Bigg.

latex
\[
  \abs{x} = \abs{-x}, \qquad
  \abs*{\frac{a}{b}} = \frac{\abs{a}}{\abs{b}}, \qquad
  \norm[\big]{v}
\]

Aquí \abs{x} y \abs{-x} son barras de tamaño normal, \abs*{\frac{a}{b}} es un par de barras estiradas a la altura de la fracción, y \norm[\big]{v} es una doble barra agrandada un paso \big. Para la mecánica subyacente de los delimitadores, consulta también la página “Delimitadores (\left \right)”.

Centrado de ancho cero y preíndices

Tres herramientas frecuentes más, vistas juntas. La primera es \mathclap. Cuando la condición colocada bajo una suma o producto es más ancha que el operador, esa anchura abre espacio extra en toda la fórmula. \mathclap{…} pone su argumento en una caja de ancho cero y lo centra simétricamente, de modo que la condición sigue visible mientras la anchura de la fórmula se mantiene en la del operador. También existen \mathllap y \mathrlap, alineados a izquierda y derecha, y \clap para modo texto.

latex
\[
  \sum_{\mathclap{1 \le i \le j \le n}} a_{ij}
\]

Aquí la condición ancha “1 ≤ i ≤ j ≤ n” se coloca bajo el signo de suma, pero al envolverla en \mathclap queda centrada bajo el signo y no deja espacio desperdiciado a izquierda o derecha de la fórmula. Si quitas \mathclap, el área alrededor del signo de suma se ensancha por la anchura de la condición larga.

La segunda herramienta es \prescript, que coloca un superíndice y un subíndice antes, a la izquierda, de un símbolo. Toma tres argumentos en el orden \prescript{presuperíndice}{presubíndice}{base}. Es útil para notación de isótopos químicos y para notaciones matemáticas con índices izquierdos. El uranio 238, por ejemplo, se escribe con el número másico 238 como presuperíndice y el número atómico 92 como presubíndice.

latex
\[
  \prescript{238}{92}{\mathbf{U}}, \qquad
  \prescript{n}{}{C}_{k}
\]

Aquí, a la izquierda, aparece la notación isotópica del uranio, con 238 arriba a la izquierda y 92 abajo a la izquierda del símbolo U; a la derecha se coloca n arriba a la izquierda de C, mientras k se añade abajo a la derecha como de costumbre. Cuando no necesites presubíndice, deja vacío el segundo argumento como {}.

La tercera es \shortintertext. \intertext de amsmath permite insertar texto entre filas conservando la alineación, pero el espacio arriba y abajo puede ser un poco generoso. \shortintertext{…} es una versión más ajustada, que encaja mejor cuando quieres una nota breve entre líneas. Tanto \intertext como \shortintertext funcionan también dentro del entorno gather.

Matrices con columnas alineadas: la familia matrix*

Los entornos de matrices de amsmath (matrix, pmatrix, bmatrix, etc.) componen cada columna siempre centrada. Cuando se mezclan entradas con y sin signo menos, el centrado desalinea las cifras y se lee mal. mathtools proporciona entornos con estrella correspondientes — matrix*, pmatrix*, bmatrix*, Bmatrix*, vmatrix*, Vmatrix* — que aceptan un argumento opcional para elegir la alineación de columnas. Escribe \begin{pmatrix*}[r], usando el mismo especificador que en array (r, l, c); el valor predeterminado es c.

latex
\[
  \begin{pmatrix*}[r]
    -1 & 3 \\
     2 & -4
  \end{pmatrix*}
\]

Aquí cada columna de la matriz entre paréntesis se compone alineada a la derecha, de modo que los bordes derechos de -1 y 2, y de 3 y -4, coinciden, y los signos menos sobresalen limpiamente hacia la izquierda. Con pmatrix normal, las entradas quedarían centradas y las cifras parecerían desplazadas por la anchura del signo menos. Para los fundamentos de las matrices, consulta la página “Matrices y arreglos”.

Configurar opciones: \mathtoolsset

Muchos comportamientos de mathtools se ajustan mediante interruptores, true/false y similares. El comando que los reúne es \mathtoolsset{…}, normalmente escrito en el preámbulo para que afecte a todo el documento. Las claves se enumeran separadas por comas, como key=value o, cuando el valor es evidente, como una clave sola key.

latex
\mathtoolsset{
  showonlyrefs = true,
  centercolon
}

Algunas claves comunes: showonlyrefs=true numera solo las ecuaciones referenciadas desde el texto y oculta los números del resto, aunque debes referirlas con \eqref, no con \ref. centercolon activa el comportamiento que coloca : a la altura central como relación. Hay muchas otras claves finas, como smallmatrix-align para la alineación predeterminada de matrices pequeñas, y prescript-sub-format / prescript-sup-format para cambiar la fuente de los índices de \prescript.

FunciónComando / entornoQué hace
coloneqq\coloneqq / \eqqcolon:= / =: con dos puntos centrados
xrightarrow\xrightarrow[abajo]{arriba}Flecha que se estira hasta sus etiquetas
overbracket\overbracket / \underbracketLlaves rectangulares, grosor/altura ajustables
DeclarePairedDelimiter\DeclarePairedDelimiterDefine \abs, \norm de tamaño automático
mathclap\mathclap / \clapCentrado de ancho cero para índices limpios
prescript\prescript{sup}{sub}{base}Coloca índices antes de un símbolo
matrix*matrix* / pmatrix*, etc.Entornos de matrices con alineación de columnas