@slide(layout=chapter-slide)

@title
Projektstruktur


@slide(layout=content-and-preview)

@title
Zielsetzung

@content
Ein größeres LaTeX-Projekt anlegen und dabei …

* verhindern, dass LaTeX-Dokumente zu monströser Größe anwachsen <span class="emoji">👹</span>
* den Überblick über die Struktur eines Projekts behalten

@preview
![](svg/chapter-04/langes-dokument.jpg){style="padding: .2em; height: 100vh"}


@slide(layout=content-and-preview)

@title
Hauptdatei <span class="emoji">👑</span>

@content
*	enthält Grundgerüst, Titel, Inhaltsverzeichnis etc.
*	bindet einzelne Kapitel ein mit \
    `\input{pfad/zur/datei}` oder `\include{pfad/zur/datei}`

``` {.lang-tex .hljs data-sourcefile=main.tex}
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\title{Ein Titel}
\begin{document}
    \maketitle
    \tableofcontents
    \input{abschnitt1.tex}
    \input{abschnitt2.tex}
\end{document}
```

@preview
![](svg/chapter-04/hauptdatei-orig.svg)


@slide(layout=content-and-preview)

@title
Datei mit Teilabschnitt

@content
* enthält **keine Präambel**
* enthält **kein** `\begin{document}` und `\end{document}`

``` {.hljs .lang-tex data-sourcefile=part1.tex}
\section{Dies ist Abschnitt 1}
Hier ein Absatz zum
Inhalt von Abschnitt 1.

% …
```

``` {.hljs .lang-tex data-sourcefile=part2.tex}
\section{Dies ist Abschnitt 2}
Hier ein Absatz zum
Inhalt von Abschnitt 2.

% …
```

@preview
![](svg/chapter-04/hauptdatei-teile-crop.svg){.thin-padding}


@slide(layout=two-columns)

@title
`input` oder `include`?

@column-one
``` {.hljs .lang-tex}
\input{path/to/file}
```

* Dateiendung `.tex` **kann** angegeben werden
* **Schachtelung** möglich: Unterdateien können wiederum per `\input{}` andere Unterunterdateien einbinden
* Unterdatei wird im fertigen Dokument **ohne Sprung auf neue Seite** in Hauptdatei eingefügt

@column-two
``` {.hljs .lang-tex}
\include{path/to/file}
```

* Dateiendung `.tex` **nicht** angeben
* **Schachtelung** nicht möglich
* für jede Unterdatei wird im fertigen Dokument eine **neue Seite** angelegt
* Vorteil bei größeren Projekten: `\includeonly{file1,file2,...}` in die Präambel schreiben, um nur einzelne Unterdateien zu kompilieren (vorher muss mindestens einmal das gesamte Projekt kompiliert werden)


@slide(layout=content-and-preview-with-category)

@category
Exkurs

@title
Dateipfade angeben <span class="emoji">👣</span>

@content
* wichtig für `\input{}` und `\include{}` sowie später für das Einbinden von Bildern
* Datei- und Ordnerstruktur = Baumstruktur <span class="emoji">🌳</span>

@preview
![](svg/chapter-04/tree-crop.svg)


@slide(layout=content-and-preview-with-category)

@category
Exkurs

@title
Dateipfade angeben <span class="emoji">👣</span>

@content
### Absolute Dateipfade
*	Pfad von der Wurzel des Ordnerbaums bis zur jeweiligen Datei
*	die verschiedenen Ebenen des Baums werden dabei durch folgende Zeichen getrennt:
	*	Unter Unix: »`/`«
	*	Unter Windows: »`\`«
	
<p data-category="Beispiel">Absoluter Pfad zu `main.tex`</p>

*	Unix: `/home/knut/docs/latex/main.tex`
*	Windows: `C:\knut\docs\latex\main.tex`

<p data-category="Achtung!">Bei LaTeX muss stets die **Unix-Syntax** für Pfadangaben verwendet werden. Deshalb werden wir im Folgenden diese verwerden.</p>

@preview
![](svg/chapter-04/absolute-path-crop.svg)


@slide(layout=content-and-preview-with-category)

@category
Exkurs

@title
Dateipfade angeben <span class="emoji">👣</span>

@content
### Relative Dateipfade
*	Pfad von einem bestimmten Ort irgendwo im Ordnerbaum bis zur jeweiligen Datei
*	kürzer + weniger Schreibarbeit! <span class="emoji">☺</span>
*	bei `\input{}` und `\include{}` kann der Pfad zu einer Unterdatei relativ zur Hauptdatei angeben werden

<div class="fragment">
<p data-category="Beispiel">Relativer Pfad \
von `main.tex` zu `part1.tex`</p>

`./part1.tex`

Der **einfache Punkt »`.`«** bezieht sich bei relativen Pfaden auf den aktuellen Ordner (hier: `latex`). Er ist optional, es könnte also auch nur `part1.tex` geschrieben werden.
</div>

@preview
![](svg/chapter-04/relative-path-crop.svg)


@slide(layout=content-and-preview-with-category)

@category
Exkurs

@title
Dateipfade angeben <span class="emoji">👣</span>

@content
### Relative Dateipfade
<p data-category="Beispiel">Relativer Pfad von `main.tex` zu `part1.tex` in Unterordner</p>

`./sections/part1.tex`

@preview
![](svg/chapter-04/relative-path-subdir-crop.svg)


@slide(layout=content-and-preview-with-category)

@category
Exkurs

@title
Dateipfade angeben <span class="emoji">👣</span>

@content
### Relative Dateipfade
<p data-category="Beispiel">Relativer Pfad von `main.tex` in eigenem Unterordner zu `part1.tex` in anderem Unterordner</p>

`../sections/part1.tex`

**Zwei Punkte »`..`«** bezeichnen den Elternordner des aktuellen Ordners (hier: `latex`, den Elternordner des Ordners `main`).

@preview
![](svg/chapter-04/relative-path-superdir-crop.svg)


@slide(layout=content-only)

@title
Kompilieren des Projekts

@content
* **Nur die Hauptdatei** wird kompiliert, um das fertige PDF-Dokument zu erhalten.
* Fehlermeldungen enthalten dann Verweis, in welcher Unterdatei sie aufgetreten sind.
* Die Unterdateien können wegen ihrer fehlenden Präambel nicht selbstständig kompiliert werden.


@slide(layout=content-and-preview)

@title
Präambel auslagern

@content
Was denkt ihr, passiert, wenn wir die Präambel in eine Unterdatei auslagern?

Wird das Gesamtdokument kompilieren oder nicht?

++ **Ja, es kompiliert!** \
Ein einfacher Weg, um die Hauptdatei noch übersichtlicher zu halten.

@preview
![](svg/chapter-04/main-parts-präambel-crop.svg){.thin-padding}


@slide(layout=task)

@task-number
4

@title
Ein strukturiertes Projekt

@content
Im Ordner `exercises/project-structure` findet ihr eine Datei namens `main.tex`.

* Lagert die einzelnen Abschnitte in eigene Dateien `section1.tex`, `section2.tex` und `section3.tex` aus und bindet sie mittels `\include` ein.
* Welcher Befehl wird durch `\include` überflüssig?
