latex-wochenende/slides/chapter-04.en.md
2020-06-12 13:01:45 +02:00

271 lines
6.3 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)
@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.png){style="padding: .2em; height: 100vh"}
@slide(layout=content-and-preview)
@title
Main file <span class="emoji">👑</span>
@content
* contains basic structure and front matter
* includes separate sections with \
`\input{path/to/file}` or \
`\include{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=two-columns)
@title
`input` or `include`?
@column-one
``` {.hljs .lang-tex}
\input{path/to/file}
```
* file extension `.tex` **may** be added
* **nesting** possible: nested files can again be embedded using `\input{}`
* file is added to the resulting document **without a page break**
@column-two
``` {.hljs .lang-tex}
\include{path/to/file}
```
* file extension `.tex` **must not** be added
* **no nesting** possible
* each subfile starts a **new page** in the resulting document
* advantage for larger projects: `\includeonly{file1,file2,...}` can be used in the preable to compile only certain subfiles
(the entire project has to be compiled at least once before)
@slide(layout=content-and-preview-with-category)
@category
Excursion
@title
Specifying file paths <span class="emoji">👣</span>
@content
* important for `\input{}` and `\include{}`, later also for pictures
* file and folder structure = tree structure <span class="emoji">🌳</span>
@preview
![](svg/chapter-04/tree-crop.svg)
@slide(layout=content-and-preview-with-category)
@category
Excursion
@title
<span data-category="Example">Specifying file paths <span class="emoji">👣</span></span>
@content
### Absolute paths
* path from the root directory to a file
* the direcories are separated by special characters:
* in UNIX: `/`
* in Windows: `\`
<div class="fragment">
<p data-category="Example">absolute path for `main.tex`</p>
* UNIX: `/home/knut/docs/latex/main.tex`
* Windows: `C:\knut\docs\latex\main.tex`
<p data-category="Caution!">In **LaTeX,** you have to use UNIX-style paths. Therefore, we will use those from here on.</p>
</div>
@preview
![](svg/chapter-04/absolute-path-crop.svg)
@slide(layout=content-and-preview-with-category)
@category
Excursion
@title
Specifying file paths <span class="emoji">👣</span>
@content
### Relative paths
* path from somewhere in the tree to a certain file
* shorter + less typing! <span class="emoji"></span>
* with `\input{}` and `\include{}`, you can specify the path relative to the main file
<div class="fragment">
<p data-category="Example">Relative path \
from `main.tex` to `part1.tex`</p>
`./part1.tex`
A **single dot `.`** in a relative path represents the current folder (in this case: `latex`). It is optional, you could also write `part1.tex` here.
</div>
@preview
![](svg/chapter-04/relative-path-crop.svg)
@slide(layout=content-and-preview-with-category)
@category
Excursion
@title
Specifying paths <span class="emoji">👣</span>
@content
### Relative paths
<p data-category="Example">Relative path from `main.tex` to `part1.tex` in subfolder</p>
`./sections/part1.tex`
@preview
![](svg/chapter-04/relative-path-subdir-crop.svg)
@slide(layout=content-and-preview-with-category)
@category
Excursion
@title
Specifying paths <span class="emoji">👣</span>
@content
### Relative paths
<p data-category="Example">Relative path from `main.tex` in its own subfolder to `part1.tex` in another subfolder</p>
`../sections/part1.tex`
**Two dots `..`** represent the parent folder of the current folder (in this case: `latex`, parent of `main`).
@preview
![](svg/chapter-04/relative-path-superdir-crop.svg)
@slide(layout=content-only)
@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 dont have a preamble.
@slide(layout=content-and-preview)
@title
Outsourcing the preamble
@content
What do you think happens when we outsource the preamble into its own subfile?
Will the document compile?
++ **Yes, it will!** \
A simple way of keeping the main file even more organised.
@preview
![](svg/chapter-04/main-parts-preamble-crop.svg){.thin-padding}
@slide(layout=task)
@task-number
3
@title
A structured project
@content
* Remove the preamble, both of the `document` lines, and the table of contents from `allgemeines.tex`.
* ++ Compile `l2kurz.tex` instead. This is going to be our **main file** from now on. The file `allgemeines.tex` is already included and will be compiled automatically.
* ++ The main file is very complex. Outsource all the commands that come before the document environment (`\begin{document}`) into a new file `preamble.tex` and include it using `\input{preamble}`.
* ++ **Technical note:** When a popup opens during compilation, please choose option “(c) use the default command.”
@slide(layout=task)
@task-number
3
@title
A structured project
@content
* To avoid long compilation times, you should should only include the sections `einleitung.tex` and `allgemeines.tex` for now.
* ++ For this purpose, replace all of the **other** `\input` statements inside `l2kurz.tex` by `\include` statements.
* ++ Place the `\includeonly` statement directly **before** `\begin{document}`.
* ++ **Caution:** The preamble still needs to be included via `\input`.