Tablas con color (colortbl)

El paquete colortbl es la maquinaria para poner color de fondo detrás de celdas, filas y columnas de una tabla, y para colorear sus reglas. Se carga con una sola línea: \usepackage[table]{xcolor}. La opción table de xcolor carga colortbl automáticamente, así que obtienes ambas partes a la vez: nombres de color de xcolor y sombreado de tablas de colortbl. El núcleo son tres comandos —\rowcolor (colorear una fila), \columncolor (colorear una columna) y \cellcolor (colorear una celda)— más \rowcolors para franjas automáticas y \arrayrulecolor para reglas coloreadas. Esta página cubre los cinco y su orden de precedencia: celda vence a fila y fila vence a columna.

Carga — la opción table de xcolor

colortbl puede cargarse por sí solo, pero la entrada recomendada es xcolor. Cargar xcolor con la opción table activa a la vez xcolor (nombres de color, mezclas, conversión de modelos) y colortbl (sombreado dentro de tablas). colortbl depende internamente de dos paquetes, array y color, y cargándolo mediante xcolor también se incorporan automáticamente.

document.tex
\usepackage[table]{xcolor}

Esa sola línea habilita todo lo descrito abajo: \rowcolor, \columncolor, \cellcolor, \rowcolors y \arrayrulecolor. En beamer la escritura cambia un poco: pásalo como opción de clase, \documentclass[xcolor=table]{beamer}. Los colores pueden ser nombres simples como gray y red, o cualquier expresión de xcolor como gray!20 (20 % de intensidad) o red!30!yellow (30 % de rojo mezclado con amarillo). Para fondos suaves, se suele usar una forma diluida como name!20.

Tres comandos: fila, columna, celda

El núcleo son tres comandos. \rowcolor{color} sombrea una fila entera, \columncolor{color} una columna entera y \cellcolor{color} una sola celda. Los tres siguen la misma forma, \columncolor[model]{color}[left overhang][right overhang]: un argumento opcional de modelo de color antes del color y argumentos opcionales de saliente izquierdo / derecho después. El saliente indica cuánto se extiende el panel coloreado más allá de la columna en cada lado; si se omite, usa \tabcolsep por lado, o \arraycolsep en array.

Observa que los tres van en lugares distintos. \rowcolor va al inicio de la fila, antes del contenido de la primera celda de esa fila, es decir, justo después del \\. \columncolor no va en el cuerpo sino dentro de la especificación de columnas, en la forma >{\columncolor{gray!20}} (el gancho >{…} del paquete array inyecta material justo antes de cada celda de esa columna). Solo \cellcolor no tiene restricciones: puede aparecer en cualquier lugar dentro de la celda a la que se aplica.

latex
\begin{tabular}{>{\columncolor{gray!20}}l c r}
  \rowcolor{blue!30}
  項目 & 数量 & 価格 \\
  りんご & 3 & 380 \\
  みかん & \cellcolor{yellow!40}5 & 120 \\
\end{tabular}

Aquí la columna 1 se sombrea en gris claro mediante >{\columncolor{gray!20}}, la fila de encabezado queda azul pálido por \rowcolor{blue!30} y solo la celda de cantidad de “mikan” se resalta en amarillo con \cellcolor{yellow!40}. Observa que \rowcolor está al inicio de la fila de encabezado, mientras que \columncolor vive dentro del >{} de la especificación de columnas.

Precedencia — celda sobre fila sobre columna

Cuando los tres colores coinciden en una celda, está bien definido cuál gana. \cellcolor sobrescribe \rowcolor, y \rowcolor sobrescribe \columncolor: es decir, celda sobre fila sobre columna. Así puedes superponerlos de forma natural: sombrear toda una columna en gris (\columncolor), poner solo la fila de encabezado en azul (\rowcolor) y volver amarilla una celda (\cellcolor). Cuanto más estrecho el alcance, mayor la prioridad.

Antes de que existiera \cellcolor, sombrear una sola celda implicaba el rodeo \multicolumn{1}{>{\columncolor{…}}c}{…}. Eso tiene inconvenientes reales: el contenido puede impedir que se active el coloreado, y debes copiar la alineación de columna a mano, algo propenso a errores con columnas p{}. El autor del paquete llama directamente “silly” a \multicolumn{1}. Para colorear una celda, usa simplemente \cellcolor.

Franjas automáticas — \rowcolors

