% \CheckSum{291}
% \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-base.dtx
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\ProvidesFile{tudscr-base.dtx}[%
  2015/02/12 v2.03 TUD-KOMA-Script\space%
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[2011/06/27]
%<package>\ProvidesPackage{tudscrbase}[%
%<*driver|package>
%!TUDVersion
%<package>  package
  (basics for the bundle)%
]
%</driver|package>
%<*driver>
\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-base.dtx}
\begin{document}
  \maketitle
  \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \selectlanguage{ngerman}
%
% \changes{v2.02}{2014/06/23}{Unterstützung für \pkg{titlepage} entfernt}%^^A
%
% \section{Grundlegende Befehle und Pakete}
%
% Für die Erstellung der Wrapper-Klassen werden die dafür benötigten Pakete
% eingebunden und Steuerungsbefehle definiert.
%
% \StopEventually{\PrintIndex\PrintChanges}
%
% \iffalse
%<*package>
% \fi
%
% \subsection{Das Paket \pkg{tudscrbase}}
%
% Das Paket \pkg{scrbase} wird zur Optionsdefinition benötigt.
%    \begin{macrocode}
\RequirePackage{scrbase}[2013/12/19]
%    \end{macrocode}
% Das Paket \pkg{kvsetkeys} erweitert \pkg{keyval} um die Möglichkeit, das
% Verhalten bei der Angabe eines nicht definierten Schlüssels festzulegen.
%    \begin{macrocode}
\RequirePackage{kvsetkeys}[2012/04/25]
%    \end{macrocode}
% Das Paket \pkg{etoolbox} wird für die Manipulation bereits definierter
% Makros sowie zur erweiterten Auswertung boolescher Ausdrücke benötigt.
%    \begin{macrocode}
\RequirePackage{etoolbox}[2011/01/03]
%    \end{macrocode}
%
% \subsubsection{Robuster Test auf leeres Argument}
%
% \begin{macro}{\ifxblank}
% Hiermit kann ein Argument geprüft werden, ob dieses blank ist (leer oder
% Leerzeichen). In seiner Syntax ist er identisch zu \cs{ifblank}, allerdings
% expandiert er im Gegensatz zu diesem das gegebene Argument.
%    \begin{macrocode}
\newcommand*\ifxblank{\expandafter\ifblank\expandafter}
%    \end{macrocode}
% \end{macro}^^A \ifxblank
%
% \subsubsection{Robuster Test auf numerischen Ausdruck}
%
% \begin{macro}{\ifxnumber}
% Dieser Befehl dient zum Testen, ob ein gegebenes Argument eine Zahl ist.
% Die Syntax lautet: \cs{ifxnumber}\marg{Argument}\marg{Wahr}\marg{Falsch}
%    \begin{macrocode}
\newcommand*\ifxnumber[1]{%
  \if\relax\detokenize\expandafter{\romannumeral-0#1}\relax%
    \expandafter\@firstoftwo%
  \else%
    \expandafter\@secondoftwo%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \ifxnumber
%
% \subsubsection{Test auf booleschen Ausdruck in Form eines Strings}
%
% \begin{macro}{\ifstrbool}
% \changes{v2.03}{2015/01/09}{neu}%^^A
% Dieser Befehl dient zum Testen, ob ein gegebener String als boolescher 
% Ausdruck interpretiert werden kann. Ist der String als \enquote{wahr} 
% interpretierbar, wird das zweite Argument ausgeführt. Kann der String als 
% \enquote{falsch} angesehen werden, dementsprechen das dritte. Ist der String 
% kein logischer Wert, kommt das letzte Argument zum Tragen. Die Syntax lautet: 
% \cs{ifstrbool}\marg{Argument}\marg{Wahr}\marg{Falsch}\marg{Andernfalls}
%    \begin{macrocode}
\newcommand*\ifstrbool[4]{%
  \ifstr{#1}{true}{#2}{%
    \ifstr{#1}{on}{#2}{%
      \ifstr{#1}{yes}{#2}{%
        \ifstr{#1}{false}{#3}{%
          \ifstr{#1}{no}{#3}{%
            \ifstr{#1}{off}{#3}{%
              #4%
            }%
          }%
        }%
      }%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \ifstrbool
%
% \subsubsection{Schlüssel und Parameter für die Wrapper-Klassen}
%
% \begin{macro}{\TUDProcessOptions}
% \begin{macro}{\TUDExecuteOptions}
% \begin{macro}{\TUDoptions}
% \begin{macro}{\TUDoption}
% \begin{macro}{\TUD@noworlater}
% \begin{macro}{\TUD@key}
% \begin{macro}{\TUD@@key}
% \begin{macro}{\TUD@@@key}
% \begin{macro}{\TUD@ifkey}
% \begin{macro}{\TUD@set@ifkey}
% \begin{macro}{\TUD@numkey}
% \begin{macro}{\TUD@numkey@bool}
% \changes{v2.03}{2015/01/09}{neu}%^^A
% \begin{macro}{\TUD@set@numkey}
% \changes{v2.02}{2014/11/05}{neu}%^^A
% \begin{macro}{\TUD@lengthkey}
% \changes{v2.03}{2015/01/09}{neu}%^^A
% \begin{macro}{\TUD@set@lengthkey}
% \begin{macro}{\TUD@unknown@keyval}
% In Anlehnung an \KOMAScript{} werden hier Befehle zur Definition und
% Ausführung unterschiedlicher Klassenoptionen mithilfe der Funktionen aus
% dem \pkg{scrbase}-Paket erstellt. Klassenoptionen können entweder als
% Schalter (\cs{TUD@ifkey}) oder aber mit mehreren möglichen Werten
% (\cs{TUD@numkey}) definiert werden.
%    \begin{macrocode}
\DefineFamily{TUD}
\newcommand*\TUDProcessOptions{\FamilyProcessOptions{TUD}}
\newcommand*\TUDExecuteOptions{\FamilyExecuteOptions{TUD}}
\newcommand*\TUDoptions{\FamilyOptions{TUD}}
\newcommand*\TUDoption{\FamilyOption{TUD}}
%    \end{macrocode}
% Hiermit wird die Abarbeitung der Optionen an das Ende der Klasse verzögert.
%    \begin{macrocode}
\newcommand*\TUD@noworlater{\AtEndOfClass}
\AtEndOfClass{\let\TUD@noworlater\@firstofone}
%    \end{macrocode}
% Dies sind die Befehle zur Definition einer Standardoption.
%    \begin{macrocode}
\newcommand*\TUD@key[2][.\@currname.\@currext]{%
  \DefineFamilyMember{TUD}%
  \kernel@ifnextchar[%]
    {\TUD@@key[#1]{#2}}{\TUD@@@key[#1]{#2}}%
}
\def\TUD@@key[#1]#2[#3]#4{%
  \DefineFamilyKey[#1]{TUD}{#2}[{#3}]{\TUD@noworlater{#4}}%
}
\def\TUD@@@key[#1]#2#3{%
  \DefineFamilyKey[#1]{TUD}{#2}{\TUD@noworlater{#3}}%
}
%    \end{macrocode}
% Dies sind die Befehle zur Definition einer booleschen Option.
%    \begin{macrocode}
\newcommand*\TUD@ifkey[1][.\@currname.\@currext]{%
  \DefineFamilyMember{TUD}%
  \FamilyBoolKey[#1]{TUD}%
}
\newcommand*\TUD@set@ifkey{\FamilySetBool{TUD}}
%    \end{macrocode}
% Dies sind die Befehle zur Definition einer Option mit definierten Werten.
%    \begin{macrocode}
\newcommand*\TUD@numkey[1][.\@currname.\@currext]{%
  \DefineFamilyMember{TUD}%
  \FamilyNumericalKey[#1]{TUD}%
}
%    \end{macrocode}
% Um Dopplungen im Code zu vermeiden, werden für die numerische Schlüssel die 
% booleschen Standardwertzuweisungen in einem Makro gespeichert.
%    \begin{macrocode}
\newcommand*\TUD@numkey@bool{%
  {false}{0},{off}{0},{no}{0},{true}{1},{on}{1},{yes}{1}%
}
\newcommand*\TUD@set@numkey{\FamilySetNumerical{TUD}}
%    \end{macrocode}
% Dies sind die Befehle zur Definition einer Option zur Festlegung einer Länge.
%    \begin{macrocode}
\newcommand*\TUD@lengthkey[1][.\@currname.\@currext]{%
  \DefineFamilyMember{TUD}%
  \FamilyLengthKey[#1]{TUD}%
}
\newcommand*\TUD@set@lengthkey{\FamilySetLength{TUD}}
%    \end{macrocode}
% Dieser Befehl wird lediglich pro forma definiert. Derzeit wird er durch 
% \KOMAScript nicht abgearbeitet.
%    \begin{macrocode}
\newcommand*\TUD@unknown@keyval{\FamilyUnknownKeyValue{TUD}}
%    \end{macrocode}
% \end{macro}^^A \TUD@unknown@keyval
% \end{macro}^^A \TUD@set@lengthkey
% \end{macro}^^A \TUD@lengthkey
% \end{macro}^^A \TUD@set@numkey
% \end{macro}^^A \TUD@numkey@bool
% \end{macro}^^A \TUD@numkey
% \end{macro}^^A \TUD@set@ifkey
% \end{macro}^^A \TUD@ifkey
% \end{macro}^^A \TUD@@@key
% \end{macro}^^A \TUD@@key
% \end{macro}^^A \TUD@key
% \end{macro}^^A \TUD@noworlater
% \end{macro}^^A \TUDoption
% \end{macro}^^A \TUDoptions
% \end{macro}^^A \TUDExecuteOptions
% \end{macro}^^A \TUDProcessOptions
% \begin{macro}{\TUD@key@lock}
% \begin{macro}{\TUD@std@ifkey@lock}
% \begin{macro}{\TUD@std@numkey@lock}
% \begin{macro}{\TUD@set@ifkey@lock}
% \begin{macro}{\TUD@set@numkey@lock}
% Da sich die Klassenoptionen teilweise selbst gegenseitig beeinflussen oder
% aber in bestimmten Fällen eine Option in Abhängigkeit von einer anderen
% unterschiedliche Standardwerte annehmen soll, wird dafür eine Möglichkeit
% geschaffen. Dabei kann der Nutzer jederzeit einen von einer Option abhängigen
% Standardwert einer Klassenoption überschreiben. Die Klassenoptionen selber
% werden intern mit dem Befehl \cs{TUD@key@lock} definiert und die Standardwerte
% sowie deren Manipulation innerhalb der Optionen mit \cs{TUD@std@ifkey@lock}
% bzw. \cs{TUD@std@numkey@lock} gesetzt. Mit \cs{TUD@set@ifkey@lock} und
% \cs{TUD@set@numkey@lock} werden bei der expliziten Anwendung einer Option
% durch den Nutzer die entsprechenden Werte geändert und gegen ein internes
% Überschreiben gesperrt.
%    \begin{macrocode}
\newcommand*\TUD@key@lock[2][.\@currname.\@currext]{%
%    \end{macrocode}
% Basierend auf dem Namen des Schalters wird die notwendige, boolesche Variable
% erzeugt (\cs{if@tud@\meta{Schaltername}@lock}), welche im Falle des direkten
% Aufrufs des Schlüssels durch den Anwender, ein internes Überschreiben
% verhindert.
%    \begin{macrocode}
  \newbool{@tud@#2@locked}%
  \TUD@key[{#1}]{#2}%
}
%    \end{macrocode}
% Es kann intern über \cs{if\meta{Schaltername}@lock} geprüft werden, ob einem
% mit Schlüssel, der mit \cs{TUD@key@lock} definiert wurde, durch den Anwender
% ein explizites Verhalten zugewiesen wurde. Sollte dies nicht der Fall sein,
% kann dieser hiermit intern beliebig angepasst werden. Da es durch das Setzen
% der Option mit \cs{TUDoption} zu einer Sperrung kommt, muss diese folgend
% wieder rückgängig gemacht werden.
%    \begin{macrocode}
\newcommand*\TUD@std@ifkey@lock[2]{%
  \ifbool{@tud@#1@locked}{}{%
    \TUDoption{#1}{#2}%
    \boolfalse{@tud@#1@locked}%
  }%
}
\newcommand*\TUD@set@ifkey@lock[1]{%
  \booltrue{@tud@#1@locked}%
  \TUD@set@ifkey{#1}%
}
\let\TUD@std@numkey@lock\TUD@std@ifkey@lock
\newcommand*\TUD@set@numkey@lock[1]{%
  \booltrue{@tud@#1@locked}%
  \TUD@set@numkey{#1}%
}
%    \end{macrocode}
% \end{macro}^^A \TUD@set@numkey@lock
% \end{macro}^^A \TUD@set@ifkey@lock
% \end{macro}^^A \TUD@std@numkey@lock
% \end{macro}^^A \TUD@std@ifkey@lock
% \end{macro}^^A \TUD@key@lock
% \begin{macro}{\cs@lock}
% \begin{macro}{\cs@std@lock}
% \begin{macro}{\cs@set@lock}
% Mit \cs{cs@lock}\marg{Name}\marg{Definition} kann ein Befehl definiert
% werden, welcher intern nur mit \cs{cs@std@lock}\marg{Name}\marg{Definition}
% geschrieben wird, wenn nicht über eine entsprechende Option ein explizites
% Verhalten mit \cs{cs@set@lock}\marg{Name}\marg{Definition} zugewiesen wurde.
% Dies ist äquivalent zu \cs{TUD@std@ifkey@lock} und \cs{TUD@set@ifkey@lock}
% bzw. \cs{TUD@std@numkey@lock} und \cs{TUD@set@numkey@lock}
%    \begin{macrocode}
\newcommand*\cs@lock[2]{%
  \csdef{#1}{#2}%
  \newbool{#1@locked}%
}
\newcommand*\cs@std@lock[2]{%
  \ifbool{#1@locked}{}{%
    \csdef{#1}{#2}%
    \boolfalse{#1@locked}%
  }%
}
\newcommand*\cs@set@lock[2]{%
  \csdef{#1}{#2}%
  \booltrue{#1@locked}%
}
%    \end{macrocode}
% \end{macro}^^A \cs@set@lock
% \end{macro}^^A \cs@std@lock
% \end{macro}^^A \cs@lock
% \begin{macro}{\bool@lock}
% \begin{macro}{\bool@std@lock}
% \begin{macro}{\bool@set@lock}
% Diese Makros dienen in Anlehnung an die vorherigen zum Definieren und Setzen
% von sperrbaren booleschen Schaltern.
%    \begin{macrocode}
\newcommand*\bool@lock[2][false]{%
  \newbool{#2}%
  \newbool{#2@locked}%
  \setbool{#2}{#1}%
}
\newcommand*\bool@std@lock[2]{%
  \ifbool{#1@locked}{}{%
    \setbool{#1}{#2}%
    \boolfalse{#1@locked}%
  }%
}
\newcommand*\bool@set@lock[2]{%
  \setbool{#1}{#2}%
  \booltrue{#1@locked}%
}
%    \end{macrocode}
% \end{macro}^^A \bool@set@lock
% \end{macro}^^A \bool@std@lock
% \end{macro}^^A \bool@lock
% \begin{macro}{\tud@cmd@store}
% \begin{macro}{\tud@cmd@reset}
% \begin{macro}{\tud@cmd@use}
% \begin{macro}{\tud@cmd@restore}
% \begin{macro}{\tud@cmd@check}
% \changes{v2.03}{2015/01/09}{neu}%^^A
% Mit diesen Befehlen wird es möglich, Originalbefehle sichern, nutzen und
% wiederherstellen zu können. Dies wird benötigt, um zwischen den einzelnen
% Layouts über Optionseinstellungen zu wechseln und dabei von einem definierten
% Anfangszustand auszugehen.
%
% Mit dem Aufruf \cs{tud@cmd@store}\marg{Befehlsname} wird der angegebene 
% Befehl in einem neuen Makro \cs{@@tud@\meta{Befehlsname}} gespeichert. Dieser 
% kann danach beliebig angepasst werden. Soll der Befehl zu einem späteren 
% Zeitpunkt auf den Orginalzustand zurücksetzen, kann hierfür jederzeit der 
% Befehl \cs{tud@cmd@reset}\marg{Befehlsname} verwendet werden. Durch das Makro
% \cs{tud@cmd@restore}\marg{Befehlsname} wird das mit \cs{tud@cmd@store}
% erstellte Hilfsmakro zusätzlich noch  gelöscht. Der Originalbefehl kann als 
% solcher mit \cs{tud@cmd@use}\marg{Befehlsname} weiterhin genutzt werden. 
%    \begin{macrocode}
\newcommand*\tud@cmd@store[1]{%
  \ifcsdef{@@tud@#1}{}{%
    \tud@cmd@check{#1}%
    \csletcs{@@tud@#1}{#1}%
  }%
}
\newcommand*\tud@cmd@reset[1]{%
  \ifcsdef{@@tud@#1}{%
    \tud@cmd@check{#1}%
    \csletcs{#1}{@@tud@#1}%
  }{}%
}
\newcommand*\tud@cmd@restore[1]{%
  \ifcsdef{@@tud@#1}{%
    \tud@cmd@check{#1}%
    \csletcs{#1}{@@tud@#1}%
    \csundef{@@tud@#1}%
  }{}%
}
\newcommand*\tud@cmd@use[1]{%
  \ifcsdef{@@tud@#1}{%
    \@nameuse{@@tud@#1}%
  }{%
    \tud@cmd@check{#1}%
    \@nameuse{#1}%
  }%
}
%    \end{macrocode}
% Dieses Makro dient zum Überprüfen, ob der zu sichernde beziehungsweise 
% wiederherzustellende Befehl überhaupt definiert ist. Sollte das nicht der 
% Fall sein, wird ein Fehler ausgegeben.
%    \begin{macrocode}
\newcommand*\tud@cmd@check[1]{%
  \ifcsdef{#1}{}{%
    \PackageError{tudscrbase}{%
      `\@backslashchar#1' is not defined%
    }{%
      The command `\@backslashchar#1' was never defined.\MessageBreak%
      Please contact the TUD-KOMA-Script maintainer\MessageBreak%
      via \tudscrmail. A bugfix is urgently required
    }%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cmd@check
% \end{macro}^^A \tud@cmd@restore
% \end{macro}^^A \tud@cmd@use
% \end{macro}^^A \tud@cmd@reset
% \end{macro}^^A \tud@cmd@store
% \begin{macro}{\tud@patch@wrn}
% Dieses Makro wird verwendet, wenn mit den Mitteln von \pkg{etoolbox} bereits
% vorhandene Befehle angepasst werden sollen (\cs{apptocmd}, \cs{pretocmd},
% \cs{patchcmd}) und dies nicht gelingt.
%    \begin{macrocode}
\newcommand*\tud@patch@wrn[1]{%
  \PackageWarning{tudscrbase}{%
    It wasn't possible to patch `\@backslashchar#1'.\MessageBreak%
    Please contact the TUD-KOMA-Script maintainer\MessageBreak%
    via \tudscrmail. Without a bugfix an\MessageBreak%
    erroneous output may occur%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@patch@wrn
% \begin{macro}{\TUD@parameter}
% \begin{macro}{\TUD@parameter@family}
% \begin{macro}{\TUD@parameter@checkfamily}
% Mit \cs{TUD@parameter}\marg{Familienname}\marg{Definitionen} können
% Schlüssel"=Wert"=Parameter für die optionalen Argumente von Befehle definiert
% werden. Das erste Argument definiert den Familiennamen für den jeweiligen 
% Befehl, welcher eindeutig gewählt werden sollte. Dieser wird im Hilfsmakro
% \cs{TUD@parameter@family} gesichert. Dies soll im Zusammenspiel mit dem 
% Makro \cs{TUD@parameter@checkfamily} dafür sorgen, dass die im Folgenden
% bereitgestellten Befehle \cs{TUD@parameter@define}, \cs{TUD@parameter@let},
% und \cs{TUD@parameter@sethandler}~-- welche die eigentliche Definition der
% Parameter für den Benutzer bewerkstelligen~-- ohne die Angabe der Familie nur
% innerhalb des zweiten Argumentes von \cs{TUD@parameter} verwendet werden
% können.
%    \begin{macrocode}
\newcommand*\TUD@parameter@family{}%
\newcommand*\TUD@parameter[2]{%
  \ifxblank{#1}{}{\xdef\TUD@parameter@family{#1}}%
  #2%
  \global\let\TUD@parameter@family\relax%
}
\let\TUD@parameter@family\relax%
%    \end{macrocode}
% Dieser Befehl prüft, ob eine Familie für den Paramter definiert wurde.
%    \begin{macrocode}
\newcommand*\TUD@parameter@checkfamily[1]{%
  \ifx\TUD@parameter@family\relax%
    \PackageError{tudscrbase}{%
      No family for keys given.
    }{%
      You have to use \string#1\space within the\MessageBreak%
      second argument of \string\TUD@parameter. The first \MessageBreak%
      argument of \string\TUD@parameter\space has to be a unique family name.
    }%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \TUD@parameter@checkfamily
% \end{macro}^^A \TUD@parameter@family
% \end{macro}^^A \TUD@parameter
% \begin{macro}{\TUD@parameter@define}
% \begin{macro}{\TUD@parameter@let}
% \changes{v2.02}{2014/07/25}{Beachtung der gegebenen Standardwerte}%^^A
% \begin{macro}{\TUD@parameter@sethandler}
% \cs{TUD@parameter@define}\marg{Name}\oarg{Säumniswert}\marg{Verarbeitung}
% nutzt \cs{define@key} aus dem \pkg{keyval}"=Paket, um einen Schlüssel und
% dessen Verarbeitung zu definieren, wobei auf den zugewiesenen Wert innerhalb 
% des zweiten obligatorischen Argumentes mit \texttt{\#1} zugegriffen werden
% kann.
%    \begin{macrocode}
\newcommand*\TUD@parameter@define[1][]{%
  \ifxblank{#1}{%
    \TUD@parameter@checkfamily{\TUD@parameter@define}%
    \expandafter\define@key\expandafter{\TUD@parameter@family}%
  }{%
    \expandafter\define@key\expandafter{#1}%
  }%
}
%    \end{macrocode}
% Mit \cs{TUD@parameter@let}\marg{Name}\marg{Name} kann äquivalent zur
% \mbox{\TeX-Primitive \cs{let}} die Definition der Verarbeitung eines
% Parameters auf einen weiteren übertragen werden.
%    \begin{macrocode}
\newcommand*\TUD@parameter@let[3][]{%
  \ifxblank{#1}{%
    \TUD@parameter@checkfamily{\TUD@parameter@let}%
    \@expandtwoargs{\csletcs}{%
      KV@\TUD@parameter@family @#2%
    }{%
      KV@\TUD@parameter@family @#3%
    }%
    \@expandtwoargs{\csletcs}{%
      KV@\TUD@parameter@family @#2@default%
    }{%
      KV@\TUD@parameter@family @#3@default%
    }%
  }{%
    \@expandtwoargs{\csletcs}{KV@#1@#2}{KV@#1@#3}%
    \@expandtwoargs{\csletcs}{KV@#1@#2@default}{KV@#1@#3@default}%
  }%
}
%    \end{macrocode}
% Außerdem kann durch \cs{TUD@parameter@sethandler}\marg{Verarbeitung} definiert
% werden, wie verfahren werden soll, wenn ein optionales Argument im klasischen
% \LaTeX-Stil und nicht in der Schlüssel"=Wert"=Syntax angegeben wird. Auf das
% optionale Argument wird ganz normal mit \texttt{\#1} zugegriffen.
%    \begin{macrocode}
\newcommand*\TUD@parameter@sethandler[1][]{%
  \ifxblank{#1}{%
    \TUD@parameter@checkfamily{\TUD@parameter@sethandler}%
    \expandafter\kv@set@family@handler\expandafter{\TUD@parameter@family}%
  }{%
    \expandafter\kv@set@family@handler\expandafter{#1}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \TUD@parameter@sethandler
% \end{macro}^^A \TUD@parameter@let
% \end{macro}^^A \TUD@parameter@define
% \begin{macro}{\TUD@parameter@set}
% Mit \cs{TUD@parameter@set}\marg{Familienname}\marg{Parameterliste} wird die
% Verarbeitung aller gegebenen Parameter veranlasst. Normalerweise wird dieser
% Befehl \emph{nicht} innerhalb des zweiten Argumentes von \cs{TUD@parameter}
% verwendet. In jedem Fall muss die zu verwendende Familie angegeben werden.
%    \begin{macrocode}
\newcommand*\TUD@parameter@set[2]{\@expandtwoargs\kvsetkeys{#1}{#2}}
%    \end{macrocode}
% \end{macro}^^A \TUD@parameter@set
% \begin{macro}{\TUD@parameter@error}
% Das Makro \cs{TUD@parameter@wrn}\marg{Parameter}\marg{Werteliste} gibt für
% den Fall einer ungültigen Wertzuweisung an einen bestimmten \meta{Parameter}
% eine Warnung mit einem entsprechenden Hinweis auf gültige Werte innerhalb von
% \meta{Werteliste} aus.
%    \begin{macrocode}
\newcommand*\TUD@parameter@error[2]{%
  \PackageError{tudscrbase}{Unsupported value for parameter `#1'}{%
    `#1' can only be used with values:\MessageBreak#2%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \TUD@parameter@error
%
% \iffalse
%</package>
%<*load>
% \fi
%
% \subsection{Laden des Paketes}
% Die Klassen benötigen das Paket und laden dieses auch.
%    \begin{macrocode}
\RequirePackage{tudscrbase}[\TUDVersion]
%    \end{macrocode}
%
% \iffalse
%</load>
%<*execute>
% \fi
%
% \subsection{Durchreichen von Optionen und Standardoptionen}
%
% Durchreichen aller Klassenoptionen an die \KOMAScript-Klasse bzw. an die
% genutzte \TUDScript-Elternklasse.
%    \begin{macrocode}
%<*!inherit>
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\scrcls@name}}
%</!inherit>
%<*inherit>
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\tudinh@name}}
%</inherit>
%    \end{macrocode}
% Es werden die Standardoptionen ausgeführt. Die Ausführung selbst wird durch
% den Befehl \cs{TUD@noworlater} innerhalb von \cs{TUD@key} auf das Ende der
% \KOMAScript-Klasse verzögert.
%    \begin{macrocode}
%<*!inherit>
\TUDExecuteOptions{cd,cdfont,tudbookmarks}
%</!inherit>
\TUDProcessOptions\relax
%    \end{macrocode}
% Die korrespindierende \KOMAScript-Klasse bzw. \TUDScript-Elternklasse wird 
% geladen.
%    \begin{macrocode}
%<*!inherit>
\LoadClass{\scrcls@name}[2013/12/19]
%</!inherit>
%<*inherit>
\LoadClass{\tudinh@name}
%</inherit>
%    \end{macrocode}
%
% \iffalse
%<*!inherit>
% \fi
%
% \subsection{Externe Pakete}
%
% \changes{v2.01}{2014/04/24}{Versionsanforderungen bei benötigten Paketen}%^^A
% \changes{v2.02}{2014/07/08}{\pkg{graphics} Warnung bei Verwendung}%^^A
%
% Für die Verwendung der hier erstellten \KOMAScript-Wrapper-Klassen werden
% einige wenige Pakete eingebunden. Dabei wurde versucht, die Anzahl der
% Pakete möglichst gering zu halten und nur die wirklich notwendigen zu
% verwenden.
%
% Die \env{abstract}-Umgebung wird im Vergleich zu den \KOMAScript-Klassen
% stark erweitert. Für diese sowie für die Umgebungen \env{declarations} und 
% \env{tudpage} wird das Paket \pkg{environ} für die Umgebungsdefinition
% benötigt.
%    \begin{macrocode}
\RequirePackage{environ}[2013/04/01]
%    \end{macrocode}
% Es folgen die Pakete, welche bei Bedarf am Ende der Präambel geladen werden.
%    \begin{macrocode}
\AtEndPreamble{%
%    \end{macrocode}
% Mit \pkg{graphicx} werden die Logos der TU~Dresden sowie von Dresden Concept
% mit dem Befehl \cs{includegraphics} u.\,a. auf der Titelseite eingebunden.
% Sollte lediglich das \pkg{graphics}-Paket geladen worden sein, so wird der
% Nutzer mit einer Warnung informiert, dass das \pkg{graphicx}-Paket zusätzlich 
% geladen wird.
%    \begin{macrocode}
  \@ifpackageloaded{graphicx}{}{%
    \@ifpackageloaded{graphics}{%
      \ClassWarningNoLine{\tudcls@name}{%
        The package `graphics' was superseded by `graphicx'%
      }%
    }{}%
  }%
  \RequirePackage{graphicx}[1999/02/16]%
%    \end{macrocode}
% Mit dem Paket \pkg{tudscrcolor} werden die Befehle für die Auswahl der Farben
% des \CDs definiert, welches wiederum \pkg{xcolor} lädt.
%    \begin{macrocode}
  \RequirePackage{tudscrcolor}[\TUDVersion]%
}
%    \end{macrocode}
%
% \iffalse
%</!inherit>
%</execute>
% \fi
%
% \Finale
%
\endinput
