% Dokumentanklasse: a4paper, 14pt
% Beschreibung:     Dokumentenformat
% Option:           extraarticle - ?
\documentclass[12pt]{article}

% Packet:           xcolor
% Beschreibung:     Define own color schemas
% Option:
% Restriktion:      Muss vor Paket hyperref geladen werden. Ansonsten werden die Farben der Links nicht genutzt.
\usepackage{xcolor}

% Definiere Farben
\definecolor{blue}{HTML}{5E7FB8}
\definecolor{brown}{HTML}{BA9D5E}
\definecolor{green}{HTML}{79B960}
\definecolor{grey}{HTML}{7C7C7C}
\definecolor{light-grey}{HTML}{D5D5D5}
\definecolor{orange}{HTML}{FF7F00}
\definecolor{red}{HTML}{B80A0A}
\definecolor{violet}{HTML}{B688CB}
\definecolor{white}{HTML}{FFFFFF}
\definecolor{yellow}{HTML}{E2E66C}

% Paket:            setspace
% Beschreibung:     Setz über die optionen den Zeilenabstand
% Optionen:         Möglicher Zeilenabstand
%                   singlespacing = 1,0
%                   onehalfspacing = 1,5
%                   doublespacing = 2,0
% Restriktion:      Muss vor Paket hyperref geladen werden. Ansonsten funktioniert das Paket nicht.
\usepackage[onehalfspacing]{setspace}


% ###########################################################################################################################

% Paket:            appendix
% Beschreibung:     Das Paket dient dazu, ausschließlich das Thema einer Überschrift in das Inhaltsverzeichnis zu überführen
% Option:           appendix - Überführt die Überschriften des Anhangs richtig ins das Inhaltsverzeichnis
\usepackage[titletoc]{appendix}

% Paket:            ansmath
% Beschreibung:     Zum darstellen von mathematischen Formeln
\usepackage{amsmath}

% Paket:            bebel
% Beschreibung:     Stellt das Literatur-, Abbilungs-, Tabellenverzeichnis auf eine beliebige Sprache
% Option:           ngerman
\usepackage[ngerman]{babel}

% Paket:            biblatex
% Beschreibung:     Ermöglicht es, ein Literaturverzeichnis zu führen
% Option:
\usepackage[
  style=authoryear-icomp,    % Zitierstil (https://de.overleaf.com/learn/latex/Biblatex_bibliography_styles)
  isbn=false,                % ISBN nicht anzeigen, gleiches geht mit nahezu allen anderen Feldern
  pagetracker=true,          % ebd. bei wiederholten Angaben (false=ausgeschaltet, page=Seite, spread=Doppelseite, true=automatisch)
  maxbibnames=50,            % maximale Namen, die im Literaturverzeichnis angezeigt werden
  maxcitenames=3,            % maximale Namen, die im Text angezeigt werden, ab 4 wird u.a. nach den ersten Autor angezeigt
  autocite=inline,           % regelt Aussehen für \autocite (inline=\parancite)
  block=space,               % kleiner horizontaler Platz zwischen den Feldern
  backref=true,              % Seiten anzeigen, auf denen die Referenz vorkommt
  backend=biber,
  backrefstyle=three+,       % fasst Seiten zusammen, z.B. S. 2f, 6ff, 7-10
  date=short,                % Datumsformatbackend=biber
]{biblatex}
\setlength{\bibitemsep}{1em}     % Abstand zwischen den Literaturangaben
\setlength{\bibhang}{2em}        % Einzug nach jeweils erster Zeile
\addbibresource{referenzen//bibliothek.bib}

% Paket:            caption
% Beschreibung:     Bietet eine große Auswahl an Gestaltungsmöglichkeiten bezüglich der Beschriftung von Bildern und Tabellen.
\usepackage{caption}

% Paket:            colortbl
% Beschreibung:     Ermöglicht Tabellen, Spalten oder Zellen farbig zu gestalten.
% Befehle:          \columncolor
% Dokumentation:    http://texdoc.net/texmf-dist/doc/latex/colortbl/colortbl.pdf
\usepackage{colortbl}

% Paket:            booktabs
% Beschreibung:     Das Hauptaugenmerk von booktabs liegt dabei auf der Gestaltung der horizontalen Linien innerhalb einer Tabelle.
%                   Was unter anderem daran liegt, dass der Autor des Paketes Simon Fear mehrere Regeln bzw. Empfehlungen für die
%                   Erstellung/Gestaltung einer Tabelle gibt. Aufgrund der ersten zwei Regeln:
%                   1) Verwende nie und nimmer vertikale Linien.
%                   2) Verwende keine doppelten Linien.
% Dokumentation:    https://www.namsu.de/Extra/pakete/Booktabs.html
\usepackage{booktabs}

