Colocación y estilo de tablas

tabular compone solo el *contenido* de una tabla. Darle a esa tabla un encabezado numerado (una leyenda) y hacerla flotar a un lugar razonable de la página es tarea del entorno flotante table. Esta página cubre todo lo que rodea al tabular: los especificadores de colocación en \begin{table}[htbp], las convenciones de \caption y \label, los trucos de escala y rotación para una tabla que se sale de la página, y threeparttable para añadir notas. Para construir el contenido en sí, consulta “fundamentos de tabular”.

Por qué las tablas “flotan”

Las tablas y figuras no pueden partirse por un salto de página: deben quedar completas en una sola página. Si LaTeX intentara poner una exactamente donde aparece en la fuente y el espacio restante fuera demasiado pequeño, aparecería un hueco feo o una tabla mal recortada. Por eso LaTeX trata tablas y figuras como flotantes: las separa del texto corrido y las hace flotar automáticamente hasta un lugar conveniente, a menudo la parte superior de la página siguiente.

El entorno table es la forma de usar este mecanismo. Colocas un tabular dentro, le das un encabezado numerado como “Tabla 1” con \caption{…} y lo haces referenciable desde el texto con \label{…} y \ref{…}. Así, en la prosa escribes una referencia por número —“como se muestra en la Tabla 1”— y no importa a qué página flote la tabla: la referencia siempre se resuelve al número correcto. Esa es la ventaja de los flotantes.

Especificadores de colocación [htbp] y [H]

En los corchetes justo después de \begin{table} pasas, letra por letra, tus preferencias de ubicación. Hay cuatro especificadores.

EspecificadorSignificado
hAquí, en la posición de la fuente. Pero h no se permite solo; se añade t automáticamenteHere
tParte superior de una página de textoTop
bParte inferior de una página de textoBottom
pPágina separada solo para flotantes, sin texto corridoPage

Sin especificador, el valor por omisión tanto en article como en book es tbp. Encadenar varios, como [htbp], da el conjunto de lugares que permites: “aquí si es posible, si no arriba, si no abajo, si no una página de flotantes”. Lo importante es que el orden en que los escribes no cambia el orden en que LaTeX los prueba: siempre intenta t, luego b y luego p, así que [htbp] y [bpht] se comportan igual. Piensa en ello como una cadena de alternativas cuando la primera opción no cabe.

Un signo de exclamación inicial, como en [!ht], dice: “solo para este flotante, ignora los límites internos sobre cuántos flotantes y qué proporción flotante-texto puede haber en una página, e intenta colocarlo”. ! no significa “ponlo aquí”: solo relaja los criterios. Si realmente quieres fijarlo en su sitio, usa [H] del paquete float: con \usepackage{float}, escribir \begin{table}[H] hace que la tabla deje de flotar y se componga exactamente en ese punto de la fuente, lo que puede dejar un gran hueco al pie de la página. Conviene pensar en H como “un flotante que no flota”.

document.tex
\usepackage{float}   % \begin{table}[H] のために

\begin{table}[htbp]
  \centering
  \caption{四半期ごとの売上}
  \label{tab:sales}
  \begin{tabular}{lrr}
    \hline
    四半期 & 売上 & 前年比 \\
    \hline
    Q1 & 1{,}200 & +5\% \\
    Q2 & 1{,}350 & +8\% \\
    \hline
  \end{tabular}
\end{table}

Se referencia desde el texto con Table~\ref{tab:sales} (el ~ es un espacio indivisible que evita que la palabra y el número se separen por un salto de línea). Qué hacer cuando la colocación se resiste se trata con detalle en la página “Flotantes y colocación”.

Leyenda, etiqueta y centrado

\caption{…} da a un flotante un encabezado numerado, etiquetándolo automáticamente como “Tabla 1:” en article o “Tabla 1.1:” en book. Tablas y figuras usan contadores separados, así que sus números no se mezclan. Con el argumento opcional \caption[short]{full caption}, la lista de tablas muestra la forma corta y el cuerpo muestra la completa.

Importan dos convenciones. Primero, \caption es lo que avanza el contador, así que \label debe ir después de \caption; si los inviertes, \ref apuntará al número anterior. Segundo, la convención de colocación: por práctica establecida, la leyenda va encima de una tabla y debajo de una figura. En LaTeX la obtienes *encima* escribiendo \caption *antes* del tabular, y *debajo* escribiéndolo *después*.

\centering es una declaración que cambia el contenido del flotante de la alineación izquierda por omisión al centrado. Dentro de flotantes, lo habitual es \centering, no el entorno center (\begin{center}…\end{center}): center añade espacio vertical extra antes y después, mientras que \centering es solo una declaración y no añade ninguno. Para ajustar el formato de la leyenda (fuente, separador, ancho), usa el paquete caption; consulta la página “Leyendas y subfiguras”.

Tablas más anchas que la página

Como las columnas l, c y r no se parten, una tabla con muchas columnas o entradas largas se saldrá del ancho del texto (\textwidth). La solución más rápida es reducir toda la tabla con \resizebox de graphicx. Su forma es \resizebox{width}{height}{material}, y si uno de los dos valores es !, escala proporcionalmente respecto al otro, conservando la relación de aspecto.

latex
\resizebox{\textwidth}{!}{%
  \begin{tabular}{lrrrrr}
    \hline
    項目 & 1月 & 2月 & 3月 & 4月 & 5月 \\
    \hline
    売上 & 120 & 135 & 128 & 142 & 150 \\
    \hline
  \end{tabular}%
}

