Mehrere Tabellenzellen zu einer zusammenzufassen — also Zellen verbinden — teilt sich sauber nach Richtung und Werkzeug. Horizontal über mehrere Spalten spannt der Standardbefehl \multicolumn; vertikal über mehrere Zeilen spannt \multirow aus dem Paket multirow; die Kombination beider verbindet einen rechteckigen Block. Wenn dagegen nur eine einzelne Zelle auf mehrere Zeilen umbrechen soll, ist das keine Verbindung, sondern Aufgabe von makecell. Diese Seite geht die vier Werkzeuge nacheinander durch, einschließlich Ausrichtungsfallen.
Horizontal verbinden — \multicolumn
\multicolumn verbindet benachbarte Spalten innerhalb einer Zeile. Es gehört zu Standard-LaTeX; kein Paket ist nötig. Die Form ist \multicolumn{n}{spec}{text} mit drei Argumenten: n ist die Zahl der zu spannenden Spalten, spec gibt an, wie die entstandene Einzelzelle ausgerichtet wird (eine einspaltige Spaltendeklaration), und text ist ihr Inhalt. \multicolumn{2}{c}{Header} verbindet zum Beispiel zwei Spalten zu einer zentrierten Zelle.
Entscheidend ist: spec beschreibt die eine verbundene Spalte und übernimmt nicht einfach die ursprünglichen n Spalten. Daher muss genau eines von l, c oder r stehen. spec darf außerdem eine vertikale Linie | oder @{…} enthalten und damit nur für diese verbundene Zelle Linien und Spaltenabstände überschreiben. Endet eine von zwei benachbarten \multicolumn-Zellen mit | und beginnt die nächste damit, wird nur eine Linie gezeichnet, nicht zwei.
\begin{tabular}{lcc}
\hline
\multicolumn{3}{c}{売上集計} \\
\hline
項目 & 上期 & 下期 \\
\hline
国内 & 120 & 145 \\
海外 & 80 & 96 \\
\hline
\end{tabular}Die erste Zeile verwendet hier \multicolumn{3}{c}{Sales summary}, um die eigentlich drei Spalten zu einer zentrierten Zelle zusammenzufassen, die als Titel der ganzen Tabelle dient. Auch in einer verbundenen Zeile müssen die Zellen dieser Zeile insgesamt die deklarierte Spaltenzahl ergeben, hier 3. Da \multicolumn{3}{…} alle drei Spalten abdeckt, braucht diese Zeile kein &.
Merken sollte man sich auch die Form mit n gleich 1. \multicolumn{1}{…}{…} spannt keine Spalten, kann aber die Ausrichtung nur dieser Zelle überschreiben oder die vertikale Linie | an dieser Stelle entfernen. Um nur die Überschrift einer Zahlenspalte (r) zu zentrieren, schreibt man \multicolumn{1}{c}{Header}; um in einer gerahmten Tabelle eine vertikale Linie nur für eine Zelle zu unterdrücken, schreibt man \multicolumn{1}{c}{…} ohne | in spec.
Vertikal verbinden — multirow
Eine Zelle, die vertikal mehrere Zeilen spannt, lässt sich nicht mit einem Standardbefehl erzeugen; man lädt das Paket multirow (\usepackage{multirow} in der Präambel). Kern ist \multirow{n}{width}{text}: n ist die Zahl der zu spannenden Zeilen, width die Zellbreite und text der Inhalt. Mit * als Breite wird der Text in seiner natürlichen Breite gesetzt; \multirow{3}{*}{Label} ist die direkteste Form.
Die entscheidende Regel lautet: Die Zellen unterhalb des Bereichs von \multirow bleiben leer. \multirow steht in der oberen Zeile, und in den folgenden Zeilen schreibt man an derselben Spaltenposition nur & und keinen Inhalt. Vergisst man das, wird der Inhalt der unteren Zeilen über den von \multirow gesetzten Text gedruckt. Ein positives n spannt „diese Zeile und die n−1 Zeilen darunter“, ein negativer Wert „diese Zeile und die −n−1 Zeilen darüber“.
\usepackage{multirow}
% ...
\begin{tabular}{|l|l|c|}
\hline
\multirow{2}{*}{果物} & りんご & 380 \\
& みかん & 120 \\
\hline
\multirow{2}{*}{野菜} & 人参 & 90 \\
& 大根 & 150 \\
\hline
\end{tabular}Hier spannen „Fruit“ und „Vegetable“ in Spalte 1 jeweils zwei Zeilen vertikal. Entscheidend ist, dass \multirow{2}{*}{Fruit} in der oberen Zeile steht und die Zelle darunter in Spalte 1 mit & und ohne Inhalt übersprungen wird. Weil width * ist, wird das Label in natürlicher Breite gesetzt und über die zwei Zeilen vertikal zentriert.
\multirow hat außerdem zwei optionale Argumente. Das führende [vpos] setzt die vertikale Ausrichtung, standardmäßig zentriert c, oben t, unten b. Das [vmove] nach text ist eine Länge zur Feineinstellung, die den Text nach oben verschiebt, bei negativem Wert nach unten. Wenn die Zentrierung im Verhältnis zu Linien leicht falsch wirkt, korrigiert man mit einem kleinen Wert, etwa \multirow{3}{*}[2pt]{…}. Eine absolute width, z. B. \multirow{2}{4em}{…}, setzt den Inhalt als parbox dieser Breite, sodass lange Labels umbrechen.
| Argument | Rolle | Hinweise |
|---|---|---|
[vpos] | Vertikale Ausrichtung (optional, vorne) | Vorgabe c; außerdem t / b |
n | Zu spannende Zeilen (Pflicht) | Positiv nach unten, negativ nach oben |
width | Zellbreite (Pflicht) | * für natürliche Breite; absoluter Wert bricht als parbox um |
[vmove] | Positionsfeineinstellung (optional, nach text) | Positiv hebt, negativ senkt |
Block verbinden — \multirow in \multicolumn
Für einen rechteckigen Block, der in beide Richtungen spannt, kombiniert man \multirow und \multicolumn. Die Reihenfolge ist fest: \multirow gehört in \multicolumn. Die offizielle Dokumentation nennt \multicolumn{2}{c}{\multirow{3}{*}{Multi-multi}} als Beispiel und sagt ausdrücklich, die umgekehrte Verschachtelung „will not work“. Merken Sie sich: Das äußere \multicolumn übernimmt die horizontale Spanne, das innere \multirow die vertikale.
Um Linien um den Block zu ziehen, verwendet man statt \hline, das die volle Breite spannt, eine auf einen Spaltenbereich begrenzte Linie, damit der verbundene Bereich nicht durchschnitten wird. Standard ist \cline{i-j} für Spalten i bis j; mit booktabs nimmt man \cmidrule{i-j}. Indem man den Bereich unter der verbundenen Zelle von der Linie ausnimmt, lässt sich nur die Blockkontur sauber zeichnen.
\usepackage{multirow}
% ...
\begin{tabular}{|l|l|c|}
\hline
\multicolumn{2}{|c|}{\multirow{2}{*}{地域・分類}} & 件数 \\
\multicolumn{2}{|c|}{} & \\
\hline
東日本 & 関東 & 12 \\
\cline{1-3}
西日本 & 関西 & 9 \\
\hline
\end{tabular}Hier entsteht oben links ein rechteckiger Block von 2 Spalten × 2 Zeilen. In der ersten Zeile verbindet \multicolumn{2}{|c|}{\multirow{2}{*}{Region / class}} zwei Spalten und zwei Zeilen, und die zweite Zeile nimmt dieselbe Position mit einem leeren \multicolumn{2}{|c|}{} auf, weil der Blockteil der unteren Zeile wegen \multirow leer bleibt. \cline{1-3} trennt die Rumpfzeilen, während \hline den Block oben und unten abschließt.
Umbruch innerhalb einer Zelle — makecell
Eine Unterscheidung ist wichtig: Eine einzelne Zelle über mehrere Zeilen umbrechen zu wollen, ist keine Zellverbindung. Da l-, c- und r-Spalten nicht umbrechen, ist ein direktes \\ in einer solchen Zelle ein Fehler. Soll nur ein kurzer Text an einer gewünschten Stelle umbrechen, ist \makecell{…} aus dem Paket makecell (\usepackage{makecell}) der einfachste Weg.
\makecell{line1\\line2} setzt den Inhalt als kleines einspaltiges tabular und verwendet \\ für einen erzwungenen Zeilenumbruch. Ein optionales Argument legt die Ausrichtung fest, etwa \makecell[l]{…} (links) oder \makecell[t]{…} (oben), wobei je ein Buchstabe für vertikale und horizontale Ausrichtung übergeben wird; Vorgabe ist beides zentriert. Für Spaltenköpfe gibt es außerdem \thead{…} mit gemeinsamer Schrift und Abständen.
\usepackage{makecell}
% ...
\begin{tabular}{lc}
\hline
\thead{項目} & \thead{前年比\\(\%)} \\
\hline
売上高 & \makecell[r]{+8.2\\(過去最高)} \\
\hline
\end{tabular}Hier wird die Überschrift „Year-on-year (%)“ mit \thead{Year-on-year\\(\%)} über zwei Zeilen gestapelt, und die Zahl im Rumpf mit \makecell[r]{+8.2\\(record high)} rechtsbündig über zwei Zeilen gesetzt. Beides bricht nur innerhalb einer einzelnen Zelle um; nichts wird mit einer Nachbarzelle verbunden. Ist der Inhalt lang und soll automatisch nach Breite umbrechen, ist eine p{width}-Spalte oder ein Verwandter der richtige Weg, nicht \makecell.
Ausrichtungsfallen und Werkzeugwahl
Die häufigsten Stolperstellen im Überblick: Erstens vertikale Zentrierung. \multirow-Text steht standardmäßig in der Zeilenmitte, kann aber je nach Zeilenhöhe und Linienstärke etwas zu hoch oder zu tief wirken; wählen Sie dann t/b über [vpos] oder verschieben Sie mit kleinem [vmove]. Zweitens Zeilenkonsistenz: Auch in einer Zeile mit \multicolumn müssen die Zahl der & und die verbundenen Spannen zusammen der deklarierten Spaltenzahl entsprechen. Drittens Verschachtelungsreihenfolge: Bei Blockverbindungen steht \multirow immer innerhalb von \multicolumn.
Die Werkzeugwahl ist einfach: Spalten spannt \multicolumn, Zeilen spannt \multirow, für ein Rechteck nimmt man beide, und \makecell nur für Zeilenumbrüche innerhalb einer Zelle. Soll langer Text nach Breite umbrechen, ist eine p{width}-Spalte der richtige Weg, oder m{width} aus array für vertikale Zentrierung; sie bricht automatisch um. Spaltendeklarationen selbst stehen auf „Spaltendeklaration, Ausrichtung und Breite“, breite überlaufende Tabellen auf „Erweiterte Tabellenumgebungen“.