\documentclass[babel=ngerman,highlight=false]{skdoc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{enumitem}
\usepackage[most]{tcolorbox}
\usepackage{fontawesome}
\usepackage[ngerman, noabbrev, nameinlink]{cleveref}
%\usepackage{showframe}

\package[vcs=https://github.com/faltfe/iodhbwm,ctan=iodhbwm]{iodhbwm}
\version{1.0}

\title{iodhbwm Klasse}
\author{Felix Faltin}
\email{ffaltin91@gmail.com}
%\repository{https://github.com/faltfe/iodhbwm}

\usepackage{geometry}
\geometry{left=6.5cm, right=1cm, marginparwidth=2cm}

%\KOMAoptions{parskip=half-}
%\let\oldblindtext\blindtext
%\renewcommand{\blindtext}{{\color{gray}\oldblindtext}}

% -------------------------------------------------------
% Custom command
% -------------------------------------------------------

\setlength{\parindent}{0pt}
%\setlength{\parskip}{3pt plus 0.3pt minus 0.3pt}

%\definecolorset{RGB}{}{}{
%    section,11,72,107;
%    extlink,73,10,61;
%    intlink,140,35,24;
%    sharp,250,105,0;
%    bright,198,229,217;
%    macrodesc,73,10,61;
%    keydesc,140,35,24;
%    macroimpl,73,10,61;
%    meta,11,72,107;
%    scriptcolor,140,35,24;
%    optioncolor,73,10,61;
%    opt,73,10,61
%}

\definecolor{darkgray}{HTML}{4D4D4D}
\definecolor{lightgray}{HTML}{B3B3B3}
\definecolor{darkred}{HTML}{8F0D0D}
\definecolor{lightred}{HTML}{D34747}
\definecolor{darkcyan}{HTML}{085656}
\definecolor{lightcyan}{HTML}{2B7E7E}

%\colorlet{meta}{darkred}

\newtcbox{\setupOption}{%
    enhanced,
    breakable,
    on line,
    boxrule=0.4pt,
    top=0mm,
    bottom=0mm,
    right=0mm,
    left=5mm,
    arc=1pt,
    boxsep=1.5pt,
    before upper={\vphantom{dlg}},
    colframe=darkred,
    coltext=black,
    colback=white,
    overlay={%
        \begin{tcbclipinterior}
            \fill[darkred] (frame.south west) rectangle node[text=white, font=\footnotesize] {\faCode} ([xshift=5mm]frame.north west);
        \end{tcbclipinterior}%
    }%
}

\newtcbox{\classOption}{%
    enhanced,
    breakable,
    on line,
    boxrule=0.4pt,
    top=0mm,
    bottom=0mm,
    right=0mm,
    left=5mm,
    arc=1pt,
    boxsep=1.5pt,
    before upper={\vphantom{dlg}},
    colframe=darkcyan,
    coltext=black,
    colback=white,
    overlay={%
        \begin{tcbclipinterior}
            \fill[darkcyan] (frame.south west) rectangle node[text=white, font=\scriptsize] {\faFileO} ([xshift=5mm]frame.north west);
        \end{tcbclipinterior}%
    }%
}

\newtcblisting{sourcecode}[1][]{%
    colframe=darkgray,
    colback=darkgray!5!white,
    left=6mm,
    listing options={%
        language={[LaTeX]TeX},
        basicstyle=\ttfamily\color{darkgray},
        commentstyle=\color{lightgray},
        keywordstyle=\color{darkred},
        numberstyle=\scriptsize\color{darkcyan},
        identifierstyle=\color{lightcyan},
        stringstyle=\color{purple},
        style=tcblatex,
        numbers=left,
        morekeywords={%
            dhbwsetup,
            listofappendencies,
            listappendixname,
            blindtext,
            maketitle
        }
    }, #1
}

% Definition von Boxen
\newtcolorbox{warning}[2][]{
    colback=darkred!5!white,
    colframe=darkred,
    fonttitle=\bfseries,
    boxrule=1pt,
    title=\textit{Warnung:} #2,
    #1
}
\newtcolorbox{info}[2][]{
    colback=darkgray!5!white,
    colframe=darkgray,
    fonttitle=\bfseries,
    boxrule=1pt,
    title=\textit{Allgemein:} #2,
    #1
}
\newtcolorbox{hint}[2][]{
    colback=darkcyan!5!white,
    colframe=darkcyan,
    fonttitle=\bfseries,
    boxrule=1pt,
    title=\textit{Hinweis:} #2,
    #1
}
\newcommand{\Version}[1]{\marginpar[\raggedleft v#1]{\raggedright v#1}}

\begin{document}
    \changes{0.4-alpha}{Add print option, auto-intro-pages and some new commands}
    \changes{0.4a-alpha}{Rename \opt{intro/add custom list} into \opt{intro/append custom content}}%
    \changes{0.4.1-alpha}{Unterstützung eines Anhang wurde hinzugefügt}%

    \maketitle

    \begin{info}{}
        Die Dokumentation ist derzeit nur auf Deutsch verfügbar. Es dürfen sehr gerne Übersetzungen beigetragen werden, insbesondere für Englisch.
        \tcbline
        The documentation is currently only available in German. Translations are very welcome, especially for English.
    \end{info}

    \vspace{2\baselineskip}

    \begin{abstract}
        Bei dem Bundle \pkg{iodhbwm} handelt es sich um eine \textbf{i}n\textbf{o}ffizielle Vorlage der \textbf{DHBW} \textbf{M}annheim zum Schreiben von Studien-, Praxis- und Bachelorarbeiten. Das Bundle stellt eine Klasse \pkg{iodhbwm} und ein Paket \pkg{iodhbwm-templates} bereit.

        Die vorgenommenen Einstellungen richten sich im Wesentlichen nach den Richtlinien der DHBW Mannheim zur Erstellung wissenschaftlicher Arbeiten.
    \end{abstract}

    \clearpage

    \tableofcontents

    \section{Konventionen}
%    \begin{sourcecode}[listing side comment, comment={Ich bin ein Kommentar},title={Hello world example}]
%% Hello again
%\documentclass[%
%    add-bibliography = true,
%    bib-file = my-source.bib
%]{iodhbwm}

    \begin{description}[leftmargin=!, labelwidth=3.5cm]
        \item[\classOption{Klassenoptionen}] Bei Klassenoptionen handelt es sich um Optionen, welche im optionalen Argument von \cs{documentclass} angegeben werden.
        \item[\setupOption{Setupoption}] Die Klasse stellt das Makro \Macro\dhbwsetup (s.~\ref{pkg:options}) bereit, welchem die Setupoptionen übergeben werden.
    \end{description}

%    \begin{info}{}
%        Hallo, ich bin nur eine allgemeine Information.
%    \end{info}
%
%    \begin{hint}{}
%        Ich bin ein Hinweis und kann an manchen Stellen sehr hilfreich sein.
%    \end{hint}
%
%    \begin{warning}{}
%        Ich bin eine Warnung und sollte unbedingt berücksichtigt werden.
%    \end{warning}


    \section{Einleitung}
        Die Entwicklung des Bundles geschah ursprünglich aus persönlichen Gründen, denn mit jeder neuen Arbeit musste ich stets die gesamte Präamble meiner letzten Arbeit kopieren und gegebenenfalls Änderungen vornehmen. Außerdem war ich es leid, mir von Kommilitonen immer die gesamte Vorlage schicken lassen zu müssen, um dann doch festzustellen, dass die Dokumente doch nicht gleich aussehen.

        Deshalb kam ich zu dem Entschluss, eine einfache Klasse zu entwickeln, welche das grundlegende Design entsprechend der Richtlinien der \hyperlink{https://www.dhbw-mannheim.de/}{DHBW Mannheim} umsetzt. Zusätzlich dazu habe ich ein kleines Paket geschrieben, welches häufige Befehle definiert. Es wird empfohlen, dass das Paket in Verbindung mit der Klasse verwendet wird. Eine Voraussetzung ist es jedoch nicht.

    \section{Die Klasse iodhbwm}\label{cls:iodhbwm}
        Die Angabe der Optionen erfolgt über das optionale Argument von\\
        \Macro\documentclass[\meta{key}\oarg{= value}]{iodhbwm}. Der Aufbau und die Bedeutung der einzelnen Optionen ist den folgenden Kapiteln zu entnehmen.
%        Dabei wird auf das \meta{key}=\meta{value} System von \pkg{pgfopts} zurückgegriffen.

        \subsection{Optionen}
            Die beschriebenen Klassenoptionen müssen direkt beim Laden der Klasse angegeben werden. Eine Änderung im Verlauf des Dokuments ist nicht vorgesehen und technisch auch nicht immer möglich.

            \subsubsection{Allgemein}
                \Option{load-preamble}\WithValues{true, false}\AndDefault{true}
                Bei Angabe der Option \classOption{\opt{load-preamble}} werden eine Reihe von zusätzlichen Paketen geladen und teilweise vorkonfiguriert.

                \begin{hint}{}
                    Die Option ist standardmäßig mit \meta{true} vorbelegt. Damit muss die Option nicht angegeben werden. Möchte man jedoch die Voreinstellungen \textbf{nicht} laden, so ist \classOption{\opt{load-preamble} = \meta{false}} zu setzen.
                \end{hint}

                \noindent Nachfolgend erfolgt eine Auflistung der geladenen Pakete:
                \begin{description}[itemsep=1pt, style=multiline, leftmargin=3cm]
                    \item[\pkg{lmodern}] Verwendung von Latin Modern anstatt Computer Modern
                    \item[\pkg{microtype}] Verbesserungen des Schriftsatzes durch Änderungen der Abstände zwischen einzelnen Buchstaben und Wörtern
                    \item[\pkg{setspace}] Umschaltung zwischen einzeilig und anderthalbzeilig
                    \item [\pkg{scrlayer-srcpage}] Zusätzlich werden grundlegende Konfiguration zur Darstellung der Kopf- und Fußzeilen vorgenommen.
                    \item[\pkg{geometry}] Die Seitenränder werden entsprechend der Richtlinien der DHBW voreingestellt.
                    \item[\pkg{siunitx}] Paket zum Schreiben von mathematischen Einheiten unter Beachtung der korrekten Schreibweise.
                    \item[\pkg{mathtools}] Erweiterung des Standards zur Darstellung von mathematischen Ausdrücken. Das Paket lädt automatisch \pkg{amsmath}.
                    \item[\pkg{graphicx}] Möglichkeit zur Einbindung von Bildern.
                    \item[\pkg{tcolobox}] Dieses Paket lädt implizit \pkg{tikz} und \pkg{xcolor}. Dem Paket \pkg{xcolor} werden die Optionen \opt{table} und \opt{dvipsnames} übergeben.
                    \item[\pkg{tabularx}] Erweiterung der Tabellenumgebung
                    \item[\pkg{booktabs}] Möglichkeit zur Darstellung horizontaler Linien in Tabellen zur besseren Gestaltung
                    \item[\pkg{cleveref}] Das Paket erweitert die Möglichkeiten zur Referenzierung von Objekten durch die automatische Angabe derer Namen.
                    \item[\pkg{listings}] Darstellung von Quellcode unterschiedlicher Sprachen. Bei Aktivierung von \classOption{\opt{load-dhbw-templates}} wird ein Design vorgeladen.
                    \item[\pkg{csquotes}] Sprachabhängige Anführungszeichen.
                    \item[\pkg{babel}] Bezeichnungen und Trennmuster in Abhängigkeit der gewählten Sprache
                    \item[\pkg{caption}] Anpassung von Bezeichnungen (\Macro\caption)
                \end{description}

                \noindent Für den internen Gebrauch werden weitere Pakete geladen.\medskip

                \Option{load-dhbw-templates}\WithValues{true, false}\AndDefault{false}
                Bei Angabe der Option wird das Paket \pkg{iodhbwm-templates} geladen. Die dadurch bereitgestellten zusätzlichen Funktionen werden im \Cref{pkg:iodhbwm-templates} beschrieben. Für den vollständigen Funktionsumfang sollte die Option immer gesetzt werden.\medskip

                \Option{add-tocs-to-toc}\WithValues{true, false}\AndDefault{false}
                bei Aktivierung der Option werden alle Verzeichnisse (Tabellen-, Abbildungs- und Literaturverzeichnis) in das Inhaltsverzeichnis übernommen. Es ist ein zusätzlicher Lauf von pdf\LaTeX{} notwendig, damit das Literaturverzeichnis im Inhaltsverzeichnis erscheint.

                \begin{info}{Verzeichnisse werden automatisch ausgeblendet}
                    Wenn die Option \classOption{\opt{add-tocs-to-toc}} aktiviert wurde und die Verzeichnisse trotzdem nicht angezeigt werden, kann es darin liegen, dass diese \textbf{leer} sind. Die Klasse überprüft, ob überhaupt Tabellen oder Abbildungen vorhanden sind. Sollte dies nicht der Fall sein, wird das entsprechende Verzeichnis \textbf{nicht} angezeigt.
                \end{info}

                \medskip

                \Option{language}\WithValues{babel language}\AndDefault{empty}
                Sprachen, welche im Dokument verwendet werden sollen, sind über diese Option anzugeben. Als Hauptsprache wird die \textbf{letzte angegebene Sprache} verwendet. Alternativ kann die Option \classOption{\opt{mainlanguage}} genutzt werden.

                \begin{sourcecode}[listing only]
\documentclass[%
    language = english,
    language = ngerman
]{iodhbwm}
                \end{sourcecode}

                \begin{warning}{}
                    Wenn mehrere Sprachen verwendet werden, können diese \textbf{nicht} mit Klammern als \opt{language} = \marg{english, ngerman} übergeben werden, sondern müssen wie im Beispiel einzeln angegeben werden!
                \end{warning}

                Im Beispiel werden die Sprachen Englisch und Deutsch (neue Deutsche Rechtschreibung) geladen, wobei Deutsch automatisch als Hauptsprache verwendet wird.

                Die Sprachen werden als Option an alle notwendigen Pakete (\pkg{biblatex}, \pkg{cleveref}) weiter gereicht.\medskip

                \Option{mainlanguage}\WithValues{babel language}\AndDefault{empty}
                Im Gegensatz zu \classOption{\opt{language}} wird mit der Option ausschließlich die Hauptsprache gesetzt, welche im Dokument benutzt wird. Die Sprache wird zusätzlich an entsprechende Pakete übergeben.



                \begin{sourcecode}[listing only]
\documentclass[%
    language     = english,
    mainlanguage = ngerman
]{iodhbwm}
                \end{sourcecode}
                Die Angaben der Sprachen sind äquivalent zum vorherigen Beispiel.\medskip

            \subsubsection{Formatierung}\label{subsub:format}
                Die Klasse kann bei Bedarf einige Änderungen an der Formatierung vornehmen. Insbesondere wird eine farbige Darstellung hinzugefügt. Wenn die Arbeit jedoch gedruckt wird, kann ein grau/schwarzer Druck zu unschönen Ergebnissen führen. Die beiden Optionen \classOption{\opt{print-}} und \classOption{\opt{print}} sollen hierbei Abhilfe schaffen.

                \Option{print-}\WithValues{true, false}\AndDefault{false}
                Bei Aktivierung der Option wird die farbige Darstellung von Links deaktiviert. Dies wird durch \verb|\hypersetup{hidelinks}| erreicht.\medskip

                \Option{print}\WithValues{true, false}\AndDefault{false}
                Im Gegensatz zu der Option \classOption{\opt{print-}} schaltet die Option zusätzlich noch die Darstellung von Quelltext um. Die farbige Überschrift wird entfernt und durch eine einfache Überschrift ersetzt, welche durch einen Rahmen abgegrenzt ist.

                \begin{warning}{Verschiebungen von Texten}
                    Bei der Verwendung von \opt{print} wird der Quelltext anders formatiert. Dadurch kann es unter Umständen zu Verschiebungen des Layouts kommen. Dieses Verhalten ist nicht vollständig beabsichtigt, bot jedoch vorläufig die einfachste Umsetzung. An einer adäquaten Lösung wird gearbeitet.
                \end{warning}

            \subsubsection{Darstellung der Verzeichnisse}
                Die DHBW gibt eine gewissen Struktur der Arbeit vor. Um dem Autor die Arbeit etwas zu erleichtern, bietet die Klasse drei Optionen an, welche eine automatisierte Darstellung der Verzeichnisse vornimmt. Alle Optionen sind nur in Kombination mit \classOption{\opt{load-dhbw-templates}} wirksam. Im \Cref{subsub:options-tocs} werden weitere paketseitige Einstellungen beschrieben, mit welchen die zu erstellenden Verzeichnisse angepasst werden können.\medskip

                \Option{auto-intro-pages}\WithValues{none, custom, default, all}\AndDefault{default}
                Standardmäßig erfolgt keine automatische Generierung von Verzeichnissen.

                \minisec{none}
                Wenn die Option mit dem Argument \meta{none} geladen wird, geschieht absolut gar nichts und ist gleichbedeutend mit einer nicht vorhandenen Option.

                \minisec{custom}
                Es werden \textbf{keine} automatischen Voreinstellungen für das Setzen von Verzeichnissen vorgenommen. Die Option ist ausschließlich dafür verantwortlich, dass das Kommando \Macro\dhbwprintintro direkt nach dem Beginn des Dokuments ausgeführt wird.\medskip

                \minisec{default}
                Durch Angabe von \meta{default} werden die folgenden Voreinstellungen gesetzt.
                \begin{description}
                    \item[\setupOption{\opt{intro/print all}=\meta{true}}]
                    \item[\setupOption{\opt{intro/print abstract}=\meta{false}}]
                \end{description}
                Damit werden die folgenden Seiten direkt nach dem Beginn der Seite eingefügt:
                \begin{itemize}
                    \item Titelseite
                    \item (Eigenständigkeits-) Erklärung
                    \item Inhaltsverzeichnis
                    \item Abbildungsverzeichnis\footnote{\label{fn:abb}Das Abbildungs- und Tabellenverzeichnis wird nur erstellt, wenn mindestens eine Abbildung oder Tabelle vorhanden ist.}
                    \item Tabellenverzeichnis\footref{fn:abb}
                    \item Eigene Verzeichnisse
                \end{itemize}

                \minisec{all}
                Es wird zusätzlich zu den genannten Verzeichnissen von \meta{default} ein Abstract vor dem Inhaltsverzeichnis eingefügt. Das Abtract \textbf{muss} als Datei bereitgestellt werden (s.~Option \setupOption{\opt{abstract}} \Cref{pkg:iodhbwm-templates}).

            \subsubsection{Bibliographie}
                \Option{add-bibliography}\WithValues{true, false}\AndDefault{false}
                Bei Aktivierung der Option wird versucht, ein Literaturverzeichnis zu erstellen, welches automatisch am Ende des Dokuments ausgegeben werden soll. Wenn die Option \classOption{\opt{bib-file}} nicht gesetzt ist, wird automatisch nach der Datei \file{dhbw-source.bib} gesucht.

                Das Literaturverzeichnis wird mittel \pkg{biblatex} und biber erstellt. Es ist darauf zu achten, dass die Einstellungen in der IDE gegebenenfalls anzupassen sind!

                \begin{hint}{}
                    Es existiert keine Unterstützung von bib\TeX{} für die Generierung des Literaturverzeichnisses und es wird auch zukünftig keine Implementierung einer Schnittstelle geben.
                \end{hint}
                \medskip

                \Option{add-bibliography-}\WithValues{true, false}\AndDefault{false}
                Die Option verhält sich ähnlich wie \classOption{\opt{add-bibliography}} mit dem Unterschied, dass am Ende des Dokuments kein Literaturverzeichnis abgebildet wird. Zusätzlich werden die Verlinkungen zum Literaturverzeichnis deaktiviert. Möchte man ein manuelles Literaturverzeichnis, so sollte die Verlinkung wieder aktiviert werden.

                \begin{sourcecode}[listing only]
\documentclass[%
    add-bibliography-,
    bib-file = my-source.bib
]{iodhbwm}
\ExecuteBibliographyOptions{hyperref=true}
\begin{document}
    % content
    \printbibliography
\end{document}
                \end{sourcecode}

                Diese Option ist gut geeignet, wenn ausschließlich Fußnoten für Zitate verwendet werden sollen und am Ende des Dokuments kein zusätzliches Literaturverzeichnis gebraucht wird.\medskip

                \Option{bib-file}\WithValues{\meta{filename}}
                Der Option kann als \meta{value} eine Datei mitgegeben werden, welche die Einträge für das Inhaltsverzeichnis beinhalten. Es ist darauf zu achten, dass die Datei \textbf{einschließlich} Dateiendung übergeben wird.
                \begin{sourcecode}[listing only]
\documentclass[%
    add-bibliography,
    bib-file = my-source.bib
]{iodhbwm}
                \end{sourcecode}
                Diese Option ist nur in Verbindung mit \classOption{\opt{add-bibliography}} beziehungsweise \classOption{\opt{add-bibliography-}} wirksam.\medskip

                \Option{biblatex/style}\WithValues{\meta{citation style}}\AndDefault{numeric-comp}
                Bib\LaTeX{} bietet unterschiedliche Zitierweisen an. Diese Option erlaubt die Angabe der gewünschten Zitierweise. Wenn der Option ein Stil übergeben wird, überschreibt dieser die Optionen \classOption{\opt{biblatex/bibstyle}} und \classOption{\opt{biblatex/citestyle}}, wenn diese zuvor definiert wurden.\medskip

                \Option{biblatex/bibstyle}\WithValues{\meta{citation style}}
                Wenn sich die Zitierweise im Literaturverzeichnis von jener im Text unterscheiden soll, kann ein abweichender Stil mit dieser Option definiert werden. Es ist darauf zu achten, dass die Option zwingend nach \classOption{\opt{biblatex/style}} zu setzen ist, falls diese verwendet wird.\medskip

                \Option{biblatex/citestyle}\WithValues{\meta{citation style}}
                Wenn sich die Zitierweise im Dokument von jener im Literaturverzeichnis unterscheiden soll, kann ein abweichender Stil mit dieser Option definiert werden. Es ist darauf zu achten, dass die Option zwingend nach \classOption{\opt{biblatex/style}} zu setzen ist, falls diese verwendet wird.\medskip

            \subsubsection{Entwickler und Debug}
                \Option{debug}\WithValues{true, false}\AndDefault{false}
                Bei Angabe der Option werden die Pakete \pkg{blindtext} und \pkg{lipsum} geladen.

        \subsection{Allgemeine Makros}
            Derzeit stellt die Klasse keine Makros zur Verfügung.

        \subsection{Hintergrundinformationen}
            Die Klasse basiert auf der KOMA-Script Klasse \pkg{scrreprt}. Eine Änderung der Klasse ist möglich (s.~\Cref{subsec:umschaltung-twoside}), es wird jedoch dringend davon abgeraten.

    \section{Das Paket iodhbwm-templates}\label{pkg:iodhbwm-templates}
        \subsection{Optionen}\label{pkg:options}
            Das Paket wird automatisch beim Setzen der Option \classOption{\opt{load-dhbw-templates}} im Hintergrund geladen. Es wird nicht empfohlen, dass Paket manuell mittels \Macro\usepackage{iodhbwm-templates} zu laden.

            \subsubsection{Angabe von Dateinamen}
                Das Paket stellt das Makro \Macro\dhbwsetup{\meta{key}=\meta{value}} bereit, über welches alle Einstellungen (Optionen) angepasst werden können. Hierfür sind eine Reihe von \meta{key} Variablen vordefiniert.\medskip

                \Option{titlepage}\WithValues{\meta{filename}}\AndDefault{dhbw-titlepage.def}
                Mit der Option kann eine eigene Titelseite übergeben werden. Falls die angegebene Datei nicht gefunden wird, wird auf die Standardtitelseite zurückgegriffen.

                Es gilt zu beachten, dass die Option \setupOption{\opt{thesis type}} eine höhere Priorität besitzt. Das bedeutet, dass bei der Angabe eines \setupOption{\opt{thesis type}} die Option \setupOption{\opt{titlepage}} überschrieben wird und stattdessen die gewählte Vorlage geladen wird.

                Bei gleichzeitiger Verwendung von \Macro\dhbwdeclaration ist es notwendig, die Option \setupOption{\opt{location}} zu setzen. Alle anderen Optionen sind in Abhängigkeit der verwendeten Makros (s.~\Cref{subsec:macro}) zu wählen.\medskip

                \Option{declaration}\WithValues{\meta{filename}}\AndDefault{dhbw-declaration.def}
                Mit der Option kann eine eigene Eigenständigkeitserklärung übergeben werden. In der derzeitigen Version wird nur eine deutsche Variante bereitgestellt.\medskip

                \Option{abstract}\WithValues{\meta{filename}}
                Mit der Option kann ein Abstract übergeben werden. Wenn es sich um eine \TeX{} Datei mit der Endung \texttt{.tex} handelt, kann diese weggelassen werden.\medskip

            \subsubsection{Personalisierte Angaben}
                \Option{thesis type}\WithValues{SA, BA, PA}
                Die Option gibt die Art der Arbeit an. Die Abkürzungen sind wie folgt zu verstehen:
                \begin{description}[noitemsep,style=multiline,leftmargin=1cm]
                    \item[SA] Studienarbeit
                    \item[BA] Bachelorarbeit
                    \item[PA] Praxisarbeit
                \end{description}
                Die Angabe des Typs der Arbeit bestimmt die Gestaltung der vordefinierten Titelseiten. Bei Angabe einer eigenen \setupOption{\opt{titlepage}} muss die Option \setupOption{\opt{thesis type}} entfernt werden.\medskip

                \Option{bachelor degree}\WithValues{BoE, BoA, BoS}\AndDefault{BoE}
                Die Option gibt die Art des Bachelorabschlusses an und muss daher nur bei \setupOption{\opt{thesis type} = \meta{BA}} angegeben werden, wenn es sich \textbf{nicht} um einen \textit{Bachelor of Engineering} handelt.
                \begin{description}[noitemsep,style=multiline,leftmargin=1cm]
                    \item[BoE] Bachelor of Engineering
                    \item[BoS] Bachelor of Sciencs
                    \item[BoA] Bachelor of Arts
                \end{description}
                Die gewählt Option wird automatisch an \setupOption{\opt{bachelor degree type}} übergeben.\medskip

                \Option{bachelor degree type}\WithValues{\meta{value}}\AndDefault{Bachelor of Engineering}
                Für den Fall, dass eine andere Angabe des Abschlusses gewünscht ist, kann dieser durch diese Option angegeben werden.\medskip

                \Option{thesis title}\WithValues{\meta{value}}
                Die Option ermöglicht die Angabe des Titels (Thema) der Arbeit.\medskip

                \Option{thesis second title}\WithValues{\meta{value}}
                Im Fall einer Praxisarbeit \setupOption{\opt{thesis type} = \meta{PA}} kann es vorkommen, dass zwei unterschiedliche Themen in einer Arbeit vorkommen. Das zweite Thema kann über diese Option definiert werden.\medskip

                \Option{author}\WithValues{\meta{value}}
                Mit der Option wird der Autor der Arbeit angegeben. Der Autor wird auf der Titelseite und in der Eigenständigkeitserklärung verwendet.\medskip

                \Option{date}\WithValues{\meta{value}}\AndDefault{\cs{today}}
                Mit der Option wird das Datum angegeben.\medskip

                \Option{submission date}\WithValues{\meta{value}}\AndDefault{\opt{date}}
                Mit der Option wird das Abgabedatum angegeben. Standardmäßig entspricht der Wert der Option \setupOption{\opt{date}} und hat nur Einfluss auf \setupOption{\opt{bachelor type} = \meta{BA}}.\medskip

                \Option{location}\WithValues{\meta{value}}
                Mit Setzen der Option wird der Ort angegeben, an welchem die Arbeit erstellt wurde.\medskip

                \Option{institute}\WithValues{\meta{value}}
                Mit Angabe der Option wird der Firmenname angeben.\medskip

                \Option{institute section}\WithValues{\meta{value}}
                Eine weitere Spezialisierung des Firmennamens kann durch Angabe der Abteilung beschrieben werden. Die Abteilung kann mithilfe dieser Option angegeben werden.\medskip

                \Option{institute logo}\WithValues{\meta{filename}}
                Ein Firmenlogo kann dieser Option übergeben werden. Dieses wird automatisch auf den voreingestellten Titelseiten verwendet. Der \meta{filename} sollte ohne Dateiendung angegeben werden.

                \begin{hint}{Bildformat}
                    Als Formate können neben \texttt{JPG} und \texttt{PNG} auch \texttt{PDFs} verwendet werden. Letztere haben den entscheidenden Vorteil, dass diese als Vektorgrafik vorliegen und dementsprechend verlustfrei skalieren können.
                \end{hint}
                \medskip

                \Option{student id}\WithValues{\meta{value}}
                Mit der Option wird die Matrikelnummer des Studenten angegeben.\medskip

                \Option{course/id}\WithValues{\meta{value}}
                Mit der Option wird die Kurskennung angegeben.\medskip

                \Option{course/name}\WithValues{\meta{value}}\AndDefault{Informationstechnik}
                Mit der Option wird die Langform des Studiengangs angegeben.\medskip

                \Option{supervisor}\WithValues{\meta{value}}
                Mit der Option wird der Betreuer der Arbeit angegeben.\medskip

                \Option{processing period}\WithValues{\meta{value}}
                Mit der Option wird der Zeitraum der Arbeit angegeben. Bei Arbeiten über zwei Semester kann die Angabe beispielsweise wie folgt erfolgen:
                \begin{sourcecode}[listing only]
\dhbwsetup{
    processing period = {01.01. - 31.03.17, 25.05. - 31.09.17}
}
                \end{sourcecode}
                \medskip

                \Option{reviewer}\WithValues{\meta{value}}
                Bei Bachelorarbeiten \setupOption{\opt{thesis type}=\meta{BA}} ist es üblich einen Gutachter anzugeben. Dieser wird durch die Angabe eines \setupOption{\opt{reviewer}} übergeben.

            \subsubsection{Optionen zur automatisierten Erstellung von Verzeichnissen}\label{subsub:options-tocs}
                Im Abschnitt~\ref{subsub:format} wurde die Option \classOption{\opt{auto-intro-pages}} beschrieben. Durch die nachfolgenden Optionen können weitere Konfigurationen vorgenommen werden. Insbesondere handelt es sich dabei um die Möglichkeit, nur bestimmte Verzeichnisse oder Seiten anzuzeigen. Die meisten der Optionen sind selbsterklärend.\medskip

                \Option{intro/print titlepage}\WithValues{true, false}\AndDefault{false}
                Schalter zum Aktivieren der Titelseite, insbesondere in Kombination mit der Option \classOption{\opt{auto-intro-pages}=\meta{custom}}.\medskip

                \Option{intro/print declaration}\WithValues{true, false}\AndDefault{false}
                Schalter zum Aktivieren der Eigenständigkeiserklärung, insbesondere in Kombination mit der Option \classOption{\opt{auto-intro-pages}=\meta{custom}}.\medskip

                \Option{intro/print abstract}\WithValues{true, false}\AndDefault{false}
                Schalter zum Aktivieren des Abstrakts, insbesondere in Kombination mit der Option \classOption{\opt{auto-intro-pages}=\meta{custom}}.\medskip

                \Option{intro/print toc}\WithValues{true, false}\AndDefault{false}
                Erstellen des Inhaltsverzeichnisses (Table of Contents $\stackrel{\wedge}{=}$ ToC)
                \medskip

                \Option{intro/print lof}\WithValues{true, false}\AndDefault{false}
                Erstellen des Abbildungsverzeichnisses (List of Figures $\stackrel{\wedge}{=}$ LoF)
                \medskip

                \Option{intro/print lot}\WithValues{true, false}\AndDefault{false}
                Erstellen des Tabellenverzeichnisses (List of Tables $\stackrel{\wedge}{=}$ LoT)
                \medskip

                \Option{intro/append custom content}\WithValues{\meta{value}}
                In manchen Fällen kann es vorkommen, dass eigene Verzeichnisse hinzugefügt werden sollen. Die Option \setupOption{\opt{intro/append custom content}} nimmt als Argument gültigen \LaTeX{} Quelltext entgegen und führt diesen aus.\medskip

                \Option{intro/print all lists}\WithValues{true, false}\AndDefault{false}
                Durch Setzen der Option werden alle Verzeichnisse (ToC, LoF und LoT) automatisch generiert. Das Abbildungs- und Tabellenverzeichnis werden jedoch nur dargestellt, wenn diese mindestens einen Eintrag enthalten.
                \medskip

                \Option{intro/print all}\WithValues{true, false}\AndDefault{false}
                Durch die Option wird \setupOption{\opt{intro/print all lists} = \meta{true}} gesetzt. Zusätzlich werden alle anderen Seiten

                \begin{description}
                    \item[\setupOption{\opt{intro/print titlepage}=\meta{true}}]
                    \item[\setupOption{\opt{intro/print declaration}=\meta{true}}]
                    \item[\setupOption{\opt{intro/print all}=\meta{true}}]
                \end{description}

                aktiviert. Ein Abstract wird nur gedruckt, wenn eine Datei angegeben ist und die Datei existiert.
                \medskip

        \subsection{Anhang}
            \LaTeX{} stellt das Makro \Macro\appendix bereit, um dem Dokument mitzuteilen, dass anschließend der Anhang folgt. Die DHBW empfiehlt bei der Erstellung die folgenden Dinge zu beachten:

            \begin{enumerate}
                \item Der Anhang ist das \textit{letzte} Verzeichnis der Arbeit
                \item Das Literaturverzeichnis sollte noch vor dem Anhang eingefügt werden
            \end{enumerate}

            Die Klasse ermöglicht die Kompatibilität mit der Option \classOption{\opt{add-bibliography}}. Wenn ein Literaturverzeichnis erstellt werden soll, wird automatisch überprüft, ob ein Anhang mit \Macro\appendix vorhanden ist.

            \DescribeMacro\listofappendices{} Das Makro erstellt ein Verzeichnis mit allen Einträgen, die nach \verb|appendix| folgen. Es wird empfohlen, das Anhangsverzeichnis mit der bereitgestellten Option \setupOption{\opt{intro/append custom content}} einzubinden.

            \begin{sourcecode}[listing only]
\dhbwsetup{
    intro/append custom content = {\listofappendencies}
}
            \end{sourcecode}

            Dies erfordert jedoch die Klassenoption \classOption{\opt{auto-intro-pages}=\meta{default|all}}, damit das Anhangsverzeichnis automatisch eingebunden und korrekt formatiert wird.

            Der Name des Anhangs wird in dem Makro \Macro\listappendixname gespeichert. Wenn anstatt des Wortes \enquote{Anhang} lieber \textit{Anhangsverzeichnis} im Inhaltsverzeichnis stehen soll, kann dies durch eine Umdefinierung erfolgen.

            \begin{sourcecode}[listing only]
\renewcommand{\listappendixname}{Anhangsverzeichnis}
            \end{sourcecode}


        \subsection{Allgemeine Makros}\label{subsec:macro}
            \DescribeMacro\dhbwsetup{\meta{key}=\meta{value}} Das Makro ermöglicht die Angabe aller hier aufgelisteten Optionen einzustellen. Dabei werden die Optionen als \meta{key} angegeben und der einzustellende Wert als \meta{value}.

            \DescribeMacro\dhbwtitlepage{} Das Makro erstellt eine Titelseite. Dabei wird bei den vordefinierten Titelseiten (s.~\setupOption{\opt{thesis type}}) auf die \textbf{zuvor} gesetzten Optionen zurück gegriffen. Eine eigene Definition einer Titelseite kann durch die Option \setupOption{\opt{titlepage}} angegeben werden.

            \DescribeMacro\dhbwdeclaration{} Für das Setzen einer allgemeinen vordefinierten Selbstständigkeitserklärung (Eigenerklärung) ist das Makro zu verwenden. Eine eigene Definition kann mittels der Option \setupOption{\opt{declaration}} übergeben werden.

            \DescribeMacro\dhbwfrontmatter{} Der Befehl deaktiviert die Ausgabe einer Seitenzahl. Es erfolgt ein Aufruf durch \Macro\dhbwprintintro. Wenn die Verzeichnisse manuell erstellt werden, kann der Befehl \textit{vor} dem ersten Aufruf von \Macro\maketitle bzw. \Macro\tableofcontents verwendet werden. Das Makro ist zwingend in Kombination mit \Macro\dhbwmainmatter zu benutzen.

            \DescribeMacro\dhbwmainmatter{} Das Kommando sorgt als erstes dafür, dass eine neue Seite erstellt wird. Anschließend werden die Seitenzahlen wieder aktiviert. Zusätzlich wird der Zähler für die Seitenzahlen wieder auf \textit{eins (1)} gesetzt.

            \DescribeMacro\dhbwprintintro{} Sorgt für die Ausgabe der aktivierten Seiten und Verzeichnisse, welche im \Cref{subsub:options-tocs} beschrieben wurden. Durch die Option \classOption{\opt{auto-intro-pages}} wird der Befehl automatisch am Beginn des Dokuments aufgerufen.

            \DescribeMacro\getAuthor{} Abfrage des Autors, welcher durch \setupOption{\opt{author}} übergeben wurde.

            \DescribeMacro\getDate{} Abfrage des Datums, welches durch \setupOption{\opt{date}} übergeben wurde. Falls kein Datum angegeben wurde, wird \Macro\today als Standard verwendet.

            \DescribeMacro\getSubmissionDate{} Abfrage des Abgabedatums, welches durch \setupOption{\opt{submission date}} übergeben wurde. Falls kein Abgabedatum angegeben wurde, wird der Wert der Option \setupOption{\opt{date}} als Standard verwendet.

            \DescribeMacro\getThesisTitle{} Abfrage des Titels der Arbeit, welcher durch \setupOption{\opt{thesis title}} übergeben wurde.

            \DescribeMacro\getThesisSecondTitle{} Abfrage des zweiten Titels, welcher durch \setupOption{\opt{thesis second title}} übergeben wurde.

            \DescribeMacro\getLocation{} Abfrage des Orts, welcher durch \setupOption{\opt{location}} übergeben wurde.

            \DescribeMacro\getSupervisor{} Abfrage des Betreuers, welcher durch \setupOption{\opt{supervisor}} übergeben wurde.

            \DescribeMacro\getCourseId{} Abfrage des Kurses, welcher durch \setupOption{\opt{course/id}} übergeben wurde.

            \DescribeMacro\getCourseName{} Abfrage des Studiengangs, welcher durch \setupOption{\opt{course/name}} übergeben wurde.

            \DescribeMacro\getStudentId{} Abfrage der Matrikelnummer, welche durch \setupOption{\opt{student id}} übergeben wurde.

            \DescribeMacro\getInstitute{} Abfrage des Firmennamen, welcher durch \setupOption{\opt{institute}} übergeben wurde.

            \DescribeMacro\getInstituteSection{} Abfrage der Abteilung, welche durch \setupOption{\opt{institute section}} übergeben wurde.

            \DescribeMacro\getProcessingPeriod{} Abfrage des Bearbeitungszeitraums, welcher durch \setupOption{\opt{author}} übergeben wurde.

            \DescribeMacro\getReviewer{} Abfrage des Gutachters für eine Bachelorarbeit, welcher durch \setupOption{\opt{reviewer}} übergeben wurde.

            \DescribeMacro\getBachelorDegree{} Abfrage des Bearbeitungszeitraums, welcher durch \setupOption{\opt{author}} übergeben wurde.

    \section{Beispiele und Anwendungen}
        Alle Beispiele sind auf \url{https://github.com/faltfe/iodhbwm/tree/master/doc/examples} zu finden.

        \subsection{Eigene Titelseite definieren}
            Es kann vorkommen, dass man die Klasse verwenden möchte, jedoch die vordefinierten Titelseiten einem nicht gefallen oder modifizieren möchte. Hierzu stehen einem zwei Varianten zur Verfügung.

            \minisec{Titelseite mit \cs{maketitle}}
            Dabei wird auf das herkömmliche Makro \Macro\maketitle zurückgegriffen. Allerdings ist es dann notwendig, dass die Attribute selbstständig gesetzt werden.
            \begin{sourcecode}[listing only]
\title{Die DHBW ist toll}
\author{Max Mustermann}
\date{\today}
...
\maketitle
            \end{sourcecode}

            \minisec{Titelseite mit der Umgebung \env{titlepage}}
            Diese Variante bietet eine größere gestalterische Freiheit. Das Grundgerüst kann den beiliegenden Templates entnommen werden. Anschließend kann dann über die Option \setupOption{\opt{titlepage} = \meta{filename}} die eigene Titelseite angegeben werden. Die Dateiendung kann bei Angabe des \meta{filename} weggelassen werden.

        \subsection{Eigene Erklärung definieren}
            Eine eigene (Eigenständigkeits-) Erklärung, beispielsweise in einer anderen Sprache, kann mithilfe der Option \setupOption{\opt{declaration} = \meta{filename}} übergeben werden. Auf die Angabe der Dateiendung kann verzichtet werden.

         \subsection{Umschaltung auf 2-seitige Ausgabe}\label{subsec:umschaltung-twoside}
            Die DHBW empfiehlt einen einseitigen Druck der Arbeit, weshalb dies auch die Voreinstellung ist. Möchte man jedoch einen zweiseitigen Druck haben, stehen drei Möglichkeiten zur Verfügung:

            \begin{itemize}
                \item Die Arbeit kann regulär ohne Änderungen erstellt werden und am Drucker wird der Duplexdruck (zweiseitig) aktiviert. Diese Variante besitzt jedoch den Nachteil, dass die Randabstände nicht mehr stimmen, wenn die Arbeit gebunden werden soll.

                \item Da die Arbeit auf KOMAscript basiert, können sehr viele Eigenschaften über das Makro \Macro\KOMAoptions{\meta{key}} geändert werden. Die Umschaltung erfolgt durch den Option \meta{twoside}. Es kann jedoch vorkommen, dass es zu Problemen mit dem Layout kommt, da die Klasse ursprünglich auf einseitigen Druck optimiert ist.

                \item Die letzte Variante ist die Umschaltung der Basisklasse von \pkg{scrreprt} auf \pkg{scrbook}. Dadurch wird im Hintergrund automatisch eine doppelseitige Ausgabe mit korrekten Seitenrändern eingestellt.
                \begin{sourcecode}[listing only]
\makeatletter
  \newcommand{\iodhbwm@cls@baseclass}{scrbook}
  % \newcommand{\iodhbwm@cls@baseclass@options}{open=right}
\makeatother
\documentclass{iodhbwm}
                \end{sourcecode}

            \end{itemize}



        \subsection{Verwendung von Parts}
            In manchen Arbeiten kann es vorkommen, dass mit \Macro\part{} gearbeitet werden soll. Insbesondere bei Arbeiten mit zwei oder mehreren Themen kann der Wunsch aufkommen, dass der Abschnitt auch mit dem Wort \enquote{Thema} bezeichnet werden soll. Diese Änderung ist wie folgt möglich:

            \begin{sourcecode}[listing only]
\addto\captionsngerman{\renewcommand{\partname}{Thema}}
\renewcommand{\thepart}{\Alph{part}}
\renewcommand*{\partformat}{\partname~\thepart}
\newcommand\partentrynumberformat[1]{\partname\ #1}
\RedeclareSectionCommand[
    tocentrynumberformat=\partentrynumberformat,
    tocnumwidth=6em
]{part}
            \end{sourcecode}

        In den bereitgestellten Beispielen ist ebenfalls eine kommentierte Version enthalten.

    \section{Erweiterungen für TeXstudio}
        \subsection{CWL Files}
            Eine weitere Besonderheit der Klasse ist die Bereitstellung zweier \texttt{cwl}-Dateien, welche in TeXstudio für die Autovervollständigung benutzt werden.

            Um die Autovervollständigung für \thepackage{} zu aktiveren, müssen die Dateien \file{iodhbwm.cwl} und \file{iodhbwm-template.cwl} nach \path|%appdata%\texstudio\completion\user| beziehungsweise nach \path|.config/texstudio/completion/user| kopiert werden.

    \section{Installation}
        \subsection{Lokale Installation}
            Eine eigene Installation des Pakets kann in einem lokalen texmf Ordner (lokales Repository) erfolgen. Das Bundle kann manuell aus dem Git-Repository heruntergeladen werden.

            \subsection{CTAN}
                Das Bundle wird ebenfalls über CTAN (mit Release der Version v1.0) zur Verfügung gestellt und kann deshalb über die offiziellen Paketquellen heruntergeladen und installiert werden. Diese Variante ist zu bevorzugen.

            \subsubsection{MiKTeX}
                \begin{enumerate}
                    \item Lokales Repository anlegen, welches der \href{http://tug.ctan.org/tds/tds.html}{Verzeichnisstruktur für \LaTeX{} Dateien} entspricht. Die Verzeichnisstruktur könnte wie folgt aussehen:\par \verb|C:\Users\<username>\localtexmf\tex\latex\iodhbwm|
                    \item MiKTeX Settings öffnen
                    \item Unter dem Reiter ,,Roots'' das Verzeichnis hinzufügen\par \verb|C:\Users\<username>\localtexmf|
                    \item Anschließend unter ,,General'' auf den Button Refresh FNDB klicken
                \end{enumerate}

                Der letzte Schritt muss immer wieder ausgeführt werden, wenn ein neues Release heruntergeladen wurde.

                Eine ausführliche Beschreibung befindet sich auf \url{https://tex.stackexchange.com/a/69484/142408}.

            \subsubsection{TeXlive}

                \begin{enumerate}
                    \item \verb|path=$(kpsewhich -var-value TEXMFHOME)| Abfrage, welcher Ordner standardmäßig hinterlegt ist. \verb|$path| entspricht vermutlich dem Pfad\\ \verb|/home/<user>/texmf/|
                    \item \verb|mkdir -p $path/tex/latex| anlegen des Ordners. Es kann auch ein beliebiger Ordner gewählt werden, solange dieser eine gültige TEXMF-Struktur aufweist
                    \item \verb|cp -R iodhbwm $path/tex/latex| Kopieren des heruntergeladenen Verzeichnis
                    \item \verb|texhash $path| ausführen, um das Verzeichnis zu aktualisieren
                \end{enumerate}

                Eine ausführliche Beschreibung befindet sich auf \url{https://tex.stackexchange.com/a/73017/142408}.

%    \PrintChanges

    \PrintIndex

\end{document}