% Paket:            courier
% Beschreibung:     Lädt das Paket courier für Schriftarten mit fester Breite.
% Befehle:          \ttfamily     Aktiviert Courier füt Tabellen bzw. generelle begin-Blöcke
\usepackage{courier}

% Packet:           csquotes
% Beschreibung:     Muss nach babel, polyglossia, biblatex und inputec geladen werden
% Options:
%   autostyle=true  - Diese Anweisung passt das Zitatdesign so an, dass es zur momentan im Dokument verwendeten Sprache passt
%   autostyle=once  - Ändert das Zitatdesign einmalig, sodass es zur Grundsprache des Dokumentes passt.
%   autostyle=try   - Verhalten sich, sollte multilinguale Unterstützung vorhanden sein, wie true und once, doch werden sie,
%                     für den Fall, dass dies nicht möglich wäre, keine Warnungen erzeugen. (D. h. falls weder babel noch
%                     polyglossia geladen wurden). Die Kurzformautostyleist äquivalent zu autostyle=true
% Dokumentation:    http://mirrors.ibiblio.org/CTAN/info/translations/csquotes/de/csquotes-DE.pdf
\usepackage[autostyle=true]{csquotes}

% Paket:            enumitem
% Beschreibung:     Zeilenabstände bei Aufzählungen definieren
% Option:
\usepackage{enumitem}

% Paket:            eurosym
% Beschreibung:     Bildet das Euro-Zeichen in unterschiedlichen Varianten ab
% Option:
\usepackage{eurosym}

% Paket:            fancyhdr
% Beschreibung:     Ermöglich ein generelles Seitenlayout ein zu stellen mit Kopf und Fußzeile.
\usepackage{fancyhdr}

% Paket:            float
% Beschreibung:     Zum Ausrichten von Tabellen und Spalten bzw. deren Zentrierung
% Option:
% Restriktion:      Muss von Paket hyperref geladen werden. Ansonsten funktioniert das Paket nicht.
\usepackage{float}

\usepackage{forest}

% Packet:           framemethod
% Beschreibung:
% Option:
\usepackage[framemethod=tikz]{mdframed}
\mdtheorem[
  linecolor=red,
  frametitlefont=\sffamily\bfseries\color{white},
  frametitlebackgroundcolor=red,
]{warn-popup}{Warnung}[subsection]

\mdtheorem[
  linecolor=orange,
  frametitlefont=\sffamily\bfseries\color{white},
  frametitlebackgroundcolor=orange,
]{info-popup}{Information}[subsection]

\mdtheorem[
  linecolor=green,
  frametitlefont=\sffamily\bfseries\color{white},
  frametitlebackgroundcolor=green,
]{example-popup}{Beispiel}

% Paket:            footmisc
% Beschreibung:     Das footmisc Paket liefert viele Möglichkeiten, wie Fußnoten in Dokumenten dargestellt werden können.
% Option:
% Dokumentation:    http://mirror.utexas.edu/ctan/info/translations/footmisc/de/footmiscDE.pdf
\usepackage[bottom]{footmisc}

% Paket:            geometry
% Beschreibung:     A4 Seitenabstände
% Option:
\usepackage{geometry}
\geometry{
%  a4paper,           % Papierformat (wird auch über die Dokumentenklasse definiert)
  top=2.5cm,          % Abstand Kopfseite   (Zwischen Kopfseite und Inhalt)
  bottom=2cm,         % Abstand Fußseite    (Zwischen Fußseite und Inhalt)
  left=2.5cm,         % Abstand Linkeseite  (Zwischen Linkerseite und Inhalt)
  right=2.5cm,        % Abstand Rechteseite (Zwischen Recherseite und Inhalt)
%  width=              %                    textwidth (+marginsep +marinparwidth)
%  textwidth=15cm,     % Textbreite
%  marginparsep=1cm,   % Randnotiztrennng
%  marginparwidth=10cm,% Randnotizbreite
%  height=             %                    textheight (+headheight +headsep + footskip)
%  textheight=        % Texthöhe
  headheight=1cm,     % Kopfhöhe
  headsep=0.5cm,      % Kopftrennung        (Größe zwischen Kopfzeile und Inhalt)
  footskip=1cm,       % Fußzeilenhöhe
}

