233 lines
5.2 KiB
Markdown
233 lines
5.2 KiB
Markdown
@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
|
||
{.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
|
||
{.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.
|
||
|
||
[](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
|
||
{.thin-padding} |