Es gibt bekanntlich verschiedene Umgebungen in LaTeX, mit deren Hilfe man Tabellen erstellen kann. Neben der klassischen tabular Umgebung sind mir die Umgebungen tabularx und tabulary bekannt. Wann, das heißt für welche Art von Tabelle, ist welche Umgebung zweckmäßiger?

gefragt 30 Okt '15, 14:36

runix's gravatar image

runix
1.0k207384
Akzeptiert-Rate: 0%

bearbeitet 31 Okt '15, 00:05

Die tabular Umgebung sollte in jeder Einführung beschrieben sein. Für die anderen beiden Umgebungen muss man Pakete laden, die auch eine Dokumentation haben. Wie man Dokumentationen findet, ist unter »Wo bzw. wie finde ich die Anleitung zu einem Paket oder einer Klasse« erklärt. Es gibt auch ein Buch von Herbert Voß zum Thema Tabellen »Tabellen mit LaTeX«, das sich auch mit den verschiedenen Tabellenumgebungen beschäftigt.

(30 Okt '15, 15:17) esdd

Hmm ok. Ich habe die Frage ehrlich gesagt für die Datenbank gestellt. Dachte es sei nicht verkehrt, wenn es ordentlich erklärt wird.

(30 Okt '15, 15:23) runix

Ok, dann habe ich mal das archiv Tag bei der Frage ergänzt. Es gibt für solche Fragen auch einen vorgespeicherten Kommentar (den Link findest Du unter dem Kommentarkasten) den man als Fragesteller gleich mit ergänzen kann, um solche Missverständnisse zu vermeiden.

(30 Okt '15, 15:28) esdd

Archiv-Fragen sind sehr willkommen. Solche Erklärungen können manchmal aufschlussreicher sein, oder schneller zu finden und zu verlinken, als Bücher und verteilte Paket-Dokumentationen. Zumal: User googlen gern, und ihre Frage im Titel einer Seite lässt sie unsere Antwort schnell finden. Wie Johannes sagt, eine Lehr-Frage könnte schön einleitend formuliert sein.

(30 Okt '15, 20:17) stefan ♦♦
1

Und Archiv-Tag plus Standardkommentar (wie esdd schrieb) zeigt uns, dass nicht schneller Support nötig ist (Link auf Paket oder schneller Buchhinweis) sondern der, wer Zeit hat und das möchte, kann in Ruhe eine ausformulierte Antwort für das Archiv schreiben. Kurzum, Archiv-Fragen in dieser Weise sind sehr, sehr willkommen in meinen Augen!

(30 Okt '15, 20:18) stefan ♦♦

Es gibt übrigens auch noch tabularx*, stable, stableto, stablesp, tabularw, tabu, longtabu, longtable, supertabular und sicher noch mehr.

(31 Okt '15, 17:21) saputello

@saputello Deswegen ja auch "sind mir...bekannt". :)

(31 Okt '15, 17:23) runix

Ich meinte übrigens nicht tabularx*, sondern tabular*. Das ist eine LaTeX-Kern-Umgebung, die daher in jeder ausführlichen LaTeX-Einführung erklärt sein sollte.

(31 Okt '15, 22:59) saputello
Ergebnis 5 von 8 show 3 more comments

tabular

Die LaTeX-Standard-Tabellenumgebung.

Die Syntax:

Open in Online-Editor
\begin{tabular}[<pos>]{<col spec>}

<pos> erlaubt die Positionierung der Tabelle relativ zur Grundlinie in der sich die Tabelle befindet, erlaubte Werte sind t, b und c, Voreinstellung ist c:

Open in Online-Editor
\documentclass{article} 
\begin{document}

x\begin{tabular}[t]{l}
  a \\ b
\end{tabular}x

x\begin{tabular}[b]{l}
  a \\ b
\end{tabular}x

x\begin{tabular}[c]{l}
  a \\ b
\end{tabular}x

\end{document}

alt text

Im Argument <col spec> werden die Spalten der Tabelle deklariert. Erlaubte Werte sind

  • l links ausgerichtete Spalte, die Breite wird dem breitesten Eintrag angepasst.
  • c zentrierte Spalte, die Breite wird dem breitesten Eintrag angepasst.
  • r rechts ausgerichtete Spalte, die Breite wird dem breitesten Eintrag angepasst.
  • p{<breite>} Absatz-Spalte der Breite <breite>. Ist der Eintrag breiter als die angegebene Breite, erfolgt in dieser Spalte ein Zeilenumbruch im Gegensatz zu den drei anderen Spaltentypen.
  • | fügt zwischen den Spalten, zwischen denen es verwendet wird, einen senkrechten Strich zur Spaltentrennung ein.
  • @{<decl>} kann zwischen Spalten verwendet werden, um das Material <decl> statt des üblichen Leerraums einzufügen.
  • *{<Zahl>}{<col spec>} kann verwendet werden, um <col spec> mit dem Faktor <zahl> zu duplizieren. l*{3}{c}r ist gleichbedeutend zu lcccr.

Sowohl | als auch @{<decl>} können auch zu Beginn und am Ende der Spaltendeklaration verwendet werden, müssen also nicht zwischen zwei Spalten eingesetzt werden.

Open in Online-Editor
\documentclass{article} 
\begin{document}

X\begin{tabular}{|l|l|}
  a & b \\
  a & b
\end{tabular}X

X\begin{tabular}{@{}l@{}l@{}}
  a & b\\
  a & b
\end{tabular}X

X\begin{tabular}{|@{}l@{}|@{}l@{}|}
  a & b\\
  a & b
\end{tabular}X

X\begin{tabular}{|@{}l|l@{}|}
  a & b\\
  a & b
\end{tabular}X

X\begin{tabular}{@{x}l@{y}l@{z}}
  a & b\\
  a & b
\end{tabular}X

\end{document}

alt text

Die erlaubten Deklarationen werden durch das array-Paket noch um 5 weitere erweitert. Das Verhalten von | ändert sich durch Laden des array-Pakets.

tabular*

Die tabular*-Tabelle ist ebenfalls eine LaTeX-Standard-Tabellenumgebung. Sie hat die gleiche Syntax wie die tabular-Umbgebung mit einem Unterschied:

Open in Online-Editor
\begin{tabular*}{<breite>}[<pos>]{<col spec>}

Sie hat ein Argument, mit dem die gewünschte Breite der Tabelle angegeben wird. Dafür muss allerdings dehnbarer Leerraum an geeigneten Stellen eingefügt werden:

Open in Online-Editor
\documentclass{article} 
\begin{document}

X\begin{tabular*}{.5\textwidth}{|ll|}
  a & b \\
  a & b
\end{tabular*}X

X\begin{tabular*}{.5\textwidth}{|l@{\extracolsep{\fill}}l|}
  a & b \\
  a & b
\end{tabular*}X

\end{document}

alt text

tabularx

Die Umgebung tabularx wird vom tabularx-Paket bereitgestellt. Sie ist eine letztlich eine bequemere Version der tabular*-Umgebung.

Open in Online-Editor
\begin{tabularx}{<breite>}[<pos>]{<col spec>}

Das Paket stellt den zusätzlichen Spaltentyp X bereit, der in der Voreinstellung einer p{<breite>}-Spalte entspricht, deren Breite aber automatisch bestimmt wird.

Open in Online-Editor
\documentclass{article}
\usepackage{tabularx}
\begin{document}

X\begin{tabularx}{.5\textwidth}{|XX|}
  a & b \\
  a & b
\end{tabularx}X

X\begin{tabularx}{.5\textwidth}{|Xl|}
  a & b \\
  a & b
\end{tabularx}X

X\begin{tabularx}{.5\textwidth}{|lX|}
  a & b \\
  a & b
\end{tabularx}X

\end{document}

Eine X-Spalte wird gemäß folgender Definition gesetzt:

Open in Online-Editor
 \newcommand{\tabularxcolumn}[1]{p{#1}}

Durch Umdefinition kann man die Art der X-Spalten also ändern, zum Beispiel mit dem array-Paket (das von tabularx bereits geladen wird):

Open in Online-Editor
\renewcommand{\tabularxcolumn}[1]{>{\small}m{#1}}

Unterschiede zwischen tabular* und tabularx:

  • tabularx modifiziert die Breite der Spalten, tabular* die Breite der Zischenräume zwischen den Spalten.
  • tabular* kann ohne Einschränkung verschachtelt werden. Wenn man eine tabularx-Umgebung in einer zweiten verwenden will, muss die innere mit {...} umschlossen werden.
  • Der »Körper« einer tabularx-Umgebung ist Argument zu einem Befehl, das heißt das Dinge wie \verb nicht verwendet werden können. In der Tat wird \verb zum Teil unterstützt, kann allerdings nicht uneingeschränkt verwendet werden.
  • tabularx ist langsamer, da es den Inhalt mehrfach setzt, um die richtige Breite zu finden.
  • Der Inhalt einer tabularx wird für die Testläufe mehrfach expandiert, was u.U. problematisch werden kann.

alt text

tabulary

Die tabulary-Umgebung wird vom tabulary-Paket bereitgestellt. Auf den ersten Blick ist die Syntax die gleiche wie bei tabularx:

Open in Online-Editor
\begin{tabulary}{<breite>}[<pos>]{<col spec>}

Allerdings bietet es vier neue Spaltentypen für die Verwendung mit tabulary:

Open in Online-Editor
\documentclass{article}
\usepackage{tabulary}
\begin{document}
X\begin{tabulary}{.5\textwidth}{|LLLL|}
  a & b b b b & c c c c c c c c & d d d d d d d d d d d d d d d d \\
  a & b b b   & c c c c c c     & d d d d d d d d d d d d d d
\end{tabulary}X

X\begin{tabulary}{.5\textwidth}[t]{|RRRR|}
  a & b b b b & c c c c c c c c & d d d d d d d d d d d d d d d d \\
  a & b b b   & c c c c c c     & d d d d d d d d d d d d d d
\end{tabulary}X

X\begin{tabulary}{.5\textwidth}[t]{|CCCC|}
  a & b b b b & c c c c c c c c & d d d d d d d d d d d d d d d d \\
  a & b b b   & c c c c c c     & d d d d d d d d d d d d d d
\end{tabulary}X

X\begin{tabulary}{.5\textwidth}[t]{|JJJJ|}
  a & b b b b & c c c c c c c c & d d d d d d d d d d d d d d d d \\
  a & b b b   & c c c c c c     & d d d d d d d d d d d d d d
\end{tabulary}X

\end{document}

alt text

Das Beispiel zeigt auch gleich, dass hier die Verteilung der Breite anhand des Inhalts erfolgt. Dabei wird eine Spalte nie schmaller als in \tymin gespeichert (anfangs auf 10pt gesetzt) und nie breiter als \tymax (anfangs auf das Doppelte von \textwidth gesetzt). Zitat des Manuals:

The width of these converted columns is proportional to the natural width of the longest entry in each column.

Die Spalten basieren alle auf einer p-Spalte. tabulary macht mehrere Durchgänge: zu Beginn werden alle Spalteneinträge als einzelne (u.U. sehr langen) Zeilen gesetzt und deren Länge gemessen. Später werden die Spalten dann proportional zu den gemessenen Längen an die verfügbare Breite angepasst. Dabei werden alle Spalten, deren natürliche Breite größer als \tymax ist, auf die gleiche Breite gesetzt.

Für tabulary gelten ansonsten die gleichen Einschränkungen, wie sie für tabularx im Vergleich mit tabular* genannt wurden.

Permanenter link

beantwortet 03 Nov '15, 19:04

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 21 Dez '16, 07:57

saputello's gravatar image

saputello
11.1k154365

Es bleibt anzumerken, dass sich tabularx von ltablex im Detail von dem hier beschriebenen tabularx des gleichnamigen Pakets tabularx unterscheidet.

(04 Nov '15, 11:08) saputello

@saputello das zweite tabularx kenne ich gar nicht. Ich mach mich mal schlau und erweitere die Antwort gegebenenfalls.

(04 Nov '15, 11:15) cgnieder

ltablex bietet eine Verbindung des bekannten tabularx und longtable. Die Umgebung heißt dann aber ebenfalls tabularx. Es verhält sich aber nicht ganz wie tabularx. So verkürzt es in der Voreinstellung nie gefüllte X-Spalten automatisch. Es gibt aber leider auch ein paar Probleme, wenn man spezielle Dinge macht. Kann mich leider nicht mehr ganz erinnern. AFAIR verhält es sich aber bezüglich der vertikalen Ausrichtung in bestimmten Fällen ungewohnt.

(04 Nov '15, 14:17) saputello
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×117
×32
×21
×2

gestellte Frage: 30 Okt '15, 14:36

Frage wurde gesehen: 27,124 Mal

zuletzt geändert: 04 Nov '15, 14:17