% Paket:            graphicx
% Beschreibung:     Einbinden von Bildern
% Option:
\usepackage{graphicx}

% Packet:           Hyperref
% Beschreibung:     Importiert hyperref um Querverweise mittels \hyperref zu erzeugen.
% Dokumentation:    https://www.namsu.de/Extra/pakete/Hyperref.html
\usepackage{hyperref}
\hypersetup{
  colorlinks=false,                 % hyperlinks are coloured
  citecolor=green,                  % color for cite links, only visible if colorlinks=true
  linkcolor=red,                    % color for page links, only visible if colorlinks=true
  urlcolor=orange,                  % color for url links, only visible if colorlinks=true
  citebordercolor=green,            % color for citeborder, only visible if colorlinks=true
  urlbordercolor=orange,            % color for url links, only visible if colorlinks=true
  linkbordercolor=red,              % color for page links, only visible if colorlinks=true
  pdfborderstyle={/S/U/W 1},        % border style will be underline of width 1pt
  pdftitle={PDF-Title},
  pdfauthor={Markus Pesch},
  pdfsubject={PDF-Subject},
  pdfkeywords={},
  pdfcreator={pdflatex},
  pdfproducer={LaTeX with hyperref}
}

% Paket:            glossaries
% Beschreibung:     Das Paket glossaries muss nach dem Paket hyperref geladen werden
% Dokumentation:    http://ftp.gwdg.de/pub/ctan/macros/latex/contrib/glossaries/glossaries-user.pdf
% Option/en:
%   acronyms        - This is equivalent to acronym=true and may be used in the document class option list.
%   section         - This is a key=value option. Its value should be the name of a sectional unit (e.g. chapter).
%                     This will make the glossaries appear in the named sectional unit, otherwise each glossary will
%                     appear in a chapter, if chapters exist, otherwise in a section. Unnumbered sectional units will
%                     be used by default.
%   toc             - Add the glossaries to the table of contents.
\usepackage[toc,acronyms]{glossaries}
\makeglossaries
\include{referenzen/glossar}

% Paket:            utf8
% Beschreibung:     Stellt Umlaute richtig dar
% Option:           inputenc - Erlaubt die Darstellung der gleichen Zeichen (Character) wie sie in stdin überliefert werden
\usepackage[utf8]{inputenc}

% Paket:            lipsum
% Beschreibung:
% Option:
\usepackage{lipsum}

% Paket:            makeindex
% Beschreibung:     Ermöglicht das Indexieren von Wörter und den Befehl \printindex um den Index auszugeben
\usepackage{makeidx}
\makeindex

% Packet:           Minted
% Beschreibung:     Dient zum highlining von Quellcode wie beispielsweise Java, Bash oder Python.
% Option/en:
%   autogobble:       Leerzeichen zwischen linken Rand und Sourcecode einrücken bzw. weg schneiden.
%   breaklines:       Automatische Zeilenumbrüche
%   cache:            de- oder aktiviert den cache um Sourcecode zwischen zu speichern und so das PDF schneller zu erzeugen
%   cachedir:         Definiert den Pfad zum cache, an dem minted seine Daten zwischen speichern kann
%   fontfamily:       Die Schriftart die benutzt werden soll. tt, courier und helvetica sind vordefiniert.
%   fontsize:         Die Schriftgröße die benutzt werden soll. Beispielsweise fontsize=\footnotesize
%   linenos:          Zeilennummern
%   keywordcase:      Änderung der Buchstaben. Takes lower, upper, or capitalize.
%   showspaces:       Blendet Leerzeichen ein
\usepackage[cache=true]{minted}

% usemintedstyle
% Gebe 'pygmentize -L styles' im Terminal ein um alle verfügbaren styles anzuzeigen.
\usemintedstyle{tango}

% newminted
% Definiere neue aliase um einmalig ein highlighting pro Sprache zu deklarieren
% \newminted{<makroname>}{optionen} ist verfügbar unter "\<makroname>{code}"
\newminted{awk}{autogobble=true, breaklines=true, linenos=true}
\newminted{bash}{autogobble=true, breaklines=true, linenos=true}
\newminted{json}{autogobble=true, breaklines=true, linenos=true}
\newminted{julia}{autogobble=true, breaklines=true, linenos=true}
\newminted{r}{autogobble=true, breaklines=true, linenos=true}
\newminted{sql}{autogobble=true, breaklines=true, linenos=true, keywordcase=upper}
\newminted{xml}{autogobble=true, breaklines=true, linenos=true}

