\chapter{Basic document structure}
\label{sec:basic-document-structure}

In essence, every \LaTeX{} document is composed of two parts: 
We call the first commands within our \LaTeX{} document the \emph{preamble}.
It specifies global properties of our document, such as the document class, the encoding, the language, the page format, and additional packages that we want to use.
The \emph{document environment}, on the other hand, contains the actual content of our document, i.\,e., the things that we will later see in our generated \acro{PDF} file. 

\Example{lst:latex-document-basic-structure}{basic-document-structure/hello-world}{basic-document-structure/hello-world_crop}{Exemplary structure of a simple \LaTeX{} document with preamble and document environment}

\section{Preamble}
Let's take a closer look at the preamble. 
A minimal preamble should contain the following specifications: 

\subsection{Document class}\label{sec:document-class}
We can define a document class by using the command \code{latex}{\textbackslash documentclass[<para- meter>]\{<document class>\}}.
The most commonly used document classes that are supported by default are \pkg{article} for short documents, and \pkg{report} for longer ones. 
Furthermore, you can use \pkg{book} for books, \pkg{beamer}\footnote{We do not cover making presentations in \LaTeX{} in this tutorial. However, if you are interested in the topic, we recommend this introduction on Overleaf: \url{https://www.overleaf.com/learn/latex/Beamer}} for presentations, and \pkg{letter}\footnote{We also do not cover letters in this script. An introduction can be found on WikiBooks: \url{https://en.wikibooks.org/wiki/LaTeX/Letters}} for letters.

In addition to the standard document classes, the \acro{KOMA} script classes have been developed. 
They provide alternatives to the document classes mentioned above: 
In lieu of \pkg{article} you can use \pkg{scrartcl}, \pkg{report} is replaced by \pkg{scrreprt},\footnote{Those vowels are indeed missing, do not try to insert them.} and \pkg{scrbook} can be used instead of \pkg{book}. 
As a replacement for \pkg{letter}, one can use \pkg{scrlttr2}. 
A complete list of all \acro{KOMA} script classes is available online.\footnote{Available at: \url{https://komascript.de/komascriptbestandteile}} 
By using \acro{KOMA} document classes, the layout of the generated \acro{PDF} document is changed. 
On top of that, they provide additional functionalities. 
The standard document classes are designed according to US-American conventions
whereas \acro{KOMA} classes adhere to European norms, e.\,g., for 
writing letters. 

Each \code{latex}{\textbackslash documentclass} command can hold optional parameters in 
square brackets. 
\code{latex}{\textbackslash documentclass[10pt,a5paper,landscape]scrartcl\}}, 
for instance, configures a \acro{KOMA} script article and sets its font size to 
10\,pt,\footnote{The standard font size is 12\,pt.} the page size to 
A5,\footnote{The default case would be A4.} and the orientation of the page to 
landscape. 
The language can be passed as an optional parameter, too (cf. \cref{sec:language}). 

\subsection{Digression: packages}
\label{sec:packages}

\codeblock{latex}{listings/basic-document-structure/packages.tex}
Packages provide additional commands and functionalities that we can use within our \LaTeX{} source code. 
There are numerous packages for different use cases (e.\,g., typesetting formulas, lists, \textellipsis). 
In order to use a package, it must be included within the preamble. 
To do so, the above-mentioned command is used. 
The most important \LaTeX{} packages can be found in the Comprehensive \TeX\ Archive Network, short: \acro{CTAN}.\footnote{Available at: \url{https://www.ctan.org/}} 
You can also find documentation for the packages there. 

\subsection{Encoding}
\codeblock{latex}{listings/basic-document-structure/encoding.tex}
One use case for packages is specifying the encoding of our \LaTeX{} document. 
The character encoding\footnote{cf. \url{https://en.wikipedia.org/wiki/Character_encoding}} determines the available character set.
The standard encoding in \LaTeX{} is \acro{ASCII}.\footnote{cf. \url{https://en.wikipedia.org/wiki/ASCII}}
It is an American character encoding and therefore does not contain German umlauts or most other special characters, which makes it unsuitable at least for non-english use cases. 
Instead, \acro{UTF-8}\footnote{cf. \url{https://en.wikipedia.org/wiki/UTF-8}} can be used as a universal character encoding.

In \LaTeX{}, we need to specify two character encodings: 
The input encoding (\mono{inputenc}), which refers to our source code, and the font encoding (\mono{fontenc}), which determines what the content of our \acro{PDF} document looks like.\footnote{Details on \mono{fontenc} can be found at: \url{https://tex.stackexchange.com/questions/108417/font-encoding-in-latex}}
\pkg{T1} is an encoding that tries to cover most European languages with a limited number of characters. 

\subsection{Language}\label{sec:language}
\codeblock{latex}{listings/basic-document-structure/language.tex}
The package \pkg{babel} provides language-specific information (e.\,g., on hyphenation, special characters, changing fonts, translation of labels\footnote{cf. \cref{sec:references}} like \enquote{Chapter,} \enquote{Table of Contents,} or \enquote{Figure.}
The desired language can be passed as an optional parameter. 
\pkg{ngerman}, for instance, is used for the new German spelling. 
Some packages require that the language is already passed as an optional parameter in the \code{latex}{\textbackslash documentclass} command. 
In this case, just leave out the optional parameter for the language within the \pkg{babel} inclusion command.

We can also use multiple languages in our document. 
To do so, we pass the languages, separated by commas, as an optional parameter to the babel inclusion command. 
Within our document, we can switch between languages with the \code{latex}{\textbackslash selectlanguage\{<language>\}} command. 
Alternatively, foreign-language text can be declared by using the following command: 

\codeblock{latex}{listings/basic-document-structure/foreign-language.tex}

\section{Document environment}
The actual content of the \acro{PDF} document needs to be put inside of an environment starting with \code{latex}{\textbackslash begin\{document\}} and ending with \code{latex}{\textbackslash end\{document\}}.

\subsection{Continuous text}
The easiest content that we can integrate into the document environment is continuous text. 
We can write it directly into our source code. 
Line breaks and multiple consecutive spaces are ignored by \LaTeX{}. 
Blank lines create a new paragraph, that is indented by default.\footnote{The automatic indentation of new paragraphs can be prevented by using the command \code{latex}{\textbackslash noindent}.}
Manual line breaks can be enforced with two backslashes (\textbackslash\textbackslash). 
This should be avoided, though. 

\subsection{Comments}
Some characters are reserved for \LaTeX-specific commands, for instance, the percent sign. 
Using a percent sign tells the \LaTeX{} compiler to ignore the rest of the line, so the text after the percent character will not appear in the generated \acro{PDF} document.
This is called a \emph{comment}\textit{,}
and it can be useful to take notes while working on a document without affecting the document itself. 

There are a few more of these reserved characters, as we will see and learn to deal with in \cref{sec:more-special-characters}.

\subsection{Sections and chapters}
Continuous text can be structured by headings that divide the document into sections and chapters. 
Needless to say, \LaTeX{} provides us with commands for that.
The commands that are depicted in \cref{lst:headlines} can be used with any document class. 

\Example{lst:headlines}{basic-document-structure/headlines}{basic-document-structure/headlines_crop}{Heading Levels}

Some document classes provide additional commands. In a \pkg{report}, you get \code{late}{\textbackslash chapter\{Chapter\}}, and in a \pkg{book}, additionally \code{latex}{\textbackslash part\{Part\}}.
You can mark the command with an asterisk if you want to omit the numbering of a section and exclude it from the table of contents:\footnote{cf. \cref{sec:table-of-contents}}

\codeblock{latex}{listings/basic-document-structure/section.tex}

An alternative title for the table of contents can be declared as an optional 
parameter in square brackets between the command and the actual title:

\codeblock{latex}{listings/basic-document-structure/title-in-toc.tex}

\subsection{Front matter}
A simple front matter can be created by using the command \code{latex}{\textbackslash maketitle}. 
The values to be inserted into the front matter must be specified within the preamble. 
Multiple authors are joined by \code{latex}{\textbackslash and}.
If the date is not specified by the \code{latex}{\textbackslash date} command, the current date will be inserted by default.
The design of the front matter depends on the specified document class.

\Example{lst:titles}{basic-document-structure/titles}{basic-document-structure/titles_crop}{The front matter}

\subsection{Indices}\label{sec:table-of-contents}

The command \code{latex}{\textbackslash tableofcontents} generates an automatically numbered table of contents by making use of the above-mentioned commands for dividing our text into sections and chapters (this can bee seen in \cref{lst:main-file} on \cpageref{lst:main-file}).

The numbering style and depth, and many other options can, of course, be specified manually.\footnote{We recommend the following blogpost: \url{https://texblog.org/2011/09/09/10-ways-to-customize-tocloflot/}}
For \LaTeX{} to create our table of contents properly, the project has to be compiled twice.

Besides the table of contents, you can also generate a \code{latex}{\textbackslash listoffigures} (list of figures) and a \code{latex}{\textbackslash listoftables} (list of tables). 
The captions of your figures and tables will appear within those indices.\footnote{cf. \cref{sec:graphics} (Graphics) and \cref{sec:tables} (Tables) for more information on captions}
