Die LaTeX-Grundausstattung erlaubt nur das Setzen recht schlichter Tabellen. Mit einigen Zusatzpaketen bohren Sie die Funktionen für professionell gestaltete Tabellen kräftig auf.
LaTeX setzt nicht nur Ihre Texte in ansprechendem Layout, sondern bringt auch Daten und Inhalte in Tabellen übersichtlich und ansprechend in Form. Die LaTeX-Grundausstattung bringt die Umgebung tabular mit, die für grundlegende Tabellenfunktionen alles Nötige bereitstellt. Wer weitere Pakete installiert, dem liefert LaTeX noch mehr Möglichkeiten für den professionellen Einsatz von Tabellen.
Aus der Vielzahl der verfügbaren Pakete stellen wir Ihnen im Rahmen des Artikels folgende vor: Das Paket booktabs [1] optimiert Ihre Tabellen für den Druck. Wer es farbig will, liegt mit dem Paket colortbl [2] genau richtig. Das Paket multirow [3] erlaubt es, Zellen einer Spalte zu verbinden. Wer die Funktionen einer Tabellenkalkulation braucht, findet mit dem Paket spreadtab [4], was er sucht. Viele weitere Möglichkeiten für den Umgang mit Tabellen bringt das Paket tabu [5] mit.
Beispiel-Listings
Der Umfang der vollständigen LaTeX-Beispiele würde den Rahmen des Artikels sprengen, in den Listing-Kästen finden Sie daher nur die im Artikel referenzierten Passagen. Die ungekürzten Beispiele finden Sie in unserem Download-Bereich [14].
Die Möglichkeiten, die LaTeX für den Tabellensatz bietet, erläutern wir im Folgenden am Beispiel eines Stundenplans und einer Rechnung. Listing 1 enthält den Beispielcode für den Stundenplan, Abbildung 1 zeigt das Ergebnis. Den Code für die Rechnung finden Sie in Listing 2, das Ergebnis in Abbildung 2.
Listing 1
...
\usepackage{tabu,multirow,hyperref,colortbl,xcolor}
...
\title{Stundenplan}
\author{}
\date{WS 2014/2015}
...
\begin{document}
\maketitle
...
\newcommand{\minitab}[2][c]{\begin{tabular}{#1}#2\end{tabular}}
\begin{tabu}{|>{\columncolor[named]{lightgray}}c|X[l]X[r]|X[l]X[r]|X[l]X[r]|X[l]X[r]|X[l]X[r]|}
...
\rowcolor[named]{gray}
\textsf{\textbf{Zeit}} & \multicolumn{2}{c|}{\textsf{\textbf{Montag}}} & ... \\
...
\multirow{-2}*{\minitab[c]{\textsf{\textbf{10--12}}}} & \multicolumn{2}{c|}17 {\cellcolor[named]{green}\textbf{VL Ethik}} & ... \\
\hline
...
\multirow{-2}*{...} & ... & \multicolumn{2}{c|}{\cellcolor[named]{blue}\textbf{HS Wahrheitstheorien}\footnote{14-tägig.}} & & & & \\
...
\end{tabu}
\end{document}

Abbildung 1: Dieser Stundenplan ist ein Beispiel für die Möglichkeiten, die der Tabellensatz mit LaTeX bietet.
Gerüst aufstellen
Statt der LaTeX-Standardumgebung tabular für Tabellen verwenden Sie das Paket tabu (Listing 1, Zeile 2), das eine Vielzahl von Möglichkeiten für das Gestalten von Tabellen mitbringt. Nach den Titelinformationen in der Präambel (Zeilen 4 bis 6) und dem Befehl, der diese Titelinformationen im Dokument ausgibt (Zeile 9), kann es mit der Tabelle losgehen.
Die Tabelle steht in der tabu-Umgebung (Zeile 12). Die zweite der geschweiften Klammern des Befehls definiert elf Spalten, der senkrechte Strich | zeichnet eine vertikale Linie an der entsprechenden Stelle. Die Zellen der ersten Spalte lassen Sie zentriert ausrichten. Neben den üblichen Befehlen zum Ausrichten der Zellen stellt tabu noch den Befehl X bereit, der die so gekennzeichneten Spalten gleichmäßig über die Breite verteilt. Die Ausrichtung geben Sie in einer eckigen Klammer dahinter an, hier abwechselnd links- und rechtsbündig.
Überlänge
Sowohl die LaTeX-Standard-Umgebung tabular, als auch tabu erzeugen nur Tabellen ohne Seitenumbruch. Soll die Tabelle über mehrere Seiten laufen, dann verwenden Sie stattdessen am besten die Umgebung longtabu, die einen integralen Teil des tabu-Pakets darstellt.
Unser Stundenplan erfordert für die Uhrzeiten in der ersten Spalte jeweils zwei miteinander verbundene übereinanderliegende Zellen. Dies erledigt auch in einer tabu-Tabelle das Paket multirow. Zunächst definieren Sie dazu den neuen Befehl \minitab (Zeile 11), mit dessen Hilfe Sie dann später eine Tabelle innerhalb einer Tabelle generieren.
Übereinanderliegende Zellen verbindet der Befehl \multirow (Zeile 17). Üblicherweise steht er in der obersten der Zellen, die verbunden werden sollen; die Anzahl der Zellen geben Sie als positive Zahl innerhalb der ersten geschweiften Klammer an. Im Beispiel gehen wir umgekehrt vor, um die Zellen einfärben zu können, ohne dass dies den Text überdeckt. Der Befehl steht in der untersten der zu verbindenden Zellen, und die Anzahl der Zellen nach oben hin tragen Sie als negativen Wert in die erste geschweifte Klammer ein.
In der Titelzeile verbinden Sie für die einzelnen Wochentage horizontal jeweils zwei Zellen (Zeile 15). Dafür kommt der Befehl \multicolumn zum Einsatz, in dessen erste geschweifte Klammer die Anzahl der zu verbindenden Zellen definiert wird. Die Ausrichtung der Zellen einschließlich der zu zeichnenden vertikalen Linien gehört in die zweite der geschweiften Klammern, der Inhalt dann in die dritte.
Wie bei Tabellen üblich trennt auch in tabu ein Kaufmannsund (&) die einzelnen Zellen einer Spalte voneinander ab. Der doppelte umgekehrte Schrägstrich (\\) dient dazu, eine Zeile abzuschließen. Horizontale Linien zeichnen Sie wie gewohnt mit dem Befehl \hline.
Für die LaTeX-Standard-Umgebung tabular stellen Fußnoten und deren korrekte Verlinkung innerhalb von Tabellen ein gewisses Problem dar, das sich nur durch Tricks umgehen lässt. In tabu dagegen funktionieren Fußnoten problemlos (Zeile 20). Laden Sie wie in Zeile 2 zusätzlich das Paket hyperref [6], dann klappen auch Verlinkungen.
Farbenfroh
Tabellen müssen nicht nur aus schwarzen Linien bestehen. Möchten Sie ein wenig Farbe ins Spiel bringen, dann liegen Sie mit dem Paket colortbl genau richtig (Listing 1, Zeile 2). Das Paket lädt seinerseits automatisch das Paket color, das rudimentäre Funktionen für den Einsatz von Farben bereitstellt. Wenn Sie auf umfangreichere Möglichkeiten für den Umgang mit Farben nicht verzichten wollen, laden Sie zusätzlich das Paket xcolor [7].
Da wir bereits in einem anderen Artikel ausführlich auf die Verwendung von Farben mit LaTeX eingegangen sind [8], beschränken wir uns an dieser Stelle auf das Einfärben von Tabellen. Wie bei einem Tabellenkalkulationsprogramm lassen sich auch mit LaTeX einzelne Zelle oder auch auf einen Schlag ganze Zeilen oder Spalten einfärben.
Im Stundenplan soll die oberste Zeile mit den Wochentagen in einem dunklen Grau erscheinen. Der Befehl dafür steht im Bereich, der den Zeileninhalt beschreibt (Zeile 13). Die Spalte mit den Uhrzeiten bekommt ein helles Grau (Zeile 12). Der entsprechende Aufruf dafür findet in der zweiten geschweiften Klammer des Befehls Platz, der die tabu-Umgebung eröffnet.
Alle Zellen mit gleichen Lehrveranstaltungen bekommen jeweils dieselbe Farbe (Zeile 17). Genügt das Einfärben der Zelleninhalte nicht aus, dann bietet Ihnen die LaTeX-Klasse colortbl weitere Möglichkeiten, die Tabelle farbig zu gestalten. Mir ihr färben Sie zum Beispiel die Linien der Tabelle bunt ein.
Druckreif
Das Paket booktabs optimiert Tabellen für den Druck, etwa für das Gestalten von Tabellen in Büchern, wissenschaftlichen Veröffentlichungen, Artikeln oder – wie in unserem Beispiel – schlicht in einer Rechnung. Nach dem Laden des Pakets in der Präambel (Listing 2, Zeile 3), passt sich das Layout der Tabelle automatisch an. Das Paket erhöht den Abstand zwischen Inhalt und Zellenrand, sodass die Tabelle optisch ansprechender wirkt. Das Layout verzichtet bewusst auf vertikale Linien und Farben, sodass die Tabelle leichter wirkt.
Den oberen und unteren Rand der Tabelle bildet jeweils eine dicke horizontale Linie, die Sie mit den Befehlen \toprule und \bottomrule einfügen (Zeilen 7 und 14). Für dünne horizontale Linien innerhalb der Tabelle steht der Befehl \midrule (Zeile 9) zur Verfügung, der den Befehl \hline ersetzt. Das Layout sieht horizontale Linien nur unter Spaltenüberschriften vor, zwischen den einzelnen Werten erscheinen keine horizontalen Linien.
Listing 2
...
\usepackage[ngerman]{babel} % Sprache: deutsch
\usepackage{booktabs,spreadtab,tabu,numprint,eurosym}
...
\nprounddigits{2}
\begin{spreadtab}{{tabu}{rXN{3}{2}N{4}{2}r}}
\toprule
@Anz. & @Posten & @\multicolumn{1}{r}{Einzelpreis} & @\multicolumn{1}{r}{Gesamtpreis} & @ \\
\midrule
10 & @Edwin A. Abbott: Flatland & :={9.95}\ \euro & :={a2*c2}\ \euro & @[2] \\
...
@\multicolumn{2}{l}{Rechnungsbetrag} & @\multicolumn{1}{r}{} & :={sum(d2:d4)}\ \euro & @ \\
...
\bottomrule
\end{spreadtab}
\end{document}

Abbildung 2: Diese Rechnung zeigt ein weiteres Beispiel für die Möglichkeiten, die der Tabellensatz mit LaTeX bietet. Auch Tabellenkalkulation stellt für LaTeX kein Problem dar.
Gut kalkuliert
LaTeX kann nicht nur Tabellen zeichnen, sondern mithilfe des Pakets spreadtab darin auch Rechenoperationen ausführen. Die Tabellenkalkulation gehört in die Umgebung spreadtab, in der Sie auch wählen, mit welcher Umgebung LaTeX die Tabelle erzeugen soll (Listing 2, Zeile 6). Statt tabular-Umgebung kommt auch in diesem Beispiel tabu zum Einsatz. Als Optionen geben Sie dem Aufruf die Ausrichtung der zu erzeugenden fünf Spalten mit. Neben den üblichen Parametern und der bereits vorgestellten Option X von tabu verwendet das Beispiel die Option N aus dem Paket numprint [9]. Sie sorgt dafür, dass LaTeX die Zahlen am Dezimalkomma ausrichtet.
In der ersten geschweiften Klammer der Option N steht die Anzahl der Zeichen vor dem Dezimalkomma, in der zweiten die Anzahl der Zeichen dahinter. Welche Zeichen LaTeX als Dezimal- und Tausendertrenner nutzt, geben Sie über die Spracheinstellung des Dokuments vor. Das Beispiel wählt über das babel-Paket [10] Deutsch als Sprache aus (Zeile 2), sodass LaTeX ein Komma als Dezimaltrenner und einen kleinen Leerraum als Tausendertrenner erzeugt. Im LaTeX-Code dagegen müssen Sie als Dezimaltrenner stets einen Punkt verwenden (Zeile 10) und dürfen die Tausender-Stellen auf keinen Fall vom Rest der Zahl abtrennen.
Die Beträge in der Rechnung soll LaTeX stets mit zwei Nachkommastellen ausgeben. Dafür sorgt der Befehl nprounddigits in Zeile 5. Das Paket eurosym [11] stellt dann noch den Befehl für die Ausgabe des Euro-Zeichens bereit (Zeile 12). In spreadtab erwartet LaTeX grundsätzlich in jeder Zelle eine Zahl. Steht stattdessen Text darin und bleibt die Zelle leer, müssen Sie dies durch ein vorangestelltes @ markieren (Zeile 9). Richtet sich eine Spalte über die Option N am Dezimalkomma aus, gilt es, beim Text etwas zu tricksen: Sie packen ihn dann stets in einen \multicolumn-Befehl, auch wenn er nur eine Zelle umfasst (Zeile 8).
Die einzelnen Zellen adressieren Sie in Funktionen wie in einer Tabellenkalkulation. Die erste Zelle links oben hat die Adresse A1, die Zelle rechts daneben B1, die Zelle unter dieser B2, und so weiter. Auf diese Weise binden Sie die Werte einzelner Zellen in Berechnungen ein. Steht in einer Zelle sowohl Text als auch eine Zahl, kennzeichnen Sie die Zahl durch :={Zahl} (Zeile 10).
WYSIWYG
Wer üblicherweise mit einer Tabellenkalkulation arbeitet, dem mag der Tabellensatz mit LaTeX anfangs etwas gewöhnungsbedürftig erscheinen. Statt in einem übersichtlichen Tabellenraster müssen Sie mit abstraktem Code hantieren. Wollen Sie nicht auf WYSIWYG verzichten, erstellen Sie die Tabellen mit LibreOffice Calc und konvertieren sie mit dem Calc2LaTeX-Makro [12] in LaTeX-Code (Abbildung 3).
Calc2LaTeX-Makro installieren
Laden Sie das Makro Calc2LaTeX herunter und entpacken Sie die Datei. Öffnen Sie dann LibreOffice und wählen Sie dort den Menüpunkt Extras | Makros | Makros verwalten | LibreOffice Basic … aus. Es erscheint ein Dialog, in dem Sie auf Verwalten… klicken. Anschließend wählen Sie den Reiter Bibliotheken aus und klicken dort auf Importieren …. Wechseln Sie in den Ordner, in den Sie die Dateien von Calc2LaTeX entpackt haben, und wählen Sie die Datei script.xlb aus. Bestätigen Sie abschließend mit OK.
Markieren Sie dazu in Ihrer Calc-Datei die relevanten Zellen und wählen Sie anschließend den Menüpunkt Extras | Makros | Makro ausführen… aus. Es erscheint ein Dialog, in dem Sie unter Bibliothek | Meine Makros den Eintrag Calc2LaTeX anklicken. Wählen Sie dann aus der Liste der Makros Main aus und klicken Sie auf Ausführen. Im abschließenden Fenster bietet das Makro noch eine Reihe weiterer Einstellungsmöglichkeiten an. Zum Abschluss erscheint dann der LaTeX-Code, den Sie direkt in Ihr LaTeX-Dokument übernehmen oder in einer Datei abspeichern.
Eine Alternative bietet der Online-Table-Editor [13]: Mit ihm erstellen Sie im Webbrowser Ihre Tabelle und übernehmen den ausgegebenen LaTeX-Code dann in das LaTeX-Dokument (Abbildung 4).
Beide Lösungen besitzen allerdings einen deutlichen Nachteil: Sowohl Calc2LaTeX als auch der Online-Table-Editor nutzen die tabular-Umgebung ohne Zusatzpakete, sodass die Möglichkeiten recht begrenzt bleiben. Die Farbangaben kolorierter Zellen bleiben beispielsweise grundsätzlich auf der Strecke.
Fazit
Mit den richtigen Zusatzpaketen bietet LaTeX umfangreiche Möglichkeiten, professionell Tabellen zu setzen. Dabei eignet es sich nicht nur hervorragend für statische Tabellen, sondern konkurriert auch mit Tabellenkalkulationsprogrammen. Um neue Werte in eine Tabelle einzutragen und die Berechnungen zu aktualisieren, müssen Sie allerdings die Quelldatei öffnen, bearbeiten und anschließend einen LaTeX-Lauf starten. Erst dann erscheinen die neuen Werte auch in der Ausgabe.
Der Autor
Daniel Tibi ist Benediktiner-Mönch der Abtei Kornelimünster in Aachen. Er promoviert in Kirchenrecht an der Katholieke Universiteit Leuven. Als Wissenschaftler nutzt er gekonnt die umfangreichen Möglichkeiten von LaTeX aus, als freier Autor schreibt er über seine Erfahrungen mit dem Textsatzsystem.
Infos
[1] Paket Booktabs: http://www.ctan.org/pkg/booktabs
[2] Paket Colortbl: http://www.ctan.org/pkg/colortbl
[3] Paket Multirow: http://www.ctan.org/pkg/multirow
[4] Paket Spreadtab: http://www.ctan.org/pkg/spreadtab
[5] Paket Tabu: http://www.ctan.org/pkg/tabu
[6] Paket Hyperref: http://www.ctan.org/pkg/hyperref
[7] Paket Xcolor: http://www.ctan.org/pkg/xcolor
[8] Buntes LaTeX mit Xcolor: Daniel Tibi, “Kunterbunt”, LU 01/2014, S. 21, https://www.linux-community.de/31562
[9] Paket Numprint: http://www.ctan.org/pkg/numprint
[10] Paket Babel: http://www.ctan.org/pkg/babel
[11] Paket Eurosym: http://www.ctan.org/pkg/eurosym
[12] Calc2LaTeX: http://calc2latex.sourceforge.net
[13] Online-Table-Editor: http://truben.no/table
[14] Beispiel-Listings: http://linux-user.de/Downloads/2015/01/







