tabular setzt nur den *Inhalt* einer Tabelle. Dieser Tabelle eine nummerierte Überschrift (Caption) zu geben und sie an eine sinnvolle Stelle auf der Seite gleiten zu lassen, ist Aufgabe der gleitenden table-Umgebung. Diese Seite behandelt alles *um* das tabular herum: die Platzierungsangaben in \begin{table}[htbp], die Regeln für \caption und \label, Skalieren und Drehen für Tabellen, die über die Seite hinausragen, sowie threeparttable für Anmerkungen. Wie der Inhalt selbst gebaut wird, steht unter „tabular-Grundlagen“.
Warum Tabellen „gleiten“
Tabellen und Abbildungen können nicht mitten über eine Seitengrenze gebrochen werden; sie müssen vollständig auf einer Seite stehen. Würde LaTeX eine Tabelle genau an der Quelltextstelle setzen und der verbleibende Platz reichte nicht aus, entstünde eine hässliche Lücke oder eine ungeschickt abgeschnittene Tabelle. Deshalb behandelt LaTeX Tabellen und Abbildungen als Floats: Es löst sie vom laufenden Text und verschiebt sie automatisch an eine passende Stelle, oft an den Anfang der nächsten Seite.
Genau dafür verwendet man die table-Umgebung. Man legt ein tabular hinein, gibt ihm mit \caption{…} eine nummerierte Überschrift wie „Tabelle 1“ und macht es mit \label{…} und \ref{…} im Text referenzierbar. Im Fließtext schreibt man also eine Referenz per Nummer — „wie in Tabelle 1 gezeigt“ — und egal, auf welche Seite die Tabelle gleitet, die Referenz zeigt immer auf die richtige Nummer. Das ist der Nutzen von Floats.
Platzierungsangaben [htbp] und [H]
In den eckigen Klammern direkt nach \begin{table} gibt man, Buchstabe für Buchstabe, die Wünsche für die Platzierung an. Es gibt vier Angaben.
| Angabe | Bedeutung | |
|---|---|---|
h | Hier, an der Quelltextposition. h allein ist aber nicht erlaubt; t wird automatisch ergänzt | Here |
t | Oben auf einer Textseite | Top |
b | Unten auf einer Textseite | Bottom |
p | Separate Float-Seite ohne Fließtext | Page |
Ohne Angabe ist die Vorgabe in article wie in book tbp. Mehrere Buchstaben wie [htbp] bedeuten die Menge der erlaubten Orte: „hier, wenn möglich, sonst oben, sonst unten, sonst auf eine Float-Seite“. Wichtig: Die geschriebene Reihenfolge ändert nicht die Reihenfolge, in der LaTeX versucht. LaTeX prüft immer t, dann b, dann p; [htbp] und [bpht] verhalten sich also gleich. Betrachten Sie es als Ausweichkette, falls die erste Wahl nicht passt.
Ein vorangestelltes Ausrufezeichen wie in [!ht] bedeutet: „Nur für diesen Float interne Grenzen ignorieren, etwa zur Zahl der Floats oder zum Verhältnis von Float und Text auf einer Seite, und die Platzierung versuchen.“ ! heißt nicht „hier setzen“ — es lockert nur die Kriterien. Wenn die Tabelle wirklich fest an der Stelle stehen soll, verwenden Sie [H] aus dem Paket float: Mit \usepackage{float} sorgt \begin{table}[H] dafür, dass die Tabelle nicht mehr gleitet und genau an dieser Quelltextstelle gesetzt wird, was am Seitenende große Lücken hinterlassen kann. H lässt sich als „Float, der nicht floatet“ verstehen.
\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}Im Text verweist man darauf mit Table~\ref{tab:sales}; das ~ ist ein geschütztes Leerzeichen, das Wort und Nummer nicht am Zeilenende trennt. Was zu tun ist, wenn die Platzierung hartnäckig nicht mitspielt, behandelt die Seite „Floats und Platzierung“ ausführlich.
Caption, Label und Zentrierung
\caption{…} gibt einem Float eine nummerierte Überschrift, etwa automatisch „Tabelle 1:“ in article oder „Tabelle 1.1:“ in book. Tabellen und Abbildungen verwenden getrennte Zähler, daher vermischen sich Tabellen- und Abbildungsnummern nicht. Mit dem optionalen Argument \caption[short]{full caption} erscheint in der Tabellenliste die Kurzform, im Text die vollständige Fassung.
Zwei Konventionen sind wichtig. Erstens: \caption erhöht den Zähler, daher muss \label nach \caption stehen; umgekehrt zeigt \ref auf die vorherige Nummer. Zweitens die Platzierungskonvention: Üblicherweise steht die Caption bei Tabellen oben und bei Abbildungen unten. In LaTeX steht die Caption *oben*, wenn \caption *vor* dem tabular geschrieben wird, und *unten*, wenn es *danach* steht.
\centering ist eine Deklaration, die den Inhalt eines Floats von linksbündig (Vorgabe) auf zentriert umstellt. In Floats ist \centering üblich, *nicht* die Umgebung center (\begin{center}…\end{center}): center fügt oben und unten zusätzlichen vertikalen Abstand ein, während \centering nur eine Deklaration ist und keinen Abstand hinzufügt. Für feinere Caption-Formatierung (Schrift, Trenner, Breite) verwendet man das Paket caption; siehe „Captions und Subfigures“.
Tabellen breiter als die Seite
Da l-, c- und r-Spalten nicht umbrechen, läuft eine Tabelle mit vielen Spalten oder langen Einträgen über die Textbreite (\textwidth) hinaus. Die schnellste Abhilfe ist, die ganze Tabelle mit \resizebox aus graphicx zu verkleinern. Die Form lautet \resizebox{width}{height}{material}; setzt man einen der beiden Werte auf !, wird proportional zum anderen skaliert, also mit erhaltenem Seitenverhältnis.
\resizebox{\textwidth}{!}{%
\begin{tabular}{lrrrrr}
\hline
項目 & 1月 & 2月 & 3月 & 4月 & 5月 \\
\hline
売上 & 120 & 135 & 128 & 142 & 150 \\
\hline
\end{tabular}%
}Damit wird die Tabelle genau so breit wie der Text. Aber \resizebox *skaliert* den Inhalt: Strichstärken von Zeichen, Linien und sogar mathematischen Symbolen werden gleichmäßig gestreckt oder gestaucht, sodass die Schrift meist nicht mehr zum umgebenden Text passt. Verkleinern ist daher nur eine Notlösung; die richtige Lösung ist, die Tabelle selbst zu reparieren — Spalten streichen, mit p{width} umbrechen oder abkürzen. Statt \resizebox fügt sich das Paket adjustbox oft besser in das Layout ein und kann auch als Umgebung geschrieben werden, etwa \begin{adjustbox}{width=\textwidth}…\end{adjustbox}.
Wer Skalierung ganz vermeiden möchte, kann die gesamte Tabelle um eine Schriftgröße verkleinern: \small oder \footnotesize innerhalb von \begin{table} setzt sie in einer echten kleineren Schrift, ohne Linien- oder Mathematikproportionen zu verzerren. Für feinere Kontrolle kann man etwa \hfill vor den Inhalt setzen, um die Tabelle nach rechts statt in die Mitte zu schieben. Grundlegendere Breitensteuerung, etwa tabularx, das Spalten auf eine Zielbreite dehnt, behandelt die Seite „Erweiterte Tabellenumgebungen“.
Drehen — Tabellen im Querformat
Eine Tabelle, die für eine Hochformatseite zu groß ist, kann ins Querformat gedreht werden und eine ganze Seite nutzen. Das Paket rotating, das auf der Standardgrafikschicht aufbaut, stellt die Umgebung sidewaystable bereit, die anstelle von table verwendet wird. Die Tabelle wird um 90° gedreht auf einer eigenen Seite platziert; Caption und Nummer drehen sich mit, und sie erscheint weiterhin im Tabellenverzeichnis. In zweiseitigen Dokumenten wählt das Paket sogar automatisch die Drehrichtung, damit die Doppelseite natürlich lesbar bleibt. Für Abbildungen gibt es passend sidewaysfigure.
\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}Soll nur ein Teil einer Tabelle in einem beliebigen Winkel gedreht werden, verwendet man \rotatebox{angle}{material} aus graphicx/rotating. Typisch ist etwa, eine einzelne Kopfzelle mit \rotatebox{90}{long column name} hochzustellen; positive Winkel drehen gegen den Uhrzeigersinn. Wichtig: rotating arbeitet mit gedrehten Boxen, und eine Box bleibt immer auf einer Seite. Für laufenden *Text* im Querformat über mehrere Seiten verwendet man lscape oder pdflscape, das die PDF-Seite selbst dreht, nicht rotating.
threeparttable — Tabellen mit Anmerkungen
Häufig möchte man Fußnoten an Tabellenzellen hängen. \footnote innerhalb eines tabular verhält sich aber schlecht: Die Anmerkung springt an den Seitenfuß oder erscheint gar nicht. Das Paket threeparttable löst dieses Problem. Wie der Name sagt, behandelt es eine Tabelle als drei Teile — Titel (Caption), Körper (tabular) und Anmerkungen (tablenotes) — und setzt die Anmerkungen in Tabellenbreite direkt darunter.
Die Verwendung ist einfach: In einer threeparttable-Umgebung stehen der Reihe nach \caption, dann das tabular, dann eine tablenotes-Umgebung. Die Verknüpfung der Noten ist manuell: In der Zelle steht ein Marker wie \tnote{a}, und in tablenotes wird die Anmerkung mit demselben Zeichen als \item[a] … geschrieben. Der Autor hält das absichtlich manuell, weil eine Note oft aus mehreren Zellen referenziert wird. Eine threeparttable floatet nicht von selbst; für Nummer und Platzierung wird das Ganze in table eingeschlossen.
\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}Hier trägt das äußere table Nummer und Platzierung, während threeparttable die drei Teile — Caption, Körper, Anmerkungen — zusammenbindet. \tnote{a} und \tnote{b} in den Kopfzellen erscheinen als kleine hochgestellte Marker, und unter der Tabelle stehen die passenden a- und b-Anmerkungen in derselben Breite wie die Tabelle. Die Umgebung tablenotes kennt Formatierungsoptionen, die so verwendet werden.
| Option | Wirkung | |
|---|---|---|
para | Mehrere Noten ohne Zeilenumbrüche in einem Absatz setzen | Noten nacheinander |
flushleft | Hängenden Einzug der Anmerkungen entfernen | Kein hängender Einzug |
online | Die \item-Marke wird in normaler Größe, nicht hochgestellt, gedruckt | Marke in Normalgröße |
normal | Standardformatierung wiederherstellen (gegen dokumentweite Optionen) | Vorgaben wiederherstellen |
Diese Optionen können dokumentweit gesetzt werden, etwa mit \usepackage[para]{threeparttable}, oder pro Tabelle, etwa mit \begin{tablenotes}[flushleft]. threeparttable gestaltet die Caption selbst nicht; für ein sauberes Überschriftenbild kombiniert man es mit dem Paket caption. Für Anmerkungen an seitenübergreifenden Tabellen (longtable) verwendet man das Schwesterpaket threeparttablex.