205 lines
6.9 KiB
Markdown

<div class="layout-content-only">
<div class="layout-content">
<h1><span class="emoji">🗒️</span><br/>Tabellen</h1>
</div>
</div>
---
<div class="layout-content-only">
<div class="layout-content">
<h2>Grundstruktur</h2>
<p>Für typografisch schöne Tabellen nutzen wir das Paket <code>booktabs</code>.</p>
<pre class="hljs lang-tex"><code>\usepackage{booktabs}</code></pre>
<pre class="hljs lang-tex"><code>\begin{table}[&lt;position>]
\begin{tabular}{&lt;spaltendefinition>}
% Tabelleninhalt
\end{tabular}
\caption{&lt;tabellenunterschrift>}
\end{table}</code></pre>
<p>Die Positionierung erfolgt analog zu Grafiken.</p>
</div>
</div>
---
<div class="layout-content-and-preview">
<div class="layout-content">
<h2>Spaltendefinitionen</h2>
<pre class="hljs lang-tex"><code>\begin{tabular}{lrcl}
% Tabelleninhalt
\end{tabular}</pre></code>
<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>
<p class="fragment">Vertikale Trennlinien und doppelte horizontale Linien sind unter Typograph\*innen nicht gern gesehen und sollten vermieden werden.</p>
</div>
<div class="layout-preview">
<img class="thin-padding" src="sections/german/12/table-example-crop.svg">
</div>
</div>
---
<div class="layout-content-and-preview">
<div class="layout-content">
<h2>Tabelleninhalt</h2>
<pre class="hljs lang-tex"><code>\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}</code></pre>
<ul>
<li class="fragment">Zellen werden durch <code>&</code> abgetrennt.</li>
<li class="fragment">Zeilen werden durch zwei Backslashes beendet.</li>
<li class="fragment"><code>\toprule</code>, <code>\midrule</code> und <code>\bottomrule</code> strukturieren die Tabelle.</li>
</ul>
</div>
<div class="layout-preview">
<img class="thin-padding" src="sections/german/12/table-content-example-crop.svg">
</div>
</div>
---
<div class="layout-wide-content">
<div class="layout-content">
<h2>Die gesamte Tabelle</h2>
<pre class="lang-tex hljs"><code>\begin{table}[h]
\begin{tabular}{lrcl} \toprule
Sprache & Autor & Erscheinungsjahr & Aktuelle Version \\\\
\midrule
C++ & Bjarne Stroustrup & 1985 & ISO/IEC 14882:2017 \\\\
Java & James Gosling & 1998 & 12.0.1 \\\\
Python & Guido van Rossum & 1991 & 3.7.3 \\\\
\bottomrule
\end{tabular}
\caption{Bekannte Programmiersprachen}
\end{table}</code></pre>
<p data-category="Hinweis">
Durch <code>@{}</code> vor und nach der Spaltendefinition werden die horizontalen Linien auf die Breite des Textes beschränkt.
Beispiel: <code>\begin{tabular}{@{}lrcl@{}}</code>
</p>
</div>
</div>
---
<div class="layout-content-only">
<div class="layout-content">
<h2>Besonders lange Tabellen</h2>
<p>Tabellen, die über mehrere Seiten gehen, werden von <code>tabular</code> einfach abgeschnitten. Die Lösung bietet hier das Paket <code>longtable</code>:</p>
<pre class="lang-tex hljs"><code>\usepackage{longtable}</code></pre>
<pre class="lang-tex hljs"><code>\begin{longtable}{lll}
% Tabelleninhalt
\caption{&lt;untertitel>}
\label{&lt;label>}
\end{longtable}</code></pre>
</div>
</div>
---
<div class="layout-content-only">
<div class="layout-content">
<h2>Hinweise zu <code>longtable</code></h2>
<pre class="lang-tex hljs"><code>\begin{longtable}{lll}
% Tabelleninhalt
\caption{&lt;untertitel>}
\label{&lt;label>}
\end{longtable}</code></pre>
<ul>
<li class="fragment">Die <code>longtable</code>-Umgebung vereint die <code>tabular</code>-Umgebung und die <code>table</code>-Umgebung.</li>
<li class="fragment">Untertitel und Label können deshalb direkt unter dem Tabelleninhalt stehen.</li>
<li class="fragment">Die Features von <code>booktabs</code> stehen auch in <code>longtable</code> zur Verfügung, sofern das Paket <code>booktabs</code> eingebunden ist.</li>
</ul>
</div>
</div>
---
<div class="layout-content-only">
<div class="layout-content">
<h2>Besonders breite Tabellen</h2>
<p>Sollte die Tabelle einmal zu breit für eine Seite werden, können einzelne Seiten auch im Querformat dargestellt werden:</p>
<pre class="lang-tex hljs"><code>\usepackage{lscape}</code></pre>
<pre class="lang-tex hljs"><code>\begin{landscape}
\begin{table}[h]
\begin{tabular}{lll}
% Tabelleninhalt
\end{tabular}
\end{table}
\end{landscape}</code></pre>
</div>
</div>
---
<div class="layout-content-and-preview">
<div class="layout-content">
<h2>Weiterführendes Beispiel</h2>
<pre class="lang-tex hljs"><code>\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}</code></pre>
<p>
<a href="http://packages.oth-regensburg.de/ctan/macros/latex/contrib/booktabs/booktabs.pdf"><span class="emoji">🔗</span> Dokumentation zu Booktabs</a>
</p>
</div>
<div class="layout-preview">
<img class="thin-padding" src="sections/german/12/table-advanced-example-crop.svg">
</div>
</div>
---
<div class="layout-content-only">
<div class="layout-content">
<h2>Vereinfachung</h2>
<p>
Der <a href="https://tablesgenerator.com/">Tables Generator</a> ist ein wunderbares Werkzeug, um schnell Tabellen verschiedener Formate zu erstellen.
</p>
<a href="https://tablesgenerator.com/">
<img src="sections/german/12/tables-generator.png">
</a>
</div>
</div>
---
<div class="layout-content-only">
<div class="layout-content">
<h2 data-category="Aufgabe" data-task="11">Tabellen einfügen</h2>
<ul>
<li class="fragment"></li>
</ul>
</div>
</div>