La palabra «matriz» entró en las matemáticas de la mano de James Joseph Sylvester en 1850, y su álgebra la construyó su amigo Arthur Cayley en «A Memoir on the Theory of Matrices», publicado en 1858 en el volumen 148 de las Philosophical Transactions. En LaTeX, una matriz resulta no ser una construcción especial en absoluto. Dentro de amsmath, pmatrix no es más que \array{*10 c} —un array con diez columnas centradas— envuelto en paréntesis y recortado 5pt por cada lado. Esa única línea responde a las dos preguntas con las que más gente llega: por qué a una matriz se le acaban las columnas en la undécima y cómo cambiar el hueco entre columnas. Esta página cubre la familia pmatrix, bmatrix, vmatrix y smallmatrix, el contador MaxMatrixCols, el entorno array con \arraycolsep y \arraystretch, las matrices aumentadas y los puntos \cdots, \vdots, \ddots.
amsmath define exactamente siete entornos de matrices
Son matrix, pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix y smallmatrix. Escribe \usepackage{amsmath} y ya están disponibles. Todos se usan dentro del modo matemático, con las entradas separadas en horizontal por & (un ampersand) y las filas terminadas por \\ (dos barras invertidas). El contenido se escribe exactamente igual; lo único que cambia es el delimitador que lo envuelve. La nomenclatura también es regular: la letra inicial nombra el delimitador — p de paréntesis, b de bracket (corchete), v de vertical bar (barra vertical). Los Bmatrix y Vmatrix con inicial mayúscula dan el par «fuerte»: llaves y barras dobles. El escueto matrix no añade nada.
| Entorno | Delimitador añadido | Uso típico |
|---|---|---|
matrix | ninguno | base para cuando añadas tu propio delimitador |
pmatrix | paréntesis ( ) | las matrices y vectores columna más habituales |
bmatrix | corchetes [ ] | matrices en la convención de corchetes |
Bmatrix | llaves { } | cuando quieres llaves |
vmatrix | barras simples | | | determinantes |
Vmatrix | barras dobles ‖ ‖ | normas |
smallmatrix | ninguno (compacto) | matriz pequeña insertada en el texto |
% preamble: \usepackage{amsmath}
\[
\begin{pmatrix} a & b \\ c & d \end{pmatrix}
\quad
\begin{bmatrix} a & b \\ c & d \end{bmatrix}
\quad
\begin{vmatrix} a & b \\ c & d \end{vmatrix}
\]El contenido de los siete está siempre centrado; no se pueden pedir columnas alineadas a la derecha o a la izquierda. Cuando quieras elegir tú la alineación, usa el entorno array descrito más abajo, o las variantes con asterisco del paquete mathtools. mathtools define matrix*, pmatrix*, bmatrix*, Bmatrix*, vmatrix*, Vmatrix* y smallmatrix*, cada uno con un argumento opcional [r], [c] o [l] que alinea así todas las columnas (el valor por defecto es c). Las formas con asterisco vienen de mathtools, no de amsmath, así que necesitas \usepackage{mathtools}; y como mathtools carga amsmath por su cuenta, no hacen falta las dos líneas. Estirar delimitadores a mano con \left/\right o \big/\Big es asunto de la página aparte «Delimitadores».
A la matriz le faltan columnas: MaxMatrixCols y la undécima
El techo por defecto es de 10 columnas, y una undécima detiene la compilación con ! Extra alignment tab has been changed to \cr. TeX prosigue: You have given more \span or & marks than there were in the preamble to the \halign or \valign now in progress. Al leerlo se ve que no es un error «de matriz» en absoluto, sino el error de alineación genérico de \halign. Como se apuntó arriba, el interior de pmatrix es un \array{*\c@MaxMatrixCols c}, y la línea 1077 de amsmath.sty —\newcount\c@MaxMatrixCols \c@MaxMatrixCols=10— es la que fija el techo. No hay ninguna comprobación especial de matrices en marcha: sencillamente se ha agotado la especificación de columnas entregada a array.
La solución es subir el techo con \setcounter{MaxMatrixCols}{n}. Para permitir hasta veinte columnas, escribe \setcounter{MaxMatrixCols}{20}. Un valor mayor alarga en la misma medida la especificación de columnas entregada a array, así que TeX trabaja más, pero en torno a 20 no hay impacto práctico en un sistema moderno. Devuélvelo a 10 para restaurar el estado original. Ten en cuenta que este techo solo afecta a los entornos de matrices de amsmath, no al array de la sección siguiente. De hecho, \begin{array}{ccccccccccccccc} con quince columnas compiló sin un solo error: en array basta con escribir tantas columnas como hagan falta.
% without this line, an 11th column raises
% ! Extra alignment tab has been changed to \cr.
\setcounter{MaxMatrixCols}{20}
\[
\begin{pmatrix}
a_{1} & a_{2} & \cdots & a_{12}
\end{pmatrix}
\]El entorno array: elige tú la alineación y las reglas
array es una rejilla general que recibe una especificación de columnas como argumento obligatorio: una letra por columna, l para alineado a la izquierda, c para centrado y r para alineado a la derecha. Pon un | entre letras y se dibujará una regla vertical en esa posición, de modo que {l|c|r} son tres columnas: izquierda, regla, centrada, regla, derecha. Es la contrapartida en modo matemático de tabular, el entorno de las tablas de texto, y solo puede usarse en modo matemático. Escribe \begin{array} fuera de \[ \] o de un entorno equation y LaTeX intentará entrar en modo matemático por ti, informando ! Missing $ inserted. Las entradas se separan con & y \\ igual que en tabular, pero cada una se compone como matemáticas, en estilo de texto.
array no añade delimitador propio, así que para envolverlo entre paréntesis como matriz se escribe \left( … \right) (o \left[ … \right]) a mano. Aquí se puede comprobar midiendo el «recortado 5pt por cada lado» del comienzo. Con el contenido a & b \\ c & d en ambos casos, la caja de \left(\begin{array}{cc} … \end{array}\right) mide 45,21304pt de ancho y la de pmatrix, 35,21304pt. La diferencia es exactamente 10pt: dos raciones de \arraycolsep, el relleno que array pone en cada borde de columna y que vale 5pt por defecto. Los entornos de matrices de amsmath lo cancelan con un \hskip -\arraycolsep al principio y al final. Visto al revés, cambiar \arraycolsep cambia también los huecos entre columnas de una matriz: medido, reducirlo a 2pt dejó pmatrix en 29,21304pt de ancho, y ensancharlo a 10pt, en 45,21304pt. Para estirar todas las filas por igual, usa \renewcommand{\arraystretch}{1.5}: a 1,5, la altura total de una 2×2 pasó de 24pt a 36pt, exactamente una vez y media (el ancho no varía).
% array needs math mode; outside it LaTeX reports "! Missing $ inserted."
\[
\left(\begin{array}{rrr}
1 & -2 & 3 \\
0 & 5 & -1 \\
4 & 0 & 2
\end{array}\right)
\]La especificación de columnas es aquí {rrr}, de modo que todas las columnas quedan alineadas a la derecha y las entradas negativas como -2 y -1 se alinean por el borde derecho, lo que se lee con limpieza. pmatrix, siempre centrado, no puede hacerlo; esa suele ser la razón misma para recurrir a array.
Matrices aumentadas: una regla vertical a mitad de camino
Pon un | en la especificación de columnas de un array y envuelve todo en \left[ … \right]. En una matriz aumentada —la que representa un sistema de ecuaciones lineales— la convención pone una regla vertical entre las columnas de coeficientes y la de constantes. Los entornos de amsmath como bmatrix no aceptan especificación de columnas y por eso no pueden dibujarla; aquí es donde array se gana el sueldo. Basta con una especificación que lleve un | entre las columnas de coeficientes y la de constantes (por ejemplo {cc|c}). Para paréntesis, cambia a \left( … \right); para llaves, \left\{ … \right\}. Como \left y \right estiran el delimitador hasta la altura del contenido, la forma aguanta al añadir filas (el mecanismo de estirado en sí corresponde a la página «Delimitadores»). mathtools ofrece además formas más cómodas de escribir esta clase de matriz aumentada.
\[
\left[\begin{array}{cc|c}
1 & 2 & 5 \\
3 & 4 & 6
\end{array}\right]
\]Escribir una matriz n×n general: \cdots, \vdots, \ddots
Coloca los puntos suspensivos que significan «y así sucesivamente» como una entrada más de la matriz. Hay cuatro, de direcciones distintas, y se eligen según el lugar que ocupen en la rejilla. Todos son comandos del modo matemático y no necesitan paquete adicional.
\cdots— puntos horizontales a media altura (⋯), para omitir entradas a lo largo de una fila. Se sitúan a la altura de+y=, lo que va bien con una sucesión horizontal.\vdots— puntos verticales (⋮), para la omisión a lo largo de una columna.\ddots— puntos diagonales descendentes hacia la derecha (⋱), para la omisión a lo largo de la diagonal principal.\ldots(y el\dotssensible al contexto) — puntos horizontales sobre la línea base (…), para sucesiones de números o de subíndices. Dentro de una matriz,\cdotssuele quedar mejor.
\[
A =
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{pmatrix}
\]Esta es la manera canónica de escribir una matriz m×n general. En las filas primera, segunda y última, el \cdots de la tercera columna rellena el hueco entre a_{12} y a_{1n}; en la tercera fila, los \vdots dan la omisión vertical de cada columna y el \ddots en la posición diagonal, la que desciende hacia la derecha; juntos dicen que filas y columnas continúan del mismo modo. Para llenar una fila entera de puntos, \hdotsfor{n} de amsmath abarca las n columnas indicadas con una hilera de puntos horizontales.
Una matriz dentro de una línea de texto: smallmatrix ocupa una sola línea
Meter una pmatrix en un $ … $ en línea hincha la altura de línea y altera la interlínea circundante. Los números lo explican: a 10pt, una matriz 2×2 metida en \bigl( … \bigr) tiene 14,5pt de alto y 9,5pt de profundidad, 24,0pt en total, exactamente dos raciones del \baselineskip de 12pt. El entorno smallmatrix de amsmath compone las entradas pequeñas y compactas, y el mismo contenido entre los mismos paréntesis sale con 8,5pt de alto y 3,5pt de profundidad, 12,0pt en total: exactamente una línea. smallmatrix no añade delimitador, así que envuélvelo a mano si lo necesitas, por ejemplo con \bigl( … \bigr). (También puedes usar \left( \right), pero en línea los tamaños fijos \bigl y \bigr alteran menos la interlínea.) Si mathtools está cargado, dispones además de smallmatrix*, que permite elegir la alineación de las columnas.
% preamble: \usepackage{amsmath}
Consider the rotation matrix
$\bigl(\begin{smallmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{smallmatrix}\bigr)$
in the plane.