@slide(layout=chapter-slide)

@number
10

@title
Tabellen


@slide(layout=content-only)

@title
Grundstruktur <span class="emoji">🗒️</span>

@content
Für typografisch schöne Tabellen nutzen wir das Paket `booktabs`.

``` {.hljs .lang-tex}
\usepackage{booktabs}
```

``` {.hljs .lang-tex}
\begin{table}[<position>]
	\begin{tabular}{<spaltendefinition>}
		% Tabelleninhalt
	\end{tabular}
	\caption{<tabellenunterschrift>}
\end{table}
```

Die Positionierung erfolgt analog zu Grafiken.


@slide(layout=content-and-preview)

@title
Spaltendefinitionen

@content
``` {.hljs .lang-tex}
\begin{tabular}{lrcl}
    % Tabelleninhalt
\end{tabular}
```

<table>
	<tr>
		<th>Kürzel</th>
		<th>Bedeutung</th>
	</tr>
	<tr class="fragment">
		<td>l</td>
		<td>linksbündige Spalte</td>
	</tr>
	<tr class="fragment">
		<td>c</td>
		<td>zentrierte Spalte</td>
	</tr>
	<tr class="fragment">
		<td>r</td>
		<td>rechtsbündige Spalte</td>
	</tr>
</table>

++ Vertikale Trennlinien und doppelte horizontale Linien sind unter Typograph\*innen nicht gern gesehen und sollten vermieden werden.

@preview
![](svg/chapter-12/tabelle-beispiel-crop.svg){.thin-padding}


@slide(layout=content-and-preview)

@title
Tabelleninhalt

@content
``` {.hljs .lang-tex}
\begin{tabular}{lll}
    \toprule
    Spalte 1 & Spalte 2 & Spalte 3 \\
    \midrule
    Inhalt a & Inhalt b & Inhalt c \\
    Inhalt e & Inhalt f & Inhalt g \\
    Inhalt i & Inhalt j & Inhalt k \\
    \bottomrule
\end{tabular}
```
*	++ Zellen werden durch ›`&`‹ abgetrennt.
*	++ Reihen werden durch ›`\\`‹ beendet.
*	++ `\toprule`, `\midrule` und `\bottomrule` strukturieren die Tabelle.

@preview
![](svg/chapter-12/tabelle-inhalt-beispiel-crop.svg){.thin-padding}


@slide(layout=wide-content)

@title
Die gesamte Tabelle

@content
``` {.hljs .lang-tex}
\begin{table}[h]
    \begin{tabular}{lrcl}
        \toprule
        Sprache & Autor             & Erscheinungsjahr & Dateiendung \\
        \midrule
        C++     & Bjarne Stroustrup & 1985             & .cpp           \\
        Java    & James Gosling     & 1998             & .java          \\
        Python  & Guido van Rossum  & 1991             & .py            \\
        \bottomrule
    \end{tabular}
    \caption{Bekannte Programmiersprachen}
\end{table}
```

<p data-category="Hinweis">Mit `@{}` vor und nach einer Spaltendefinition wird der umgebende Weißraum unterdrückt.</p>

<p data-category="Beispiel">`\begin{tabular}{@{}lrcl@{}}` beschränkt die Linien auf die Breite des Tabelleninhalts.</p>


@slide(layout=content-only)

@title
Mehr Komfort

@content
Der [Tables Generator](https://tablesgenerator.com/) ist ein wunderbares Werkzeug, um schnell Tabellen verschiedener Formate zu erstellen.

[![](svg/chapter-12/tables-generator.png)](https://tablesgenerator.com/)


@slide(layout=task)

@task-number
10

@title
Tabellen setzen

@content
* 	Die Liste in der Datei `exercises/tables/tables.tex` enthält Infos zu ein paar Lehrveranstaltung an der Fakultät WIAI.
*	Wandelt die Liste in eine **Tabelle** um. 
*	Die Tabelle soll Spalten für den *Namen*, das *Kürzel* und das *Semester* der Vorlesungen haben.
*	Fügt außerdem eine **zentrierte Spalte** ganz links in der Tabelle hinzu, in der ihr die Lehrveranstaltungen **nummeriert**.



@slide(layout=extra-content-only)

@title
Besonders lange Tabellen

@content
Tabellen, die über eine Seite hinaus gehen, werden von `tabular` einfach abgeschnitten. Die Lösung bietet hier das Paket `longtable`:

``` {.hljs .lang-tex}
\usepackage{longtable}
```

``` {.hljs .lang-tex}
\begin{longtable}{<spaltendefinition>}
    % Tabelleninhalt
    \caption{<tabellenunterschrift>}
    \label{<label>}
\end{longtable}
```


@slide(layout=extra-content-only)

@title
Hinweise zu `longtable`

@content
``` {.hljs .lang-tex}
\begin{longtable}{<spaltendefinition>}
    % Tabelleninhalt
    \caption{<tabellenunterschrift>}
    \label{<label>}
\end{longtable}
```
*	Die `longtable`-Umgebung vereint die `tabular`-Umgebung und die `table`-Umgebung.
*	Titel und Label können deshalb direkt unter dem Tabelleninhalt stehen.
*	Sofern das Paket `booktabs` eingebunden ist, stehen seine Features auch in `longtable` zur Verfügung.


@slide(layout=extra-content-only)

@title
Besonders breite Tabellen

@content
Sollte die Tabelle einmal zu breit für eine Seite werden, kann sie auch im Querformat dargestellt werden:

``` {.hljs .lang-tex}
\usepackage{rotating}
```

``` {.hljs .lang-tex}
\begin{sidewaystable}[<position>]
	\begin{tabular}{<spaltendef.>}
		% Tabelleninhalt
	\end{tabular}
\end{sidewaystable}
```


@slide(layout=extra-content-and-preview)

@title
Weiterführendes Beispiel

@content
``` {.hljs .lang-tex}
\begin{table}[h]
    \begin{tabular}{llr}
        \toprule
        Struktur & \multicolumn{2}{l}{Zeitkomplexität für Zugriff} \\ \cmidrule(r){2-3}
        & Average & Worst \\
        \midrule
        Stack & $\mathcal{O}(n)$ & $\mathcal{O}(n)$ \\
        Binärbaum & $\mathcal{O}(log(n))$ & $\mathcal{O}(log(n))$ \\
        AVL-Baum & $\mathcal{O}(log(n))$ & $\mathcal{O}(log(n))$ \\
        \bottomrule
    \end{tabular}
\end{table}
```

[<span class="emoji">🔗</span> Dokumentation zu Booktabs](http://packages.oth-regensburg.de/ctan/macros/latex/contrib/booktabs/booktabs.pdf)

@preview
![](svg/chapter-12/tabelle-fortgeschritten-beispiel-crop.svg){.thin-padding}