Farbige Tabellen (colortbl)

Das Paket colortbl liefert die Mechanik, um Zellen, Zeilen und Spalten einer Tabelle mit Hintergrundfarbe zu versehen und Tabellenlinien einzufärben. Geladen wird es mit einer Zeile: \usepackage[table]{xcolor}. Die Option table von xcolor lädt colortbl automatisch, sodass beide Hälften zugleich verfügbar sind: Farbnamen aus xcolor, Tabellenschattierung aus colortbl. Im Kern stehen drei Befehle — \rowcolor (Zeile färben), \columncolor (Spalte färben) und \cellcolor (Zelle färben) — dazu \rowcolors für automatische Streifen und \arrayrulecolor für gefärbte Linien. Diese Seite behandelt alle fünf und ihre Rangfolge: Zelle schlägt Zeile schlägt Spalte.

Laden — die table-Option von xcolor

colortbl kann allein geladen werden, empfohlen ist aber der Einstieg über xcolor. Wird xcolor mit der Option table geladen, werden sowohl xcolor (Farbnamen, Mischungen, Modellumrechnung) als auch colortbl (Färben in Tabellen) aktiviert. colortbl selbst hängt intern von den Paketen array und color ab; beim Laden über xcolor kommen sie automatisch mit.

document.tex
\usepackage[table]{xcolor}

Diese eine Zeile aktiviert alles, was unten beschrieben wird: \rowcolor, \columncolor, \cellcolor, \rowcolors und \arrayrulecolor. In beamer ist die Schreibweise etwas anders: Man gibt es als Klassenoption an, \documentclass[xcolor=table]{beamer}. Farben können einfache Namen wie gray und red sein oder beliebige xcolor-Ausdrücke wie gray!20 (20% Intensität) oder red!30!yellow (30% Rot in Gelb gemischt). Für dezente Hintergründe ist eine verdünnte Angabe wie name!20 üblich.

Drei Befehle: Zeile, Spalte, Zelle

Im Kern stehen drei Befehle. \rowcolor{color} schattiert eine ganze Zeile, \columncolor{color} eine ganze Spalte und \cellcolor{color} eine einzelne Zelle. Alle drei haben dieselbe Form, etwa \columncolor[model]{color}[left overhang][right overhang]: ein optionales Farbmodell vor der Farbe und optionale linke / rechte Überhänge danach. Der Überhang gibt an, wie weit die Farbfläche über die Spalte hinausreicht; ohne Angabe gilt \tabcolsep pro Seite, bei array \arraycolsep.

Wichtig ist, dass die drei Befehle an drei verschiedenen Stellen stehen. \rowcolor steht am Zeilenanfang, vor dem Inhalt der ersten Zelle dieser Zeile, also direkt nach dem vorherigen \\. \columncolor steht nicht im Rumpf, sondern in der Spaltendeklaration, in der Form >{\columncolor{gray!20}}; der >{…}-Haken aus array fügt Material direkt vor jede Zelle dieser Spalte ein. Nur \cellcolor ist frei: Es darf beliebig innerhalb der betroffenen Zelle stehen.

latex
\begin{tabular}{>{\columncolor{gray!20}}l c r}
  \rowcolor{blue!30}
  項目 & 数量 & 価格 \\
  りんご & 3 & 380 \\
  みかん & \cellcolor{yellow!40}5 & 120 \\
\end{tabular}

Hier wird Spalte 1 durch >{\columncolor{gray!20}} hellgrau schattiert, die Kopfzeile durch \rowcolor{blue!30} hellblau, und nur die Mengenzelle von „mikan“ wird mit \cellcolor{yellow!40} gelb hervorgehoben. Beachten Sie, dass \rowcolor am Anfang der Kopfzeile steht, während \columncolor im >{} der Spaltendeklaration lebt.

Rangfolge — Zelle vor Zeile vor Spalte

Treffen alle drei Farben in einer Zelle zusammen, ist klar geregelt, welche gewinnt. \cellcolor überschreibt \rowcolor, und \rowcolor überschreibt \columncolor — also Zelle vor Zeile vor Spalte. Man kann sie daher natürlich schichten: eine ganze Spalte grau färben (\columncolor), nur die Kopfzeile blau machen (\rowcolor) und eine einzelne Zelle gelb setzen (\cellcolor). Je enger der Geltungsbereich, desto höher die Priorität.

Bevor es \cellcolor gab, musste man eine einzelne Zelle umständlich mit \multicolumn{1}{>{\columncolor{…}}c}{…} schattieren. Das hat echte Nachteile: Der Inhalt kann das Auslösen der Färbung verhindern, und die Spaltenausrichtung muss von Hand kopiert werden, was bei p{}-Spalten fehleranfällig ist. Der Paketautor nennt \multicolumn{1} sogar „silly“. Für eine einzelne Zelle nimmt man schlicht \cellcolor.

Automatische Streifen — \rowcolors