% newmintedfile
% Definiere neue Makros um automatisch Sourcecode aus Dateien zu highlighten.
% \makroname{Dateipfad}
\newmintedfile[inputawk]{awk}{autogobble=true, breaklines=true, linenos=true}
\newmintedfile[inputbash]{bash}{autogobble=true, breaklines=true, linenos=true}
\newmintedfile[inputjson]{json}{autogobble=true, breaklines=true, linenos=true}
\newmintedfile[inputjulia]{julia}{autogobble=true, breaklines=true, linenos=true}
\newmintedfile[inputr]{r}{autogobble=true, breaklines=true, linenos=true}
\newmintedfile[inputsql]{sql}{autogobble=true, breaklines=true, linenos=true, keywordcase=upper}
\newmintedfile{inputxml}{autogobble=true, breaklines=true, linenos=true}

% newmintinline
% Definiere neues Makro um Sourcecoude einzeiler zu highlighten
% \begin{awkcode} \end{awkcode}
\newmintinline{awk}{autogobble=true, breaklines=true, linenos=true}
\newmintinline{bash}{autogobble=true, breaklines=true, linenos=true}
\newmintinline{json}{autogobble=true, breaklines=true, linenos=true}
\newmintinline{julia}{autogobble=true, breaklines=true, linenos=true}
\newmintinline{r}{autogobble=true, breaklines=true, linenos=true}
\newmintinline{sql}{autogobble=true, breaklines=true, linenos=true, keywordcase=upper}
\newmintinline{xml}{autogobble=true, breaklines=true, linenos=true}

% Paket:            multirow
% Beschreibung:     Zum kombinieren mehrerer Zellen einer Tabelle
% Option:
\usepackage{multirow}

% Paket:            natbib
% Beschreibung:     Für Zitate
% Option:           round - ?
%\usepackage[round]{natbib}

% Paket:            pdflscape
% Beschreibung:     Ermöglicht Seiten horizontal darzustellen
% Option:           \begin{landscape} \end{landscape}
\usepackage{pdflscape}

% Paket:            showframe
% Beschreibung:     Blendet alle Frames (Textkörper, Fußzeile Kopzeile, Seitenrand) ein
% Option:
% \usepackage{showframe}

% Paket:            subcaption
% Beschreibung:     Bietet eine große Auswahl an Gestaltungsmöglichkeiten bezüglich der Beschriftung von Bildern und Tabellen
%                   die neben oder unter untereinander dargestellt werden sollen.
\usepackage{subcaption}

% format=NAME           - Einstellung des grundsätzlichen Formats von Gleitobjektbeschriftungen
% indention=EINZUG      - Einstellung des Einzugs der Beschriftung ab der zweiten Zeile
% labelformat=NAME      - Einstellung der Zusammensetzung des Bezeichners (z. B. Label und Nummer) der Beschriftung
% labelsep=NAME         - Einstellung des Trenners nach dem Bezeichner
% justification=NAME    - Einstellung er Ausrichtung des Textes Beschriftung
% singlelinecheck=BOOL  - Sonderbehandlung für einzeilige Beschriftungen ein- oder ausschalten
% font=NAME             - Einstellung der Schrift der gesamten Beschriftung
% labelfont=NAME        - Einstellung der Schrift des Bezeichners
% textfont=NAME         - Einstellung der Schrift des Textes der Beschriftung
% margin=BREITE         - Einstellung der Breite des Randes der Beschriftung
% width=BREITE          - Einstellung der Breite der Beschriftung
% parskip=ABSTAND       - Einstellung des Absatzabstandes der Beschriftung
% hangindent=EINZUG     - Einstellung des Einzugs abgesehen von ersten Absatzzeilen
% style=NAME            - Auswahl einer vordefinierten Gesamteinstellung
% aboveskip=ABSTAND     - Einstellung des Abstandes vor einer Beschriftung
% belowskip=ABSTAND     - Einstellung des Abstandes nach einer Beschriftung
% position=WAHL         - Einstellung ob die Beschriftung als Über- oder Unterschrift formatiert werden soll
% tableposition=WAHL    - Einstellung ob nur bei Tabellen die Beschriftung als Über- oder Unterschrift formatiert werden soll
\captionsetup[figure]{position=bottom}
\captionsetup[table]{position=bottom}

