@slide(layout=chapter-slide)

@number
10

@title
Tables


@slide(layout=content-only)

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

@content
For typographically pleasing tables, we use the `booktabs` package.

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

``` {.hljs .lang-tex}
\begin{table}[<position>]
	\begin{tabular}{<column definition>}
		% table content
	\end{tabular}
	\caption{<caption>}
\end{table}
```

Positioning works just like with graphics.


@slide(layout=content-and-preview)

@title
Column definitions

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

<table>
	<tr>
		<th>letter</th>
		<th>meaning</th>
	</tr>
	<tr class="fragment">
		<td>l</td>
		<td>left-justified column</td>
	</tr>
	<tr class="fragment">
		<td>c</td>
		<td>centred column</td>
	</tr>
	<tr class="fragment">
		<td>r</td>
		<td>right-justified column</td>
	</tr>
</table>

++ Vertical separator lines and double horizontal lines are frowned upon by typographers and should be avoided.

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


@slide(layout=content-and-preview)

@title
Table content

@content
``` {.hljs .lang-tex}
\begin{tabular}{lll}
    \toprule
    Column 1 & Column 2 & Column 3 \\
    \midrule
    Content a & Content b & Content c \\
    Content e & Content f & Content g \\
    Content i & Content j & Content k \\
    \bottomrule
\end{tabular}
```
*	++ Columns are separated by ’`&`’.
*	++ Rows are ended by ‘`\\`’.
*	++ `\toprule`, `\midrule` and `\bottomrule` structure the table.

@preview
![](svg/chapter-12/table-content-example-crop.svg){.thin-padding}


@slide(layout=wide-content)

@title
The entire table

@content
``` {.hljs .lang-tex}
\begin{table}[h]
    \begin{tabular}{lrcl}
        \toprule
        Language & Author            & Year & Filename extension \\
        \midrule 
        C++      & Bjarne Stroustrup & 1985 & .cpp    \\
        Java     & James Gosling     & 1998 & .java    \\
        Python   & Guido van Rossum  & 1991 & .py      \\
        \bottomrule
    \end{tabular}
    \caption{Well-known programming languages}
\end{table}
```

<p data-category="Note">`@{}` to the left and right of a column definition removes the padding of the corresponding column.</p>

<p data-category="Example">`\begin{tabular}{@{}lrcl@{}}` limits the row separators to the width of the table content</p>


@slide(layout=content-only)

@title
More comfort

@content
The [Tables Generator](https://tablesgenerator.com/) is a wonderful tool to quickly create tables of different formats.

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


@slide(layout=task)

@task-number
10

@title
Typesetting tables

@content
*	The list in file `exercises/tables/tables.tex` stores information on a few modules of the WIAI faculty.
*	Transform the list into a **table**.
*	The table shall have colums for the *name*, the *abbreviation* (Kürzel) and the *semester* of the lectures.
*	Add a **column** with **center-aligned text** on the left side of the table in order to **number** the lectures.
*	Add a **caption** for the table.



@slide(layout=extra-content-only)

@title
Particularly long tables

@content
Tables that exceed one page are simply cut off by `tabular`. A solution is offered by the `longtable` package:

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

``` {.hljs .lang-tex}
\begin{longtable}{<column definition>}
    % table content
    \caption{<caption>}
    \label{<label>}
\end{longtable}
```


@slide(layout=extra-content-only)

@title
Notes on `longtable`

@content
``` {.hljs .lang-tex}
\begin{longtable}{<column definition>}
    % table content
    \caption{<caption>}
    \label{<label>}
\end{longtable}
```
*	The `longtable` environment merges the `tabular` and `table` environments.
*	Caption and label can therefore be inserted directly under the table content.
*	As long as the `booktabs` package is used, its features are also provided in `longtable`.


@slide(layout=extra-content-only)

@title
Particularly wide tables

@content
If you need a table to be wider than a page, you can display it in landscape orientation:

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

``` {.hljs .lang-tex}
\begin{sidewaystable}[<position>]
	\begin{tabular}{<column def.>}
		% table content
	\end{tabular}
\end{sidewaystable}
```




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

@title
An advanced example

@content
``` {.hljs .lang-tex}
\begin{table}[h]
	\begin{tabular}{llr}
		\toprule
		Structure & \multicolumn{2}{l}{Access time complexity} \\ \cmidrule(r){2-3}
		& Average & Worst \\
		\midrule
		Stack & $\mathcal{O}(n)$ & $\mathcal{O}(n)$ \\
		Binary tree & $\mathcal{O}(log(n))$ & $\mathcal{O}(n)$ \\
		AVL tree & $\mathcal{O}(log(n))$ & $\mathcal{O}(log(n))$ \\
		\bottomrule
	\end{tabular}
\end{table}
```

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

@preview
![](svg/chapter-12/table-advanced-example-crop.svg){.thin-padding}