Grundlagen von tabular

Die Grundlage für Tabellen ist die tabular-Umgebung. In \begin{tabular}{ccc} ist {ccc} eine Spaltendeklaration: Sie legt vorab fest, wie viele Spalten es gibt und wie jede ausgerichtet ist. Im Rumpf trennt man Zellen mit & und beendet jede Zeile mit \\. Horizontale Linien werden mit \hline gezeichnet. Diese Seite behandelt diese drei Konventionen, die grundlegenden Spaltentypen l, c, r und p{width} sowie den Unterschied zwischen tabular, das den Tabelleninhalt baut, und der gleitenden table-Umgebung, die ihn als nummerierte Tabelle mit Caption platziert.

Die tabular-Umgebung

tabular ist die Umgebung für eine Tabelle aus Zeilen und Spalten. Ihr prägendes Merkmal ist, dass \begin{tabular} direkt danach ein Pflichtargument nimmt: die Spaltendeklaration. \begin{tabular}{ccc} bedeutet „drei zentrierte Spalten“; die hier deklarierte Zahl und Ausrichtung der Spalten bildet das Gerüst der ganzen Tabelle. Jede Zeile im Rumpf wird dann als entsprechend viele, mit & verbundene Zellen geschrieben.

Innerhalb der Tabelle haben drei Zeichen Bedeutung. & (Ampersand) ist der Spaltentrenner zwischen Zellen derselben Zeile. \\ (zwei Backslashes) ist der Zeilenabschluss, der eine Zeile beendet. Und \hline zeichnet an dieser Stelle eine einzelne horizontale Linie über die volle Tabellenbreite. Das \\ nach der allerletzten Zeile kann entfallen; soll darunter aber eine Linie stehen, schließt man die Zeile mit \\ und setzt danach \hline.

latex
\begin{tabular}{ccc}
  \hline
  A & B & C \\
  D & E & F \\
  \hline
\end{tabular}

Dieses Beispiel setzt eine Tabelle mit drei Spalten und zwei Zeilen, oben und unten jeweils von einer horizontalen Linie begrenzt. Der Inhalt jeder Zelle (A bis F) wird entsprechend dem c in der Spaltendeklaration zentriert. Leerzeichen um & werden ignoriert; man darf sie im Quelltext also zur besseren Lesbarkeit auffüllen.

Außerdem akzeptiert \begin{tabular} vor der Spaltendeklaration ein optionales Argument für die vertikale Position in eckigen Klammern: \begin{tabular}[t]{…} richtet die Oberkante, [b] die Unterkante an der Grundlinie der umgebenden Zeile aus. Standardmäßig wird die vertikale Mitte der Tabelle an der Zeile ausgerichtet.

Die grundlegenden Spaltentypen

Das Spaltenargument wird mit einem Buchstaben pro Spalte geschrieben. Vier Typen sind grundlegend: l linksbündig, c zentriert, r rechtsbündig; alle machen die Spalte so breit wie ihren natürlichen Inhalt. Sie brechen nicht um. Ist der Inhalt einer Zelle lang, dehnt sich die Spalte auf die Breite dieser einzelnen Zeile aus, und die Tabelle kann über die Seitenbreite laufen.

Der vierte Typ, p{width}, verhält sich anders. Er setzt die Spalte als Absatzbox (parbox) der angegebenen Breite: Überschreitet der Inhalt diese Breite, bricht er automatisch über mehrere Zeilen um. Für Spalten mit längerem Text verwendet man p{width}. Die Breite kann absolut sein, etwa p{5cm}, oder relativ zum Text, etwa p{0.3\linewidth}. Standardmäßig ist der Inhalt einer p-Spalte oben ausgerichtet und im Blocksatz gesetzt.

TypAusrichtungUmbruch?
lLinksbündigNein (natürliche Breite)
cZentriertNein (natürliche Breite)
rRechtsbündigNein (natürliche Breite)
p{幅}Oben, BlocksatzJa (Umbruch bei angegebener Breite)

Ausgefeiltere Spaltendeklarationen — \multicolumn für Zellen über mehrere Spalten, *{n}{…} zum Wiederholen von Spalten sowie die array-Typen m{width} (vertikal zentriert), b{width} (unten) und die >{…}-Vorverarbeitung — behandelt die Seite „Spaltentypen im Detail“. Mit den vier Typen l, c, r und p{width} lassen sich bereits die meisten Tabellen bauen.

Linien — horizontal und vertikal

Horizontale Linien zeichnet man mit \hline. Zwischen Zeilen oder oben und unten platziert, zieht es eine Linie über die gesamte Tabellenbreite. Zwei direkt nacheinander, \hline\hline, ergeben zwei parallele Linien, also eine Doppellinie. Für eine Linie nur über bestimmte Spalten verwendet man \cline mit einem Spaltenbereich, etwa \cline{2-3}.

Vertikale Linien entstehen durch | (senkrechter Strich) in der Spaltendeklaration. {|l|c|r|} setzt vertikale Linien an die Außenkanten und zwischen alle drei Spalten; zusammen mit \hline wird jede Zelle zu einem Kästchen im Raster. || ergibt eine doppelte vertikale Linie.

