Eine Tabelle mit vielen Zeilen wächst schnell über eine Seite hinaus und muss auf der nächsten weiterlaufen. Ein gewöhnliches tabular in der gleitenden table-Umgebung wird jedoch niemals über eine Seite gebrochen, denn ein Float setzt einen Block voraus, der auf eine Seite passt. Das Paket longtable überwindet diese Grenze. Die Umgebung longtable ist kein Float: Sie steht direkt im Textfluss und kann nach LaTeXs normalem Seitenumbruchalgorithmus mehrere Seiten überspannen. Diese Seite erklärt, warum tabular allein nicht umbrechen kann, wie die wiederholten Köpfe und Füße von longtable funktionieren (\endfirsthead, \endhead, \endfoot, \endlastfoot), wie Captions gesetzt werden, und schließlich xltabular, das automatisch breite X-Spalten mit Seitenumbruch verbindet.
Warum eine Tabelle in einem Float nicht umbrechen kann
Wie in „tabular-Grundlagen“ beschrieben, setzt tabular den Inhalt einer Tabelle, während die gleitende table-Umgebung sie als „Tabelle N“ platziert. Wie figure ist table ein Float: LaTeX behandelt ihn als einen einzelnen Block, der auf eine Seite passt, und darf den ganzen Block an den Seitenanfang oder das Seitenende verschieben. Weil dieser Block unteilbar ist, kann darin kein Seitenumbruch stattfinden. Wie hoch das innere tabular also auch wird, es wird nie geteilt, sondern nur an den Anfang der nächsten Seite geschoben und läuft im schlimmsten Fall trotzdem über.
Mit anderen Worten: Eine „seitenübergreifende Tabelle“ ist mit dem Float-Mechanismus grundsätzlich unvereinbar. Benötigt wird eine Möglichkeit, die Tabelle in denselben Textfluss wie den Haupttext zu setzen und sie natürlich über Seiten umbrechen zu lassen, wie einen Absatz. Genau das bietet longtable.
Die longtable-Umgebung
longtable behält fast alle Funktionen von tabular, erzeugt aber Tabellen, die vom Standard-Seitenumbruchalgorithmus von TeX geteilt werden können. In den Worten des Autors David Carlisle hat es „most of the features of the tabular environment, but produces tables which may be broken“ across pages. Die Verwendung ähnelt tabular: \begin{longtable}{spec} nimmt eine obligatorische Spaltendeklaration, und im Rumpf trennt man Spalten mit & und beendet Zeilen mit \\. Der Unterschied ist, dass es direkt im Text steht und kein Float ist. Daher darf \begin{longtable}…\end{longtable} nicht in eine table-Umgebung eingepackt werden.
Geladen wird es mit \usepackage{longtable} in der Präambel. Spaltentypen wie l, c, r und p{width} sowie \hline und \multicolumn funktionieren genau wie in tabular. Vor der Spaltendeklaration akzeptiert \begin{longtable} ein optionales Argument [c], [r] oder [l], das die horizontale Ausrichtung der gesamten Tabelle festlegt, standardmäßig zentriert. Seitenumbrüche erfolgen nur zwischen Zeilen oder an \hline-Positionen, niemals mitten in einer einzelnen Zeile einer p-Spalte.
Wiederholte Köpfe und Füße
Wenn eine Tabelle über mehrere Seiten läuft, sollen die Kopfzeilen meist auf jeder Folgeseite wieder erscheinen. longtable bietet vier Marker, die am Tabellenanfang deklarieren, welche Zeilen auf welchen Seiten wiederholt werden. Jeder Marker steht dort, wo sonst \\ die jeweilige Zeile beenden würde.
\endfirsthead— Zeilen bis hier erscheinen als Kopf nur auf der ersten Seite.\endhead— Zeilen nach\endfirstheadbis hier werden am Kopf jeder Seite außer der ersten wiederholt.\endfoot— Zeilen nach\endheadbis hier erscheinen am Fuß jeder fortgesetzten Seite, also jeder Seite außer der letzten.\endlastfoot— Zeilen nach\endfootbis hier erscheinen nur ganz am Ende der Tabelle, auf der letzten Seite.
Alle vier sind optional. Soll nur derselbe Kopf auf jeder Seite erscheinen, reicht \endhead allein. Ein separates \endfirsthead erlaubt einen anderen Kopf auf der ersten Seite, etwa mit Caption, und einen knappen wie „(continued)“ auf Folgeseiten. In den \endfoot-Block setzt man üblicherweise eine Zeile „Continued on next page“, die die Fortsetzung signalisiert.
Captions und Nummerierung
Anders als tabular hat longtable eine eigene \caption{…}. Nummeriert wird mit dem Standardzähler table; \caption{…} wird also wie eine normale Tabelle automatisch als „Tabelle N“ nummeriert und erscheint in \listoftables. Weil die Caption Teil des Tabellenlayouts ist, schreibt man sie in den Kopfblock, vor \endfirsthead, und schließt sie mit \\, etwa \caption{…}\\.
Ein paar praktische Konventionen: Soll keine Nummer erscheinen, verwendet man \caption*{…}; es gibt dann weder Nummer noch Eintrag im Tabellenverzeichnis. Eine untergeordnete Caption wie „(continued)“ auf Folgeseiten schreibt man mit leerem optionalem Argument, \caption[]{…}, damit sie nicht doppelt im Tabellenverzeichnis steht. Ein Querverweis \label{…} darf nicht in den wiederholten \endhead; dort erschiene er mehrfach. Setzen Sie ihn in \endfirsthead oder in den Tabellenrumpf. Die Captionbreite beträgt standardmäßig 4 Zoll; geändert wird sie in der Präambel mit \setlength{\LTcapwidth}{…}.
Ein vollständiges Gerüst
Hier ist ein longtable-Gerüst mit allen vier Markern. Zu lesen ist es so: Zuerst kommt der Kopf nur für die erste Seite, also Caption plus Spaltenüberschriften, abgeschlossen mit \endfirsthead. Danach folgt der Kopf für Folgeseiten, „(continued)“ plus Spaltenüberschriften, abgeschlossen mit \endhead. Dann kommt die Zeile „Continued on next page“ für Seiten, die fortgesetzt werden, abgeschlossen mit \endfoot, und die abschließende Linie für die letzte Seite, abgeschlossen mit \endlastfoot. Erst danach kommen die echten Datenzeilen; alles unterhalb der Marker ist der tatsächliche Inhalt, der über die Seiten fließt.
\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}Diese Tabelle setzt die nummerierte Caption „Table N: Annual sales log“ auf die erste Seite, wiederholt bei jedem Seitenwechsel „(continued)“ und die Spaltenüberschriften oben und fügt auf fortgesetzten Seiten unten „Continued on next page“ hinzu. Die letzte Seite schließt still mit nur der Fußlinie. Wie viele Datenzeilen auch hinzukommen, longtable teilt die Tabelle automatisch an Zeilengrenzen.
Eine Einschränkung: longtable braucht mindestens zwei LaTeX-Läufe, um Spaltenbreiten und Seitenumbrüche festzulegen. Es tauscht die Breiteninformationen pro Seite über die .aux-Datei aus, daher können die Spalten im ersten Lauf noch nicht ausgerichtet sein. LaTeX warnt sogar, dass sich die Spaltenbreiten geändert haben; das Handbuch sagt, die Tabelle „will not line up correctly until the document has been run through LaTeX several times“. Build-Werkzeuge wie latexmk führen die nötigen Wiederholungen automatisch aus.
Umbruchspalten mit automatischer Breite: xltabular
Die Spaltendeklaration von longtable entspricht der von tabular; längerer Text kommt daher in eine feste p{width}-Spalte, die umbricht. Wenn aber eine Spalte gewünscht ist, die die Zeilenbreite füllt und ihre Breite automatisch nach dem Inhalt bestimmt, ist die X-Spalte von tabularx nützlich. Diese X-Spalte, behandelt unter „Erweiterte Tabellenumgebungen (tabularx / tabularray)“, gehört eigentlich zur Umgebung tabularx und kann nicht über Seiten brechen.
Das Paket xltabular von Rolf Niepraschk und Herbert Voß verbindet beide Stärken. Nach Beschreibung der Autoren „behaves like a tabularx as a longtable — in short, it is a longtable with the column specifier X“. Es lädt intern ltablex, lässt die bestehende tabularx-Umgebung aber unverändert. Die Syntax ähnelt tabularx: ein optionales Positionsargument [c]/[r]/[l], dann die Gesamtbreite der Tabelle und schließlich die Spaltendeklaration. Die Kopf- und Fußmarker von longtable, etwa \endfirsthead, funktionieren hier ebenfalls.
\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}Hier ist die Gesamtbreite \linewidth, also die Textbreite, und die mittlere Beschreibungsspalte ist eine X-Spalte. Sie dehnt sich automatisch auf die Restbreite aus und bricht langen Text um, während die gesamte Tabelle als longtable seitenübergreifend sein kann, ohne manuelles Abstimmen einer festen p{width}-Spalte. Ein kleiner Unterschied: Während longtable den table-Zähler immer erhöht, verbraucht xltabular nur dann eine Nummer, wenn \caption geschrieben wird.