Para sombrear filas alternas —una franja cebra— automatízalo con \rowcolors{start}{odd-row color}{even-row color} de xcolor (observa la s final; \rowcolor sin s es otro comando). Emitido una vez antes de la tabla, hace que las filas siguientes alternen colores como se indique. El primer argumento es la fila en la que empieza el color; usa 2 para saltar la fila de encabezado. Cualquiera de los argumentos de color puede quedar vacío, lo que significa “sin color”.

latex
\rowcolors{2}{gray!15}{white}
\begin{tabular}{l r r}
  項目 & 数量 & 価格 \\
  りんご & 3 & 380 \\
  みかん & 5 & 120 \\
  ぶどう & 2 & 600 \\
  もも & 4 & 450 \\
\end{tabular}

Este ejemplo empieza las franjas en la fila 2, alternando gray!15 (gris claro) y white. El encabezado (fila 1) queda sin sombrear; solo alternan las filas de datos. \rowcolors también toma un argumento opcional inicial: \rowcolors[\hline]{2}{…}{…} ejecuta un comando como \hline antes de cada fila. Y como un \rowcolor o \multicolumn explícito sobrescribe el sombreado automático de \rowcolors, aún puedes recolorear una fila concreta en medio de las franjas.

ComandoQué coloreaDónde va
\columncolor{c}Una columna completaDentro de >{…} en la especificación
\rowcolor{c}Una fila completaInicio de la fila, antes de la primera celda
\cellcolor{c}Una sola celdaDentro de esa celda, en cualquier lugar
\rowcolors{n}{a}{b}Filas alternasUna vez antes de la tabla
\arrayrulecolor{c}Reglas siguientesFuera / inicio de fila / >{} en la especificación

Colorear reglas — \arrayrulecolor

El color de las reglas (\hline, \cline y el | vertical) se fija con \arrayrulecolor{color}. Es una declaración global que toma los mismos argumentos que \color, y puede colocarse fuera de una tabla, al inicio de una fila o en un >{} de la especificación. El detalle: si se da a mitad de tabla, afecta solo a las reglas dibujadas después de ese punto; las reglas verticales ya declaradas en el preámbulo conservan su color. Para restaurar el valor predeterminado, declara de nuevo \arrayrulecolor{black}.

El hueco entre reglas dobles creado por || o \hline\hline queda blanco por omisión. Para colorearlo también, usa \doublerulesepcolor{color} junto con la longitud \doublerulesep, que es el ancho del hueco. El ejemplo siguiente pone las reglas en azul y el hueco de la regla doble en amarillo.

latex
\setlength\arrayrulewidth{1pt}\arrayrulecolor{blue}
\setlength\doublerulesep{2pt}\doublerulesepcolor{yellow}
\begin{tabular}{||l|c||}
  \hline\hline
  one & two \\
  three & four \\
  \hline\hline
\end{tabular}

Para colorear a mano una sola regla vertical, también puedes poner !{\color{green}\vline} en la especificación de columnas en lugar de |, sin ningún comando especial. \arrayrulewidth es la longitud que controla el grosor de la regla; una línea muy fina puede ser difícil de ver al colorearse, así que engrosala un poco si hace falta.

Uso con booktabs y advertencias

colortbl funciona con booktabs, pero la combinación tiene una peculiaridad. booktabs pone un pequeño espacio encima y debajo de \toprule, \midrule y \bottomrule (\aboverulesep y \belowrulesep), lo que deja un hueco blanco entre el color de fondo de la fila y la regla. Para que el relleno llegue hasta la regla, la solución común es poner esos espacios en 0pt y mover esa cantidad a \extrarowheight.

Otro problema clásico: el contenido alto o el texto grande puede tocar el \hline o la parte superior de un panel de color justo encima. Para esto, colortbl ofrece la longitud \minrowclearance: \setlength\minrowclearance{2pt} añade un poco de espacio sobre las filas altas. Mantén el valor moderado: si la altura de las mayúsculas más este valor supera la altura normal de fila, el espaciado se vuelve irregular.

Para cerrar, una nota de moderación. La mayoría de las guías de estilo advierten contra abusar de reglas y color. El sombreado de fondo se lee mejor cuando se reserva para una fila de encabezado que quieras destacar o para una franja suave que ayude al ojo a seguir la fila. La especificación de colores en sí (nombres, modelos, mezclas) se cubre en la página “Colores (xcolor)”, y las convenciones de reglas en la página “Reglas”.