latex-wochenende/slides/tables.de.md
2025-11-17 16:19:58 +01:00

347 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@slide(layout=chapter-slide)
@number
9
@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>]
\caption{<tabellenüberschrift>}
\begin{tabular}{<spaltendefinition>}
% Tabelleninhalt
\end{tabular}
\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/tables/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/tables/tabelle-inhalt-beispiel-crop.svg){.thin-padding}
@slide(layout=wide-content)
@title
Die gesamte Tabelle
@content
``` {.hljs .lang-tex}
\begin{table}[h]
\caption{Bekannte Programmiersprachen}
\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}
\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/tables/tables-generator.png)](https://tablesgenerator.com/)
@slide(layout=task)
@task-number
9
@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>}
\caption{<tabellenüberschrift>}
\label{<label>}
% Tabelleninhalt
\end{longtable}
```
@slide(layout=extra-content-only)
@title
Hinweise zu `longtable`
@content
``` {.hljs .lang-tex}
\begin{longtable}{<spaltendefinition>}
\caption{<tabellenüberschrift>}
\label{<label>}
% Tabelleninhalt
\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
Eine Tabelle einfärben
@content
``` {.hljs .lang-tex}
\usepackage[table]{xcolor}
```
``` {.hljs .lang-tex}
\begin{tabular}{lll}
\toprule
Eine & \cellcolor{yellow}gelbe & Zelle \\
Ein & \cellcolor{yellow!25}helleres & Gelb \\
\rowcolor[HTML]{FFDE21}
Eine & gelbe & Zeile \\
\bottomrule
\end{tabular}
```
* Mit `\cellcolor` färbt man einzelne Zellen ein.
* Mit `\rowcolor` färbt man ganze Zeilen ein.
* Farben können mit Namen, Prozentwerten (z. B. `yellow!25`) oder Hex-Codes (`[HTML]{...}`) angegeben werden.
@preview
![](svg/tables/tabelle-farbe-crop.svg){.thin-padding}
@slide(layout=extra-content-and-preview)
@title
Zellen verbinden
@content
``` {.hljs .lang-tex}
\begin{tabular}{lll}
\toprule
Tier & Futter & Größe \\
\midrule
Pferd & Heu & groß \\
Frosch & Fliegen & klein \\
Fooboar & \multicolumn{2}{c}{unbekannt} \\
\bottomrule
\end{tabular}
```
* `\multicolumn{2}{c}{...}` verbindet zwei Spalten zu einer.
* Das zweite Argument legt die Ausrichtung (und Ränder) fest.
@preview
![](svg/tables/tabelle-zellen-verbinden-crop.svg){.thin-padding}
@slide(layout=extra-content-and-preview)
@title
Zeilenumbruch in einer Zelle
@content
``` {.hljs .lang-tex}
\usepackage{makecell}
```
``` {.hljs .lang-tex}
\begin{tabular}{ll}
\toprule
Name & Beschreibung \\
\midrule
Katze & \makecell[l]{klein \\ schläft gerne} \\
Hund & \makecell[l]{treu \\ braucht Spaziergänge} \\
\bottomrule
\end{tabular}
```
* Standardmäßig zentriert `\makecell` den Inhalt.
* Mit `\makecell[l]{Inhalt}` kann man ihn linksbündig ausrichten.
@preview
![](svg/tables/tabelle-zeilenumbruch-crop.svg){.thin-padding}
@slide(layout=extra-content-and-preview)
@title
Feste Spaltenbreite
@content
Die Spalte `p{4cm}` bricht den Text automatisch auf 4cm Breite um.
``` {.hljs .lang-tex}
\begin{tabular}{lp{4cm}}
\toprule
Gegenstand & Beschreibung \\
\midrule
Stuhl & Vier Beine, eine Fläche \\
Tisch & Wie ein Stuhl, aber anders \\
\bottomrule
\end{tabular}
```
@preview
![](svg/tables/tabelle-feste-breite-crop.svg){.thin-padding}
@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}
```
@preview
![](svg/tables/tabelle-fortgeschritten-beispiel-crop.svg){.thin-padding}
@slide(layout=extra-content-only)
@title
Weitere Ressourcen
@content
* Für Hinweise zur Formatierung von Tabellen z. B. was linksbündig sein sollte, wie Spalten zu beschriften sind
und wann Rahmenlinien sinnvoll sind hilft der APA Style Guide weiter:
[<span class="emoji">🔗</span> Tabellenrichtlinien](https://apastyle.apa.org/style-grammar-guidelines/tables-figures/tables)
* Das Paket `booktabs` bietet Befehle für hochwertige Tabellen:
[<span class="emoji">🔗</span> Dokumentation zu Booktabs](https://ctan.org/pkg/booktabs/)