% \CheckSum{637}
% \iffalse meta-comment
% 
% ============================================================================
% 
%  TUD-KOMA-Script
%  Copyright (c) Falk Hanisch <tudscr@gmail.com>, 2012-2015
% 
% ============================================================================
% 
%  This work may be distributed and/or modified under the conditions of the
%  LaTeX Project Public License, version 1.3c of the license. The latest
%  version of this license is in http://www.latex-project.org/lppl.txt and 
%  version 1.3c or later is part of all distributions of LaTeX 2005/12/01
%  or later and of this work. This work has the LPPL maintenance status 
%  "author-maintained". The current maintainer and author of this work
%  is Falk Hanisch.
% 
% ----------------------------------------------------------------------------
% 
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz
% in der Version 1.3c, verteilt und/oder veraendert werden. Die aktuelle 
% Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und 
% Version 1.3c oder spaeter ist Teil aller Verteilungen von LaTeX 2005/12/01 
% oder spaeter und dieses Werks. Dieses Werk hat den LPPL-Verwaltungs-Status 
% "author-maintained", wird somit allein durch den Autor verwaltet. Der 
% aktuelle Verwalter und Autor dieses Werkes ist Falk Hanisch.
% 
% ============================================================================
%
% \fi
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \iffalse
%%% From File: tudscr-frontmatter.dtx
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\ProvidesFile{tudscr-frontmatter.dtx}[%
  2015/02/15 v2.03 TUD-KOMA-Script (frontmatter)%
]
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
\documentclass[english,ngerman]{tudscrdoc}
\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{tudscrfonts} % only load this package, if the fonts are installed
\KOMAoptions{parskip=half-}
\CodelineIndex
\RecordChanges
\GetFileInfo{tudscr-frontmatter.dtx}
\begin{document}
  \maketitle
  \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \selectlanguage{ngerman}