Abwechselnd gefärbte Zeilen, also Zebrastreifen, automatisiert xcolor mit \rowcolors{start}{odd-row color}{even-row color}. Beachten Sie das abschließende s; \rowcolor ohne s ist ein anderer Befehl. Einmal vor der Tabelle gesetzt, färbt es die folgenden Zeilen wie angegeben abwechselnd. Das erste Argument ist die Zeilennummer, ab der gefärbt wird; 2 überspringt eine Kopfzeile. Beide Farbangaben dürfen leer bleiben und bedeuten dann „keine Farbe“.

latex
\rowcolors{2}{gray!15}{white}
\begin{tabular}{l r r}
  項目 & 数量 & 価格 \\
  りんご & 3 & 380 \\
  みかん & 5 & 120 \\
  ぶどう & 2 & 600 \\
  もも & 4 & 450 \\
\end{tabular}

Dieses Beispiel beginnt mit den Streifen in Zeile 2 und wechselt zwischen gray!15 (hellgrau) und white. Die Kopfzeile, Zeile 1, bleibt ungefärbt; nur die Datenzeilen wechseln. \rowcolors nimmt außerdem ein führendes optionales Argument: \rowcolors[\hline]{2}{…}{…} führt vor jeder Zeile einen Befehl wie \hline aus. Da ein ausdrückliches \rowcolor oder \multicolumn die automatische \rowcolors-Färbung überschreibt, kann eine einzelne Zeile mitten im Streifenblock anders gefärbt werden.

BefehlWas gefärbt wirdWo er steht
\columncolor{c}Ganze SpalteIm >{…} der Spaltendeklaration
\rowcolor{c}Ganze ZeileZeilenanfang, vor der ersten Zelle
\cellcolor{c}Einzelne ZelleIn dieser Zelle, beliebig
\rowcolors{n}{a}{b}Abwechselnde ZeilenEinmal vor der Tabelle
\arrayrulecolor{c}Folgende LinienAußerhalb / Zeilenanfang / >{} in der Deklaration

Linien färben — \arrayrulecolor

Die Farbe von Linien (\hline, \cline und vertikales |) wird mit \arrayrulecolor{color} gesetzt. Das ist eine globale Deklaration mit denselben Argumenten wie \color; sie kann außerhalb der Tabelle, am Zeilenanfang oder in einem >{} der Deklaration stehen. Der Haken: Mitten in der Tabelle angegeben, betrifft sie nur danach gezeichnete Linien. Vertikale Linien, die bereits in der Präambel deklariert wurden, behalten ihre alte Farbe. Zur Rückkehr zur Vorgabe deklariert man erneut \arrayrulecolor{black}.

Der Abstand zwischen Doppellinien aus || oder \hline\hline bleibt standardmäßig weiß. Soll er ebenfalls gefärbt werden, verwendet man \doublerulesepcolor{color} zusammen mit der Länge \doublerulesep, der Breite des Abstands. Das folgende Beispiel macht die Linien blau und die Lücke der Doppellinie gelb.

latex
\setlength\arrayrulewidth{1pt}\arrayrulecolor{blue}
\setlength\doublerulesep{2pt}\doublerulesepcolor{yellow}
\begin{tabular}{||l|c||}
  \hline\hline
  one & two \\
  three & four \\
  \hline\hline
\end{tabular}

Um eine einzelne vertikale Linie von Hand zu färben, kann man auch !{\color{green}\vline} anstelle von | in die Spaltendeklaration setzen, ohne einen Spezialbefehl. \arrayrulewidth steuert die Linienstärke; gefärbte Haarlinien können schwer zu sehen sein, daher macht man sie bei Bedarf etwas dicker.

Verwendung mit booktabs und Hinweise

colortbl funktioniert mit booktabs, aber die Kombination hat eine Eigenheit. booktabs setzt ober- und unterhalb von \toprule, \midrule und \bottomrule etwas Abstand (\aboverulesep und \belowrulesep), wodurch zwischen der Zeilenhintergrundfarbe und der Linie eine weiße Lücke bleibt. Soll die Füllung bis zur Linie reichen, setzt man diese Abstände häufig auf 0pt und verschiebt den Betrag stattdessen nach \extrarowheight.

Ein weiteres klassisches Problem: Hoher Inhalt oder große Schrift kann das \hline oder den oberen Rand einer Farbfläche direkt darüber berühren. Dafür bietet colortbl die Länge \minrowclearance: \setlength\minrowclearance{2pt} fügt über hohen Zeilen etwas Abstand ein. Maß halten ist wichtig; wenn Versalhöhe plus dieser Wert die normale Zeilenhöhe überschreitet, wird der Zeilenabstand ungleichmäßig.

Zum Schluss ein Wort zur Zurückhaltung. Die meisten Gestaltungsrichtlinien warnen vor zu vielen Linien und Farben. Hintergrundfarben wirken am besten, wenn sie auf eine hervorzuhebende Kopfzeile oder dezente Streifen zur besseren Leseführung beschränkt bleiben. Die Angabe der Farben selbst, also Namen, Modelle und Mischungen, steht auf der Seite „Farben (xcolor)“; Linienkonventionen auf der Seite „Linien“.