latex
\begin{tabular}{|l|c|r|}
  \hline
  左 & 中央 & 右 \\
  \hline
  1 & 2 & 3 \\
  \hline
\end{tabular}

Trotzdem gilt: Übermäßige Linien sollten vermieden werden. Vertikale und doppelte Linien sind im professionellen Satz besonders unerwünscht. Der Autor des Pakets booktabs sagt ausdrücklich „never use vertical rules, and never use double rules“; Standard in Zeitschriftentabellen ist ein sparsames Design mit nur wenigen horizontalen Linien. Lesbares Tabellendesign und die Idiome \toprule / \midrule / \bottomrule behandelt die Seite „Linien und publikationsreife Tabellen“ ausführlich.

Zeilenumbrüche und Zeilenabstand

Der Zeilenabschluss \\ kann ein optionales Argument nehmen. Eine Länge in eckigen Klammern, etwa \\[2pt], fügt zusätzlichen vertikalen Abstand unter dieser Zeile ein; ein negativer Wert zieht zusammen. Das hilft, wenn Linien zu eng am Text stehen oder Zeilen mehr Luft brauchen.

\\ ist im Kern ein Zeilenumbruchsbefehl. Es beendet nicht nur Tabellenzeilen, sondern dient auch in mathematischen Matrizen und Ausrichtungsumgebungen wie align als derselbe „Zeilentrenner“. Das Gefühl „Spalten mit & trennen, Zeilen mit \\ umbrechen“ überträgt sich also direkt von Tabellen auf ausgerichtete Mathematik.

Um alle Zeilen gleichmäßig höher zu machen, kann man mit \renewcommand{\arraystretch}{1.3} den Zeilenhöhenfaktor ändern. Der Abstand zwischen Spalten, standardmäßig 6pt auf jeder Seite, wird über die Länge \tabcolsep gesteuert. Diese feineren Maßanpassungen werden ebenfalls auf den Seiten „Spaltentypen im Detail“ und „Linien und publikationsreife Tabellen“ behandelt.

tabular und die table-Umgebung

Sie werden oft verwechselt, aber tabular und table sind völlig verschiedene Dinge. tabular setzt die Tabelle selbst, also den Inhalt von Zeilen und Spalten, und kann überall im Textmodus stehen: mitten im Absatz, in einem Listeneintrag, in einer Abbildungs-Caption, sogar in einer Fußnote, solange es nicht innerhalb von $…$ steht. tabular allein hat keine Caption, keine Nummer und keine Platzierungssteuerung.

Die table-Umgebung dagegen ist ein Float, den man um ein tabular legt. table liefert eine Überschrift mit automatisch fortlaufender Nummer über \caption{…} („Tabelle 1“ usw.), Querverweise über \label{…} und \ref{…} sowie Platzierungsangaben wie [htbp], mit denen LaTeX entscheidet, wo auf der Seite die Tabelle steht. Ist eine Tabelle groß und könnte an einen Seitenumbruch geraten, kann LaTeX sie als Float an eine geeignete Stelle verschieben. Die vollständige Verwendung der table-Umgebung, also Captions, Nummerierung und Platzierung, wird auf einer eigenen Seite behandelt.

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

Hier übernimmt das äußere table die nummerierte Caption „Table 1: Quarterly sales“ und die Platzierung, während das innere tabular den Inhalt setzt. \centering zentriert die Tabelle horizontal. Entscheidend ist die Arbeitsteilung: Inhalt in tabular, Überschrift und Platzierung in table. Ein tabular allein reicht zum Setzen einer Tabelle, doch wenn sie in einer Arbeit oder einem Bericht als „Tabelle N“ referenziert werden soll, wird sie in table eingeschlossen.

Ein vollständiges Beispiel

Zum Schluss ein tabular, das das Bisherige kombiniert: eine linksbündige Bezeichnung in Spalte 1, eine umbrechende p{width}-Spalte in Spalte 2 und eine rechtsbündige Zahl in Spalte 3.

latex
\begin{tabular}{l p{5cm} r}
  \hline
  項目 & 説明 & 価格 \\
  \hline\hline
  りんご & 蜜入りの大玉。贈答にも使われる人気の品種です。 & 380 \\
  みかん & 甘くて手で剥ける小ぶりの柑橘。 & 120 \\
  \hline
\end{tabular}

Das ergibt eine Tabelle mit drei Spalten. Spalte 1 („Item“) steht links in natürlicher Breite, Spalte 3 („Price“) ist rechtsbündig. Spalte 2 („Description“) ist eine 5cm breite p-Spalte; der lange Text bricht daher bei 5cm automatisch um, und nur diese Zelle wird mehrzeilig, wobei die Zeilenhöhe mitwächst. Unter der Kopfzeile steht eine doppelte Linie \hline\hline, oben und unten je eine einfache \hline. Derselbe lange Text in einer l- oder r-Spalte würde seitlich wachsen, ohne umzubrechen — das ist der entscheidende Unterschied zu p{width}.