%
% \changes{v2.02}{2014/07/08}{Optionen nutzen \cs{FamilyKeyState}}%^^A
%
% \ToDo{%
%  Gesammelten Eintrag ins Inhaltsverzeichnis für alle Abschnitte\\
%  \url{http://latex.wcms-file3.tu-dresden.de/phpBB3/viewtopic.php?f=11\&t=385}
% }[v2.04]
%
% \section{Befehle und Umgebungen für den Vorspann}
%
% Im Vorspann des Dokumentes kann der Benutzer eine Zusammenfassung angegeben.
% Außerdem kann eine Selbstständigkeitserklärung sowie ein Sperrvermerk
% hinzugefügt werden. Damit für diese das Layout möglichst individuell gewählt
% werden kann, werden hier entsprechende Optionen und die dafür notwendige
% Ausgabe definiert. Im weiteren Verlauf der Dokumentation wird der Begriff
% \enquote{Erklärung} für die unterschiedlichen Elemente verwendet. Die
% verwendeten Schalter und Befehle zum Setzen der Optionen heißen entweder
% \cs{tud@abstract@\dots} oder aber \cs{tud@declaration@\dots} je nach Element.
%
% \StopEventually{\PrintIndex\PrintChanges}
%
% \iffalse
%<*class&body>
% \fi
%
% \begin{macro}{\tud@fm@check}
% \changes{v2.02}{2014/07/18}{neu}%^^A
% Mit diesem Befehl wird für den Fall, dass eine oder mehrerer Erklräungen auf
% einer einzelnen Seite gesetzt werden sollen geprüft, ob dies überhaupt 
% möglich ist. Sollte dies nicht der Fall sein, wird eine Warnung ausgegeben.
%    \begin{macrocode}
\newcommand*\tud@fm@check[2]{%
  \ifnumless{\@nameuse{tud@#1@level}}{3}{%
    \@tempswatrue%
    \ifboolexpr{bool {@tud@#1@fil} and bool {@tud@#1@multi}}{%
      \setbox0\vbox{%
        \ifcase\@nameuse{tud@#1@level}\relax\or\or%
          \vspace*{-\parskip}%
          {\usekomafont{section}\vspace*{-\baselineskip}}%
        \fi%
        #2%
      }%
      \ifdim\textheight<\dimexpr\ht0+\dp0\relax%
        \ClassWarning{\tudcls@name}{%
          The given content within the `#1'\MessageBreak%
          environment is too large, so it wasn't possible\MessageBreak%
          to center the body vertically. Setting the option\MessageBreak%
          `#1=nofill' would be a solution. You\MessageBreak%
          could also use multiple `#1' environments%
        }%
        \@tempswafalse%
      \fi%
    }{}%
  }{}%
  #2%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@check
% \begin{macro}{\tud@fm@set}
% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
% Dies ist das zentrale Makro zur Ausgabe der einzelnen Erklärungen, welches
% alle relevanten Optionen\footnote{\opt{titlepage}, \opt{twocolumn},
% \opt{abstract/declaration=multi}, \opt{abstract/declaration=fill} sowie die
% Gliederungsebene der Überschrift} unterscheidet und die Erklärungen diesen
% entsprechend setzt. Verwendet wird der Befehl wie folgt:
% \cs{tud@fm@set}\marg{Erklärungstyp}\marg{Überschrift}\marg{Inhalt}
%    \begin{macrocode}
\newcommand*\tud@fm@set[3]{%
%    \end{macrocode}
% Sollte die Gliederungsebene der Erklärung einem Kapitel entsprechen, wird
% jede Erklärung immer auf eine neue Seite gesetzt. Die Optionen zum vertikalen 
% Zentrieren wird ignoriert. Auf eine Warnung für den Anwender wird verzichtet.
%    \begin{macrocode}
%<*book|report>
  \ifnumless{\@nameuse{tud@#1@level}}{3}{}{%
    \boolfalse{@tud@#1@multi}%
    \boolfalse{@tud@#1@fil}%
  }%
%</book|report>
%    \end{macrocode}
% Im Zweispaltensatz wird der Inhalt der Umgebung einfach ausgegeben, eine 
% vertikale Zentrierung findet nicht statt.
%    \begin{macrocode}
  \if@twocolumn%
    \tud@fm@body{#1}{#2}{#3}%
%    \end{macrocode}
% Beim einspaltigen Satz wird die \opt{titlepage}-Option beachtet.
%    \begin{macrocode}
  \else%
%    \end{macrocode}
% Sollte diese aktiv sein, wird jede Erklärung oder Zusammenfassung abhängig 
% von der Einstellung von \opt{abstract/declaration=multi} entweder auf eine
% neue Seite gesetzt, oder aber auf der aktuellen ausgegeben. Dabei werden
% diese ggf. noch vertikal auf der Seite ausgerichtet.
%    \begin{macrocode}
    \if@titlepage%
      \ifbool{@tud@#1@multi}{}{\clearpage}%
      \ifbool{@tud@#1@fil}{%
        \ifcase\@nameuse{tud@#1@level}\relax\or\or%
          \vspace*{-\parskip}%
          {\usekomafont{section}\vspace*{-2\baselineskip}}%
        \fi%
        \if@tempswa\vspace*{\z@ \@plus 1fil}\fi%
      }{}%
      \tud@fm@body{#1}{#2}{#3}%
      \ifbool{@tud@#1@fil}{\vspace*{\z@ \@plus 2fil}}{}%
%    \end{macrocode}
% Bei deaktivierter \opt{titlepage}-Option werden die Inhalte jeder erzeugten
% Erklärung direkt nacheinander ausgegeben. Die Erklärung oder Zusammenfassung 
% wird dabei wie ein Zitat ausgegeben, sollte dessen Überschrift nicht
% in Form eines Abschnitts gesetzt werden. Der Inhalt wird entweder in der
% normalen \env{quotation}-Umgebung oder aber~-- wenn entsprechend das Paket
% \pkg{quoting} geladen wurde~-- in der \env{quoting}-Umgebung gesetzt. Die
% entsprechende Umgebung wird hierfür im Makro \cs{tud@quoting} gespeichert.
%    \begin{macrocode}
    \else%
      \ifnum\@nameuse{tud@#1@level}<2\begin{\tud@quoting}\fi%
      \tud@fm@body{#1}{#2}{#3}%
      \ifnum\@nameuse{tud@#1@level}<2\end{\tud@quoting}\fi%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@set
% \begin{macro}{\tud@fm@body}
% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
% \begin{macro}{\tud@fm@vcenter}
% \changes{v2.02}{2014/07/18}{Mit \pkg{scrlayer-scrpage} entfernt}%^^A
% Dieser Befehl formatiert den im dritten Argument gespeicherten Inhalt der
% Erklärung. Sollte das Paket \pkg{multicol} Verwendung finden, wird hier die
% entsprechende Umgebung gestartet. Für das Setzen der Überschrift und der 
% Kolumnentitel wird \cs{tud@fm@head} verwendet, welches abhängig von den
% gewählten Optionen die Gliederungsebene der Überschrift setzt. Die optional
% gewählte vertikale Ausrichtung des Inhaltes wird seit Version~v2.02 nicht 
% mehr von \cs{tud@fm@vcenter} sondern hier direkt ausgeführt.
%    \begin{macrocode}
\newcommand*\tud@fm@body[3]{%
  \ifnum\tud@multicols>1\relax%
    \begin{multicols}{\tud@multicols}[{\tud@fm@head{#1}{#2}}]%
  \else%
%    \end{macrocode}
% Für die Verwendung einer kleinen, zentrierten Überschrift wird vorher ein
% Abstand eingefügt. Dies ist jedoch nur notwendig, wenn \env{multicols} nicht 
% verwendet wird.
%    \begin{macrocode}
    \ifbool{@tud@#1@multi}{%
      \ifcase\@nameuse{tud@#1@level}\relax\or%
        \vspace{\dimexpr\bigskipamount-\parskip\relax}%
      \fi%
    }{}%
    \tud@fm@head{#1}{#2}%
  \fi%
  #3\par%
  \ifnum\tud@multicols>1\relax%
    \end{multicols}%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@vcenter
% \end{macro}^^A \tud@fm@body
% \begin{macro}{\tud@fm@head}
% \changes{v2.02}{2014/07/18}{an \pkg{scrlayer-scrpage} angepasst}%^^A
% \changes{v2.02}{2014/10/09}{Bugfix für Kolumnentitel}%^^A
% \changes{v2.02}{2014/11/05}{Bugfix Kolumnentitel und Inhaltsverzeichnis}%^^A
% Dieses Makro dient zur Festlegung der Gliederungsebene der Überschrift der
% Erklärung. Die gewählte Gliederungsebene ist in \cs{tud@\meta{Typ}@level}
% gespeichert. Verwendet wird das Makro folgendermaßen:
% \cs{tud@fm@head}\marg{Erklärungstyp}\marg{Überschrift}\marg{Inhalt}. Damit 
% die ggf. aktive Option \opt{abstract/declaration=toc} funktionieren kann,
% wird für die Level, in denen keine Standardüberschrift verwendet wird, mit
% dem Befehl \cs{phantomsection} aus dem Paket \pkg{hyperref}~-- wenn es 
% tatsächlich geladen wurde~-- ein Anker für einen Hyperlink erzeugt. Ist
% \cs{if@tud@\meta{Typ}@toc} wahr, so entspricht der erzeugte Eintrag ins
% Inhaltsverzeichnis für \cls{tudscrartcl} normalerweise dem eines Abschnitts,
% der für \cls{tudscrbook} und \cls{tudscrreprt} dem eines Kapitels.%
% \footnote{sonst sieht das Inhaltsverzeichnis recht bescheiden aus}
% Mit der Eintellung \val{tocleveldown} kann der Eintrag um eine Ebene 
%    \begin{macrocode}
\newcommand*\tud@fm@head[2]{%
  \ifcase\@nameuse{tud@#1@level}\relax%
    \if@titlepage\endgraf\fi%
    \csname phantomsection\endcsname%
  \or%
    \if@titlepage\endgraf\fi%
    \csname phantomsection\endcsname%
    \@afterindentfalse%
    \begingroup%
      \centering%
      \normalfont\sectfont\nobreak#2%
      \@endparpenalty\@M%
      \endgraf%
    \endgroup%
    \nopagebreak%
    \vskip\dimexpr\bigskipamount-\parskip\relax%
    \@afterheading%
  \or%
    \section*{#2}%
    \ifx\@mkboth\@gobbletwo\else\markright{\MakeMarkcase{#2}}\fi%
%<*book|report>
  \or%
    \chapter*{#2}%
    \@mkdouble{\MakeMarkcase{#2}}%
%</book|report>
  \fi%
  \ifbool{@tud@#1@markboth}{%
    \markboth{\MakeMarkcase{#2}}{\MakeMarkcase{#2}}%
  }{}%
  \ifbool{@tud@#1@toc}{%
    \ifbool{@tud@#1@toc@leveldown}{%
%<*book|report>
      \addsectiontocentry{}{#2}%
%</book|report>
%<*article>
      \addsubsectiontocentry{}{#2}%
%</article>
    }{%
%<*book|report>
      \addchaptertocentry{}{#2}%
%</book|report>
%<*article>
      \addsectiontocentry{}{#2}%
%</article>
    }%
  }{}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@head
% \begin{macro}{\tud@fm@next}
% \changes{v2.02}{2014/07/19}{mit \pkg{scrlayer-scrpage} eingeführt}%^^A
% Dieser Befehl sorgt für die Trennung einzelner Abschnitte innerhalb der 
% Umgebungen \env{abstract} und \env{declarations}. Dabei werden bei aktiver
% vertikaler Ausrichtung die entsprchenden Abstände dazwischen eingefügt.
%    \begin{macrocode}
\newcommand*\tud@fm@next[2]{%
  \TUD@parameter@set{#1}{#2}%
  \if@twocolumn%
    \ifbool{@tud@#1@multi}{\par}{\newpage}%
  \else%
    \if@titlepage%
      \ifbool{@tud@#1@fil}{%
        \vspace*{\z@ \@plus 1fil}%
        \ifbool{@tud@#1@multi}{}{%
          \vspace*{\z@ \@plus 1fil}%  
          \clearpage%
          \ifcase\@nameuse{tud@#1@level}\relax\or\or%
            \vspace*{-\parskip}%
            {\usekomafont{section}\vspace*{-2\baselineskip}}%
          \fi%
          \vspace*{\z@ \@plus 1fil}%
        }%
      }{\ifbool{@tud@#1@multi}{}{\clearpage}}%
    \else%
      \ifnum\@nameuse{tud@#1@level}<2%
        \end{\tud@quoting}%
        \begin{\tud@quoting}%
      \fi%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@next
% \begin{macro}{\tud@fm@pagestyle}
% \changes{v2.02}{2014/07/19}{neu}%^^A
% Dieser Befehl sorgt für die Auswahl des Seitenstiles über die Parameter von
% \env{abstract} und \env{declarations}.
%    \begin{macrocode}
\newcommand*\tud@fm@pagestyle[2]{%
  \if@titlepage%
    \ifcsdef{ps@#2}{\def\tud@ps{#2}}{%
      \ClassError{\tudcls@name}{`#2' is no valid pagestyle}{%
        You tried to use `#2' as a pagestyle for the\MessageBreak%
        `#1' environment, but it was never defined%
      }%
    }%
  \else%
    \ClassWarning{\tudcls@name}{%
%<*article>
      The key `pagestyle' can only be used with\MessageBreak%
      activated option `titlepage'%
%</article>
%<*book|report>
      The key `pagestyle' can only be used either with\MessageBreak%
      activated option `titlepage' or with chapter\MessageBreak%
      headings (`#1=chapter')%
%</book|report>
    }%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@pagestyle
% \begin{macro}{\tud@fm@level@wrn}
% \changes{v2.02}{2014/07/19}{entfernt}%^^A
% \begin{macro}{\tud@fm@option@wrn}
% \changes{v2.02}{2014/07/19}{entfernt}%^^A
% \begin{macro}{\tud@fm@multi@wrn}
% \changes{v2.02}{2014/07/19}{entfernt}%^^A
% Die Befehle für die Warnungen an den Benutzer bei nicht beachteten oder nicht 
% umsetzbaren Einstellungen wurden mit der Version~v2.02 entfernt, da Sie als 
% wenig sinnvoll erachtet wurden. 
% \end{macro}^^A \tud@fm@multi@wrn
% \end{macro}^^A \tud@fm@option@wrn
% \end{macro}^^A \tud@fm@level@wrn
% \begin{macro}{\tud@quoting}
% \begin{macro}{\tud@endquoting}
% \changes{v2.02}{2014/07/19}{entfernt}%^^A
% Mit diesem Befehl kann das empfehlenswerte Paket \pkg{quoting} unterstützt
% werden. Sollte dieses geladen werden, wird für das Setzen der Zusammenfassung
% bei einem Titelkopf die \env{quoting}-Umgebung genutzt.
%    \begin{macrocode}
\newcommand*\tud@quoting{quotation}
\AfterPackage{quoting}{\renewcommand*\tud@quoting{quoting}}
%    \end{macrocode}
% \end{macro}^^A \tud@endquoting
% \end{macro}^^A \tud@quoting
%
% \iffalse
%</class&body>
%<*class&option>
% \fi
%
% \begin{macro}{\tud@fm@switch}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% Das aus \KOMAScript{} bekannte Verhalten für die Zusammenfassung wird für die
% beiden Klassen \cls{tudscrartcl} und \cls{tudscrreprt} adaptiert. Dazu werden
% boolesche Schlüssel bei der Definiton der beiden Optionen \opt{abstract} und 
% \opt{declaration} eingefügt. Außerdem werden zusätzliche Werte zur Auswahl 
% einer Gliederungsebene für die gesetzten Überschriften wie \cs{section} oder 
% \cs{chapter}\footnote{nicht für \cls{tudscrartcl}} oder bereitgestellt, 
% welche auch für die Buchklasse \cls{tudscrbook} zur Verfügung stehen. Das 
% Setzen von Einträgen ins Inhaltsverzeichnis lässt sich ebenfalls anpassen.
%
% Des Weiteren werden mehrere Schlüssel für die Anordnung und Positionierung
% von Zusammenfassung bzw. Erklärungen bereitgestellt. Diese dienen dem Setzen
% der  Optionen \opt{abstract/declaration} mit den Werten \val{single/multi}, 
% \val{toc/notoc}, \val{fill/nofill} sowie \val{leveldown}.
%    \begin{macrocode}
\newcommand*\tud@fm@switch{%
  {section}{2},{sect}{2},{sec}{2},{addsec}{2},%
%<*article>
  {new}{2},{standard}{2},{heading}{2},%
%</article>
%<*book|report>
  {chapter}{3},{chap}{3},{addchap}{3},%
  {new}{3},{standard}{3},{heading}{3},%
%</book|report>
  {totoc}{4},{toc}{4},{totoclevelup}{4},{toclevelup}{4},{levelup}{4},%
  {totocleveldown}{5},{tocleveldown}{5},{leveldown}{5},%
  {nottotoc}{6},{notoc}{6},%
  {markboth}{7},{mark}{7},%
  {nomarkboth}{8},{nomark}{8},%
  {one}{9},{simple}{9},{single}{9},%
  {multi}{10},{multiple}{10},{all}{10},{two}{10},{both}{10},{double}{10},%
  {nofil}{11},{nofill}{11},{novfil}{11},{novfill}{11},%
  {fil}{12},{fill}{12},{vfil}{12},{vfill}{12}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@switch
%
% \subsection{Erweiterung der Umgebung für eine Zusammenfassung}
%
% Die \env{abstract}-Umgebung wird um mehrere Optionen erweitert. So kann
% in den neuen \cls{tudscr}-Klassen die Sprache der Zusammenfassung leicht
% eingestellt und auch zwei Zusammenfassungen auf eine Seite gesetzt werden.
% \begin{macro}{\tud@abstract@level}
% \begin{macro}{\if@tud@abstract@toc}
% \begin{macro}{\if@tud@abstract@toc@locked}
% Der Befehl \cs{tud@abstract@level} beschreibt die Gliederungsebene der
% Überschrift der Zusammenfassung numerisch und wird über die Schlüssel der
% Option \opt{abstract} gesetzt. Über \opt{abstract=toc/notoc} wird festgelegt,
% ob die Zusammenfassung einen eigenen Eintrag ins Inhaltsverzeichnis bekommt.
% Da unterschiedliche Gliederungsebenen der Überschriften möglich sind, wird das
% Standardverhalten in Abhängigkeit dieser gewählt. Initial erscheint für
% \cls{tudscrreprt} und \cls{tudscrartcl}~-- wie in \KOMAScript{} auch~-- keine
% Überschrift und kein Eintrag im Inhaltsverzeichnis. In \cls{tudscrbook} wird
% standardmäßig eine Überschrift in Form eines Kapitels mit Eintrag ins
% Inhaltsverzeichnis gesetzt.
%    \begin{macrocode}
%<*report|article>
\newcommand*\tud@abstract@level{0}
\bool@lock{@tud@abstract@toc}
%</report|article>
%<*book>
\newcommand*\tud@abstract@level{3}
\bool@lock[true]{@tud@abstract@toc}
%</book>
%    \end{macrocode}
% \end{macro}^^A \if@tud@abstract@toc@locked
% \end{macro}^^A \if@tud@abstract@toc
% \end{macro}^^A \tud@abstract@level
% \begin{macro}{\if@tud@abstract@toc@leveldown}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% Dieser Schalter bestimmt, ob der Eintrag in das Inhaltsverzeichnis in der
% obersten Gliederungsebene~-- \cs{chapter} für die Klassen \cls{tudscrbook}
% und \cls{tudscrreprt} sowie \cs{section} für \cls{tudscrartcl}~-- oder in der
% darunterliegenden erfolgt.
%    \begin{macrocode}
\newif\if@tud@abstract@toc@leveldown
%    \end{macrocode}
% \end{macro}^^A \if@tud@abstract@toc@leveldown
% \begin{macro}{\if@tud@abstract@markboth}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% Dieser Schalter setzt rechten und linken Kolumnentitel automatisch auf die
% verwendete Überschrift.
%    \begin{macrocode}
\newif\if@tud@abstract@markboth
%    \end{macrocode}
% \end{macro}^^A \if@tud@abstract@markboth
% \begin{macro}{\if@tud@abstract@multi}
% Is dieser Schalter aktiviert, wird eine durch \cs{nextabstract} angegebene 
% zweite~-- wahrscheinlich in einer Fremdsprache verfasste~-- Zusammenfassung
% auf die gleiche Seite wie die erste zu setzen. Gesetzt wird der Schalter über 
% die Option \opt{abstract=single/multi}.
%    \begin{macrocode}
\newif\if@tud@abstract@multi
%    \end{macrocode}
% \end{macro}^^A \if@tud@abstract@multi
% \begin{macro}{\if@tud@abstract@fil}
% Mit diesem Schalter wird bestimmt, ob eine Zusammenfassung auf einer Seite
% vertikal zentriert wird. Er wird mit \opt{abstract=fill/nofill} gesetzt und
% ist normalerweise aktiviert.
%    \begin{macrocode}
\newif\if@tud@abstract@fil
\@tud@abstract@filtrue
%    \end{macrocode}
% \end{macro}^^A \if@tud@abstract@fil
% \begin{option}{abstract}
% Alle Klassen unterstützen die Werte, welche in \cs{tud@fm@switch} definiert 
% wurden. Die beiden Klassen \cls{tudscrartcl} und\ cls{tudscrreprt} adaptieren 
% außerdem das aus \KOMAScript{} bekannte Verhalten über die booleschen Werte
% aus \cs{TUD@numkey@bool}.
%    \begin{macrocode}
%<*report|article>
\TUD@key{abstract}[true]{%
  \edef\@tempb{\TUD@numkey@bool,\tud@fm@switch}%
%</report|article>
%<*book>
\TUD@key{abstract}[chapter]{%
  \edef\@tempb{\tud@fm@switch}%
%</book>
  \TUD@set@numkey{abstract}{@tempa}{\@tempb}{#1}%
%    \end{macrocode}
% Bei der Einstellungen der Überschriftgliederungsebene wird außerdem das
% Standardverhalten für einen Eintrag ins Inhaltsverzeichnis festgelegt, was
% allerdings vom Anwender jederzeit überschrieben werden kann.
%    \begin{macrocode}
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax%
%<*report|article>
      \def\tud@abstract@level{0}%
      \bool@std@lock{@tud@abstract@toc}{false}%
%</report|article>
    \or%
%<*report|article>
      \def\tud@abstract@level{1}%
      \bool@std@lock{@tud@abstract@toc}{false}%
%</report|article>
    \or%
      \def\tud@abstract@level{2}%
      \bool@std@lock{@tud@abstract@toc}{true}%
    \or%
%<*book|report>
      \def\tud@abstract@level{3}%
      \bool@std@lock{@tud@abstract@toc}{true}%
%</book|report>
%    \end{macrocode}
% Neben den Einstellungen für die Art der Gliederungsebene der Überschrift für
% die Zusammenfassung können außerdem noch die Optionen gesetzt werden, ob
% versucht werden soll, eine mögliche Zusammenfassung in einer anderen Sprache
% auf die gleiche Seite wie die erste zu setzen (\opt{abstract=multi}) und ob
% die Zusammenfassung einen Eintrag ins Inhaltsverzeichnis bekommen soll.
%    \begin{macrocode}
    \or%
      \bool@set@lock{@tud@abstract@toc}{true}%
      \@tud@abstract@toc@leveldownfalse%
    \or%
      \bool@set@lock{@tud@abstract@toc}{true}%
      \@tud@abstract@toc@leveldowntrue%
    \or%
      \bool@set@lock{@tud@abstract@toc}{false}%
    \or%
      \@tud@abstract@markbothtrue%
    \or%
      \@tud@abstract@markbothfalse%
    \or%
      \@tud@abstract@multifalse%
    \or%
      \@tud@abstract@multitrue%
    \or%
      \@tud@abstract@filfalse%
    \or%
      \@tud@abstract@filtrue%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{option}^^A abstract
%
% \iffalse
%</class&option>
%<*class&body>
% \fi
%
% \begin{environment}{abstract}
% \changes{v2.03}{2015/01/09}{Bugfix für Seitenstilauswahl}%^^A
% Die \env{abstract}-Umgebung wird komplett überarbeitet. Um alle gewünschten
% Optionen\footnote{\opt{titlepage}, \opt{twocolumn}, \opt{abstract@multi},
% \opt{abstract@fil} sowie Gliederungsebene der Überschrift} beachten zu
% können, wird auf die Möglichkeiten der Definition mit \cs{NewEnviron} aus dem
% Paket \pkg{environ} zurückgegriffen. Damit ist es möglich, gezielt auf den
% Inhalt der Umgebung selbst mit dem Befehl \cs{BODY} zuzugreifen. Dieser
% Mechanismus wird innerhalb von \cs{tud@abstractbody} verwendet.
%    \begin{macrocode}
%<*report|article>
\csundef{abstract}
\csundef{endabstract}
%</report|article>
\NewEnviron{abstract}[1][]{%
%    \end{macrocode}
% Sollten Überschriften in Form von Kapiteln gewählt worden sein, so wird 
% temporär die \opt{titlepage}-Option aktivert, da alle weiteren notwendigen 
% Einstellungen dieser entsprechen. Über den Parameter \opt{pagestyle} kann bei 
% der Verwendung einer Titelseite der Seitenstil definiert werden. Dafür wird 
% das dafür verantwortliche Makro \cs{tud@ps} auf \cs{relax} gesetzt.
%    \begin{macrocode}
  \ifnumless{\@nameuse{tud@abstract@level}}{3}{}{\@titlepagetrue}%
  \let\tud@ps\relax%
%    \end{macrocode}
% Als nächstes werden die Optionen verarbeitet. Sollte nach Abarbeitung der
% Optionen für \env{abstract} festgestellt werden, dass eine spezielle
% Spaltenanzahl gewünscht ist, so wird~-- für den Fall, dass das Paket
% \pkg{multicol} geladen ist~-- diese gesetzt. Sonst wird die angegbene Anzahl
% der Spalten ignoriert und eine Warnung ausgegeben.
%    \begin{macrocode}
  \TUD@parameter@set{abstract}{#1}%
  \tud@multicols@check%
%    \end{macrocode}
% Bei aktiver \opt{titlepage}-Option wird anschließend der aktuelle Seitenstil 
% gesichert, um diesen nach der Umgebung wiederherstellen zu können. Wurde über 
% die möglichen Parameter \opt{pagestyle} oder indirekt mit \opt{markboth} kein 
% Seitenstil definiert, so wird dieser auf \val{empty} gesetzt.
%    \begin{macrocode}
  \if@titlepage%
    \tud@currentpagestyle@set%
    \ifx\tud@ps\relax\def\tud@ps{empty}\fi%
    \clearpage%
    \tud@ps@select%
  \fi%
  \tud@fm@check{abstract}{\tud@fm@set{abstract}{\abstractname}{\BODY}}%
%    \end{macrocode}
% Nach der Umgebung wird bei aktiver \opt{titlepage}-Option der ursprüngliche 
% Seitenstil zurückgesetzt.
%    \begin{macrocode}
}[%
  \if@titlepage%
    \aftergroup\tud@currentpagestyle@reset%
    \clearpage%
  \fi%
]
%    \end{macrocode}
% \end{environment}^^A abstract
% \begin{parameter}{language}
% \begin{parameter}{columns}
% \begin{parameter}{pagestyle}
% \changes{v2.02}{2014/07/19}{neu}%^^A
% \begin{parameter}{markboth}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% \begin{parameter}{abstract}
% \begin{parameter}{option}
% Als Schlüssel für die \env{abstract}-Umgebung können Sprache, Anzahl der
% Spalten oder auch die zur Umgebung gehörigen Klassenoptionen angegeben werden.
%    \begin{macrocode}
\TUD@parameter{abstract}{%
  \TUD@parameter@define{language}{\selectlanguage{#1}}%
  \TUD@parameter@define{columns}{\def\tud@multicols{#1}}%
  \TUD@parameter@define{pagestyle}{\tud@fm@pagestyle{abstract}{#1}}%
%    \end{macrocode}
% Für das Setzen von Kolumnentiteln wird der Seitenstil auf \val{headings} 
% gesetzt, falls kein anderer mit \opt{pagestyle} angegeben wurde.
%    \begin{macrocode}
  \TUD@parameter@define{markboth}[true]{%
    \ifstrbool{#1}{%
      \@tud@abstract@markbothtrue%
      \ifx\tud@ps\relax\def\tud@ps{headings}\fi%
    }{%
      \@tud@abstract@markbothfalse%
    }{%
      \@tud@abstract@markbothfalse%
      \ifx\tud@ps\relax\def\tud@ps{headings}\fi%
      \manualmark\markboth{#1}{#1}%
    }%
  }%
  \TUD@parameter@define{abstract}{\TUDoption{abstract}{#1}}%
  \TUD@parameter@let{option}{abstract}%
%    \end{macrocode}
% Für die Optionsangabe ohne Schlüssel und Wert kann eine Anzahl an Spalten
% oder eine alternative Sprache angegeben werden. Hierfür ist der Befehl
% \cs{TUD@parameter@defaulthandler} definiert, welcher auch von der Umgebung 
% \env{tudpage} verwendet wird.
%    \begin{macrocode}
  \TUD@parameter@sethandler{\TUD@parameter@defaulthandler{abstract}{#1}}%
}
%    \end{macrocode}
% \end{parameter}^^A option
% \end{parameter}^^A abstract
% \end{parameter}^^A markboth
% \end{parameter}^^A pagestyle
% \end{parameter}^^A columns
% \end{parameter}^^A language
% \begin{macro}{\nextabstract}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% Um einzelne Abschnitte innerhalb einer Zusammenfassung trennen zu können, ist
% dieser Befehl notwendig.
%    \begin{macrocode}
\newcommand*\nextabstract[1][]{%
  \ifnum\tud@multicols>1\relax%
    \end{multicols}%
  \else%
    \ifbool{@tud@abstract@multi}{%
      \ifcase\@nameuse{tud@abstract@level}\relax\or%
        \vspace{\dimexpr\bigskipamount-\parskip\relax}%
      \fi%
    }{}%
  \fi%
  \tud@fm@next{abstract}{#1}%
  \ifnum\tud@multicols>1\relax%
    \begin{multicols}{\tud@multicols}[{\tud@fm@head{abstract}{\abstractname}}]%
  \else%
    \tud@fm@head{abstract}{\abstractname}%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \nextabstract
%
% \iffalse
%</class&body>
%<*class&option>
% \fi
%
% \subsection{Befehle für Selbstständigkeitserklärung und Sperrvermerk}
%
% Die Befehle für Selbstständigkeitserklärung und Sperrvermerk werden
% äquivalent zur \env{abstract}-Umgebung mit den gleichen Optionen
% ausgestattet.
% \begin{macro}{\tud@declaration@level}
% \begin{macro}{\if@tud@declaration@toc}
% \begin{macro}{\if@tud@declaration@toc@locked}
% \begin{macro}{\if@tud@declaration@toc@leveldown}
% \changes{v2.02}{2014/11/05}{}%^^A
% \begin{macro}{\if@tud@declaration@markboth}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% \begin{macro}{\if@tud@declaration@multi}
% \begin{macro}{\if@tud@declaration@fil}
% Siehe die Option \opt{abstract}.
%    \begin{macrocode}
%<*report|article>
\newcommand*\tud@declaration@level{1}
\bool@lock{@tud@declaration@toc}
%</report|article>
%<*book>
\newcommand*\tud@declaration@level{3}
\bool@lock[true]{@tud@declaration@toc}
%</book>
\newif\if@tud@declaration@toc@leveldown
\newif\if@tud@declaration@markboth
\newif\if@tud@declaration@multi
\newif\if@tud@declaration@fil
\@tud@declaration@multitrue
\@tud@declaration@filtrue
%    \end{macrocode}
% \end{macro}^^A \if@tud@declaration@fil
% \end{macro}^^A \if@tud@declaration@multi
% \end{macro}^^A \if@tud@declaration@markboth
% \end{macro}^^A \if@tud@declaration@toc@leveldown
% \end{macro}^^A \if@tud@declaration@toc@locked
% \end{macro}^^A \if@tud@declaration@toc
% \end{macro}^^A \tud@declaration@level
% \begin{option}{declaration}
% Siehe die Option \opt{abstract}.
%    \begin{macrocode}
%<*report|article>
\TUD@key{declaration}[true]{%
%</report|article>
%<*book>
\TUD@key{declaration}[chapter]{%
%</book>
  \edef\@tempb{\TUD@numkey@bool,\tud@fm@switch}%
  \TUD@set@numkey{declaration}{@tempa}{\@tempb}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax%
      \def\tud@declaration@level{0}%
      \bool@std@lock{@tud@declaration@toc}{false}%
    \or%
      \def\tud@declaration@level{1}%
      \bool@std@lock{@tud@declaration@toc}{false}%
    \or%
      \def\tud@declaration@level{2}%
      \bool@std@lock{@tud@declaration@toc}{true}%
    \or%
%<*book|report>
      \def\tud@declaration@level{3}%
      \bool@std@lock{@tud@declaration@toc}{true}%
%</book|report>
    \or%
      \bool@set@lock{@tud@declaration@toc}{true}%
      \@tud@declaration@toc@leveldownfalse%
    \or%
      \bool@set@lock{@tud@declaration@toc}{true}%
      \@tud@declaration@toc@leveldowntrue%
    \or%
      \bool@set@lock{@tud@declaration@toc}{false}%
    \or%
      \@tud@declaration@markbothtrue%
    \or%
      \@tud@declaration@markbothfalse%
    \or%
      \@tud@declaration@multifalse%
    \or%
      \@tud@declaration@multitrue%
    \or%
      \@tud@declaration@filfalse%
    \or%
      \@tud@declaration@filtrue%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{option}^^A declaration
%
% \iffalse
%</class&option>
%<*class&body>
% \fi
%
% \begin{environment}{declarations}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% \changes{v2.03}{2015/01/09}{Bugfix für Seitenstilauswahl}%^^A
% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}%^^A
% \begin{macro}{\if@tud@declarations}
% Die \env{declarations}-Umgebung wird ähnlich zur \env{abstract}-Umgebung 
% definiert. Prinzipiell funktioniert diese genauso, inklusive der Parameter.
% Der Schalter \cs{if@tud@declarations} wird verwendet, um die weiteren Befehle
% \cs{declaration}, \cs{confirmation} und \cs{blocking} innerhalb und außerhalb
% dieser Umgebung verwenden zu können.
%    \begin{macrocode}
\newif\if@tud@declarations
\NewEnviron{declarations}[1][]{%
  \@tud@declarationstrue%
  \ifnumless{\@nameuse{tud@declaration@level}}{3}{}{\@titlepagetrue}%
  \let\tud@ps\relax%
  \TUD@parameter@set{declaration}{#1}%
  \tud@multicols@check%
  \if@titlepage%
    \tud@currentpagestyle@set%
    \ifx\tud@ps\relax\def\tud@ps{empty}\fi%
    \clearpage%
    \tud@ps@select%
  \fi%
  \tud@fm@check{declaration}{%
    \ifnum\tud@multicols>1\relax%
      \begin{multicols}{\tud@multicols}%
    \fi%
    \BODY%
    \ifnum\tud@multicols>1\relax%
      \end{multicols}%
    \fi%
  }%
}[%
  \if@titlepage%
    \aftergroup\tud@currentpagestyle@reset%
    \clearpage%
  \fi%
]
%    \end{macrocode}
% \end{macro}^^A \if@tud@declarations
% \end{environment}^^A declarations
% \begin{parameter}{language}
% \begin{parameter}{columns}
% \changes{v2.02}{2014/07/19}{neu}%^^A
% \begin{parameter}{pagestyle}
% \changes{v2.02}{2014/07/19}{neu}%^^A
% \begin{parameter}{markboth}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% \begin{parameter}{supporter}
% \begin{parameter}{place}
% \begin{parameter}{closing}
% \begin{parameter}{company}
% \begin{parameter}{declaration}
% \begin{parameter}{option}
% Dies sind die möglichen Schlüssel für die Befehle \cs{declaration},
% \cs{confirmation} und \cs{blocking}. Die Schlüssel \opt{declaration} bzw.
% \opt{option} dienen zum Setzen der Werte, welche auch als Klassenoptionen
% gesetzt werden können.
%    \begin{macrocode}
\TUD@parameter{declaration}{%
  \TUD@parameter@define{language}{\selectlanguage{#1}}%
  \TUD@parameter@define{columns}{\def\tud@multicols{#1}}%
  \TUD@parameter@define{pagestyle}{\tud@fm@pagestyle{declaration}{#1}}%
  \TUD@parameter@define{markboth}[true]{%
    \ifstrbool{#1}{%
      \@tud@declaration@markbothtrue%
      \ifx\tud@ps\relax\def\tud@ps{headings}\fi%
    }{%
      \@tud@declaration@markbothfalse%
    }{%
      \@tud@declaration@markbothfalse%
      \ifx\tud@ps\relax\def\tud@ps{headings}\fi%
      \manualmark\markboth{#1}{#1}%
    }%
  }%
  \TUD@parameter@define{company}{\def\@company{#1}}%
  \TUD@parameter@define{supporter}{\def\@supporter{#1}}%
  \TUD@parameter@define{place}{\def\@place{#1}}%
  \TUD@parameter@define{closing}{\def\@confirmationclosing{#1}}%
  \TUD@parameter@let{confirmationclosing}{closing}%
  \TUD@parameter@define{declaration}{\TUDoption{declaration}{#1}}%
  \TUD@parameter@let{option}{declaration}%
%    \end{macrocode}
% Für die Optionsangabe ohne Schlüssel und Wert kann eine Anzahl an Spalten
% oder eine alternative Sprache angegeben werden. Hierfür ist der Befehl
% \cs{TUD@parameter@defaulthandler} definiert, welcher auch von der Umgebung 
% \env{tudpage} verwendet wird.
%    \begin{macrocode}
  \TUD@parameter@sethandler{\TUD@parameter@defaulthandler{declaration}{#1}}%
}
%    \end{macrocode}
% \end{parameter}^^A option
% \end{parameter}^^A declaration
% \end{parameter}^^A company
% \end{parameter}^^A closing
% \end{parameter}^^A place
% \end{parameter}^^A supporter
% \end{parameter}^^A markboth
% \end{parameter}^^A pagestyle
% \end{parameter}^^A columns
% \end{parameter}^^A language
% \begin{macro}{\declaration}
% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}%^^A
% Dieser Befehl dient zur Ausgabe von sowohl Selbstständigkeitserklärung als
% auch Sperrvermerk. Über das optionale Argument kann ohne Schlüssel die
% gewünschte Sprache eingestellt werden. Zusätzlich können Optionen als
% Schlüssel-Wert-Paare angegeben werden.
%    \begin{macrocode}
\newcommand*\declaration[1][]{%
  \ifnum\tud@multicols>1\relax%
    \end{multicols}%
  \fi%
  \ifbool{@tud@declarations}{%
    \begingroup%
      \TUD@parameter@set{declaration}{#1}%
      \tud@fm@confirmation%
      \tud@fm@blocking%
    \endgroup%
  }{%
    \begin{declarations}[#1]%
      \tud@fm@confirmation%
      \tud@fm@blocking%
    \end{declarations}%
  }%
  \ifnum\tud@multicols>1\relax%
    \begin{multicols}{\tud@multicols}%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \declaration
% \begin{macro}{\confirmation}
% \changes{v2.02}{2014/07/18}{Neuimplementierung für \pkg{scrlayer-scrpage}}%^^A
% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}%^^A
% \begin{macro}{\tud@fm@confirmation}
% \changes{v2.02}{2014/07/18}{neu}%^^A
% Mit diesem Befehl kann die Selbstständigkeitserklärung ausgegeben werden. Das
% optionale Argument bestimmt, wer als Unterstützer angegeben wird. Außerdem
% sind Schlüssel-Wert-Paare als Option nutzbar.
%    \begin{macrocode}
\newcommand*\confirmation[1][]{%
  \ifnum\tud@multicols>1\relax%
    \end{multicols}%
  \fi%
%    \end{macrocode}
% Damit das optionale Argument ohne Schlüssel für die Unterstützer verwendet 
% werden kann, wird der Handler umdefiniert.
%    \begin{macrocode}
  \TUD@parameter@sethandler[declaration]{%
    \TUD@parameter@set{declaration}{supporter=##1}%
  }%
  \ifbool{@tud@declarations}{%
    \begingroup%
      \TUD@parameter@set{declaration}{#1}%
      \tud@fm@confirmation%
    \endgroup%
  }{%
    \begin{declarations}[#1]%
      \tud@fm@confirmation%
    \end{declarations}%
  }%
%    \end{macrocode}
% Der Handler wird auf das ursprüngliche Verhalten zurückgesetzt.
%    \begin{macrocode}
  \TUD@parameter@sethandler[declaration]{%
    \TUD@parameter@defaulthandler{declaration}{##1}%
  }%
  \ifnum\tud@multicols>1\relax%
    \begin{multicols}{\tud@multicols}%
  \fi%
}
%    \end{macrocode}
% Dies ist der eigentliche Inhalt des Befehls \cs{confirmation}.
%    \begin{macrocode}
\newcommand*\tud@fm@confirmation{%
  \tud@fm@check{declaration}{%
    \tud@fm@set{declaration}{\confirmationname}{%
      \confirmationtext\vskip\z@\@confirmationclosing%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@confirmation
% \end{macro}^^A \confirmation
% \begin{macro}{\blocking}
% \changes{v2.02}{2014/05/16}{neu, \cs{restriction} umbenannt}%^^A
% \changes{v2.02}{2014/07/18}{an \pkg{scrlayer-scrpage} angepasst}%^^A
% \changes{v2.03}{2015/01/30}{Bugfix für Spaltenanzahl}%^^A
% \begin{macro}{\tud@fm@blocking}
% \changes{v2.02}{2014/07/18}{neu}%^^A
% Für den Sperrvermerk wird äquivalent zu \cs{confirmation} verfahren. Das
% optionale Argument ohne Schlüssel setzt hier die Firma für den Sperrvermerk.
%    \begin{macrocode}
\newcommand*\blocking[1][]{%
  \ifnum\tud@multicols>1\relax%
    \end{multicols}%
  \fi%
  \TUD@parameter@sethandler[declaration]{%
    \TUD@parameter@set{declaration}{company=##1}%
  }%
  \ifbool{@tud@declarations}{%
    \begingroup%
      \TUD@parameter@set{declaration}{#1}%
      \tud@fm@blocking%
    \endgroup%
  }{%
    \begin{declarations}[#1]%
      \tud@fm@blocking%
    \end{declarations}%
  }%
  \TUD@parameter@sethandler[declaration]{%
    \TUD@parameter@defaulthandler{declaration}{##1}%
  }%
  \ifnum\tud@multicols>1\relax%
    \begin{multicols}{\tud@multicols}%
  \fi%
}
%    \end{macrocode}
% Dies ist der eigentliche Inhalt des Befehls \cs{blocking}.
%    \begin{macrocode}
\newcommand*\tud@fm@blocking{%
  \tud@fm@check{declaration}{%
    \tud@fm@set{declaration}{\blockingname}{\blockingtext}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@fm@blocking
% \end{macro}^^A \blocking
%
% \iffalse
%</class&body>
% \fi
%
% \Finale
%
\endinput
