@slide(layout=chapter-slide)

@number
4

@title
Project structure

@slide(layout=content-and-preview)

@title
Goal

@content
Create a bigger LaTeX project and …

* prevent LaTeX documents from growing monstrously <span class="emoji">👹</span>
* keep the overview over the project structure

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


@slide(layout=content-and-preview)

@title
Main file <span class="emoji">👑</span>

@content
*	contains basic structure
*	includes separate sections with \
    `\input{path/to/file}`

``` {.lang-tex .hljs data-sourcefile=main.tex}
\documentclass{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\title{A Title}
\begin{document}
    \maketitle
    \tableofcontents
    \input{section1.tex}
    \input{section2.tex}
\end{document}
```

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


@slide(layout=content-and-preview)

@title
File with a section

@content
* contains **no preamble**
* contains **no** `\begin{document}` or `\end{document}`

``` {.hljs .lang-tex data-sourcefile=part1.tex}
\section{This is section 1}
A paragraph about the content 
of section 1.

% …
```

``` {.hljs .lang-tex data-sourcefile=part2.tex}
\section{This is section 2}
A paragraph about the content 
of section 2.

% …
```

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


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

@category
Excursion

@title
Specifying file paths <span class="emoji">👣</span>

@content
* important for `\input{}`, but later also for other media types
* file and folder structure = tree structure <span class="emoji">🌳</span>
*	with `\input{}`, you can specify the path relative to the main file

<p data-category="Caution!" class="fragment">In **LaTeX,** you have to use UNIX-style paths. They are separated by a forward slash: `path/to/file`. We will use those from here on.</p>

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


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

@category
Excursion

@title
Specifying file paths <span class="emoji">👣</span>

@content
<p data-category="Example">`main.tex` → `praeamble.tex`</p>

<div class="fragment">
`./praeamble.tex`

A **single dot ‘`.`’** represents the current folder (in this case: `latex-skript`). It is optional, you could also write `praeamble.tex` here.
</div>

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


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

@category
Excursion

@title
Specifying file paths <span class="emoji">👣</span>

@content
<p data-category="Example">`main.tex` → `basic-document-structure.tex` (in a subfolder)</p>

<pre class="fragment">./content/basic-document-structure.tex</pre>

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


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

@category
Excursion

@title
Specifying file paths <span class="emoji">👣</span>

@content
<p data-category="Example">`basic-document-structure.tex` → `graphics.raw.tex` (from one subfolder into a different subfolder)</p>

<div class="fragment">
<pre>../exercises/graphics/graphics.raw.tex</pre>

**Two dots ‘`..`’** represent the parent folder of the current folder (in this case: `latex-skript`, parent of `content `).
</div>

<div class="fragment">
<p data-category="Caution!">Spaces in file paths have to be escaped using a backslash: `path/to/a\␣file`.</p>
</div>

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


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

@category
Excursion

@title
Specifying file paths <span class="emoji">👣</span>

@content
<p data-category="Example">`task.tex` → `graphics.raw.tex` (while `task.tex` is imported into `main.tex`)</p>

<div class="fragment">
<pre>./exercises/graphics/graphics.raw.tex</pre>
<p data-category="Caution!">Paths are always relative to the root document that imports other files as fragments.</p>
</div>

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



@slide(layout=content-only-with-category)

@category
Demo

@title
Compiling the project

@content
* **Only the main file** has to be compiled to get the complete PDF document.
* ++ Error messages include a reference to the corresponding subfile.
* ++ Subfiles cannot be compiled on their own as they don’t have a preamble.

<div class="box warning fragment">
From now on, we will compile the file `main.tex` in the project root.
To do so, right click on the file in TeXstudio and choose **“Select as explicit root document”** from the dropdown.
Next, compile as usual.
</div>


@slide(layout=task)

@task-number
4

@title
A structured project

@content
You will find a file named `main.tex` in the folder `exercises/project-structure`.

* Put the sections of the file into separate files, named `section1.tex` and `section2.tex`.
* Include them using the `\input` command.
* Move the preamble to its own file in a similar fashion.
* Finally, have a look at the general project archive, starting from `main.tex` (in the root folder of the project archive). How do we include the different sections here?