% Packet:           tabularx
% Beschreibung:     Werden Tabellen mit diesem Paket erstellt, ist es möglich Zeilenumbrüche in einer Zelle zu erzeugen
\usepackage{tabularx}

% Paket:            textpos
% Beschreibung:     Zum erstellen von Textboxen
% \begin{textblock*}{\textwidth}(0cm,0.5cm)
\usepackage{textpos}

% Paket:            tikz
% Beschreibung:     TikZ and PGF are TeX packages for creating graphics programmatically.
% Dokumentation:
\usepackage{tikz}
\usetikzlibrary{intersections}
\usetikzlibrary{arrows.meta}

% Packet:           varwidth
% Beschreibung:     The package defines a varwidth environment (based on minipage) which is an analogue
%                   of minipage, but whose resulting width is the natural width of its contents.
% Dokumentation:    http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/varwidth/varwidth-doc.pdf
%                   https://www.namsu.de/Extra/befehle/Minipage.html
% Option:
\usepackage{varwidth}

% Paket:            verbatim
% Beschreibung:     Bildet einen Quelltext exakt ab.
% Options:
\usepackage{verbatim}

% Paket:            warapfig
% Beschreibung:     Ermöglich das floaten von Texten neben Bildern
% Options:
% \begin{wrapfigure}{R}{0.30\textwidth}
%   \includegraphics[width=0.30\textwidth]{img/middleware.png}
%   \caption{Middleware}
% \end{wrapfigure}
\usepackage{wrapfig}

% Start des Dokuments
\begin{document}

  % Set Globally Table-Margin
  \def\arraystretch{1.2}

  % Fetch Commit ID and Date
  \immediate\write18{./git-info.sh commit > git-id.tmp}
  \immediate\write18{./git-info.sh date > git-date.tmp}
  \immediate\write18{./git-info.sh url > git-url.tmp}

  % Importiere weitere .tex Dokumente
  \include{./titel/titel}
  \pagebreak

  % Pagestyle
  % Setze das Seitenlayout auf fancyhdr um Fuß- und Kopfzeilen zu setzen
  \pagestyle{fancy}

  % Löscht alle Kopf- und Fußzeilen des pagestyles fancyhdr
  \fancyhf{}

  % Fuß- und Kopfzeile des Paketes fancyhdr
  % [L] - Linkeseite      [O] - Ungerade Seitenzahlen         [LE,LO] - Linkeseite, Gerade- und Ungerade Seitenanzahlen
  % [C] - Mitte           [E] - Gerade Seitenanzahlen         [CE]    - Seitenmitte, nur gerade Seitenanzahlen
  % [R] - Rechteseite                                         [RO]    - Rechteseite, nur ungerade Seitenanzahlen
  % \fancyhead    Kopfzeile
  % \fancyfoot    Fußzeile
  \fancyhead[L]{\rightmark}
  \fancyhead[R]{\includegraphics[width=4cm]{img/logo.png}}
  \fancyfoot[L]{Betriebssysteme / Linux WS21/22 - Aufgabensammlung}
  \fancyfoot[C]{}

  % Pixelstärke der Kopf- und Fußzeilenlinie
  \renewcommand{\headrulewidth}{1pt}
  \renewcommand{\footrulewidth}{1pt}

  % Agenda
  \tableofcontents
  \pagebreak

  % Setze die Seitenbeginn zurück
  \setcounter{page}{1}
  \fancyfoot[R]{Seite \thepage}

  % Importiere weitere .tex Dokumente
  % \include{./examples/examples}

  \include{./chapters/01-ssh}
  \include{./chapters/02-file-permissions}
  \include{./chapters/03-network}
  \include{./chapters/04-dns}
  % \include{./chapters/05-dhcp}

  % \include{./chapters/01-network}
  % \include{./chapters/02-dns}
  % \include{./chapters/03-ssh}
  % \include{./chapters/04-file-permissions}
  % \include{./chapters/05-directory-structure}
  % \include{./chapters/06-filesystems}
  % \include{./chapters/07-backups}
  % \include{./chapters/08-textprocessing}

  % \include{./chapters/99-questions}
  % \include{./chapters/99-awk}


  % Aufzählung aller Bilder
  % \listoffigures
  % \newpage

  % Aufzählung aller Tabellen
  % \listoftables
  % \newpage

  % Glossary
  \printglossaries
  \newpage

  % Literatur
  \printbibliography[heading=bibintoc]
\end{document}