Esto hace que la tabla tenga exactamente el ancho del texto. Pero \resizebox *escala* su contenido, de modo que el peso de los glifos, el grosor de las reglas e incluso los símbolos matemáticos se estiran o comprimen por igual, y la tipografía suele quedar desajustada respecto al texto vecino. Trata la reducción como un remedio provisional; la solución correcta es arreglar la propia tabla: quitar columnas, envolver con p{width} o abreviar. En lugar de \resizebox, el paquete adjustbox se integra mejor con el diseño circundante y también puede escribirse como entorno, por ejemplo \begin{adjustbox}{width=\textwidth}…\end{adjustbox}.

Para evitar por completo el escalado, también puedes bajar toda la tabla un tamaño de letra: declarar \small o \footnotesize dentro de \begin{table} la compone en una fuente realmente menor, sin distorsionar las proporciones de reglas o matemáticas. Para un control más fino, puedes poner \hfill antes del contenido para empujar la tabla a la derecha en lugar de centrarla. El control de ancho más fundamental, como tabularx, que estira columnas hasta un ancho objetivo, se trata en la página “Entornos de tabla avanzados”.

Rotación — tablas apaisadas

Una tabla demasiado grande para una página vertical puede girarse a apaisado (de lado) para usar una página completa. El paquete rotating (construido sobre la capa gráfica estándar) proporciona el entorno sidewaystable, que se usa en lugar de table. La tabla se coloca girada 90° en su propia página dedicada, con leyenda y número girados también, y sigue apareciendo en la lista de tablas. En documentos a doble cara, el paquete incluso elige automáticamente el sentido de giro para que la doble página se lea de forma natural. Para figuras existe el entorno correspondiente sidewaysfigure.

document.tex
\usepackage{rotating}

\begin{sidewaystable}
  \centering
  \caption{多数の列を持つ横向きの表}
  \label{tab:wide}
  \begin{tabular}{lrrrrrrrr}
    \hline
    地域 & Q1 & Q2 & Q3 & Q4 & 合計 & 前年 & 増減 & 比率 \\
    \hline
    東日本 & 120 & 135 & 128 & 142 & 525 & 500 & +25 & 105\% \\
    \hline
  \end{tabular}
\end{sidewaystable}

Para girar solo una parte de una tabla en un ángulo arbitrario, usa \rotatebox{angle}{material} (también de graphicx/rotating). Un uso común es poner de pie una celda de encabezado con \rotatebox{90}{long column name}; los ángulos positivos giran en sentido antihorario. Ten en cuenta que rotating trabaja con cajas giradas, y una caja siempre permanece en una página. Para componer *texto corrido* en apaisado a lo largo de varias páginas, usa lscape o pdflscape, que gira la propia página PDF, en lugar de rotating.

threeparttable — tablas con notas

A menudo quieres notas al pie asociadas a celdas de una tabla. Pero \footnote dentro de un tabular se comporta mal: la nota salta al pie de la página o ni siquiera se imprime. El paquete threeparttable resuelve esto. Como sugiere el nombre, trata una tabla como tres partes: título (leyenda), cuerpo (tabular) y notas (tablenotes), y coloca las notas con el ancho de la tabla, justo debajo de ella.

Para usarlo, dentro de un entorno threeparttable colocas, en orden, \caption, luego el tabular y luego un entorno tablenotes. La vinculación de notas es manual: pones un marcador como \tnote{a} en una celda y escribes la nota con la misma letra como \item[a] … dentro de tablenotes (el autor lo mantuvo manual deliberadamente, porque una nota suele referenciarse desde varias celdas). Un threeparttable no flota por sí solo, así que para obtener número y colocación envuelve todo en un table.

document.tex
\usepackage{threeparttable}

\begin{table}[htbp]
  \centering
  \begin{threeparttable}
    \caption{品種ごとの収量}
    \label{tab:yield}
    \begin{tabular}{lrr}
      \hline
      品種 & 収量\tnote{a} & 価格\tnote{b} \\
      \hline
      コシヒカリ & 540 & 380 \\
      あきたこまち & 520 & 360 \\
      \hline
    \end{tabular}
    \begin{tablenotes}
      \footnotesize
      \item[a] 単位は 10a あたりの kg。
      \item[b] 1kg あたりの卸売価格(円)。
    \end{tablenotes}
  \end{threeparttable}
\end{table}

Aquí el table exterior lleva el número y la colocación, mientras que threeparttable une las tres partes: leyenda, cuerpo y notas. Los \tnote{a} y \tnote{b} de las celdas de encabezado aparecen como pequeños marcadores en superíndice, y bajo la tabla las notas a y b correspondientes se alinean con el mismo ancho que la tabla. El entorno tablenotes admite opciones de formato usadas así.

OpciónEfecto
paraComponer varias notas en un solo párrafo, sin saltos de líneaNotas una tras otra
flushleftEliminar la sangría francesa de las notasSin sangría francesa
onlineLa etiqueta \item se imprime a tamaño normal, no como superíndiceEtiqueta de tamaño normal
normalRestaurar el formato predeterminado (para anular opciones globales)Restaurar valores predeterminados

Estas opciones pueden fijarse para todo el documento, como en \usepackage[para]{threeparttable}, o por tabla, como en \begin{tablenotes}[flushleft]. Ten en cuenta que threeparttable no da estilo a la leyenda por sí mismo, así que para un aspecto de encabezado adecuado conviene combinarlo con el paquete caption. Para poner notas en una tabla que abarca páginas (longtable), usa el paquete hermano threeparttablex.