## `tabular` ##
Die LaTeX-Standard-Tabellenumgebung.
Die Syntax:
\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`:
\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][1]
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.
\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][2]
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 `tabular*`-Tabelle ist ebenfalls eine LaTeX-Standard-Tabellenumgebung. Sie hat die gleiche Syntax wie die `tabular`-Umbgebung mit einem Unterschied:
\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:
\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][3]
## `tabularx` ##
Die Umgebung `tabularx` wird vom `tabularx`-Paket bereitgestellt. Sie ist eine letztlich eine bequemere Version der `tabular*`-Umgebung.
\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.
\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:
\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):
\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][4]
## `tabulary` ##
Die `tabulary`-Umgebung wird vom `tabulary`-Paket bereitgestellt. Auf den ersten Blick ist die Syntax die gleiche wie bei `tabularx`:
\begin{tabulary}{<breite>}[<pos>]{<col spec>}
Allerdings bietet es vier neue Spaltentypen für die Verwendung mit `tabulary`:
\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][5]
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.
[1]: http://texwelt.de/wissen/upfiles/tabular_1.png
[2]: http://texwelt.de/wissen/upfiles/tabular_2.png
[3]: http://texwelt.de/wissen/upfiles/tabular_3.png
[4]: http://texwelt.de/wissen/upfiles/tabularx_3.png
[5]: http://texwelt.de/wissen/upfiles/tabulary.png