% \CheckSum{1618}
% \iffalse meta-comment
% 
% ============================================================================
% 
%  TUD-Script
%  Copyright (c) Falk Hanisch <tudscr@gmail.com>, 2012-2016
% 
% ============================================================================
% 
%  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-doc.dtx
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\ProvidesFile{tudscr-doc.dtx}[%
  2016/09/22 v2.05d TUD-Script\space%
  (source code documentation based on scrartcl/scrdoc)%
]
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
\documentclass[english,ngerman,xindy]{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-}
\usepackage{microtype}
\usepackage{bookmark}
\CodelineIndex
\RecordChanges
\GetFileInfo{tudscr-doc.dtx}
\begin{document}
  \maketitle
  \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \selectlanguage{ngerman}
%
% \changes{v2.03}{2015/01/09}{\cls{tudscrdoc}: Indextyp Seitenstilebene}^^A
% \changes{v2.05}{2016/04/21}{Verwendung von \app{texindy} möglich}^^A
%
% \section{Quelltextdokumentation für das \TUDScript-Bundle}
%
% Mit dieser Klasse erfolgt die Quelltextdokumentation des \TUDScript-Bundles. 
% \StopEventually{\PrintIndex\PrintChanges\PrintToDos}
%
% \iffalse
%<*class>
% \fi
%
% Sie lädt standarmäßig die Klasse \cls{ltxdoc}, ersetzt allerdings im Stile 
% von \cls{scrdoc} im Hintergrund \cls{article} durch \cls{scrartcl}. Damit der
% zu \cls{scrartcl} gehörige Titel genutzt werden kann, wird dieser temporär
% gesichert.
%    \begin{macrocode}
\RequirePackage{scrbase}[2013/12/19]%
\newcommand*\saved@maketitle{}%
\PassOptionsToClass{toc=left}{scrartcl}%
\AfterClass{scrartcl}{\let\saved@maketitle\@maketitle}%
\AfterClass{ltxdoc}{%
  \let\@maketitle\saved@maketitle%
  \codeline@indexfalse%
}%
\AfterPackage{inputenc}{\RequirePackage{csquotes}[2011/10/22]}%
%    \end{macrocode}
% Der folgende Quelltext ist 1:1 aus \cls{scrdoc} kopiert.
%    \begin{macrocode}
\newcommand*\sd@saved@LoadClass{}
\let\sd@saved@LoadClass=\LoadClass
\renewcommand*\LoadClass[2][]{%
  \begingroup
    \edef\@tempc{#2}\def\@tempb{article}%
    \ifx\@tempc\@tempb
      \let\LoadClass\sd@saved@LoadClass
      \def\@tempc{scrartcl}%
    \fi
    \edef\@tempc{%
      \noexpand\endgroup\noexpand\sd@saved@LoadClass[{#1}]{\@tempc}}%
  \@tempc
}
\newcommand*\sd@saved@PassOptionsToClass{}
\let\sd@saved@PassOptionsToClass=\PassOptionsToClass
\renewcommand*\PassOptionsToClass[2]{%
  \begingroup
    \edef\@tempc{#2}\def\@tempb{article}%
    \ifx\@tempc\@tempb
      \def\@tempc{scrartcl}%
    \fi
    \edef\@tempc{%
      \noexpand\endgroup\noexpand\sd@saved@PassOptionsToClass{#1}{%
        \@tempc}}%
  \@tempc
}
\LoadClassWithOptions{ltxdoc}
\setcounter{IndexColumns}{2}
%    \end{macrocode}
% Befehle, welche bei der Verwednung von \cs{EnableCrossrefs} dennoch nicht im 
% Index erscheinen sollen.
% \begingroup%
% \makeatletter%
% \@bsphack\scan@allowedfalse\@esphack%
% \makeatother%
%    \begin{macrocode}
%^^A\DoNotIndex{\ ,\",\.,\@,\\,\{,\}}
%^^A\DoNotIndex{\@abstrtfalse,\@abstrttrue,\@addtoreset}
%^^A\DoNotIndex{\@afterheading,\@afterindentfalse}
%^^A\DoNotIndex{\@Alph,\@alph,\@arabic}
%^^A\DoNotIndex{\@beginparpenalty}
%^^A\DoNotIndex{\@car,\@cdr,\@centercr}
%^^A\DoNotIndex{\@dblfloat,\@dotsep,\@dottedtocline}
%^^A\DoNotIndex{\@empty,\@endparpenalty}
%^^A\DoNotIndex{\@float,\@fontswitch}
%^^A\DoNotIndex{\@gobbletwo}
%^^A\DoNotIndex{\@hangfrom,\@highpenalty}
%^^A\DoNotIndex{\@ifnextchar,\@ifundefined,\@itempenalty}
%^^A\DoNotIndex{\@latex@warning}
%^^A\DoNotIndex{\@M,\@m,\@medpenalty,\@minus,\@mkboth}
%^^A\DoNotIndex{\@mparswitchfalse,\@mparswitchtrue}
%^^A\DoNotIndex{\@ne,\@nil,\@nobreakfalse,\@nobreaktrue,\@nomath}
%^^A\DoNotIndex{\@plus}
%^^A\DoNotIndex{\@Roman,\@roman}
%^^A\DoNotIndex{\@tempa,\@tempb,\@tempc}
%^^A\DoNotIndex{\@tempcnta,\@tempcntb,\@tempcntc}
%^^A\DoNotIndex{\@tempdima,\@tempdimb,\@tempdimc}
%^^A\DoNotIndex{\@tempskipka,\@tempskipkb,\@tempskipkc}
%^^A\DoNotIndex{\@tempswafalse,\@tempswatrue,\@tempswbfalse,\@tempswbtrue}
%^^A\DoNotIndex{\@tocrmarg,\@topnewpage,\@topnum}
%^^A\DoNotIndex{\@twocolumnfalse,\@twocolumntrue,\@twosidefalse,\@twosidetrue}
%^^A\DoNotIndex{\@whiledim,\@whilenum}
%^^A\DoNotIndex{\addcontentsline,\addpenalty,\addtocontents}
%^^A\DoNotIndex{\addtolength,\addvspace,\advance}
%^^A\DoNotIndex{\begin,\begingroup,\bfseries,\box,\bullet}
%^^A\DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth,\cdot}
%^^A\DoNotIndex{\centering,\changes,\cleardoublepage,\clearpage,\cmd}
%^^A\DoNotIndex{\CodelineIndex,\col@number,\cs,\CurrentOption}
%^^A\DoNotIndex{\dblfloatpagefraction,\dbltopfraction,\def,\divide,\DoNotIndex}
%^^A\DoNotIndex{\DeclareOldFontCommand,\DeclareOption,\DisableCrossrefs}
%^^A\DoNotIndex{\else,\em,\empty,\EnableCrossrefs,\end,\end@dblfloat,\end@float}
%^^A\DoNotIndex{\endgroup,\endlist,\endquotation,\endtitlepage,\everypar}
%^^A\DoNotIndex{\ExecuteOptions,\expandafter}
%^^A\DoNotIndex{\fboxrule,\fboxsep,\fi}
%^^A\DoNotIndex{\gdef,\global}
%^^A\DoNotIndex{\hangindent,\hbox,\hfil,\hrule,\hsize,\hskip,\hspace,\hss}
%^^A\DoNotIndex{\if,\if@tempswa,\ifcase,\ifdim,\ifnum,\ifodd,\ifx,\include}
%^^A\DoNotIndex{\input,\InputIfFileExists,\item,\itshape}
%^^A\DoNotIndex{\kern}
%^^A\DoNotIndex{\leavevmode,\leftmark,\leftskip,\let,\lineskip,\list,\long}
%^^A\DoNotIndex{\m@ne,\m@th,\marginpar,\markboth,\markright}
%^^A\DoNotIndex{\mathbf,\mathcal,\mathit,\mathnormal,\mathrm,\mathsf,\mathtt}
%^^A\DoNotIndex{\MessageBreak,\month}
%^^A\DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen}
%^^A\DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent}
%^^A\DoNotIndex{\normalcolor,\normalfont,\normallineskip,\normalsize}
%^^A\DoNotIndex{\null,\number,\numberline}
%^^A\DoNotIndex{\OldMakeindex,\OnlyDescription,\or,\overfullrule}
%^^A\DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine}
%^^A\DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox}
%^^A\DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\protect,\providecommand}
%^^A\DoNotIndex{\PrintIndex,\PrintChanges,\ProcessOptions,\ProvidesClass}
%^^A\DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax}
%^^A\DoNotIndex{\renewcommand,\RequirePackage,\reset@font,\rightmargin}
%^^A\DoNotIndex{\rightmark,\rightskip,\rmfamily}
%^^A\DoNotIndex{\scshape,\secdef,\setbox,\setcounter,\setlength,\settowidth}
%^^A\DoNotIndex{\sfcode,\sffamily,\skip,\sloppy,\slshape,\space,\string}
%^^A\DoNotIndex{\the,\thispagestyle,\ttfamily,\twocolumn,\typeout}
%^^A\DoNotIndex{\undefined,\usecounter}
%^^A\DoNotIndex{\vfil,\vfill,\vspace}
%^^A\DoNotIndex{\wd}
%^^A\DoNotIndex{\xdef}
%^^A\DoNotIndex{\year}
%^^A\DoNotIndex{\z@}
%    \end{macrocode}
% Damit sind alle Einträge, welche nicht im Index auftauchen sollen, definiert.
% \endgroup%
% \begin{option}{final}
% \begin{macro}{\tudfinalflag}
% Option bzw. Flag für das automatisierte Erzeugen der Quelltextdokumentation
% mit einem Skript ohne ToDo-Befehle.
%    \begin{macrocode}
\DeclareOption{final}{\let\tudfinalflag\relax}
%    \end{macrocode}
% \end{macro}^^A \tudfinalflag
% \end{option}^^A final
% \begin{option}{texindy}
% \changes{v2.05}{2016/04/21}{neu}^^A
% \begin{option}{xindy}
% \changes{v2.05}{2016/04/21}{neu}^^A
% \begin{option}{xdy}
% \changes{v2.05}{2016/04/21}{neu}^^A
% \begin{macro}{\tudxdyflag}
% \changes{v2.05}{2016/04/21}{neu}^^A
% Option(en) für das Erstellen der Indexdateien im Stil von \app{texindy}.
%    \begin{macrocode}
\DeclareOption{texindy}{\let\tudxdyflag\relax}
\DeclareOption{xindy}{\let\tudxdyflag\relax}
\DeclareOption{xdy}{\let\tudxdyflag\relax}
%    \end{macrocode}
% \end{macro}^^A \tudxdyflag
% \end{option}^^A xdy
% \end{option}^^A xindy
% \end{option}^^A texindy
% Die beiden Optionen werden abgearbeitet
%    \begin{macrocode}
\ProcessOptions\relax
%    \end{macrocode}
% \begin{length}{\topmargin}
% \begin{length}{\headheight}
% \begin{length}{\headsep}
% \begin{length}{\footskip}
% \begin{length}{\marginparwidth}
% \begin{length}{\marginparsep}
% \begin{length}{\oddsidemargin}
% \begin{length}{\textheight}
% \begin{length}{\textwidth}
% Die Seitenränder werden so eingestellt, dass für die Darstellung des 
% Quelltextes genau 80~Zeichen zur Verfügung stehen.
%    \begin{macrocode}
\setlength\topmargin{-1in}
\setlength\headheight{0pt}
\setlength\headsep{30pt}
\setlength\footskip{1.5\headsep}
\setlength\textheight{\dimexpr\paperheight-2.5\headsep-\footskip\relax}
\setlength\marginparwidth{150pt}
\setlength\marginparsep{0pt}
\setlength\oddsidemargin{\dimexpr\marginparwidth+\marginparsep-1in\relax}
\setlength\textwidth{%
  \dimexpr\paperwidth-1in-\oddsidemargin-.5\headsep\relax%
}
%    \end{macrocode}
% \end{length}^^A \textwidth
% \end{length}^^A \textheight
% \end{length}^^A \oddsidemargin
% \end{length}^^A \marginparsep
% \end{length}^^A \marginparwidth
% \end{length}^^A \footskip
% \end{length}^^A \headsep
% \end{length}^^A \headheight
% \end{length}^^A \topmargin
% Mit dem Paket~\pkg{dox} können weitere Eintragstypen erstellt werden. Dieses 
% lädt außerdem das Paket~\pkg{doc}, welches die Grundfunktionalitäten für die 
% Erstellung von \file{dtx}-Dateien bereitstellt. In der momentanen Version 
% unterstützt das Paket~\pkg{dox} die aktuellen Anpassungen an die Erstellung 
% von Änderungsnotizen durch \pkg{doc} nicht, weshalb im Folgenden einige 
% Patches notwendig sind. Hierfür wird das Paket \pkg{tudscrbase} geladen.
%    \begin{macrocode}
\RequirePackage{tudscrbase}[\TUD@Version]
\RequirePackage{dox}[2010/12/16]
\@ifpackagelater{dox}{2010/12/17}{%
  \ClassWarning{\TUD@Class@Name}{%
    Package `dox' was updated so some patches\MessageBreak%
    are maybe outdated
  }%
}{}%
%    \end{macrocode}
% \begin{macro}{\m@cro@}
% Nach dem Laden der Pakete werden die Definitionen einiger Makros überprüft.
%    \begin{macrocode}
\CheckCommand\m@cro@[2]{%
  \endgroup \topsep\MacroTopsep \trivlist
  \edef\saved@macroname{\string#2}%
  #1
    \let\saved@indexname\saved@macroname
  \else
    \edef\saved@indexname{\expandafter\@gobble\string#2}%
  \fi
  \def\makelabel##1{\llap{##1}}%
  \if@inlabel
    \let\@tempa\@empty \count@\macro@cnt
    \loop \ifnum\count@>\z@
      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
    \edef\makelabel##1{\llap{\vtop to\baselineskip
                               {\@tempa\hbox{##1}\vss}}}%
    \advance \macro@cnt \@ne
  \else  \macro@cnt\@ne  \fi
  \edef\@tempa{\noexpand\item[%
     #1%
       \noexpand\PrintMacroName
     \else
       \noexpand\PrintEnvName
     \fi
     {\string#2}]}%
  \@tempa
  \global\advance\c@CodelineNo\@ne
   #1%
      \SpecialMainIndex{#2}\nobreak
      \DoNotIndex{#2}%
   \else
      \SpecialMainEnvIndex{#2}\nobreak
   \fi
  \global\advance\c@CodelineNo\m@ne
  \ignorespaces
}
%    \end{macrocode}
% \end{macro}^^A \m@cro@
% \begin{macro}{\changes@}
% Bei der Erstellung der Änderungsliste fehlt bei Makros in der aktuellen 
% Version von \pkg{doc} ein Leerzeichen. Das Problem ist bereits gemeldet. 
%    \begin{macrocode}
\CheckCommand*\changes@[3]{%
  \protected@edef\@tempa{%
    \noexpand\glossary{%
      #1\levelchar
      \ifx\saved@macroname\@empty
        \space
        \actualchar
        \generalname
      \else
        \saved@indexname
        \actualchar
        \string\verb\quotechar*%
        \verbatimchar\saved@macroname
        \verbatimchar
      \fi
      :\levelchar #3%
    }%
  }%
  \@tempa\endgroup\@esphack%
}
%    \end{macrocode}
% Bei der Erzeugung der Änderungseinträge wird zwischen der Verwendung von 
% \app{makeindex} und \app{xindy} unterschieden. Für die Reihenfolge des 
% Erscheinens der einzelnen Einträge wird das angegebene Datum zur Sortierung 
% genutzt.
%    \begin{macrocode}
\ifdefined\tudxdyflag%
  \renewcommand*\changes@[3]{%
%    \end{macrocode}
% Einträge sollen nur erzeugt werden, wenn diese vollständig sind.
%    \begin{macrocode}
    \@tempswatrue%
    \ifblank{#1}{\@tempswafalse}{}%
    \ifblank{#3}{\@tempswafalse}{}%
    \if@tempswa%
      \protected@edef\@tempa{%
        \noexpand\glossary{%
          #1\levelchar%
          \ifx\saved@macroname\@empty%
            \generalname%
          \else%
            \implementationname%
          \fi%
          \levelchar
          \ifx\saved@macroname\@empty\else%
            \saved@indexname
            \ifx\saved@idxtype\@empty\else%
              \space\saved@idxtype
            \fi%
            \actualchar
            \string\verb\quotechar*%
            \verbatimchar\saved@macroname
            \verbatimchar%
            \ifx\saved@idxtype\@empty\else%
              \space(\saved@idxtype)%
            \fi%
            :\levelchar
          \fi
          #2 #3%
          \actualchar%
          #3% (#2)%
        }%
      }%
    \else%
      \let\@tempa\relax%
    \fi%
    \@tempa\endgroup\@esphack%
  }%
\else%
  \renewcommand*\changes@[3]{%
    \protected@edef\@tempa{%
      \noexpand\glossary{%
        #1\levelchar
        \ifx\saved@macroname\@empty
          \quotechar!
          \actualchar
          \generalname
        \else
          \saved@indexname
          \actualchar
          \string\verb\quotechar*%
          \verbatimchar\saved@macroname
          \verbatimchar
        \fi
        :\levelchar #3%
      }%
    }%
    \@tempa\endgroup\@esphack%
  }%
\fi%
%    \end{macrocode}
% \end{macro}^^A \changes@
% \begin{macro}{\@wrglossary}
% \begin{macro}{\filesep}
% Für die Ausgabe der Änderungsliste soll nicht einfach nur die Seitenzahl 
% sondern tatsächlich die Codezeile ausgegeben werden.
%    \begin{macrocode}
\CheckCommand*\@wrglossary[1]{%
  \protected@write\@glossaryfile{}%
  {\string\glossaryentry{#1}{\thepage}}%
  \endgroup
  \@esphack%
}
%    \end{macrocode}
% Da \cs{filesep} leer ist, falls nicht \cs{DocInclude} verwendet wird, lassen 
% sich im Index Seitenzahlen und Codezeilen nicht sofort unterscheiden, weshalb 
% das Makro hier standardmäßig mit \val{?-} als Präfix für letztere definiert 
% wird.
%    \begin{macrocode}
\def\filesep{?-}
\def\@wrglossary#1{%
%    \end{macrocode}
% Der erste Zweig ist aktiv, wenn der Index mit Seitenzahlen erzeugt wird. 
% Werden Codezeilen als Basis verwendet, entsprechend der zweite.
%    \begin{macrocode}
  \ifx\special@index\index%
    \@tempswafalse%
  \else%
    \@tempswatrue%
  \fi%
%    \end{macrocode}
% Für einen allgemeinen Eintrag soll definitiv die Seitenzahl verwendet werden.
%    \begin{macrocode}
  \ifx\saved@macroname\@empty%
    \@tempswafalse%
  \fi%
  \if@tempswa%
    \global\advance\c@CodelineNo\@ne
    \protected@write\@glossaryfile{}{%
      \string\glossaryentry{#1}{\filesep\number\c@CodelineNo}%
    }
    \global\advance\c@CodelineNo\m@ne
  \else%
    \protected@write\@glossaryfile{}{\string\glossaryentry{#1}{\thepage}}
  \fi%
  \endgroup
  \@esphack%
}
%    \end{macrocode}
% \end{macro}^^A \filesep
% \end{macro}^^A \@wrglossary
% \begin{macro}{\generalname}
% \begin{macro}{\implementationname}
% Die Bezeichnungen für den allgemeinen und den Implementierungsteil.
% \ToDo{\cs{filesep} fehlt in der allgemeinen Liste}[v2.06]
%    \begin{macrocode}
\renewcommand*\generalname{Allgemein}
\newcommand*\implementationname{Implementierung}
%    \end{macrocode}
% \end{macro}^^A \implementationname
% \end{macro}^^A \generalname
% \begin{macro}{\hypersourcedef}
% \changes{v2.05}{2016/04/26}{neu}^^A
% \begin{macro}{\hypersource@def}
% \changes{v2.05}{2016/04/26}{neu}^^A
% \begin{macro}{\hypersourceref}
% \changes{v2.05}{2016/04/26}{neu}^^A
% \begin{macro}{\hypersource@ref}
% \changes{v2.05}{2016/04/26}{neu}^^A
% Diese Makros werden verwendet, um im Index respektive in der Änderungsliste 
% mithilfe von \pkg{hyperref} Hyperlinks auf die entsprechenden Codezeilen im 
% Dokument zu setzen. 
%    \begin{macrocode}
\newcommand*\hypersourcedef[1]{}
\newcommand*\hypersource@def{}
\newcommand*\hypersourceref[1]{#1}
\newcommand*\hypersource@ref[2][]{}
\PassOptionsToPackage{hyperindex=false}{hyperref}
\AfterPackage{hyperref}{%
%    \end{macrocode}
% Mit \cs{hypersourcedef} wird ein Textanker gesetzt, falls dieser noch nicht 
% definiert wurde, was durch \cs{hypersource@def} abgesichert wird. Als 
% Argument wird hierfür die aktuelle Codezeile verwendet.
%    \begin{macrocode}
  \renewcommand*\hypersourcedef[1]{%
    \ifstr{#1}{\hypersource@def}{}{%
      \Hy@raisedlink{\hyperdef{}{source:#1}{}}%
      \xdef\hypersource@def{#1}%
    }%
  }%
%    \end{macrocode}
% Mit \cs{hypersource@ref} wird auf den Textanker verlinkt. Dies kann entweder 
% direkt mit \cs{hypersourceref} erfolgen oder indirekt über das Attribut
% \val{main}, welches bei der Definitionen von Befehlen etc. im Index genutzt 
% wird. Hierfür wird das Makro \cs{main} umdefiniert.
%    \begin{macrocode}
  \renewcommand*\hypersourceref[1]{\hypersource@ref{#1}}%
  \renewcommand*\main[1]{\hypersource@ref[\underline]{#1}}%
%    \end{macrocode}
% Die Referenz im Argument kann entweder in der Form \val{<Letter>-<Codezeile>}
% oder direkt als Seitenzahl oder angegeben werden. Deshalb wird dafür gesorgt,
% dass das angegebene Argument dementsprechend ausgewertet wird.
%    \begin{macrocode}
  \renewcommand*\hypersource@ref[2][\@firstofone]{%
    \begingroup%
      \def\@tempa##1-##2\relax{%
        \IfArgIsEmpty{##2}{%
          \hyperlink{page.\@tempc}{#1{\@tempc}}%
        }{%
          \hyperref{}{}{source:\@tempc}{#1{\@tempc}}%
        }%
      }%
      \def\@tempb##1{%
        \def\@tempc{##1}%
        \expandafter\@tempa##1-\relax%
      }%
      \forcsvlist\@tempb{#2}%
    \endgroup%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \hypersource@ref
% \end{macro}^^A \hypersourceref
% \end{macro}^^A \hypersource@def
% \end{macro}^^A \hypersourcedef
% \begin{macro}{\@doxcreatespecialmainindex}
% \begin{macro}{\@doxcreatespecialmainmacrolikeindex}
% \begin{macro}{\@doxcreatespecialindex}
% \begin{macro}{\@doxcreatespecialindex}
% Für den Index muss bei diesen Makros eine kleine Anpassung erfolgen, damit 
% die Sortierung auch bei der Verwendung von \app{texindy} richtig erfolgt und 
% keine Einträge, welche es trotz gleicher Bezeichnung für unterschiedliche
% Eintragstypen (bspw. Umgebung \env{abstract} und Option \opt{abstract}) gibt,
% unterschlagen werden. Außerdem wird hier die Definition der Quelltextanker 
% eingehangen.
%    \begin{macrocode}
\CheckCommand*\@doxcreatespecialmainindex[3]{%
  \expandafter\def\csname SpecialMain#1Index\endcsname##1{%
    \@bsphack%
    \special@index{##1\actualchar{\string\ttfamily\space##1} (#2)
      \encapchar main}%
    \special@index{#3:\levelchar##1\actualchar{\string\ttfamily\space##1}
      \encapchar main}%
    \@esphack%
  }%
}
\patchcmd{\@doxcreatespecialmainindex}{\actualchar}{%
  \space(#2)\actualchar%
}{}{\tud@patch@wrn{@doxcreatespecialmainindex}}
\patchcmd{\@doxcreatespecialmainindex}{\@esphack}{%
  \@esphack\hypersourcedef{\filesep\number\c@CodelineNo}%
}{}{\tud@patch@wrn{@doxcreatespecialmainindex}}
\CheckCommand*\@doxcreatespecialmainmacrolikeindex[3]{%
  \expandafter\def\csname SpecialMain#1Index\endcsname##1{%
    \@SpecialIndexHelper@##1\@nil
    \@bsphack%
    \special@index{\@gtempa\actualchar
      \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
      \space(#2)\encapchar main}%
    \special@index{#3:\levelchar\@gtempa\actualchar%
      \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
      \encapchar main}%
    \@esphack%
  }%
}
\patchcmd{\@doxcreatespecialmainmacrolikeindex}{\actualchar}{%
  \space(#2)\actualchar%
}{}{\tud@patch@wrn{@doxcreatespecialmainmacrolikeindex}}
\patchcmd{\@doxcreatespecialmainmacrolikeindex}{\@esphack}{%
  \@esphack\hypersourcedef{\filesep\number\c@CodelineNo}%
}{}{\tud@patch@wrn{@doxcreatespecialmainmacrolikeindex}}
\CheckCommand*\@doxcreatespecialindex[3]{%
  \expandafter\def\csname Special#1Index\endcsname##1{%
    \@bsphack%
    \index{##1\actualchar{\protect\ttfamily##1} (#2)\encapchar usage}%
    \index{#3:\levelchar##1\actualchar{\protect\ttfamily##1}
      \encapchar usage}%
    \@esphack%
  }%
}
\patchcmd{\@doxcreatespecialindex}{\actualchar}{%
  \space(#2)\actualchar%
}{}{\tud@patch@wrn{@doxcreatespecialindex}}
\CheckCommand*\@doxcreatespecialmacrolikeindex[3]{%
  \expandafter\def\csname Special#1Index\endcsname##1{%
    \@SpecialIndexHelper@##1\@nil
    \@bsphack%
    \index{\@gtempa\actualchar
      \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
      \space(#2)\encapchar usage}%
    \index{#3:\levelchar\@gtempa\actualchar
      \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
      \encapchar usage}%
    \@esphack%
  }%
}
\patchcmd{\@doxcreatespecialmacrolikeindex}{\actualchar}{%
  \space(#2)\actualchar%
}{}{\tud@patch@wrn{@doxcreatespecialmacrolikeindex}}
%    \end{macrocode}
% \end{macro}^^A \@doxcreatespecialindex
% \end{macro}^^A \@doxcreatespecialindex
% \end{macro}^^A \@doxcreatespecialmainmacrolikeindex
% \end{macro}^^A \@doxcreatespecialmainindex
% \begin{macro}{\doxitem}
% \begin{macro}{\@doxcreateenv}
% \begin{macro}{\@doxcreatemacrolikeindexname}
% \begin{macro}{\@doxcreateindexname}
% \begin{macro}{\saved@idxtype}
% \begin{macro}{\@@doxenv}
% Jetzt die Anpassungen der Änderungsliste für das Paket \pkg{dox}.
%    \begin{macrocode}
\CheckCommand\doxitem[4][]{%
  \@nameuse{dox@macrolike\dox@macrolikedefault}%
  \def\dox@idxtype{#3}%
  \setkeys{dox}{#1}
  \@ifundefined{Print#2Name}{%
    \ifdox@macrolike
      \expandafter\def\csname Print#2Name\endcsname##1{%
        \strut\MacroFont\string ##1\ }
    \else
      \expandafter\def\csname Print#2Name\endcsname##1{%
        \strut\MacroFont ##1\ }
    \fi}{}
  \ifdox@macrolike
    \def\@doxexpr{\@doxcreatespecialmainmacrolikeindex{#2}}%
  \else
    \def\@doxexpr{\@doxcreatespecialmainindex{#2}}%
  \fi
  \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
  \@ifundefined{PrintDescribe#2}{%
    \ifdox@macrolike
      \expandafter\def\csname PrintDescribe#2\endcsname##1{%
        \strut\MacroFont\string ##1\ }
    \else
      \expandafter\def\csname PrintDescribe#2\endcsname##1{%
        \strut\MacroFont ##1\ }
    \fi}{}
  \ifdox@macrolike
    \def\@doxexpr{\@doxcreatespecialmacrolikeindex{#2}}%
  \else
    \def\@doxexpr{\@doxcreatespecialindex{#2}}%
  \fi
  \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
  \@doxcreatedescribe{#2}
  \@doxcreateenv{#2}{#3}%
}
%    \end{macrocode}
% Da das direkte Patchen von \cs{doxitem} mit den Mitteln von \pkg{etoolbox} 
% aufgrund des optionalen Argumentes nicht möglich ist, wird der notwendige 
% Patch einfach zu Beginn von \cs{@doxcreateenv} eingehängt.
%    \begin{macrocode}
\CheckCommand\doxitem[4][]{%
  \@nameuse{dox@macrolike\dox@macrolikedefault}%
  \def\dox@idxtype{#3}%
  \setkeys{dox}{#1}
  \@ifundefined{Print#2Name}{%
    \ifdox@macrolike
      \expandafter\def\csname Print#2Name\endcsname##1{%
        \strut\MacroFont\string ##1\ }
    \else
      \expandafter\def\csname Print#2Name\endcsname##1{%
        \strut\MacroFont ##1\ }
    \fi}{}
  \ifdox@macrolike
    \def\@doxexpr{\@doxcreatespecialmainmacrolikeindex{#2}}%
  \else
    \def\@doxexpr{\@doxcreatespecialmainindex{#2}}%
  \fi
  \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
  \@ifundefined{PrintDescribe#2}{%
    \ifdox@macrolike
      \expandafter\def\csname PrintDescribe#2\endcsname##1{%
        \strut\MacroFont\string ##1\ }
    \else
      \expandafter\def\csname PrintDescribe#2\endcsname##1{%
        \strut\MacroFont ##1\ }
    \fi}{}
  \ifdox@macrolike
    \def\@doxexpr{\@doxcreatespecialmacrolikeindex{#2}}%
  \else
    \def\@doxexpr{\@doxcreatespecialindex{#2}}%
  \fi
  \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
  \@doxcreatedescribe{#2}
  \@doxcreateenv{#2}{#3}%
}
\CheckCommand*\@doxcreateenv[2]{%
  \expandafter\def\csname #2\endcsname{%
    \@ifnextchar[%]
    {\@doxenv{#1}}{\@doxenv{#1}[]}}
  \expandafter\let\csname end#2\endcsname\endtrivlist%
}
\pretocmd{\@doxcreateenv}{%
  \ifdox@macrolike%
    \def\@doxexpr{\@doxcreatemacrolikeindexname{#1}}%
  \else%
    \def\@doxexpr{\@doxcreateindexname{#1}}%
  \fi%
  \expandafter\@doxexpr\expandafter{\dox@idxtype}%
}{}{\tud@patch@wrn{@doxcreateenv}}
%    \end{macrocode}
% Nun noch die beiden Befehle, welche durch den Patch ausgeführt werden.
%    \begin{macrocode}
\newcommand*\saved@idxtype{}
\def\@doxcreatemacrolikeindexname#1#2{%
  \expandafter\def\csname Set#1IndexName\endcsname##1{%
    \edef\saved@indexname{\expandafter\@gobble##1}%
    \edef\saved@idxtype{#2}%
  }%
}
\def\@doxcreateindexname#1#2{%
  \expandafter\def\csname Set#1IndexName\endcsname##1{%
    \let\saved@indexname##1%
    \edef\saved@idxtype{#2}%
  }%
}
%    \end{macrocode}
% In \cs{@@doxenv} sollen die bei der Verwendung von \cs{doxitem} respektive 
% \cs{@doxcreateenv} definierten Makros \cs{Set\dots{}IndexName} ausgeführt 
% werden. Zuerst das Prüfen des Befehls\dots
%    \begin{macrocode}
\CheckCommand\@@doxenv[2]{%
  \endgroup%
  \topsep\MacroTopsep \trivlist%
  \edef\saved@macroname{\string#2}%
  \def\makelabel##1{\llap{##1}}%
  \if@inlabel%
    \let\@tempa\@empty%
    \count@\macro@cnt%
    \loop\ifnum\count@>\z@%
      \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne%
    \repeat%
    \edef\makelabel##1{\llap{\vtop to\baselineskip{\@tempa\hbox{##1}\vss}}}%
    \advance\macro@cnt\@ne%
  \else%
    \macro@cnt\@ne%
  \fi%
  \ifdox@noprint%
    \item%
  \else%
    \edef\@tempa{%
      \noexpand\item[%
      \expandafter\noexpand\csname Print#1Name\endcsname{\saved@macroname}]}%
    \@tempa%
  \fi%
  \ifdox@noindex\else%
    \global\advance\c@CodelineNo\@ne%
    \@nameuse{SpecialMain#1Index}{#2}\nobreak%
    \global\advance\c@CodelineNo\m@ne%
  \fi%
  \ignorespaces%
}
%    \end{macrocode}
% \dots und nun der eigentliche Patch sowie die Basisdefinitionen.
%    \begin{macrocode}
\patchcmd{\@@doxenv}{\ignorespaces}{%
  \csname Set#1IndexName\endcsname{\saved@macroname}\ignorespaces%
}{}{\tud@patch@wrn{@@doxenv}}
%    \end{macrocode}
% \end{macro}^^A \@@doxenv
% \end{macro}^^A \saved@idxtype
% \end{macro}^^A \@doxcreateindexname
% \end{macro}^^A \@doxcreatemacrolikeindexname
% \end{macro}^^A \@doxcreateenv
% \end{macro}^^A \doxitem
% \begin{macro}{\SetMacroIndexName}
% \begin{macro}{\SetEnvIndexName}
% \begin{macro}{\SpecialMainMacroIndex}
% Da für Makros und Umgebungen die notwendigen Makros nicht über \cs{doxitem} 
% kreiert werden können, erfolgt dies hier direkt.
%    \begin{macrocode}
\def\SetMacroIndexName#1{%
  \edef\saved@indexname{\expandafter\@gobble#1}
  \let\saved@idxtype\@empty%
}
\def\SetEnvIndexName#1{%
  \let\saved@indexname#1%
  \edef\saved@idxtype{environment}%
}
\CheckCommand*\SpecialMainMacroIndex[1]{%
  \SpecialMainIndex{#1}\nobreak%
  \DoNotIndex{#1}%
}
\apptocmd{\SpecialMainMacroIndex}{%
  \hypersourcedef{\filesep\number\c@CodelineNo}%
}{}{\tud@patch@wrn{SpecialMainMacroIndex}}
%    \end{macrocode}
% \end{macro}^^A \SpecialMainMacroIndex
% \end{macro}^^A \SetEnvIndexName
% \end{macro}^^A \SetMacroIndexName
% Nachdem nun die Anpassungen für die Änderungsliste erfolgt sind, können nun 
% die für die Dokumentatiton notwendigen Umgebungen erstellt werden.
% \ToDo{Parameter besser im Index darstellen}[v2.06]
%    \begin{macrocode}
\doxitem[idxtype=Umgebung]{Env}{environment}{Umgebungen}
\doxitem[idxtype=Option]{Option}{option}{Optionen}
\doxitem[idxtype=Parameter]{Parameter}{parameter}{Parameter}
\doxitem[idxtype=Seitenstil]{PageStyle}{pagestyle}{Seitenstile}
\doxitem[idxtype=Layer]{Layer}{layer}{Layer (Seitenstilebenen)}
\doxitem[macrolike,idxtype=L\noexpand\"ange]{Length}{length}{L\noexpand\"angen}
\doxitem[idxtype=Z\noexpand\"ahler]{Counter}{counter}{Z\noexpand\"ahler}
\doxitem[idxtype=Farbe]{Color}{color}{Farben}
\doxitem[macrolike,idxtype=Lok.]{Locale}{locale}{Lokalisierungsvariablen}
\doxitem[macrolike,idxtype=Feld]{Field}{field}{Eingabefelder}
\doxitem[idxtype=Schriftelement]{Font}{KOMAfont}{Schriftelemente}
%    \end{macrocode}
% \begin{macro}{\tud@write@replace}
% \changes{v2.05}{2016/04/21}{neu}^^A
% \begin{macro}{\tud@read@replace}
% \changes{v2.05}{2016/04/21}{neu}^^A
% \begin{macro}{\tud@line@replace}
% \changes{v2.05}{2016/04/21}{neu}^^A
% \begin{macro}{\actualchar}
% \begin{macro}{\quotechar}
% \begin{macro}{\levelchar}
% Damit die erzeugten Dateien für Index und Änderungsliste von \app{texindy} 
% verarbeitet werden können, müssen einige Steuerzeichen in der originalen 
% \val{.ind}-Datei getauscht werden. Dafür wird diese zeilenweise eingelesen, 
% die fraglichen Zeichen ersetzt und in eine weitere Hilfsdatei geschrieben.
%    \begin{macrocode}
\ifdefined\tudxdyflag
  \newcommand*\tud@write@replace{}
  \newwrite\tud@write@replace
  \newcommand*\tud@read@replace{}
  \newread\tud@read@replace
%    \end{macrocode}
% Die Makros für die fraglichen Steuerzeichen werden so angepasst, dass die
% Wahrscheinlichkeit für eine Verwendung dieser Kombination in einem Makro- 
% oder Umgebungsnamen sehr gering ist. Anschließend werden die erzeugten 
% Hilfsdateien für Index und Änderungsliste für \app{texindy} angepasst. Dabei 
% werden diese automatisch erzeugt, falls dies möglich ist.
%    \begin{macrocode}
  \def\actualchar{<&1&>}
  \def\quotechar{<&2&>}
  \def\levelchar{<&3&>}
  \begingroup
    \endlinechar=-1\relax%
    \def\tud@reserved#1#2{%
      \immediate\openin\tud@read@replace=\jobname.#1\relax%
      \immediate\openout\tud@write@replace=\jobname-xdy.#1\relax%
      \@tempswafalse%
      \loop\unless\ifeof\tud@read@replace%
        \readline\tud@read@replace to\tud@line@replace%
        \tud@replace\tud@line@replace{"}{""}%
        \tud@replace\tud@line@replace{!}{"!}%
        \tud@replace\tud@line@replace{:}{":}%
        \tud@replace\tud@line@replace{@}{"@}%
        \tud@replace\tud@line@replace{\"@}{"\@backslashchar"@}%
        \expandafter\tud@replace\expandafter\tud@line@replace%
          \expandafter{\actualchar}{@}%
        \expandafter\tud@replace\expandafter\tud@line@replace%
          \expandafter{\quotechar}{"}%
        \expandafter\tud@replace\expandafter\tud@line@replace%
          \expandafter{\levelchar}{!}%
        \tud@replace\tud@line@replace{" @}{}%
        \ifeof\tud@read@replace\else%
          \immediate\write\tud@write@replace{%
            \unexpanded\expandafter{\tud@line@replace}%
          }%
          \@tempswatrue%
        \fi%
      \repeat%
      \immediate\closein\tud@read@replace%
      \immediate\closeout\tud@write@replace%
      \ifnum\pdfshellescape=\@ne\relax%
        \if@tempswa%
          \immediate\write18{%
            texindy\space%
              -o \jobname.#2\space%
              -M \@currname-#2.xdy\space%
              -L german-din\space%
              -t \jobname-#2.xlg\space%
            \jobname-xdy.#1
          }%
%    \end{macrocode}
% Falls nichts geschrieben wurde, wird eine leere Ausgabedatei erzeugt.
%    \begin{macrocode}
        \else%
          \immediate\openout\tud@write@replace=\jobname.#2\relax%
          \immediate\closeout\tud@write@replace%
        \fi%
      \fi%
    }%
    \tud@reserved{idx}{ind}%
    \tud@reserved{glo}{gls}%
  \endgroup
%    \end{macrocode}
% Sollte \app{texindy} nicht aktiv sein, werden Index und Änderungsliste mit 
% \app{makeindex} automatisch erzeugt.
%    \begin{macrocode}
\else
  \ifnum\pdfshellescape=\@ne\relax%
    \immediate\write18{makeindex -s gglo.ist -o \jobname.gls \jobname.glo}%
    \immediate\write18{makeindex -s gind.ist -o \jobname.ind \jobname.idx}%
  \fi%
\fi
%    \end{macrocode}
% Jetzt werden noch die Einleitungen für Index und Änderungsliste angepasst.
%    \begin{macrocode}
\IndexPrologue{%
  \addsec{Index}%
  Unterstrichene Zahlen, die gegebenenfalls mit einem Hyperlink versehen sind, 
  verweisen auf die \ifcodeline@index Codezeile der \fi Definition, alle 
  weiteren sind \ifcodeline@index Zeilennummern\else Seitenzahlen\fi, wo der 
  jeweilige Eintrag verwendet wird.
}
\GlossaryPrologue{\addsec{\"Anderungsliste}}
%    \end{macrocode}
% \end{macro}^^A \levelchar
% \end{macro}^^A \quotechar
% \end{macro}^^A \actualchar
% \end{macro}^^A \tud@line@replace
% \end{macro}^^A \tud@read@replace
% \end{macro}^^A \tud@write@replace
% \begin{macro}{\PrintToDos}
% \changes{v2.05}{2016/05/19}{neu}^^A
% Für ToDo-Notizen wird am Ende eine Liste aller offenen Punkte ausgegeben.
%    \begin{macrocode}
\DeclareNewTOC[%
  type=todo,%
  listname={Liste der noch zu erledigenden Punkte},%
  name=ToDo,%
  tocentryindent=\z@,%
  owner=\@currname,%
]{tdo}
\setuptoc{tdo}{totoc}
\newcommand*\PrintToDos{\ifdefined\tudfinalflag\else\listoftodos\fi}
%    \end{macrocode}
% Damit die Liste der ToDo-Notizen bei der Erzeugung der gesamten Dokumentation 
% des Quelltextes einamlig sowie vollständig und nicht nach jeder Quelldatei 
% einzeln ausgegeben wird, muss der Befehl \cs{@docinclude} angepasst werden.
%    \begin{macrocode}
\patchcmd{\@docinclude}{%
  \let\@ltxdoc@PrintIndex\PrintIndex
  \let\PrintIndex\relax
  \let\@ltxdoc@PrintChanges\PrintChanges
  \let\PrintChanges\relax
}{%
  \let\@ltxdoc@PrintIndex\PrintIndex
  \let\PrintIndex\relax
  \let\@ltxdoc@PrintChanges\PrintChanges
  \let\PrintChanges\relax
  \let\@ltxdoc@PrintToDos\PrintToDos
  \let\PrintToDos\relax
}{}{\tud@patch@wrn{@docinclude}}
\patchcmd{\@docinclude}{%
  \let\PrintIndex\@ltxdoc@PrintIndex
  \let\PrintChanges\@ltxdoc@PrintChanges
}{%
  \let\PrintIndex\@ltxdoc@PrintIndex
  \let\PrintChanges\@ltxdoc@PrintChanges
  \let\PrintToDos\@ltxdoc@PrintToDos
}{}{\tud@patch@wrn{@docinclude}}
%    \end{macrocode}
% \end{macro}^^A \PrintToDos
% \begin{macro}{\ToDo}
% \changes{v2.02}{2014/07/25}{neu}^^A
% \begin{macro}{\@ToDo}
% \changes{v2.02}{2014/07/25}{neu}^^A
% Die Befehle für die ToDo-Notizen. Um in der gleichen Nomenklatur wie beim
% Handbuch bleiben zu können, wird die Randnotizmarke als optionales Argument
% hinter dem eigentlichen Text angegeben.
%    \begin{macrocode}
\newcommand*\ToDo[2][]{%
  \kernel@ifnextchar[{\@ToDo{#2}}{\@ToDo{#2}[]}%
}
\newcommand*\@ToDo{}
\def\@ToDo#1[#2]{%
  \ifdefined\tudfinalflag\else%
    \begingroup%
      \csuse{phantomsection}%
      \def\tud@reserved{\ifxblank{#2}{ToDo: ??}{ToDo: #2}}%
      \endgraf%
      \hfuzz0.8pt%
      \leavevmode\marginpar{\raggedleft\fbox{\tud@reserved\strut}}%
      \fbox{\parbox{\dimexpr\textwidth-2\fboxsep\relax}{#1\strut}}%
      \endgraf%
      \global\advance\c@CodelineNo\@ne
      \addxcontentsline{tdo}{todo}{#2:~#1~(\filesep\number\c@CodelineNo)}%
      \global\advance\c@CodelineNo\m@ne
    \endgroup%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \@ToDo
% \end{macro}^^A \ToDo
% Zum Schluss erfolgen einige Anpassungen mit \cs{AtBeginDocument}, um abhängig 
% vom Ladezustand einiger Pakete reagieren zu können.
%    \begin{macrocode}
\AtBeginDocument{%
%    \end{macrocode}
% \begin{macro}{\newrobustcmd}
% Sollte \pkg{etoolbox} nicht geladen sein, wird der Befehl \cs{newrobustcmd} 
% definiert, welcher anschließend für die Markup-Befehle genutzt wird.
%    \begin{macrocode}
  \@ifpackageloaded{etoolbox}{}{%
    \providecommand*\newrobustcmd{\DeclareRobustCommand}%
  }%
%    \end{macrocode}
% \end{macro}^^A \newrobustcmd
% \begin{macro}{\app}
% \begin{macro}{\cls}
% \begin{macro}{\pkg}
% \begin{macro}{\opt}
% \begin{macro}{\val}
% \begin{macro}{\pgs}
% \begin{macro}{\env}
% \begin{macro}{\file}
% Zusätzliche Auszeichnungsbefehle.
%    \begin{macrocode}
  \newrobustcmd*\app[1]{\mbox{\textsl{\textbf{#1}}}}
  \newrobustcmd*\cls[1]{\mbox{\textsf{\textbf{#1}}}}
  \newrobustcmd*\pkg[1]{\mbox{\textsf{\textbf{#1}}}}
  \newrobustcmd*\opt[1]{\mbox{\texttt{#1}}}
  \newrobustcmd*\val[1]{\mbox{\texttt{#1}}}
  \newrobustcmd*\pgs[1]{\mbox{\texttt{#1}}}
  \newrobustcmd*\env[1]{\mbox{\texttt{#1}}}
  \newrobustcmd*\file[1]{\mbox{\texttt{#1}}}
%    \end{macrocode}
% \end{macro}^^A \file
% \end{macro}^^A \env
% \end{macro}^^A \pgs
% \end{macro}^^A \val
% \end{macro}^^A \opt
% \end{macro}^^A \pkg
% \end{macro}^^A \cls
% \end{macro}^^A \app
% \begin{macro}{\hypersetup}
% \begin{macro}{\phantomsection}
% \begin{macro}{\texorpdfstring}
% Etwas Kleinkram für \pkg{hyperref}\dots
%    \begin{macrocode}
  \@ifpackageloaded{hyperref}{%
    \pdfstringdefDisableCommands{%
      \def\TUDScript{TUD-Script}%
      \let\cls\@firstofone%
      \let\pkg\@firstofone%
    }%
  }{%
    \RequirePackage{url}[2013/09/16]%
    \providecommand*\hypersetup[1]{}%
    \providecommand*\phantomsection{}%
    \providecommand*\texorpdfstring[2]{#1}%
  }%
%    \end{macrocode}
% \end{macro}^^A \texorpdfstring
% \end{macro}^^A \phantomsection
% \end{macro}^^A \hypersetup
% \begin{macro}{\selectlanguage}
% \begin{macro}{\glqq}
% \begin{macro}{\grqq}
% \dots sowie \pkg{babel}\dots
%    \begin{macrocode}
  \@ifpackageloaded{babel}{}{%
    \ClassWarning{\TUD@Class@Name}{Package `babel' not loaded}%
    \let\selectlanguage\@gobble%
    \let\glqq\relax%
    \let\grqq\relax%
  }%
%    \end{macrocode}
% \end{macro}^^A \grqq
% \end{macro}^^A \glqq
% \end{macro}^^A \selectlanguage
% \begin{macro}{\enquote}
% \dots und \pkg{csquotes}.
%    \begin{macrocode}
  \@ifpackageloaded{csquotes}{}{%
    \ClassWarning{\TUD@Class@Name}{Package `csquotes' not loaded}%
    \providecommand\enquote[1]{\glqq#1\grqq{}}%
  }%
%    \end{macrocode}
% \end{macro}^^A \enquote
% Sollte das Paket \pkg{tudscrfonts} geladen worden sein, so wird die Stärke 
% der Schriften für die Quelltextausgabe etwas erhöht, um die Lesbarkeit zu 
% verbessern.
%    \begin{macrocode}
  \@ifpackageloaded{tudscrfonts}{%
    \RequirePackage{mweights}[2013/07/21]%
    \ifnum\tud@cdfont@num>\z@\relax% true/heavy
      \def\mddefault{m}%
      \def\mdseries@tt{m}%
      \renewcommand*\@pnumwidth{1.7em}%
      \renewcommand*\@tocrmarg{2.7em}%
    \fi%
    \setlength\columnsep{10pt}%
%    \end{macrocode}
% Andernfalls wird das Paket \pkg{lmodern} geladen und die fehlenden Befehle 
% zur Schriftauswahl rudimentär definiert.
%    \begin{macrocode}
  }{%
    \RequirePackage{lmodern}[2009/10/30]%
    \providecommand*\ifdin[2]{#2}%
    \providecommand*\textuln[1]{\textsf{#1}}%
    \providecommand*\texturn[1]{\textuln{#1}}%
    \providecommand*\textubn[1]{\textbf{\textuln{#1}}}%
    \providecommand*\textuxn[1]{\textubn{#1}}%
    \providecommand*\textuls[1]{\textsl{\textuln{#1}}}%
    \providecommand*\texturs[1]{\textuls{#1}}%
    \providecommand*\textubs[1]{\textbf{\textuls{#1}}}%
    \providecommand*\textuxs[1]{\textubs{#1}}%
    \providecommand*\textdbn[1]{\textubn{#1}}%
  }%
%    \end{macrocode}
% Und ganz zum Schluss noch die Titelei.
%    \begin{macrocode}
  \title{%
    \file{\filename}\thanks{%
      Dies ist Version \fileversion\nobreakspace{}von Datei \file{\filename}.%
    }%
  }%
  \author{Falk Hanisch\thanks{\tudscrmail}}%
  \date{\filedate}%
}
%    \end{macrocode}
%
% \iffalse
%</class>
% \fi
%
% \Finale
%
\endinput
