Tablas de varias páginas (longtable)

Una tabla con muchas filas pronto supera una sola página y necesita continuar en la siguiente. Pero un tabular ordinario envuelto en el entorno flotante table nunca se partirá entre páginas, porque un flotante presupone un bloque que cabe en una página. El paquete longtable supera esa pared. El entorno longtable no es un flotante: se coloca directamente en el flujo del texto y puede abarcar varias páginas, partido por el algoritmo normal de saltos de página de LaTeX. Esta página cubre por qué un tabular solo no puede partirse, cómo funcionan los encabezados y pies repetidos de longtable (\endfirsthead, \endhead, \endfoot, \endlastfoot), cómo se añaden leyendas y, por último, xltabular, que añade columnas X de ancho automático que también se parten entre páginas.

Por qué una tabla dentro de un flotante no puede partirse

Como se explicó en “fundamentos de tabular”, el entorno tabular compone el contenido de una tabla, mientras que el entorno flotante table la coloca como “Tabla N”. Igual que figure, table es un flotante: LaTeX lo trata como un único bloque que cabe en una página y puede moverlo entero a la parte superior o inferior de una página. Como es un bloque indivisible, no puede haber un salto de página dentro. Por eso, por muy alto que crezca el tabular interior, nunca se divide; simplemente se empuja al inicio de la página siguiente y puede desbordarse si aun así no cabe.

En otras palabras, una “tabla que abarca páginas” es fundamentalmente incompatible con el mecanismo de flotantes. Lo que necesitas es una forma de colocar la tabla en el mismo flujo que el texto y dejar que se parta naturalmente entre páginas, como un párrafo. Eso es exactamente lo que ofrece longtable.

El entorno longtable

longtable conserva casi todas las funciones de tabular mientras produce una tabla que puede dividirse mediante el algoritmo estándar de saltos de página de TeX. En palabras de su autor, David Carlisle, “has most of the features of the tabular environment, but produces tables which may be broken” across pages. El uso se parece mucho a tabular: \begin{longtable}{spec} toma una especificación de columnas obligatoria, y en el cuerpo separas columnas con & y terminas filas con \\. La diferencia es que se coloca directamente en el texto, no como flotante, así que no debes envolver \begin{longtable}…\end{longtable} en un entorno table.

Cárgalo con \usepackage{longtable} en el preámbulo. Los especificadores de columna como l, c, r y p{width}, así como \hline y \multicolumn, funcionan exactamente igual que en tabular. Antes de la especificación de columnas, \begin{longtable} acepta un argumento opcional [c], [r] o [l] que fija la alineación horizontal de toda la tabla (centrada por omisión). Los saltos de página ocurren solo entre filas o en posiciones de \hline, nunca a mitad de una fila individual de una columna p.

Encabezados y pies repetidos

Cuando una tabla se divide entre páginas, normalmente quieres que las filas de encabezado reaparezcan en cada página de continuación. longtable proporciona cuatro marcadores, declarados al inicio de la tabla, que indican qué filas se repiten en qué páginas. Cada marcador se coloca donde \\ terminaría esa fila.

  • \endfirsthead — las filas hasta aquí aparecen como encabezado solo en la primera página.
  • \endhead — las filas después de \endfirsthead y hasta aquí se repiten en el encabezado de todas las páginas salvo la primera.
  • \endfoot — las filas después de \endhead y hasta aquí aparecen al pie de cada página que continúa, es decir, todas salvo la última.
  • \endlastfoot — las filas después de \endfoot y hasta aquí aparecen solo al final de la tabla, en la última página.

Los cuatro son opcionales: si solo quieres el mismo encabezado en todas las páginas, basta con \endhead. Escribir un \endfirsthead separado permite que la primera página tenga un encabezado distinto, por ejemplo con leyenda, y las páginas siguientes uno breve como “(continued)”. El bloque \endfoot es el lugar habitual para una fila “Continued on next page” que indica que la tabla continúa.

Leyendas y numeración

A diferencia de tabular, longtable tiene su propio \caption{…}. Numera las leyendas con el contador estándar table, así que \caption{…} se numera automáticamente como “Tabla N”, igual que una tabla normal, y aparece en \listoftables. Como la leyenda forma parte del diseño de la tabla, se escribe dentro del bloque de encabezado, antes de \endfirsthead, y se cierra con \\, como \caption{…}\\.

Algunas convenciones prácticas. Para omitir el número, usa \caption*{…} (sin número ni entrada en la lista de tablas). Para una leyenda subsidiaria como “(continued)” en páginas posteriores, escríbela con un argumento opcional vacío, \caption[]{…}, para que no se liste dos veces. Un \label{…} de referencia cruzada no debe ir en el \endhead repetido, porque aparecería más de una vez; colócalo dentro de \endfirsthead o en el cuerpo de la tabla. El ancho de la leyenda es 4 pulgadas por omisión; cámbialo con \setlength{\LTcapwidth}{…} en el preámbulo.

