Gefällt dir dieser Artikel?
Schnatterente
Wie erstellt man mit LaTeX eine schöne, mehrseitige Tabelle mit automatischen Zeilenumbrüchen und unterschiedlichen Textausrichtungen in den Spalten?

Diese Frage hat mich kürzlich beschäftigt, und bis ich eine halbwegs ästhetische Lösung gefunden hatte, verging relativ viel Zeit. Deswegen möchte ich meine Problemlösung (und den Leidensweg dahin) hier mit euch teilen.

(Wer die Vorgeschichte und die Vor- und Nachteile der verschiedenen Tabellenumgebungen überspringen will, möge hier klicken.)

Ich begann den Aufbau meiner Tabelle natürlich erst einmal mit der einfachen tabular-Umgebung. Diese hat den Nachteil, dass man sich selbst um die Zeilenumbrüche kümmern muss, jedenfalls, wenn man die einfachen Spaltentypen "l", "c" und "r" verwendet. Setzt man hingegen die Typen "p", "m" und "b" ein, funktionieren die automatischen Zeilenumbrüche zwar, aber mit diesen Angaben wird keine horizontale, sondern eine vertikale Ausrichtung der Zelleninhalte vorgenommen - ich brauchte aber linksbündige und zentriert ausgerichtete Spalten. Damit war tabular überfordert und warf mir nur eine Tabelle mit hässlich zerrissenem Blocksatz um die Ohren.

Daraufhin schaute ich mir tabularx an, was den Vorteil bietet, dass man Tabellen eine feste Breite zuweisen kann und die Spaltenbreite dabei dynamisch bleibt. Der automatische Zeilenumbruch funktioniert damit gut, leider habe ich es in meinem Dokument aber auch mit tabularx nicht hinbekommen, sauber eine zentrierte Textausrichtung zu erzeugen (ohne jede einzelne Zelle per Hand zu formatieren).

Zum Glück gibt es ja tabulary, dachte ich mir. Tabulary kann automatische Zeilenumbrüche und unterstützt alle möglichen Textausrichtungen.
Die Umgebung lässt es zu, die Gesamtbreite der Tabelle festzulegen. Feste Spaltenbreiten kann man leider nicht setzen. Es bleibt nur die Möglichkeit mithilfe von \tymin und \tymax die minimale und maximal mögliche Spaltenbreite zu definieren.
Eine wirklich schöne Tabelle habe ich damit nicht hinbekommen, auch weil mir die Umgebung zum Teil Zeilenumbrüche ins Dokument gebaut hat, die gar nicht nötig gewesen wären, da die nach unten verschobenen Wörter noch locker auf die letzte Zeile gepasst hätten.

Da ich von diesem ganzen Tabellen- und Formatierungswirrwarr erst mal die Nase voll hatte, ging ich dazu über, die Sache mit dem Layout nach hinten zu verlagern und erst einmal alle Daten ins Dokument zu hacken.
Dabei stellte sich dann heraus, dass die Tabelle, trotz bereits reduzierter Schriftgröße, nicht auf eine Seite passen würde. Folglich ergab sich also gleich noch ein neues Problem: Ich brauchte eine optisch vertretbare, mehrseitige Tabelle.

Somit stand ich nun vor der Wahl zwischen der longtable-Umgebung, welche den Funktionsumfang und die Probleme von tabular mit sich bringt, und ltxtable, womit sich im Grunde genommen lange tabularx-Tabellen bauen lassen.

Reichlich genervt davon, dass mich LaTeX mit diesem Kram nervt (wo man es doch gerade verwendet, um genau solchem Mist aus dem Weg zu gehen), stieß ich durch eine glückliche Fügung auf das array-Package. Dieses sollte all meine Formatierungsprobleme auf einen Schlag lösen.

Mehrseitige LaTeX-Tabellen mit automatischen und manuellen Zeilenumbrüchen

Mit dem array-Package kann man Eigenschaften von bereits bestehenden Elementen überschreiben. Somit ist es möglich, die Ausrichtungsprobleme von tabular und longtable zu beheben. Außerdem kann man auf einen Streich dafür sorgen, dass zusätzlich zum automatischen, auch der manuelle Zeilenumbruch in Tabellen funktioniert. Verwendet man die Spaltentypen "p", "m" und "b", kann man zudem für jede Spalte festlegen, wie breit diese sein soll. Es wird also nichts mehr dem Zufall überlassen und man hat die volle Kontrolle über seine Tabelle. Auch die automatischen Zeilenumbrüche werden sauber gesetzt.

Das ganze funktioniert so:
\documentclass[a4paper,12pt, ...}
...
\usepackage{array}
\usepackage{longtable}
...
\footnotesize % nur falls man kleine Schrift will
\begin{center} % Tabelle mittig auf der Seite

\begin{longtable}{|>{\centering \arraybackslash}p{6.0cm}|
>{\raggedright \arraybackslash}p{5.0cm}|}


\hline
Dies ist eine schöne Tabelle mit automatischem Zeilenumbruch. Hier kommt ein \linebreak manueller Zeilenumbruch. Der Text in dieser Spalte ist zentriert. & Der Text in dieser Spalte ist linksbündig ausgerichtet. Es wird kein Blocksatz erzwungen. \linebreak \linebreak Man kann so auch Leerzeilen in den Text einfügen. \\
\hline
\end{longtable}
\end{center}


Das Resultat sieht dann so aus:
Eine hübsche LaTeX-Tabelle mit verschiedenen Spaltenausrichtungen und automatischem Zeilenumbruch

Schön, oder? ;-)



Nachtrag:
Wer gern tabularx verwenden möchte und zentrierte (oder links- bzw. rechtsbündige) Zelleninhalte erzeugen will, kann dies auch mit dem array-Package und einem selbst definierten Spaltentyp machen:
\newcolumntype{C}{>{\Centering}X}

"C" kann man dann einfach in der Spaltendefinition benutzen.

Für jedes LaTeX-Problem gibt es eben gefühlte 1000 Lösungsansätze.
Die Variante mit der longtable-Umgebung finde ich selbst am schönsten, weil sie sehr flexibel einsetzbar ist und man mit wenig Aufwand die volle Kontrolle über die Tabelle hat.

Geschnatter

3 Kommentare, selbst mitschnattern << < Seite 1/1 > >>
JohnLessing, am 12.02.2015 um 11:53 Uhr
Hallo,

Erst mal vielen Dank für das tolle Beispiel. Das hat mit jede Menge Zeit gespart.

Aber hast du zufällig eine Möglichkeit gefunden, eine oder sogar mehrere Titelzeilen bei einem Seitenumbruch zu wiederholen?

Meine Tabelle hat eine "Haupttitelzeile" und mehrere Abschnitte mit "Untertitelzeilen". Bei einem Zeilenumbruch würde ich gerne zumindest die Haupt- aber wenn möglich auch zusätzlich die Untertitelzeile wiederholen.

Viele Grüße,

John
EJB, am 16.09.2015 um 18:50 Uhr
Einfach. nur. super. Danke.
DankbarerLeser, am 15.02.2016 um 13:48 Uhr
Danke. Hat mir viel Arbeit erspart.