Hay tres enfoques para trazar líneas en una tabla. Los comandos incorporados de LaTeX, \hline / \cline, junto con el especificador de columna |; el paquete booktabs (\toprule, \midrule, \bottomrule) para tablas profesionales; y hhline para controlar con precisión las líneas dobles y cómo cruzan las líneas verticales. Las líneas estándar son fáciles de usar, pero un exceso de líneas dificulta leer la tabla. Esta página recorre las tres capas y muestra por qué booktabs es la opción predeterminada recomendada.
Líneas estándar — \hline, \cline, |
La línea horizontal que da LaTeX básico es \hline. Colocada después del \\ de una fila, o al principio o final de la tabla, dibuja una línea simple a lo ancho completo. Dos seguidas, \hline\hline, producen una línea horizontal doble separada por \doublerulesep. El \\ tras la última fila normalmente puede omitirse, pero para dibujar un \hline debajo de la última fila primero debes cerrarla con \\.
Para trazar una línea solo sobre algunas columnas en medio de la tabla, usa \cline{i-j}: la línea abarca solo las columnas i a j, así que \cline{2-3} traza justo debajo de las columnas 2 y 3. Para varios tramos separados a la vez, enuméralos, como \cline{1-1}\cline{3-4}. Las líneas verticales se crean no en el cuerpo, sino en la especificación de columnas: insertar | en la especificación, como en {|l|c|r|}, pone una línea vertical de altura completa en ese punto, y || da una línea vertical doble. El grosor de estas líneas |, \hline y \vline es la longitud \arrayrulewidth (por defecto 0.4pt), y la separación entre líneas dobles viene dada por \doublerulesep.
\begin{tabular}{|l|c|r|}
\hline
項目 & 個数 & 価格 \\
\hline\hline
りんご & 3 & 380 \\
\cline{2-3}
みかん & 12 & 120 \\
\hline
\end{tabular}Este ejemplo encierra cada columna con |, pone una línea doble bajo el encabezado con \hline\hline y traza parcialmente el centro con \cline{2-3} (solo columnas 2 y 3). Recorre toda la gama de líneas estándar, y precisamente por eso es una muestra del exceso de líneas que conviene evitar.
La razón es que demasiadas líneas perjudican la legibilidad. En la tradición tipográfica, una línea no es una jaula alrededor de los datos, sino un recurso discreto que marca una división lógica de la información. Las líneas verticales, en particular, levantan paredes visuales entre columnas que dificultan el recorrido del ojo, y las líneas dobles se ven innecesariamente pesadas. Simon Fear, autor del paquete booktabs que se trata a continuación, escribe que este estilo de composición “se ha establecido a lo largo de siglos de experiencia y solo debería alterarse en circunstancias extraordinarias”, y recomienda tablas sobrias, solo con líneas horizontales, sin líneas verticales ni dobles.
booktabs — tablas con calidad de publicación
booktabs, de Simon Fear, es un paquete para componer fácilmente tablas “como deberían aparecer en libros y revistas científicas publicados”. Se carga con \usepackage{booktabs} en el preámbulo. Lo que lo diferencia de un \hline normal es que distingue las líneas por grosor e inserta automáticamente espacio adecuado arriba y abajo de cada una. El resultado es una tabla refinada cuya estructura se lee con claridad sin encajonarla.
Tres comandos son centrales: \toprule en la parte superior de la tabla, \midrule donde el encabezado se separa del cuerpo y \bottomrule al final. \toprule y \bottomrule son más gruesas (por defecto \heavyrulewidth = 0.08em) y \midrule más ligera (\lightrulewidth = 0.05em); esa diferencia de grosor permite distinguir de un vistazo los bordes exteriores y la división interna. Todas aceptan un ancho opcional entre corchetes (por ejemplo \toprule[1pt]) y, como \hline, van después del \\ de una fila, salvo \toprule, que va justo después de \begin{tabular}{...}.
\begin{tabular}{@{}llr@{}}
\toprule
\multicolumn{2}{c}{品目} \\
\cmidrule(lr){1-2}
種類 & 状態 & 価格 \\
\midrule
りんご & 蜜入り & 380 \\
みかん & 訳あり & 120 \\
\addlinespace
合計 & & 500 \\
\bottomrule
\end{tabular}Este ejemplo reúne los elementos de booktabs. Una línea sobre solo algunas columnas es \cmidrule{a-b}, la contraparte de booktabs de \cline. Pero como \cmidrule alcanza todo el ancho de columna y tiende a chocar con líneas vecinas, normalmente se añade un recorte. Entre paréntesis, (l), (r) o (lr) recortan el extremo izquierdo, derecho o ambos en \cmidrulekern (por defecto 0.5em), así que (lr){1-2} traza una línea sobre las columnas 1–2 con ambos extremos recortados. La cantidad de recorte puede fijarse explícitamente, como en (r{.75em}). La sintaxis completa es \cmidrule[width](trim){a-b}.
Para poner un poco de espacio entre filas, por ejemplo antes de una fila de totales, coloca \addlinespace después del \\. Por defecto inserta \defaultaddspace (0.5em), y puedes dar una cantidad con \addlinespace[1ex]. Expresa mejor la intención que estirar una fila con \\[...], y alrededor de una línea controla el espacio con precisión. Cuando de verdad necesites fijar manualmente grosor y espacio superior e inferior, usa \specialrule{width}{above}{below} (los tres argumentos son obligatorios). Es un comando para situaciones inusuales; normalmente bastan \toprule, \midrule y \bottomrule.
La filosofía de booktabs se enuncia al principio con dos reglas simples: “Nunca, jamás uses líneas verticales” y “Nunca uses líneas dobles.” Fear escribe que pueden parecer extremas, pero que nunca encontró un buen argumento para romperlas. Si dos mitades de una tabla son tan distintas que piden una línea divisoria, la respuesta es usar dos tablas en vez de una línea vertical; sobre una fila de totales basta un solo \midrule. Por diseño, las líneas de booktabs están hechas para no conectar con el | de la especificación de columnas: es una característica pensada para desalentar las líneas verticales.
Una regla más: no mezcles \hline con las líneas de booktabs. Fear afirma claramente que “no se garantiza que funcionen con \hline o \cline… no puedo prever ninguna razón para querer mezclarlas”. Solo en el caso excepcional de apilar dos \cmidrule a la misma altura para crear una línea parcial doble se inserta \morecmidrules entre ellas (\cmidrule{1-2}\morecmidrules\cmidrule{1-2}). Como las líneas dobles ya se desaconsejan, esto tampoco es de uso cotidiano.
| Comando | Función | Grosor / espacio predeterminado |
|---|---|---|
\toprule | Línea superior de la tabla | Grosor \heavyrulewidth = 0.08em |
\midrule | Divide encabezado y cuerpo | Grosor \lightrulewidth = 0.05em |
\bottomrule | Línea inferior de la tabla | Grosor \heavyrulewidth = 0.08em |
\cmidrule(lr){a-b} | Línea parcial sobre columnas a-b | Grosor \cmidrulewidth = 0.03em, recorte \cmidrulekern = 0.5em |
\addlinespace | Espacio extra entre filas | \defaultaddspace = 0.5em |
\specialrule | Línea completamente especificada | Los tres argumentos son obligatorios |
hhline — controlar cruces de líneas
hhline (de David Carlisle, incluido en el paquete tools de LaTeX) dibuja las mismas líneas horizontales simples y dobles que \hline, pero permite controlar cómo cruzan las líneas verticales. Se carga con \usepackage{hhline}. Con una línea doble simple \hline\hline no puedes elegir si una línea vertical se corta en el cruce o lo atraviesa; \hhline permite especificarlo carácter por carácter. Es útil cuando de verdad necesitas combinar líneas dobles o parciales con líneas verticales, situaciones que los comandos incorporados manejan mal.
El argumento de \hhline{…} es una lista de tokens parecida a una especificación de columnas de tabular. Los caracteres significan: = una línea horizontal doble del ancho de una columna, - una línea horizontal simple, ~ (tilde) una columna sin línea. Para las verticales: | es una línea vertical que atraviesa la línea doble o simple, : es una línea vertical interrumpida por la línea doble, y # es un segmento de línea doble entre dos líneas verticales. También existen t (la mitad superior de un segmento doble) y b (la mitad inferior) para construir las esquinas de una línea doble, usados entre dos líneas verticales (|t: es la esquina superior izquierda, :b| la inferior derecha). Está disponible la misma forma de repetición *{n}{…} que en las especificaciones de columnas.
Ten en cuenta que, si especificas una línea vertical doble (|| o ::), las líneas horizontales de \hhline se cortan en ese punto. Para que una línea horizontal pase sin cortarse, usa # u omite por completo los especificadores de línea vertical. Este es el ejemplo de la documentación oficial, que ejercita casi todas las funciones.
\begin{tabular}{||cc||c|c||}
\hhline{|t:==:t:==:t|}
a & b & c & d \\
\hhline{|:==:|~|~||}
1 & 2 & 3 & 4 \\
\hhline{#==#~|=#}
i & j & k & l \\
\hhline{||--||--||}
w & x & y & z \\
\hhline{|b:==:b:==:b|}
\end{tabular}En esta tabla, la línea superior |t:==:t:==:t| construye las mitades superiores de las líneas dobles y las esquinas con las verticales, y la inferior |b:==:b:==:b| construye las mitades inferiores, de modo que el marco de línea doble se une limpiamente con las verticales. Las filas intermedias mezclan ~ (sin línea) y # (un segmento de línea doble entre verticales), variando fila a fila dónde se cortan las líneas horizontales y dónde atraviesan las verticales. Reproducir cruces tan intrincados con simples \hline / \cline es casi imposible; hhline existe justamente para esto: detallar dónde se encuentran las líneas dobles y verticales.
Una nota técnica. Un \hline es un único \hrule de TeX, pero una línea de \hhline se construye con muchos segmentos pequeños. Se colocan con precisión en el DVI, aunque algunos visores o controladores pueden no alinear exactamente las uniones. Si esto molesta, la documentación sugiere probar otro controlador o aumentar ligeramente \arrayrulewidth para reducir el efecto.
Cuál usar
La conclusión es casi única: usa booktabs como opción predeterminada para las tablas normales. Con solo las tres líneas \toprule / \midrule / \bottomrule, más un \cmidrule cuando haga falta, obtienes tablas sobrias y legibles como las de las revistas. Si sigues la regla “sin líneas verticales, sin líneas dobles”, las líneas dejan casi por completo de ser una preocupación.
booktabs— la primera opción para casi cualquier tabla: solo líneas horizontales, grosor y espaciado ajustados, calidad de publicación.\hline/\cline/|estándar — práctico porque no requiere paquete; útil para tablas en cuadrícula o borradores rápidos. Cuidado con el exceso de líneas.hhline— solo para el caso especial en que necesitas controlar finamente cómo cruzan las líneas dobles y verticales. No es para uso diario.
Antes que las propias líneas, la forma de alinear y separar columnas define el esqueleto de la tabla. Para los fundamentos de la especificación de columnas, consulta “El entorno tabular”; para \multicolumn, especificadores de anchura y otros refinamientos, consulta “Especificadores de columna en detalle”.