Un esqueleto completo

Aquí hay un esqueleto de longtable usando los cuatro marcadores. Léelo así: primero viene el encabezado de la primera página, leyenda más encabezados de columna, cerrado con \endfirsthead. Luego viene el encabezado de las páginas posteriores, “(continued)” más encabezados de columna, cerrado con \endhead. Después la fila “Continued on next page” para páginas que continúan, cerrada con \endfoot, y la regla de cierre para la última página, cerrada con \endlastfoot. Después de todo eso vienen las filas reales de datos: todo lo que está debajo de los marcadores es el contenido real, que fluye por las páginas.

document.tex
\documentclass{article}
\usepackage{longtable}
\begin{document}

\begin{longtable}{l l r}
  % --- 1 ページ目だけの見出し ---
  \caption{年間の売上記録}\\
  \hline
  日付 & 品目 & 金額 \\
  \hline
  \endfirsthead

  % --- 2 ページ目以降の見出し ---
  \multicolumn{3}{l}{\small (表のつづき)}\\
  \hline
  日付 & 品目 & 金額 \\
  \hline
  \endhead

  % --- 続くページの脚 ---
  \hline
  \multicolumn{3}{r}{\small 次ページに続く}\\
  \endfoot

  % --- 最終ページの脚 ---
  \hline
  \endlastfoot

  % --- ここから本物のデータ行 ---
  2026-01-05 & りんご & 380 \\
  2026-01-06 & みかん & 120 \\
  % …行が続き、自動で改ページされる…
\end{longtable}

\end{document}

Esta tabla pone la leyenda numerada “Table N: Annual sales log” en la primera página, repite “(continued)” y los encabezados de columna arriba cada vez que la tabla cruza una página, y añade “Continued on next page” al pie de las páginas que continúan. La última página se cierra discretamente solo con la regla de pie. Por muchas filas de datos que añadas, longtable sigue dividiendo la tabla automáticamente en los límites de fila.

Una advertencia: longtable necesita al menos dos pasadas de LaTeX para fijar anchos de columna y saltos de página. Intercambia la información de ancho por página mediante el archivo .aux, así que la primera compilación puede no alinear las columnas; LaTeX incluso emite una advertencia de que los anchos cambiaron. El manual dice que la tabla “will not line up correctly until the document has been run through LaTeX several times”. Herramientas como latexmk vuelven a ejecutar el documento tantas veces como sea necesario.

Columnas ajustables de ancho automático: xltabular

La especificación de columnas de longtable es la misma que la de tabular, así que la prosa larga va en una columna p{width} de ancho fijo que se ajusta. Pero cuando quieres una columna que se estire para llenar el ancho de línea y ajuste su ancho automáticamente al contenido, la columna X de tabularx es la herramienta. Esa columna X, cubierta en “entornos de tabla avanzados (tabularx / tabularray)”, pertenece al entorno tabularx y no puede partirse entre páginas.

El paquete xltabular (Rolf Niepraschk y Herbert Voß) une las dos ventajas. Como dicen los autores, “behaves like a tabularx as a longtable — in short, it is a longtable with the column specifier X”. Carga ltablex internamente, pero deja sin cambios el entorno tabularx existente. Su sintaxis se parece a tabularx: un argumento opcional de posición [c] / [r] / [l], luego el ancho total de toda la tabla y después la especificación de columnas. Los marcadores de encabezado y pie de longtable (\endfirsthead, etc.) también funcionan aquí.

document.tex
\documentclass{article}
\usepackage{xltabular}
\begin{document}

\begin{xltabular}{\linewidth}{l X r}
  \caption{用語と説明}\\
  \hline
  用語 & 説明 & 頁 \\
  \hline
  \endfirsthead
  \hline
  用語 & 説明 & 頁 \\
  \hline
  \endhead

  longtable & ページをまたいで分割できる表組み環境。フロートではなく本文の流れに直接置かれる。 & 12 \\
  xltabular & longtable と tabularx を組み合わせ、自動幅の X 列を改ページ可能にした環境。 & 34 \\
\end{xltabular}

\end{document}

Aquí el ancho total es \linewidth (el ancho del texto) y la columna central de descripción es una columna X. La columna X se expande automáticamente para llenar el ancho restante y ajusta la prosa larga, mientras que toda la tabla es un longtable y puede abarcar páginas, sin ajustar a mano un p{width} fijo. Una pequeña diferencia: mientras longtable siempre avanza el contador table, xltabular no consume un número a menos que escribas \caption.