From 4f902263451a27826c05b01add75eba8ad70bcbb Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Mon, 22 Dec 2014 23:40:36 +0000
Subject: tudscr has fallback for free fonts, so fine, restore

git-svn-id: svn://tug.org/texlive/trunk@35882 c570f23f-e606-0410-a88d-b1316a301751
---
 .../source/latex/tudscr/tudscr-manual.dtx          | 3361 ++++++++++++++++++++
 1 file changed, 3361 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx

(limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx')

diff --git a/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx b/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
new file mode 100644
index 00000000000..392573d872d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
@@ -0,0 +1,3361 @@
+% \CheckSum{2611}
+% \iffalse meta-comment
+% ======================================================================
+%
+% Das Corporate Design der TU Dresden auf Basis der KOMA-Script-Klassen
+%
+% ======================================================================
+% 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
+% version 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,
+% Version 1.3c, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+%     http://www.latex-project.org/lppl.txt
+% und Version 1.3c ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
+% (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-manual.dtx
+%<*driver>
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\ProvidesFile{tudscr-manual.dtx}[%
+  2014/12/17 v2.02 TUD-KOMA-Script\space%
+%</driver>
+%<identify>\NeedsTeXFormat{LaTeX2e}[2011/06/27]
+%<class&identify>\ProvidesClass{tudscrman}[%
+%<package&identify>\ProvidesPackage{tudscrman}[%
+%<*driver|(class|package)&identify>
+%!TUDVersion
+%<class>  class (internal manual)%
+%<package>  package (internal tutorials)%
+]
+%</driver|(class|package)&identify>
+%<*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-manual.dtx}
+\begin{document}
+  \maketitle
+  \DocInput{\filename}
+\end{document}
+%</driver>
+% \fi
+%
+% \selectlanguage{ngerman}
+%
+% \changes{v2.02}{2014/11/18}{Index für Tutorials möglich}%^^A
+% \changes{v2.02}{2014/12/17}{xindy-Stildatei wird zur Laufzeit erzeugt}%^^A
+%
+% \section{Klasse und Paket für die Anwenderdokumentation von \TUDScript}
+%
+% Es werden die Klasse \cls{tudscrman} für das \TUDScript-Handuch sowie das 
+% Paket \pkg{tudscrman} für das Setzen von einigen Anwenderleitfäden bzw.
+% Tutorials erzeugt. Da es zwischen der Klasse und dem Paket es eine große
+% Menge an Überschneidungen gibt, basieren diese auf der gleichen Quelldatei.
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \iffalse
+%<*body>
+% \fi
+%
+% \subsection{Benötigte Pakete für die Anwenderdokumentation}
+%
+% Basis für das Handbuch ist die Klasse \cls{tudscrreprt}. An diese werden alle 
+% Klassenoptionen weitergereicht. Sie wird für das Setzen des Anwenderhandbuchs
+% genutzt. Zusätzlich wird das Paket \pkg{tudscrman} erstellt, um an das 
+% Handbuch angelehnte Tutorials in einem Unterordner zu erstellen. Sowohl für 
+% die Klasse als auch das Paket werden einige Pakete geladen.
+%
+% Das Paket \pkg{xparse} erlaubt eine sehr freie Deklaration von Makros mit
+% nahezu beliebig arrangierbaren (optionalen) Argumenten.
+%    \begin{macrocode}
+\RequirePackage{xparse}[2013/12/31]
+%    \end{macrocode}
+% Für den Fließtext werden Pfeile u.\,ä. durch \pkg{textcomp} bereitgestellt.
+%    \begin{macrocode}
+\RequirePackage{textcomp}[2005/09/27]
+%    \end{macrocode}
+% Verbesserungen am \LaTeX-Kernel.
+%    \begin{macrocode}
+\RequirePackage{fixltx2e}[2014/06/10]
+%    \end{macrocode}
+% Vergrößerung des Durchschusses.
+%    \begin{macrocode}
+\RequirePackage{setspace}[2011/12/19]
+\setstretch{1.1}\recalctypearea
+%    \end{macrocode}
+% Sprachunterstützung.
+%    \begin{macrocode}
+\RequirePackage{babel}[2014/03/24]
+%    \end{macrocode}
+% Sprachabhängiges Setzen von Anführungszeichen.
+%    \begin{macrocode}
+\AfterPackage*{inputenc}{\RequirePackage{csquotes}[2011/10/22]}
+\AtBeginDocument{%
+  \@ifpackageloaded{csquotes}{}{%
+    \ClassWarning{\tudcls@name}{Package `csquotes' not loaded}%
+    \providecommand\enquote[1]{\glqg#1\grqq{}}%
+  }%
+}
+%    \end{macrocode}
+% Das Paket \pkg{microtype} wird für den optischen Randausgleich verwendet.
+%    \begin{macrocode}
+\RequirePackage[babel]{microtype}[2013/05/23]
+%    \end{macrocode}
+% Verbesserte Zitate.
+%    \begin{macrocode}
+\RequirePackage{quoting}[2014/01/28]
+%    \end{macrocode}
+% Automatisierte Datumsformatierung.
+%    \begin{macrocode}
+\RequirePackage{isodate}[2010/01/03]
+%    \end{macrocode}
+% Verschiedenste Symbole aus dem \LaTeX-Universum.
+%    \begin{macrocode}
+\RequirePackage{hologo}[2012/04/26]
+%    \end{macrocode}
+% Das Paket \pkg{marginnote} stellt nicht fließenden Randnotizen bereit.
+%    \begin{macrocode}
+\RequirePackage{marginnote}[2012/03/29]
+%    \end{macrocode}
+% Sowohl im Handbuch als auch in den Tutroials werden Quelltextauszüge für das 
+% bessere Verständnis des Anwenders angegeben. Um diese darzustellen wird das 
+% Paket \pkg{listings} verwendet.
+%    \begin{macrocode}
+\RequirePackage{listings}[2014/03/04]
+\lstdefinestyle{tudscr}{%
+  basicstyle=\ttfamily\setstretch{1},%
+  keywordstyle=,%
+  columns=fullflexible,keepspaces,%
+  aboveskip=.5\baselineskipglue,%
+  belowskip=.5\baselineskipglue,%
+  language=[LaTeX]TeX,%
+  texcl,%
+}
+%    \end{macrocode}
+% Mit dem Paket \pkg{silence} lassen sich ungewollte bzw. lästige Warnungen
+% deaktivieren.
+%    \begin{macrocode}
+\RequirePackage{silence}[2012/07/02]
+%    \end{macrocode}
+% Das Pakete wird genutzt, um externer Dateien nur zu kompilieren, wenn dies 
+% aufgrund einer Änderung auch notwendig ist.
+%    \begin{macrocode}
+\RequirePackage{filemod}[2011/09/19]
+%    \end{macrocode}
+% Sollte \pkg{auto-pst-pdf} aktiv sein, so wird das Laden von \pkg{todonotes}
+% unterdrückt, da dieses wiederum das Paket \pkg{tikz} lädt, was zu Problem bei 
+% der automatisierten Erstellung von \env{pstricks}"=Grafiken führt.
+%    \begin{macrocode}
+\RequirePackage{ifpdf}[2011/01/30]
+\ifpdf
+  \PassOptionsToPackage{colorinlistoftodos,obeyFinal,color=HKS92!10}{todonotes}
+  \RequirePackage{todonotes}[2012/07/25]
+\else
+  \TUDoptions{ToDo=false}
+\fi
+%    \end{macrocode}
+% Um die \cs{write18} sowohl für Windows als auch für unixoide Betriebssysteme 
+% nutzen zu können, wird das Paket \pkg{ifplatform} geladen. Damit dieses nicht 
+% allzu lästig ist, wird mithilfe von \pkg{silence} die normalerweise erzeugte 
+% Warnung der nicht aktivierten Option \opt{shell escape} deaktiviert.
+%    \begin{macrocode}
+\WarningFilter*{ifplatform}{^^J \space\space\space shell escape is disabled}
+\RequirePackage{ifplatform}[2010/10/22]
+%    \end{macrocode}
+% Das Paket \pkg{hyperref} wird für alle möglichen Links und Querverweise 
+% geladen.
+%    \begin{macrocode}
+\PassOptionsToPackage{hyperindex=false}{hyperref}
+\AtEndPreamble{%
+  \RequirePackage{hyperref}[2012/11/06]
+  \hypersetup{colorlinks,linkcolor=blue}
+%    \end{macrocode}
+% Es folgen einige Befehle, die an das Paket \pkg{hyperref} gekoppelt sind.
+% \begin{macro}{\Email}
+% Hyperlink für die Angabe einer E-Mail-Adresse.
+%    \begin{macrocode}
+  \newcommand*\Email[1]{\href{mailto:#1}{\nolinkurl{#1}}}
+%    \end{macrocode}
+% \end{macro}^^A \Email
+% Die Bezeichner für die Abschnittsebenen werden umbenannt.
+%    \begin{macrocode}
+  \renewcaptionname{ngerman}{\sectionautorefname}{Unterkapitel}
+  \renewcaptionname{ngerman}{\subsectionautorefname}{Abschnitt}
+  \renewcaptionname{ngerman}{\subsubsectionautorefname}{Unterabschnitt}
+%    \end{macrocode}
+% \begin{macro}{\autorefname}
+% \begin{macro}{\@autorefname}
+% \begin{macro}{\@@autorefname}
+% Der Befehl \cs{autorefname} dient dazu, den Verweistyp beziehungsweise den 
+% Bezeichner des aktuellen oder optional zu einem speziellen Label ohne die 
+% dazugehörige Nummerierung zu erhalten. Auf der Seite LaTeX Stack Exchange%
+%\footnote{\url{http://tex.stackexchange.com/q/33776/}} wurde das Prinzip 
+% vorgestellt und hier übernommen.
+%    \begin{macrocode}
+  \newcommand*\autorefname[1][current]{%
+    \ifstr{#1}{current}{%
+      \expandafter\HyPsd@@autorefname\@currentHref\@nil%
+    }{%
+      \@autorefname\HyPsd@@autorefname{#1}%
+    }%
+    \unskip\xspace%
+  }
+  \newcommand*\@autorefname[2]{%
+    \expandafter\ifx\csname r@#2\endcsname\relax%
+      ??%
+    \else%
+      \expandafter\expandafter\expandafter\@@autorefname%
+          \csname r@#2\endcsname{}{}{}{}\@nil#1\@nil%
+    \fi%
+  }
+  \newcommand*\@@autorefname{}
+  \def\@@autorefname#1#2#3#4#5\@nil#6\@nil{#6#4.\@nil}
+%    \end{macrocode}
+% \end{macro}^^A \@@autorefname
+% \end{macro}^^A \@autorefname
+% \end{macro}^^A \autorefname
+% \begin{macro}{\manualhyperdef}
+% \changes{v2.02}{2014/10/27}{neu}%^^A
+% \begin{macro}{\manualhyperref}
+% \changes{v2.02}{2014/10/27}{neu}%^^A
+% Diese beiden Befehle dienen zum Defnieren von Textankern im Handbuch und zum
+% Referenzieren auf diese. Bei der Erstelung des Ankers mit \cs{manualhyperdef} 
+% wird zusätzlich auch noch ein Label (\cs{label}) erzeugt. Die Sternversion 
+% des Befehls unterdrückt dies. Der Anker wird mit \cs{Hy@raisedlink}~-- wie es 
+% auch bei normalen \pkg{hyperref}-Labels geschieht~-- über die Grundlinie
+% gehoben. Die Version mit Apostroph kann nach Überschriften verwendet werden 
+% und verschiebt die vertikale Position des Ankers noch weiter nach oben.
+%    \begin{macrocode}
+%<*class>
+  \NewDocumentCommand\manualhyperdef{st'm}{%
+    \IfBooleanTF{#2}{%
+      \raisebox{4\baselineskip}[0pt][0pt]{\hyperdef{\jobname}{#3}{}}%
+      \par\nobreak\vskip\dimexpr-\parskip-\baselineskip%
+      \@afterindentfalse\@afterheading%
+    }{%
+      \Hy@raisedlink{\hyperdef{\jobname}{#3}{}}%
+      \ignorespaces%
+    }%
+    \IfBooleanF{#1}{\label{#3}}%
+  }
+  \newcommand*\manualhyperref[2]{\hyperref{}{\jobname}{#1}{#2}}
+%</class>
+%    \end{macrocode}
+% Aus einem Tutorial erfolgen alle Querverweise mit \cs{manualhyperref} auf das 
+% Anwenderhandbuch \enquote{tudscr}.
+%    \begin{macrocode}
+%<*package>
+  \newcommand*\manualhyperref[2]{\hyperref{../tudscr}{tudscr}{#1}{#2}}
+%</package>
+%    \end{macrocode}
+% \end{macro}^^A \manualhyperref
+% \end{macro}^^A \manualhyperdef
+% Damit sind die Ausführungen für das Paket \pkg{hyperref} \emph{fast} beendet. 
+% Etwas später wird noch der Befehl \cs{pdfexpandableoutline} definiert.
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+% Für die Erstellung des Indexes wird das Paket \pkg{imakeidx} zusammen mit 
+% \pkg{xindy} verwendet. Zuerst ein paar kleinere Einstellungen für das Layout.
+%    \begin{macrocode}
+\PassOptionsToPackage{xindy,splitindex}{imakeidx}
+\RequirePackage{imakeidx}[2013/07/11]%
+\indexsetup{%
+%<*class>
+  level=\addsec,%
+%</class>
+%<*package>
+  level=\subsection*,%
+%</package>
+  noclearpage,firstpagestyle=headings,headers={\indexname}{\indexname}%
+}
+\newcommand*\xdyopt{-M tudscrman-temp.xdy -L german-din}
+%    \end{macrocode}
+% \begin{macro}{\tud@write@i}
+% \changes{v2.02}{2014/10/22}{neu}%^^A
+% \begin{macro}{\tud@write@ii}
+% \changes{v2.02}{2014/11/02}{neu}%^^A
+% \begin{macro}{\tud@read}
+% \changes{v2.02}{2014/08/19}{neu}%^^A
+% Für die Erstellung der Indizes wird zum Sortieren das Programm \pkg{xindy} 
+% genutzt. Für dieses wird eine eigene Stildatei verwendet, welche zur Laufzeit 
+% erzeugt wofür zuerst ein Ausgabestream reserviert wird.
+%    \begin{macrocode}
+\newcommand*\tud@write@i{}
+\newwrite\tud@write@i
+%    \end{macrocode}
+% Für die Tutorials werden später zusätzlich noch ein weiterer Ausgabe- sowie 
+% ein Eingabestream benötigt, die hier gleich mit initilaisiert werden.
+%    \begin{macrocode}
+%<*package>
+\newcommand*\tud@write@ii{}
+\newwrite\tud@write@ii
+\newcommand*\tud@read{}
+\newread\tud@read
+%</package>
+%    \end{macrocode}
+% \end{macro}^^A \tud@read
+% \end{macro}^^A \tud@write@ii
+% \end{macro}^^A \tud@write@i
+% Nachfolgend wird die zu erstellenden \pkg{xindy}-Stildatei kurz beschrieben.
+%    \begin{macrocode}
+\openout\tud@write@i=tudscrman-temp.xdy
+%    \end{macrocode}
+% Als erstes wird Standard-\LaTeX-Modul geladen.
+%    \begin{macrocode}
+\write\tud@write@i{(require "texindy.xdy")}
+%    \end{macrocode}
+% Leider lässt sich für Seitenzahlbereiche via \val{:attr} (noch) kein Markup 
+% für angehängte \enquote{f.} sowie \enquote{ff.} einstellen. Diese würden 
+% deshalb bei kursiven oder fetten Seitenzahlen trotzdem in normaler Schrift
+% erscheinen, weshalb auf die Auszeichnung folgender Seiten verzichtet wird.
+%    \begin{macrocode}
+%\write\tud@write@i{(require "ff-ranges.xdy")}
+%    \end{macrocode}
+% Seitenbereiche werden sofort zusammengefasst, wobei als Trennzeichen ein
+% Halbgeviertstrich verwendet wird.
+%    \begin{macrocode}
+\write\tud@write@i{%
+(define-location-class^^J%
+\space\space "arabic-page-numbers" ("arabic-numbers") :min-range-length 1^^J%
+)%
+}
+\write\tud@write@i{(markup-range :sep "--")}
+%    \end{macrocode}
+% Alle Argumente in eckigen Klammern werden ignoriert. Dies wird bei einigen
+% Indexbefehlen genutzt, um die nicht beachteten RegExp-Regeln auszugleichen, 
+% siehe den nächsten Absatz.
+%    \begin{macrocode}
+\write\tud@write@i{(merge-rule "\[(.*)\]" "" :eregexp)}
+%    \end{macrocode}
+% Innerhalb ausgewählter Auszeichnungs- und Textbefehle sollten die Befehle
+% selbst, nicht jedoch die Argumente verworfen werden. Leider werden die 
+% manuell erstellten RegExp-Regeln durch \texttt{texindy} zu spät genutzt 
+% (\url{http://sourceforge.net/p/xindy/bugs/22/}).
+%    \begin{macrocode}
+%\write\tud@write@i{(merge-rule "\\hyperindex\{(.*)\}\{(.*)\}" "/2" :eregexp)}
+%\write\tud@write@i{(merge-rule "\\hologo\{(.*)\}" "/1" :eregexp)}
+%\write\tud@write@i{(merge-rule "\\texttt\{(.*)\}" "/1" :eregexp)}
+%\write\tud@write@i{(merge-rule "\\textsbn\{(.*)\}" "/1" :eregexp)}
+%\write\tud@write@i{(merge-rule "\\textsbs\{(.*)\}" "/1" :eregexp)}
+%    \end{macrocode}
+% Es werden die Attribute \emph{declare} mit der Abkürzung \emph{!} sowie
+% \emph{important} mit der Abkürzung \emph{?} und \emph{default} definiert, 
+% welche hierarchisch gleichgestellt sind.
+%    \begin{macrocode}
+\write\tud@write@i{%
+  (define-attributes (("declare" "!" "important" "?" "default")))%
+}
+%    \end{macrocode}
+% Eine Alternative wäre, diese in der Hierarchie zu unterscheiden, allerdings
+% war eine Bildung von zufriedenstellenden Seitenbereichen dabei nicht möglich
+% und wurde deshalb verworfen.
+%    \begin{macrocode}
+%\write\tud@write@i{(markup-attribute-group-list :sep ", ")}
+%\write\tud@write@i{%
+%\space\space(define-attributes (("declare" "!") ("important" "?")("default")))%
+%}
+%    \end{macrocode}
+% Einträge, die als wichtig deklariert wurden, können auch für normale zur 
+% Bereichsbildung verwendet werden.
+%    \begin{macrocode}
+\write\tud@write@i{(merge-to "important" "default")}
+\write\tud@write@i{(merge-to "?" "default")}
+%    \end{macrocode}
+% Hier erfolgt die Definition der Auszeichnugen der Attribute. Deklarationen 
+% werden fett gedruckt, wichtige Einträge erscheinen kursiv. Außerdem wird ein
+% entsprechnder Link auf die Seite eingefügt.
+%    \begin{macrocode}
+\write\tud@write@i{%
+(markup-locref^^J%
+\space\space :open "\string\textbf{\string\hyperpage{"^^J%
+\space\space :close "}}"^^J%
+\space\space :attr "declare"^^J%
+)%
+}
+\write\tud@write@i{%
+(markup-locref^^J%
+\space\space :open "\string\textbf{\string\hyperpage{"^^J%
+\space\space :close "}}"^^J%
+\space\space :attr "!"^^J%
+)%
+}
+\write\tud@write@i{%
+(markup-locref^^J%
+\space\space :open "\string\textsl{\string\hyperpage{"^^J%
+\space\space :close "}}"^^J%
+\space\space :attr "important"^^J%
+)%
+}
+\write\tud@write@i{%
+(markup-locref^^J%
+\space\space :open "\string\textsl{\string\hyperpage{"^^J%
+\space\space :close "}}"^^J%
+\space\space :attr "?"^^J%
+)%
+}
+\write\tud@write@i{%
+(markup-locref^^J%
+\space\space :open "\string\hyperpage{"^^J%
+\space\space :close "}"^^J%
+\space\space :attr "default"^^J%
+)%
+}
+%    \end{macrocode}
+% Punkte zwischen Eintrag und Seitenzahl.
+%    \begin{macrocode}
+\write\tud@write@i{%
+  (markup-locclass-list :open "\string\,\string\dotfill\string\,")%
+}
+%    \end{macrocode}
+% Dieser Querverweistyp wird speziell im allgemeinen Index verwendet, um auf 
+% einen Spezialindex zu verweisen.
+%    \begin{macrocode}
+\write\tud@write@i{(define-crossref-class "seeidx")}
+\write\tud@write@i{%
+(markup-crossref-list^^J%
+\space\space :class "seeidx" :open "\string\seeidx{" :sep "; " :close "}{}"^^J%
+)%
+}
+%    \end{macrocode}
+% Damit ist die \pkg{xindy}-Stildatei fertig.
+%    \begin{macrocode}
+\closeout\tud@write@i
+%    \end{macrocode}
+% Nun können die einzelnen Indizes erstellt werden.
+%    \begin{macrocode}
+%<*class>
+\makeindex[title={Allgemeiner Index},options=\xdyopt]%
+%</class>
+\makeindex[title={Klassen- und Paketoptionen},name=options,options=\xdyopt]%
+\makeindex[%
+  title={Umgebungen, Befehle und Seitenstile},name=macros,options=\xdyopt%
+]%
+%<*class>
+\makeindex[title={Umgebungs- und Befehlsparameter},name=keys,options=\xdyopt]%
+\makeindex[title={Sprachabh\"angige Bezeichner},name=terms,options=\xdyopt]%
+\makeindex[title={Schriftelemente},name=fonts,options=\xdyopt]%
+\makeindex[title={Farben},name=colors,options=\xdyopt]%
+%</class>
+\makeindex[title={Klassen, Pakete und Dateien},name=files,options=\xdyopt]%
+%<*class>
+\makeindex[title={\"Anderungsliste},name=changelog,columns=1,options=\xdyopt]%
+%</class>
+%    \end{macrocode}
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \subsubsection{Pakete für die Klasse \cls{tudscrman}}
+%
+% Das Paket \pkg{enumitem} erlaubt das Beeinflussen der Standardlisten und die 
+% Ableitung neuer Listen aus diesen. mit \cs{setlist\{noitemsep\}} werden die 
+% zusätzlichen Zwischenräume innerhalb der Listen beseitigt.
+%    \begin{macrocode}
+\RequirePackage{enumitem}[2011/09/28]
+\setlist{noitemsep}
+%    \end{macrocode}
+% Das Paket \pkg{ellipsis} sorgt für korrekte Auslassungpunkte.
+%    \begin{macrocode}
+\AtBeginDocument{
+  \RequirePackage{ellipsis}[2004/9/28]
+  \let\ellipsispunctuation\relax
+}
+%    \end{macrocode}
+% Mit Hilfe von \pkg{tabularx} können Tabellen bestimmter Breite und
+% automatisch berechneten Spaltenbreiten gesetzt werden.
+%    \begin{macrocode}
+\RequirePackage{tabularx}[1999/01/07]
+%    \end{macrocode}
+% Mit \pkg{ragged2e} wird~-- falls benötigt~-- die Silbentrennung im 
+% Flattersatz aktiviert. 
+%    \begin{macrocode}
+\RequirePackage{ragged2e}[2009/05/21]
+%    \end{macrocode}
+% Die Fußnoten werden nicht mit jedem Kapitel zurückgesetzt.
+%    \begin{macrocode}
+\RequirePackage{chngcntr}[2009/09/02]
+\counterwithout{footnote}{chapter}
+%    \end{macrocode}
+% Das Paket wird für die Erstellung von Tabellen verwendet.
+%    \begin{macrocode}
+\RequirePackage{booktabs}[2005/04/14]
+%    \end{macrocode}
+% Verbesserte Referenzierungen auf Seiten.
+%    \begin{macrocode}
+\RequirePackage{varioref}[2011/10/02]%
+\renewcommand*\fullref[1]{\hyperref[#1]{\autoref*{#1} \vpageref{#1}}}
+%    \end{macrocode}
+% Erstellen von Grafiken.
+%    \begin{macrocode}
+\RequirePackage{tikz}[2013/12/13]
+%    \end{macrocode}
+% Einbinden von ganzseitigen PDF"~Dokumenten als Beispiel im Handbuch.
+%    \begin{macrocode}
+\RequirePackage{pdfpages}[2013/08/25]
+%    \end{macrocode}
+% Typographisch saubere Einheiten.
+%    \begin{macrocode}
+\RequirePackage{units}[1998/08/04]
+%    \end{macrocode}
+% Befehle für die Dokumentation des Pakets \pkg{tudscrsupervisor}.
+%    \begin{macrocode}
+\RequirePackage{tudscrsupervisor}[\TUDVersion]
+%    \end{macrocode}
+%
+% \iffalse
+%</class>
+%<*package>
+% \fi
+%
+% \subsubsection{Pakete für das Paket \pkg{tudscrman}}
+%
+% Mit dem Paket \pkg{scrwfile} lassen sich Probleme mit zu wenig verfügbaren 
+% Streams für das Schreiben externer Datein beheben. Hintergrund ist die
+% Verwendung des Paketes \pkg{glossaries} in einem der Tutorials, welches eine
+% Vielzahl solcher Streams benötigt. Das Paket \pkg{morewrites} hat keinen 
+% Einfluss auf \pkg{glossaries}.
+%    \begin{macrocode}
+\RequirePackage{scrwfile}[2013/08/05]
+%    \end{macrocode}
+% Die Umgebungen \env{Preamble}, \env{Trunk} und \env{Hint} sowie deren
+% Varianten nutzen das Paket \pkg{filecontents}, um ihren Inhalt in eine
+% temporäre Datei zu schreiben und diese direkt mit dem Paket \pkg{listings}
+% darzustellen sowie ggf. den Quelltext auszuführen. Beim Überschreiben einer
+% Datei wird für gewöhnlich eine Warnung erzeugt. Mit dem Paket \pkg{silence}
+% wird diese innerhalb der genannten Umgebungen deaktiviert.
+%    \begin{macrocode}
+\RequirePackage{filecontents}[2011/10/08]
+\WarningFilter[Tutorial]{latex}{Overwriting file}%
+%    \end{macrocode}
+%
+% \iffalse
+%</package>
+%</body>
+%<*option>
+% \fi
+%
+% \subsection{Optionen der Anwenderdokumentation}
+%
+% Hier werden die Optionen für Klasse und Paket definiert.
+%
+% \begin{option}{ToDo}
+% \changes{v2.02}{2014/07/10}{neu}%^^A
+% \begin{macro}{\if@tud@todo}
+% \changes{v2.02}{2014/07/10}{neu}%^^A
+% Diese Option ist verantwortlich für den Schalter \cs{if@tud@todo}. Über 
+% diesen wird gesteuert, ob ToDo-Notizen ausgegeben werden sollen.
+%    \begin{macrocode}
+\newif\if@tud@todo
+\@tud@todotrue
+\TUD@ifkey{ToDo}{@tud@todo}
+%    \end{macrocode}
+% \end{macro}^^A \if@tud@todo
+% \end{option}^^A ToDo
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% Es werden einige Optionen für das Handbuch standardmäßig aktiviert. Dazu 
+% werden diese an die entsprechende Elternklasse übergeben.
+%    \begin{macrocode}
+\PassOptionsToClass{%
+  cdfoot=true,%
+  chapterpage=true,%
+  chapterprefix=true,%
+  headings=optiontoheadandtoc,%
+  captions=tableheading,%
+  numbers=noenddot,%
+  color=true,%
+}{\tudinh@name}
+\PassOptionsToPackage{automark}{scrlayer-scrpage}
+%    \end{macrocode}
+% \begin{macro}{\tudfinalflag}
+% \begin{macro}{\tudprintflag}
+% Außerdem wird geprüft, ob durch einen externen pdf\LaTeX-Aufruf die Flags
+% \cs{tudfinalflag} und/oder \cs{tudprintflag} definiert wurde. In diesem Fall
+% werden Optionen zur finalen Ausgabe und/oder unbunten Druck aktiviert.
+%    \begin{macrocode}
+\DeclareOption{final}{\let\tudfinalflag\relax}
+\DeclareOption{print}{\let\tudprintflag\relax}
+\AtBeginDocument{%
+  \ifdef{\tudfinalflag}{\TUDoptions{ToDo=false}}{}%
+  \ifdef{\tudprintflag}{\hypersetup{hidelinks}\TUDoptions{color=no}}{}%
+}
+%    \end{macrocode}
+% \end{macro}^^A \tudprintflag
+% \end{macro}^^A \tudfinalflag
+%
+% \iffalse
+%</class>
+%<*package>
+% \fi
+%
+% Wird das Paket \pkg{tudscrman} geladen, werden zu Beginn des Dokumentes ein
+% paar Standardeinstellungen gemacht.
+%
+%    \begin{macrocode}
+\KOMAoptions{headings=small}
+\TUDoptions{cd=true,cdfoot=true}
+%    \end{macrocode}
+% Falls innerhalb eines Tutorials das Paket \pkg{pstricks} verwendet wird, muss
+% dafür Sorge getragen werden, dass die automatische Kompilierung reibungslos
+% mit \pkg{auto-pst-pdf} funktioniert.
+%    \begin{macrocode}
+\AfterPackage*{pstricks}{%
+  \ifnum\pdfshellescape=1\relax
+    \RequirePackage{auto-pst-pdf}[2009/04/26]
+  \else
+    \RequirePackage[off]{auto-pst-pdf}[2009/04/26]
+  \fi
+}
+%    \end{macrocode}
+%
+% \iffalse
+%</package>
+%</option>
+%<*body>
+% \fi
+%
+% \subsection{Gemeinsame Befehle und Umgebungen für Klasse und Paket}
+% 
+% Es folgen die Definitionen für Befehle und Umgebungen für Klasse und Paket, 
+% welche sich überschneidenden und für beide benötigt werden. Allerdings sind 
+% diese jedoch für Klasse und Paket in ihrer Implementierung teilweise sehr
+% unterschiedlich.
+%
+% \subsubsection{Auszeichnung von Variablen, Parametern etc.}
+%
+% \begin{macro}{\PName}
+% \begin{macro}{\PBoolean}
+% \begin{macro}{\PBName}
+% \changes{v2.02}{2014/11/12}{neu}%^^A
+% \begin{macro}{\PSet}
+% \begin{macro}{\Parameter}
+% \begin{macro}{\OParameter}
+% \begin{macro}{\LParameter}
+% \begin{macro}{\OLParameter}
+% \begin{macro}{\PValue}
+% \begin{macro}{\PParameter}
+% \begin{macro}{\POParameter}
+% Diese Befehle dienen zum Auszeichnen von obligatorischen und optionalen 
+% Parametern und Befehlen oder bestimmten Wertzuweisungen.
+%    \begin{macrocode}
+\newrobustcmd*\PName[1]{\mbox{\texttt{\textsl{<#1>}}}}
+\newrobustcmd*\PBoolean{\PName{Ein-Aus-Wert}}
+\newrobustcmd*\PBName[1]{\PBoolean|\PName{#1}}
+\newrobustcmd*\PSet{\PName{Einstellung}}
+\newrobustcmd*\Parameter[1]{\mbox{\texttt{\{}\PName{#1}\texttt{\}}}}
+\newrobustcmd*\OParameter[1]{\mbox{\texttt{[}\PName{#1}\texttt{]}}}
+\newrobustcmd*\LParameter{\mbox{\texttt{[}\PName{Parameterliste}\texttt{]}}}
+\newrobustcmd*\OLParameter[1]{%
+  \mbox{\texttt{[}\PName{#1}|\PName{Parameterliste}\texttt{]}}%
+}
+\newrobustcmd*\PValue[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\PParameter[1]{\mbox{\texttt{\{#1\}}}}
+\newrobustcmd*\POParameter[1]{\mbox{\texttt{[#1]}}}
+%    \end{macrocode}
+% \end{macro}^^A \POParameter
+% \end{macro}^^A \PParameter
+% \end{macro}^^A \PValue
+% \end{macro}^^A \OLParameter
+% \end{macro}^^A \LParameter
+% \end{macro}^^A \OParameter
+% \end{macro}^^A \Parameter
+% \end{macro}^^A \PSet
+% \end{macro}^^A \PBName
+% \end{macro}^^A \PBoolean
+% \end{macro}^^A \PName
+%
+% \subsubsection{Kompilieren von externen Dateien und Querverweise auf diese}
+%
+% \begin{macro}{\Tutorial}
+% \changes{v2.02}{2014/08/22}{neu}%^^A
+% \changes{v2.02}{2014/10/22}{Reimplementierung}%^^A
+% \begin{macro}{\hypertut}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% Die gegebenenfalls notwendige Kompilierung und die Referenzierung eines 
+% Tutorials aus dem Handbuch erfolgt mit \cs{Tutorial}. Außerdem erfolgt mit
+% \cs{hypertut} ein verlinkter Eintrag in den Index.
+%    \begin{macrocode}
+%<*class>
+\newrobustcmd*\hypertut[2]{%
+  \hyperref{tutorials/#1.pdf}{\jobname}{tutorials:#1}{\textsbn{#1.pdf}#2}%
+}
+\NewDocumentCommand\Tutorial{som}{%
+  \ifnum\pdfshellescape=1\relax%
+%    \end{macrocode}
+% Um mit den verschachtelten Aufrufen von pdf\LaTeX{} umgehen zu können, wird 
+% das ganze Prozedere in ein Skript ausgelagert. Somit können die Aufrufe von
+% pdf\LaTeX{} für die Tutorials im entsprechenden Ordner erfolgen.
+%    \begin{macrocode}
+    \filemodCmp{tutorials/#3.pdf}{tutorials/#3.tex}{}{%
+      \immediate\openout\tud@write@i=tutorials.sh%
+      \immediate\write\tud@write@i{%
+        cd tutorials^^J%
+        pdflatex -shell-escape #3^^J%
+        biber #3^^J%
+        makeglossaries #3^^J%
+        pdflatex #3^^J%
+        pdflatex #3%
+      }%
+      \immediate\closeout\tud@write@i%
+%    \end{macrocode}
+% Hier erfolgt die Unterscheidung der Befehle für die unterschiedlichen OS.
+%    \begin{macrocode}
+      \ifwindows%
+        \immediate\write18{rename tutorials.sh tutorials.bat}%
+        \immediate\write18{tutorials.bat}%
+        \immediate\write18{del tutorials.bat}%
+      \else%
+        \immediate\write18{bash tutorials.sh}%
+        \immediate\write18{rm tutorials.sh}%
+      \fi%
+    }%
+  \fi%
+%    \end{macrocode}
+% Hyperlink und Indexeintrag.
+%    \begin{macrocode}
+  \IfFileExists{tutorials/#3.pdf}{%
+    \hypertut{#3}{}%
+  }{%
+    \textsbn{#3.pdf}%
+    \tud@shellescape@wrn%
+  }%
+  \IfBooleanF{#1}{%
+    \index[files]{\hypertut{#3}{~{\idxfont(Tutorial)}\IfValueT{#2}{|#2}}}%
+  }%
+}
+%</class>
+%    \end{macrocode}
+% Der Befehl für die Querverweise innerhalb von Tutorials.
+%    \begin{macrocode}
+%<*package>
+\newcommand*\Tutorial[1]{\href{#1.pdf}{\textsbn{#1.pdf}}}
+%</package>
+%    \end{macrocode}
+% \end{macro}^^A \hypertut
+% \end{macro}^^A \Tutorial
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \begin{macro}{\IncludeExample}
+% \changes{v2.02}{2014/07/25}{Skalierung der eingefügten Seiten}%^^A
+% \changes{v2.02}{2014/10/14}{Reimplementierung}%^^A
+% Mit diesem Befehl wird eine \LaTeX-Datei ggf. übersetzt und anschließend als
+% PDF"~Datei wieder eingebunden. Zuvor wird der dazugehörige Quelltext mittels
+% \cs{lstinputlisting} im Dokument ausgegeben. Dieser Befehl wird lediglich für 
+% die Klasse \cls{tudscrman} benötigt.
+%    \begin{macrocode}
+\newcommand*\IncludeExample[1]{%
+  \lstinputlisting[style=tudscr]{examples/#1}%
+%    \end{macrocode}
+% Die Beispiele werden nur erneut kompiliert, wenn sich diese geändert haben 
+% oder noch gar kein entsprechendes PDF"~Dokument existiert.
+%    \begin{macrocode}
+  \ifnum\pdfshellescape=1\relax%
+    \filemodCmp{examples/#1.pdf}{examples/#1.tex}{}{%
+      \immediate\write18{%
+        pdflatex -shell-escape -output-directory examples examples/#1.tex
+        pdflatex -output-directory examples examples/#1.tex
+        pdflatex -output-directory examples examples/#1.tex
+      }%
+    }%
+  \fi%
+%    \end{macrocode}
+% Ist die gesuchte Datei vorhanden, wird diese auch eingebunden. Andernfalls 
+% wird eine Warnung mit dem Hinweis auf die notwendige Verwednung von 
+% \val{pdflatex} mit der Option \opt{--shell-escape} erzeugt.
+%    \begin{macrocode}
+  \IfFileExists{examples/#1.pdf}{%
+    \includepdf[%
+      pages=-,noautoscale,frame,keepaspectratio,pagecommand={},%
+      height=\textheight,width=\textwidth, offset=5mm 0mm%
+    ]{examples/#1.pdf}%
+  }{%
+    \tud@shellescape@wrn%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}^^A \IncludeExample
+%
+% \iffalse
+%</class>
+% \fi
+%
+% \subsubsection{ToDo-Liste}
+%
+% \begin{macro}{\ToDo}
+% \changes{v2.02}{2014/07/10}{Verwendung von \pkg{todonotes}}%^^A
+% \begin{macro}{\@ToDo}
+% \changes{v2.02}{2014/07/10}{neu}%^^A
+% \begin{macro}{\ListOfToDo}
+% \changes{v2.02}{2014/07/10}{neu}%^^A
+% Mit dem Befehl \cs{ToDo}\oarg{options}\marg{inline text}\oarg{marginnote}
+% kann bei aktivierter Option \opt{ToDo} eine Notiz mit einer offenen Ausgabe
+% erstellt werden. Das vorangestellte Argument kann Optionen beinhalten, welche
+% durch \pkg{todonotes} unterstützt werden. Außerdem werden die vier boolschen
+% Schlüssel \val{doc}, \val{man}, \val{imp} und \val{nxt} definiert, welche
+% eine feste, farbliche Kodierung erzeugen. Das angestellte optionale Argument
+% erzeugt eine gleichartige Notiz am Rand, in welcher vorzugsweise die
+% angedachte Version eingetragen werden kann. Mit \cs{ListOfToDo} wird abhängig
+% von der Option \opt{ToDo} eine Liste der offenen Aufgaben erstellt.
+%    \begin{macrocode}
+\newcommand*\@ToDo{}
+\NewDocumentCommand\ToDo{somo}{%
+  \ifbool{@tud@todo}{%
+    \begingroup%
+%    \end{macrocode}
+% Die boolschen Schlüssel.
+%    \begin{macrocode}
+      \define@boolkey{todonotes}{doc}[true]{%
+        \ifbool{KV@todonotes@doc}{\setkeys{todonotes}{color=HKS41!10}}{}%
+      }%
+      \define@boolkey{todonotes}{rls}[true]{%
+        \ifbool{KV@todonotes@rls}{\setkeys{todonotes}{color=HKS44!50}}{}%
+      }%
+      \define@boolkey{todonotes}{imp}[true]{%
+        \ifbool{KV@todonotes@imp}{\setkeys{todonotes}{color=HKS07!50}}{}%
+      }%
+      \define@boolkey{todonotes}{nxt}[true]{%
+        \ifbool{KV@todonotes@nxt}{\setkeys{todonotes}{color=HKS57!50}}{}%
+      }%
+%    \end{macrocode}
+% In \cs{@ToDo} wird das optionale Argument für \pkg{todonotes} gesichert.
+%    \begin{macrocode}
+      \def\@ToDo{}%
+      \IfValueTF{#2}{%
+        \IfBooleanTF{#1}{\edef\@ToDo{#2,nolist}}{\edef\@ToDo{#2}}%
+      }{%
+        \IfBooleanT{#1}{\edef\@ToDo{nolist}}%
+      }%
+%    \end{macrocode}
+% Damit die Randnotiz nicht verrutscht, wird \cs{marginnote} anstelle von 
+% \cs{marginpar} verwendet. Außerdem ist eine Verschiebung um den durch 
+% \pkg{todonotes} definierten Leerraum notwendig.
+%    \begin{macrocode}
+      \renewcommand*\marginpar[2][]{\marginnote[##1]{##2}[\dimexpr-1.6ex+1pt]}%
+      \vskip.8ex%
+%    \end{macrocode}
+% hier erfolgt die Ausgabe.
+%    \begin{macrocode}
+      \IfValueT{#4}{%
+        \settowidth\marginparwidth{#4}%
+        \addtolength\marginparwidth{\dimexpr1.6ex+1pt}%
+        \let\par\relax\noindent%
+        \edef\@tempa{\noexpand\todo[\@ToDo,noline,nolist]}%
+        \@tempa{#4}%
+      }%
+      \edef\@tempa{\noexpand\todo[\@ToDo,inline]}%
+      \@tempa{#3}%
+    \endgroup%
+    \par\noindent%
+  }{}%
+  \ignorespaces%
+}
+%    \end{macrocode}
+% Zum Schluss wird der Befehl \cs{ListOfToDo} definiert, der die Liste der noch 
+% zu erledigenden Punkte nur ausgeführt ausgibt, wenn die Option \opt{ToDo}
+% aktiviert ist. Außerdem werden die Randnotizen auf den linken~-- weil 
+% größeren~-- Rand gesetzt.
+%    \begin{macrocode}
+\newcommand*\ListOfToDo{\if@tud@todo\listoftodos\fi}
+\reversemarginpar
+%    \end{macrocode}
+% \end{macro}^^A \ListOfToDo
+% \end{macro}^^A \@ToDo
+% \end{macro}^^A \ToDo
+%
+% \subsubsection{Kleinkram}
+% 
+% \begin{macro}{\bsc}
+% \changes{v2.02}{2014/07/22}{\cs{DeclareRobustCommand} ersetzt mit
+%   \cs{newrobustcmd} aus \pkg{etoolbox}}%^^A
+% Eine einfacher zu verwendende Kurzform.
+%    \begin{macrocode}
+\newrobustcmd*\bsc{\@backslashchar}
+%    \end{macrocode}
+% \end{macro}^^A \bsc
+% \begin{length}{\baselineskipglue}
+% Diese Länge wird in der Dokumentation für alle möglichen stauch- und 
+% dehnbaren Einfügen genutzt.
+%    \begin{macrocode}
+\newlength\baselineskipglue
+\setlength\baselineskipglue{%
+  .4\baselineskip plus .4\baselineskip minus .2\baselineskip%
+}
+%    \end{macrocode}
+% \end{length}^^A \baselineskipglue
+% \begin{macro}{\tud@shellescape@wrn}
+% \changes{v2.02}{2014/10/14}{neu}%^^A
+% Dieses Makro wird verwendet, wenn eine gesuchte Datei nicht gefunden wurde, 
+% weil das Dokument noch nicht mit der Option \opt{--shell-escape} kompiliert 
+% wurde.
+%    \begin{macrocode}
+\newcommand*\tud@shellescape@wrn{%
+  \ClassWarning{\tudcls@name}{%
+    You have to recompile this document with\MessageBreak%
+    activated shell escape option%
+  }%
+  \global\let\tud@shellescape@wrn\relax%
+}
+%    \end{macrocode}
+% \end{macro}^^A \tud@shellescape@wrn
+% \begin{macro}{\pdfexpandableoutline}
+% \changes{v2.02}{2014/11/04}{neu}%^^A
+% \begin{macro}{\@TUDScript}
+% \changes{v2.02}{2014/08/16}{neu}%^^A
+% Für die PDF-Outline-Einträge müssen einige Befehle durch eine expandierbare
+% Version ersetzt werden. Der Befehl \cs{pdfexpandableoutline} wird definiert, 
+% um dies möglichst einfach zu gestalten.
+%    \begin{macrocode}
+\newcommand*\pdfexpandableoutline[1]{%
+  \AfterPackage*{hyperref}{\pdfstringdefDisableCommands{\csletcs{#1}{@#1}}}
+}
+%    \end{macrocode}
+% Den Anfang mach gleich \cs{TUDScript}.
+%    \begin{macrocode}
+\newcommand*\@TUDScript{TUD-KOMA-Script}
+\pdfexpandableoutline{TUDScript}
+%    \end{macrocode}
+% \end{macro}^^A \@TUDScript
+% \end{macro}^^A \pdfexpandableoutline
+%
+% \subsubsection{Markup von Klassen, Paketen, Optionen und weiteren Elementen}
+% 
+% Im Folgenden werden allerhand Befehle mit Hilfe des Paketes \pkg{xparse} 
+% definiert, um bestimmte Begriffe, Klassen, Pakete, Optionen, Umgebungen, 
+% Befehle, Parameter, Bezeichner, Längen, Schriftelemente und Farben speziell
+% auszuzeichnen. Diese Befehle lauten für Klasse und Paket nutzen aus Gründen
+% der Konsistenz zwar gleich, unterschieden sich jedoch in der Implementierung.
+%
+% Für die Klasse gilt, dass die Sternversion all dieser Befehlen nichts in den
+% Index einträgt, wenn diese denn im Fließtext Verwendung finden. Wird die
+% Sternversion jedoch in einer Änderungsnotiz genutzt, so wird die für diese
+% normalerweise angehängte Beschreibung des Elementes unterdrückt. Für (fast)
+% alle der folgenden Befehle gilt, dass diese mit zwei optionalen Befehlen am
+% Ende genutzt werden können. Mit \val{'refformat'} kann angegeben werden, ob 
+% der automatisch erzeugte Hyperlink um einen textuellen Querverweis ergänzt
+% werden soll. Mit \val{|idxformat|} kann die Erscheinung im Index angepasst
+% werden. Die eigentliche Behandlung der Eingabe und die Eintragungen in den
+% Index erfolgen dabei mit dem Befehl \cs{@ProcessOutput}, für einen Eintrag 
+% in die Änderungsliste wird der Befehl \cs{@ProcessChangedAt} genutzt.
+%
+% Die Befehle für das Paket \pkg{tudscrman} sind in ihrer Funktionalität um
+% einiges reduziert. Die meisten besitzen nur ein obligatorisches Argument für 
+% die formatierte Ausgabe sowie evtl. eine Sternversion, die einen Querverweis
+% auf das Handbuch erzeugt.
+% \begin{macro}{\Application}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@Application}
+% Die Auszeichnung und der Indexeintrag einer Anwendungssoftware.
+%    \begin{macrocode}
+%<*class>
+\NewDocumentCommand\Application{smd||}{%
+  \ifdin{#2}{%
+    \mbox{\textsbs{#2}}%
+    \CheckIndexFormat{#1}{#3}%
+    \IfBooleanF{#1}{%
+      \index{\textsbs{#2}~{\idxfont(Anwendungssoftware)}\IfValueT{#3}{|#3}}%
+    }%
+  }%
+}
+\DeclareExpandableDocumentCommand\@Application{sm}{#2}
+\pdfexpandableoutline{Application}
+%</class>
+%<*package>
+\newcommand*\Application[1]{\ifdin{#1}{\mbox{\textsbs{#1}}}}
+%</package>
+%    \end{macrocode}
+% \end{macro}^^A \@Application
+% \end{macro}^^A \Application
+% \begin{macro}{\Distribution}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% Die Auszeichnung und der Indexeintrag einer \LaTeX-Distribution.
+%    \begin{macrocode}
+%<*class>
+\NewDocumentCommand\Distribution{smod||}{%
+  \ifdin{#2\IfValueT{#3}{~#3}}{%
+    \mbox{\textsbn{#2\IfValueT{#3}{~#3}}}%
+    \CheckIndexFormat{#1}{#4}%
+    \IfBooleanF{#1}{%
+      \index{\textsbn{#2}~{\idxfont(Distribution)}\IfValueT{#4}{|#4}}%
+    }%
+  }%
+}
+%</class>
+%<*package>
+\newcommand*\Distribution[1]{\ifdin{#1}{\mbox{\textsbn{#1}}}}
+%</package>
+%    \end{macrocode}
+% \end{macro}^^A \Distribution
+% \begin{macro}{\Path}
+% \changes{v2.02}{2014/07/22}{\cs{DeclareRobustCommand} ersetzt durch
+%   \cs{newrobustcmd} aus \pkg{etoolbox}}%^^A
+% Die Auszeichnung eines Dateipfades.
+%    \begin{macrocode}
+\newrobustcmd*\Path[1]{\mbox{\texttt{#1}}}
+%    \end{macrocode}
+% \end{macro}^^A \Path
+% \begin{macro}{\File}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% Die Auszeichnung und der Indexeintrag einer Datei.
+%    \begin{macrocode}
+%<*class>
+\NewDocumentCommand\File{smd||}{%
+  \ifdin{#2}{%
+    \mbox{\textsbn{#2}}%
+    \CheckIndexFormat{#1}{#3}%
+    \IfBooleanF{#1}{%
+      \index[files]{\textsbn{#2}~{\idxfont(Datei)}\IfValueT{#3}{|#3}}%
+    }%
+  }%
+}
+%</class>
+%<*package>
+\newcommand*\File[1]{\ifdin{#1}{\mbox{\textsbn{#1}}}}
+%</package>
+%    \end{macrocode}
+% \end{macro}^^A \File
+% \begin{macro}{\Class}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@Class}
+% \begin{macro}{\@TempClass}
+% \changes{v2.02}{2014/10/08}{entfernt}%^^A
+% \begin{macro}{\DeclareClass}
+% \changes{v2.02}{2014/10/09}{entfernt}%^^A
+% Die Auszeichnung und der Indexeintrag einer Klasse. Sollte gerade DIN~Bold 
+% verwendet werden~-- der Befehl wird innerhalb einer Überschrift genutzt~-- 
+% wird lediglich das Hauptargument ausgegeben. Das optionale Argument zwischen 
+% Apostrophen kann für die Formatierung eines Querverweises im Text genutzt 
+% werden, das optionale Argument zwischen senkrechten Strichen dient der 
+% Formatierung des Indexeintrages. Außerdem wird für Einträge mit dem Paket
+% \pkg{hyperref} mit \cs{@Class} eine expandierbare Version definiert.
+%    \begin{macrocode}
+%<*class>
+\NewDocumentCommand\Class{smd''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{files}{\protect\sbnfont}{#2}{Klasse}%
+  \else%
+    \ifdin{#2}{%
+      \SetIndexFormat{#1}{#4}%
+      \@ProcessOutput{\textsbn{#2}}'#3'%
+        {files}[\protect\sbnfont]{#2}[~{\idxfont(Klasse)}]%
+    }%
+  \fi%
+}
+%</class>
+%<*package>
+\NewDocumentCommand\Class{sm}{%
+  \ifdin{#2}{%
+    \IfBooleanTF{#1}{%
+      \manualhyperref{files:#2}{\textsbn{#2}}%
+    }{%
+      \textsbn{#2}%
+    }%
+    \index[files]{\begingroup\protect\sbnfont#2\endgroup~{\idxfont(Klasse)}}%
+  }%
+}
+%</package>
+\DeclareExpandableDocumentCommand\@Class{sm}{#2}
+\pdfexpandableoutline{Class}
+%    \end{macrocode}
+% \end{macro}^^A \DeclareClass
+% \end{macro}^^A \@TempClass
+% \end{macro}^^A \@Class
+% \end{macro}^^A \Class
+% \begin{macro}{\Package}
+% \changes{v2.02}{2014/07/10}{Ausgabe für ChangeLog hinzugefügt}%^^A
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@Package}
+% \begin{macro}{\@TempPackage}
+% \begin{macro}{\DeclarePackage}
+% \changes{v2.02}{2014/10/09}{entfernt}%^^A
+% Für die Auszeichnungen von Paketen gelten vorherigen Aussagen äquivalent. 
+% Für Pakete wird ergänzend ein Hyperlink auf CTAN erzeugt, wenn für dieses 
+% kein Label im Dokument besteht, wo dieses genauer erläutert wird. Mit dem 
+% optionalen Argument in runden Klammern lässt sich der Paketname für den Link, 
+% welcher normalerweise aus obligatorischen Argument entnommen wird, anpassen.
+% Zusätzlich wird ein Befehl für Tutorials erstellt, welcher auf das Handbuch 
+% verweist.
+%    \begin{macrocode}
+%<*class>
+\newcommand*\@TempPackage{}
+\NewDocumentCommand\Package{smd''d()d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{files}{\protect\sbnfont}{#2}{Paket}%
+  \else%
+    \ifdin{#2}{%
+      \IfValueTF{#4}{\def\@TempPackage{#4}}{\def\@TempPackage{#2}}%
+      \SetIndexFormat{#1}{#5}%
+      \@ProcessOutput{\textsbn{#2}}'#3'(\@TempPackage)%
+        {files}[\protect\sbnfont]{#2}[~{\idxfont(Paket)}]%
+    }%
+  \fi%
+}
+%</class>
+%<*package>
+\NewDocumentCommand\Package{smd()}{%
+  \ifdin{#2}{%
+    \IfBooleanTF{#1}{%
+      \manualhyperref{files:#2}{\textsbn{#2}}%
+    }{%
+      \IfValueTF{#3}{%
+        \href{http://www.ctan.org/pkg/#3}{\textsbn{#2}}%
+      }{%
+        \href{http://www.ctan.org/pkg/#2}{\textsbn{#2}}%
+      }%
+    }%
+    \index[files]{\begingroup\protect\sbnfont#2\endgroup~{\idxfont(Paket)}}%
+  }%
+}
+%</package>
+\DeclareExpandableDocumentCommand\@Package{sm}{#2}
+\pdfexpandableoutline{Package}
+%    \end{macrocode}
+% \end{macro}^^A \DeclarePackage
+% \end{macro}^^A \@TempPackage
+% \end{macro}^^A \@Package
+% \end{macro}^^A \Package
+% \begin{macro}{\Option}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@Option}
+% \changes{v2.02}{2014/11/02}{neu}%^^A
+% \begin{macro}{\@TempOption}
+% Im Gegensatz zu den vorherigen Befehlen gibt es ein ordinäres optionales 
+% Argument nach dem Hauptargument. Damit kann der Option im Handbuch ein Wert
+% zugewiesen werden. Für Tutorials wird ein Befehl definiert, der auf das
+% Handbuch verweist.
+%    \begin{macrocode}
+%<*class>
+\newcommand*\@TempOption{}
+\NewDocumentCommand\Option{smod''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{options}{\ttfamily}{#2}{Option}%
+  \else%
+    \IfValueTF{#3}{\gdef\@TempOption{\texttt{=#3}}}{\gdef\@TempOption{}}%
+    \SetIndexFormat{#1}{#5}%
+    \@ProcessOutput{\texttt{#2}}[\@TempOption]'#4'{options}[\ttfamily]{#2}%
+  \fi%
+}
+%</class>
+%<*package>
+\NewDocumentCommand\Option{smo}{%
+  \ifdin{#2}{%
+    \IfBooleanTF{#1}{%
+      \manualhyperref{options:#2}{\texttt{#2}}\IfValueT{#3}{\texttt{=#3}}%
+    }{%
+      \texttt{#2}\IfValueT{#3}{\texttt{=#3}}%
+    }%
+    \index[options]{\begingroup\ttfamily#2\endgroup}%
+  }%
+}
+%</package>
+\DeclareExpandableDocumentCommand\@Option{sm}{#2}
+\pdfexpandableoutline{Option}
+%    \end{macrocode}
+% \end{macro}^^A \@TempOption
+% \end{macro}^^A \@Option
+% \end{macro}^^A \Option
+% \begin{macro}{\Environment}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@Environment}
+% \changes{v2.02}{2014/11/02}{neu}%^^A
+% \begin{macro}{\@TempEnvironment}
+% Auch hier wird für die Änderungsliste unterschieden und für Tutorials ein 
+% Befehl definiert, welcher auf das Handbuch referenziert.
+%    \begin{macrocode}
+%<*class>
+\newcommand*\@TempEnvironment{}
+\NewDocumentCommand\Environment{smod''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{macros}{\ttfamily}{#2}{Umgebung}%
+  \else%
+%    \end{macrocode}
+% Außerdem wird für den Fall, dass der \cs{Environment}-Befehl innerhalb der
+% Umgebung \env{Declaration} verwendet wird, eine spezielle Ausgabe erzeugt. Nur
+% hier kommt das optionale Argument nach dem Hauptargument zum Tragen. Damit
+% können etwaige obligatorische und optionale Argumente angegeben werden.
+%    \begin{macrocode}
+    \if@declare%
+      \gdef\@TempEnvironment{%
+        \texttt{\bsc{}begin\{#2\}\IfValueT{#3}{#3}}\tabularnewline%
+        \texttt{\dots}\tabularnewline%
+        \texttt{\bsc{}end\{#2\}}%
+      }%
+    \else%
+      \gdef\@TempEnvironment{\texttt{#2}}%
+    \fi%
+    \SetIndexFormat{#1}{#5}%
+    \@ProcessOutput{\@TempEnvironment}'#4'{macros}[\ttfamily]{#2}%
+  \fi%
+}
+%</class>
+%<*package>
+\NewDocumentCommand\Environment{sm}{%
+  \ifdin{#2}{%
+    \IfBooleanTF{#1}{%
+      \manualhyperref{macros:#2}{\texttt{#2}}%
+    }{%
+      \texttt{#2}%
+    }%
+    \index[macros]{\begingroup\ttfamily#2\endgroup}%
+  }%
+}
+%</package>
+\DeclareExpandableDocumentCommand\@Environment{sm}{#2}
+\pdfexpandableoutline{Environment}%
+%    \end{macrocode}
+% \end{macro}^^A \@TempEnvironment
+% \end{macro}^^A \@Environment
+% \end{macro}^^A \Environment
+% \begin{macro}{\Macro}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@Macro}
+% \changes{v2.02}{2014/11/02}{neu}%^^A
+% Die Auszeichnung und der Indexeintrag eines Befehls sowie für das Paket 
+% \pkg{tudscrman} der Hyperlink auf das Handbuch.
+%    \begin{macrocode}
+%<*class>
+\NewDocumentCommand\Macro{smd''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{macros}{\ttfamily\bsc}{#2}{Befehl}%
+  \else%
+    \SetIndexFormat{#1}{#4}%
+    \@ProcessOutput{\texttt{\bsc#2}}'#3'{macros}[\ttfamily\bsc]{#2}%
+  \fi%
+}
+%</class>
+%<*package>
+\NewDocumentCommand\Macro{sm}{%
+  \ifdin{\bsc#2}{%
+    \IfBooleanTF{#1}{%
+      \manualhyperref{macros:#2}{\texttt{\bsc#2}}%
+    }{%
+      \texttt{\bsc#2}%
+    }%
+    \index[macros]{\begingroup\ttfamily\bsc#2\endgroup}%
+  }%
+}
+%</package>
+\DeclareExpandableDocumentCommand\@Macro{sm}{#2}
+%    \end{macrocode}
+% \end{macro}^^A \@Macro
+% \end{macro}^^A \Macro
+% \begin{macro}{\Length}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@TempLength}
+% \changes{v2.02}{2014/10/08}{entfernt}%^^A
+% Die Auszeichnung und der Indexeintrag einer \LaTeX-Länge.
+%    \begin{macrocode}
+%<*class>
+\NewDocumentCommand\Length{smd''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{macros}{\ttfamily\bsc}{#2}{L\"ange}%
+  \else%
+    \SetIndexFormat{#1}{#4}%
+    \@ProcessOutput{\texttt{\bsc#2}}[\if@declare~{\idxfont(L\"ange)}\fi]'#3'%
+      {macros}[\ttfamily\bsc]{#2}[~{\idxfont(L\"ange)}]%
+  \fi%
+}
+%</class>
+%<*package>
+\NewDocumentCommand\Length{sm}{%
+  \ifdin{\bsc#2}{%
+    \IfBooleanTF{#1}{%
+      \manualhyperref{macros:#2}{\texttt{\bsc#2}}%
+    }{%
+      \texttt{\bsc#2}%
+    }%
+    \index[macros]{\begingroup\ttfamily\bsc#2\endgroup~{\idxfont(L\"ange)}}%
+  }%
+}
+%</package>
+%    \end{macrocode}
+% \end{macro}^^A \@TempLength
+% \end{macro}^^A \Length
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \minisec{Exklusive Auszeichnungen für die Klasse}
+% Alle weiteren Befehle werden ausschließlich für die Klasse \cls{tudscrman}
+% definiert.
+%
+% \begin{macro}{\Key}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@TempKey}
+% Die Auszeichnung und der Indexeintrag eines Parameters für Umgebungen und 
+% Befehle. Das erste Argument ist die Umgebung oder der Befehl, wofür der 
+% Parameter gültig ist. Das zweite Argument ist der Parameter selbst. Dafür 
+% werden die Befehle \cs{Environment} und \cs{Macro} lokal umdefiniert. Das 
+% ordinäre obligatorische Argument danach dient der Zuweisung eines Wertes im
+% Fließtext.
+%    \begin{macrocode}
+\newcommand*\@TempKey{}
+\NewDocumentCommand\Key{smmod''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{macros}(#2){\ttfamily}{#3}{Parameter}%
+  \else%
+    \begingroup%
+      \let\Environment\@firstofone%
+      \let\Macro\@firstofone%
+      \IfValueTF{#4}{%
+        \gdef\@TempKey{\texttt{=#4}\if@declare~{\idxfont(Parameter)}\fi}%
+      }{%
+        \gdef\@TempKey{\if@declare~{\idxfont(Parameter)}\fi}%
+      }%
+      \SetIndexFormat{#1}{#6}%
+      \@ProcessOutput{\texttt{#3}}[\@TempKey]'#5'{macros}(#2)[\ttfamily]{#3}%
+    \endgroup%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@TempKey
+% \end{macro}^^A \Key
+% \begin{macro}{\PageStyle}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% Die Auszeichnung und der Indexeintrag eines Seitenstils.
+%    \begin{macrocode}
+\NewDocumentCommand\PageStyle{smd''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{macros}{\ttfamily}{#2}{Seitenstil}%
+  \else%
+    \SetIndexFormat{#1}{#4}%
+    \@ProcessOutput{\texttt{#2}\if@declare~{\idxfont(Seitenstil)}\fi}'#3'%
+      {macros}[\ttfamily]{#2}[~{\idxfont(Seitenstil)}]%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \PageStyle
+% \begin{macro}{\Counter}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@TempCounter}
+% \changes{v2.02}{2014/10/08}{entfernt}%^^A
+% Die Auszeichnung und der Indexeintrag einer \LaTeX-Zählers.
+%    \begin{macrocode}
+\NewDocumentCommand\Counter{smd''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{macros}{\ttfamily}{#2}{Z\"ahler}%
+  \else%
+    \SetIndexFormat{#1}{#4}%
+    \@ProcessOutput{\texttt{#2}}[\if@declare~{\idxfont(Z\"ahler)}\fi]%
+      {macros}[\ttfamily]{#2}[~{\idxfont(Z\"ahler)}]%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@TempCounter
+% \end{macro}^^A \Counter
+% \begin{macro}{\Term}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@TempTerm}
+% \changes{v2.02}{2014/10/08}{entfernt}%^^A
+% Die Auszeichnung und der Indexeintrag eines sprachabhängigen Bezeichners.
+%    \begin{macrocode}
+\NewDocumentCommand\Term{smd''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{terms}{\ttfamily\bsc}{#2}{Bezeichner}%
+  \else%
+    \SetIndexFormat{#1}{#4}%
+    \@ProcessOutput{\texttt{\bsc#2}}[\if@declare~{\idxfont(Bezeichner)}\fi]'#3'%
+      {terms}[\ttfamily\bsc]{#2}%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@TempTerm
+% \end{macro}^^A \Term
+% \begin{macro}{\TermTable}
+% \begin{macro}{\@TermTable}
+% \begin{macro}{\@@TermTable}
+% \begin{macro}{\@termlist}
+% Für sprachabhängige Bezeichner wird zusätzlich der Befehl \cs{TermTable} 
+% definiert, dem eine kommaseparierte Liste übergeben werden kann. Anhand 
+% dieser Liste werden die enthalten Begriffe für die Sprachen Deutsch und
+% English in einer Tabelle ausgegeben. Die Sternversion dieses Befehls nutzt
+% dafür die \env{tabularx}-Umgebung. Für diese kann ein zweites Argument
+% angegeben werden, welches die gewünschte Breite der Tabelle angibt.
+%    \begin{macrocode}
+\newcommand\@termlist{}
+\let\@termlist\relax
+\NewDocumentCommand\TermTable{smg}{%
+  \forcsvlist{\listadd\@termlist}{#2}%
+  \ifvmode\else\par\fi%
+  \vskip\baselineskipglue%
+  \@afterindentfalse\@afterheading%
+  \IfBooleanTF{#1}{%
+    \IfValueTF{#3}{\setlength\@tempdima{#3}}{\setlength\@tempdima{\linewidth}}%
+    \setlength{\@tempdimc}{-.7\baselineskip}%
+    \begin{tabularx}{\@tempdima}{lXX}\@TermTable\end{tabularx}%
+  }{%
+    \setlength{\@tempdimc}{\z@}%
+    \begin{tabular}{lll}\@TermTable\end{tabular}%
+  }%
+  \let\@termlist\relax%
+}
+\newcommand*\@TermTable{%
+  \toprule%
+  \textbf{Bezeichner} & \textbf{Deutsch} & \textbf{Englisch}\tabularnewline%
+  \midrule%
+  \forlistloop\@@TermTable{\@termlist}%
+  \bottomrule%
+}
+\newcommand*\@@TermTable[1]{%
+  \Term{#1} & %
+  \ifstr{\@nameuse{#1}}{}{\PName{leer}}{\@nameuse{#1}} & %
+  \selectlanguage{english}\vspace*{\@tempdimc}%
+  \ifstr{\@nameuse{#1}}{}{\PName{empty}}{\@nameuse{#1}}\tabularnewline%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@termlist
+% \end{macro}^^A \@@TermTable
+% \end{macro}^^A \@TermTable
+% \end{macro}^^A \TermTable
+% \begin{macro}{\Font}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@TempFont}
+% \changes{v2.02}{2014/10/08}{entfernt}%^^A
+% Die Auszeichnung und der Indexeintrag eines Schriftelementes.
+%    \begin{macrocode}
+\NewDocumentCommand\Font{smd''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{fonts}{\ttfamily}{#2}{Schriftelement}%
+  \else%
+    \SetIndexFormat{#1}{#4}%
+    \@ProcessOutput{\texttt{#2}\if@declare~{\idxfont(Schriftelement)}\fi}%
+      {fonts}[\ttfamily]{#2}%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@TempFont
+% \end{macro}^^A \Font
+% \begin{macro}{\Color}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% \begin{macro}{\@TempColor}
+% \changes{v2.02}{2014/10/08}{entfernt}%^^A
+% Die Auszeichnung und der Indexeintrag einer Farbe des \CDs.
+%    \begin{macrocode}
+\NewDocumentCommand\Color{smod''d||}{%
+  \if@changelog%
+    \@ProcessChangedAt{#1}{colors}{\ttfamily}{#2}{Farbe}%
+  \else%
+    \SetIndexFormat{#1}{#5}%
+    \@ProcessOutput{\texttt{#2}}[%
+      \IfValueT{#3}{~\texttt{(#3)}}\if@declare~{\idxfont(Farbe)}\fi%
+    ]'#4'{colors}[\ttfamily]{#2}%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@TempColor
+% \end{macro}^^A \Color
+% Damit ist das Intermezzo mit Auszeichnungsbefehlen speziell für die Klasse 
+% beendet.
+%
+% \iffalse
+%</class>
+% \fi
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \subsection{Befehle und Umgebungen für die Klasse}
+%
+% Hier taucht alles auf, was lediglich für die Klasse \cls{tudscrman} und nicht 
+% für das Paket benötigt wird.
+%
+% \begin{macro}{\CheckIndexFormat}
+% \changes{v2.02}{2014/10/08}{neu}%^^A
+% \begin{macro}{\SetIndexFormat}
+% \changes{v2.02}{2014/10/08}{neu}%^^A
+% \begin{macro}{\@IndexFormat}
+% \changes{v2.02}{2014/10/08}{neu}%^^A
+% Zuerst werden jedoch einige Hilfsmakros erstellt mit denen überprüft wird, ob
+% die Sternversion der zuvor definierten Auszeichnung"=Befehle zusammen mit
+% einer Indexformatierung \val{|idxformat|} genutzt wurde, was sich natürlich
+% widerspricht. In diesem Fall erfolgt eine Warnung.
+%    \begin{macrocode}
+\newcommand*\@IndexFormat{}
+\let\@IndexFormat\relax
+\newcommand*\CheckIndexFormat[2]{%
+  \IfBooleanT{#1}{%
+    \IfValueT{#2}{%
+      \ClassWarning{\tudcls@name}{%
+        You've used the starred version so no entry for\MessageBreak%
+        the index is created and the optional argument\MessageBreak%
+        |#2| will be ignored%
+      }%
+    }%
+  }%
+}
+%    \end{macrocode}
+% Der Befehl \cs{SetIndexFormat} setzt das gewünschte Format für den jeweilgen
+% Indexeintrag.
+%    \begin{macrocode}
+\newcommand*\SetIndexFormat[2]{%
+  \CheckIndexFormat{#1}{#2}%
+  \IfBooleanTF{#1}{%
+    \def\@IndexFormat{#1}%
+  }{%
+    \IfValueTF{#2}{\def\@IndexFormat{#2}}{\def\@IndexFormat{}}%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@IndexFormat
+% \end{macro}^^A \SetIndexFormat
+% \end{macro}^^A \CheckIndexFormat
+% \begin{macro}{\if@declare}
+% \begin{macro}{\if@stareddeclare}
+% \changes{v2.02}{2014/10/09}{neu}%^^A
+% \begin{macro}{\if@openindex}
+% \begin{macro}{\if@noindex}
+% Dies sin ein paar Hilfsmakros zur Steuerung des Markup sowie der Ausgabe von
+% Deklarationen, Index und Änderungsliste, welche bei den nächsten Befehlen und 
+% Umgebungen genutzt werden.
+%    \begin{macrocode}
+\newif\if@declare
+\newif\if@stareddeclare
+\newif\if@openindex
+\newif\if@noindex
+%    \end{macrocode}
+% \end{macro}^^A \if@noindex
+% \end{macro}^^A \if@openindex
+% \end{macro}^^A \if@stareddeclare
+% \end{macro}^^A \if@declare
+%
+% \subsubsection{Abarbeitung der Markup-Befehle}
+%
+% In der Klasse \cls{tudscrman} werden die Markup-Befehle entweder im Fließtext 
+% verwendet und dabei automatisch Einträge in den Index erzeugt oder aber diese 
+% werden als Argument der Umgebung \env{Declaration} genutzt.
+%
+% \begin{macro}{\@ProcessOutput}
+% \changes{v2.02}{2014/10/08}{Markup für Index und Fließtext getrennt}%^^A
+% \changes{v2.02}{2014/10/09}{Anpassung für Umgebung \env{Declaration*}}%^^A
+% Der Befehl \cs{@ProcessOutput} ist das Herzstück der Auszeichnungen aller
+% Elemente. Das erste obligatorische Argument ist der übergebene Wert, welcher 
+% in einer bestimmten Form ausgezeichnet werden soll. Darauf folgen die ein 
+% möglicher \oarg{Anhang} sowie ggf. das \val{'}\meta{Kürzel}\val{'} für die
+% Erweiterung der Referenzierunug im Fließtext. Danach wird der Zielindex 
+% \marg{Index} und~-- für Parameter~-- der \parg{Haupteintrag} übergeben. Es 
+% folgt der zu erstellende Indexeintrag mit \oarg{Vorsatz}, \marg{Eintrag} und
+% \oarg{Anhang}. Die Formatierung für den Indexbefehl wurde zuvor durch
+% \cs{SetIndexFormat} in \cs{@IndexFormat} gespeichert. Der vollständige 
+% Funktionsaufruf lautet:
+% \newline\begingroup\scriptsize
+% \cs{@ProcessOutput}*
+% \marg{Ausgabe}\oarg{Anhang}\val{'}\meta{Kürzel}\val{'}\ignorespaces%
+% \marg{Index}\parg{Haupteintrag}\oarg{Vorsatz}\marg{Eintrag}\oarg{Anhang}
+% \endgroup
+%    \begin{macrocode}
+\NewDocumentCommand\@ProcessOutput{mod''d()md()omo}{%
+%    \end{macrocode}
+% Mit dem Schalter \cs{if@declare} wird unterschieden, ob ein beliebiger
+% Auszeichnungsbefehl innerhalb der Umgebung~\env{Declaration} verwendet wird.
+% Ist dies der Fall wird ein Label und mit \cs{@HyperIndex} ein spezieller
+% Indexeintrag für die Deklaration erstellt. Eine Ausgabe der Auszeichnung
+% erfolgt in diesem Fall nicht, dafür ist der Befehl \cs{printdeclarationlist} 
+% verantwortlich. Außerdem wird mit Hilfe der \env{Declaration}-Umgebung der
+% Anfang und das Ende der Deklaration für den Indexeintrag mit \cs{@HyperIndex}
+% exakt festgelegt. Der Schalter \cs{if@openindex} wird zu Beginn der Umgebung
+% auf \cs{@openindextrue} gesetzt, am Ende dieser auf \cs{@openindexfalse}.
+%    \begin{macrocode}
+  \if@declare%
+    \if@openindex%
+      \IfValueT{#3}{%
+        \ClassWarning{\tudcls@name}{%
+          It is not possible to use any cross-reference\MessageBreak%
+          shorthand like '#3' within the arguments of\MessageBreak% 
+          the environment `Declaration'%
+        }%
+      }%
+      \ifx\@IndexFormat\@empty\else%
+        \ClassWarning{\tudcls@name}{%
+            It is not possible to use any indexing format\MessageBreak%
+            like |\@IndexFormat| within the arguments of the\MessageBreak%
+            environment `Declaration'%
+        }%
+      \fi%
+      \if@noindex\else%
+        \IfValueTF{#6}{\edef\@tempa{#5:#6:#8}}{\edef\@tempa{#5:#8}}%
+%    \end{macrocode}
+% Wird zur Deklaration die Umgebung \env{Declaration*} genutzt, so wird der 
+% Hyperlink ein ganzes Stück nach oben verschoben. Hintergrund ist, dass diese 
+% Umgebung eigentlich nur zum Deklarieren von Klassen und Paketen gedacht ist 
+% und direkt nach einer Gliederungsüberschrift folgen sollte.
+%    \begin{macrocode}
+        \if@stareddeclare%
+          \manualhyperdef'{\@tempa}%
+        \else%
+%    \end{macrocode}
+% Andernfalls wird der normale Hyperlink gesetzt. Das Label zum Prüfen wird 
+% implizit durch \cs{manualhyperdef} gesetzt.
+%    \begin{macrocode}
+          \manualhyperdef{\@tempa}%
+        \fi%
+        \@HyperIndex{#5}{#6}{#7}{#8}{#9}{(declare}%
+      \fi%
+%    \end{macrocode}
+% Die \env{Declaration*}"=Umgebung erzeugt keine direkte Ausgabe sondern nur 
+% die Hyperlinks und Indexeinträge. Die Nennung der Klasse bzw. des Paketes
+% oder der Pakete sollte in der Überschrift davor erfolgen.
+%    \begin{macrocode}
+      \if@stareddeclare\else%
+        #1\IfValueT{#2}{#2}%
+      \fi%
+    \else%
+      \if@noindex\else%
+        \@HyperIndex{#5}{#6}{#7}{#8}{#9}{declare)}%
+      \fi%
+    \fi%
+  \else%
+%    \end{macrocode}
+% Findet der Auszeichnungsbefehl außerhalb der \env{Declaration}-Umgebung im
+% Fließtext Verwendung, wird für den Fall, dass keine Sternversion genutzt
+% wurde, mit \cs{@HyperIndex} ein Eintrag im dazugehörigen Index erzeugt.
+%    \begin{macrocode}
+    \ifx\@IndexFormat\relax%
+      \ClassError{\tudcls@name}{\string\SetIndexFormat\space unused}{%
+        It seems you have forgotten to use \string\SetIndexFormat%
+      }%
+    \else%
+      \expandafter\IfBooleanF\expandafter{\@IndexFormat}{%
+        \@HyperIndex{#5}{#6}{#7}{#8}{#9}{\@IndexFormat}%
+      }%
+    \fi%
+%    \end{macrocode}
+% Danach erfolgt die Ausgabe der Auszeichnung. Sollte für diesen ein Label 
+% durch eine Deklaration innerhalb der \env{Declaration}-Umgebung definiert 
+% worden sein, so wird auf dieses ein Hyperlink gesetzt. Ansonsten erfolgt die 
+% normale textuelle Ausgabe. Für Parameter muss der Hyperlink dabei aufgrund 
+% des definierten Haupteintrag etwas anders ausgeführt werden (\cs{@tempa}). 
+%    \begin{macrocode}
+    \IfValueTF{#6}{\edef\@tempa{#5:#6:#8}}{\edef\@tempa{#5:#8}}%
+    \ifcsdef{r@\@tempa}{%
+%    \end{macrocode}
+% Wurde ein Format für den Querverweis gesetzt, muss dieses validiert werden. 
+% Gültige Kürzel sind 'auto', 'page' und 'full'. Damit werden die erzeugten 
+% Querverweise um den Gliederungsabschnitt, die Seite oder beides ergänzt. 
+% Außerdem kann mit 'none' der Hyperlink selbst unterbunden werden.
+%    \begin{macrocode}
+      \let\@tempb\relax%
+      \def\@tempc{\mbox{\hyperref{}{\jobname}{\@tempa}{#1}\IfValueT{#2}{#2}}}%
+      \IfValueT{#3}{%
+        \def\@tempb{%
+          \ClassWarning{\tudcls@name}{%
+            You've used the unknown cross-reference\MessageBreak%
+            shorthand '#3'. Only 'auto', 'page'\MessageBreak%
+            and 'full' as well as 'none' are valid%
+          }%
+        }%
+        \ifstr{#3}{auto}{\def\@tempb{ in \autoref{\@tempa}}}{}%
+        \ifstr{#3}{page}{\def\@tempb{ \vpageref{\@tempa}}}{}%
+        \ifstr{#3}{full}{\def\@tempb{ in \fullref{\@tempa}}}{}%
+        \ifstr{#3}{none}{%
+          \let\@tempb\relax%
+          \def\@tempc{\mbox{#1\IfValueT{#2}{#2}}}%
+        }{}%
+      }%
+      \@tempc\@tempb%
+    }{%
+%    \end{macrocode}
+% Wurde ein Format für den Querverweis gesetzt und es existiert kein passendes
+% Label, wird eine Warnung ausgegeben.
+%    \begin{macrocode}
+      \IfValueT{#3}{%
+        \ClassWarning{\tudcls@name}{%
+          No cross-reference created, label \@tempa\space is missing%
+        }%
+      }%
+%    \end{macrocode}
+% Sollte ein Paket mit \cs{Package} angegeben worden sein, so wurde das erste
+% optionale Argument in runden Klammern verwendet. Dieses wird genutzt, um 
+% einen Hyperlink auf CTAN zu generieren. Die Ausgabe selbst besteht in jedem 
+% Fall aus dem ersten obligatorischen und ggf. dem ersten optionalen Argument.
+%    \begin{macrocode}
+      \IfValueTF{#4}{%
+        \href{http://www.ctan.org/pkg/#4}{\mbox{#1\IfValueT{#2}{#2}}}%
+      }{%
+        \mbox{#1\IfValueT{#2}{#2}}%
+      }%
+    }%
+  \fi%
+%    \end{macrocode}
+% Zum Schluss wird \cs{@IndexFormat} zurückgesetzt.
+%    \begin{macrocode}
+  \let\@IndexFormat\relax%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@ProcessOutput
+% \begin{macro}{\hyperidx}
+% \changes{v2.02}{2014/08/16}{neu}%^^A
+% Aufgrund der Nichtbeachtung von RegExp"=Ausdrücken durch den Indexprozessor
+% \texttt{texindy} (\url{http://sourceforge.net/p/xindy/bugs/22/}) muss hierfür
+% etwas getrickst werden. Der Befehl \cs{hyperidx} hat ein optionales Argument, 
+% in welchem das für \cs{manualhyperref} obligatorische Label enthalten ist.
+% Das führt dazu, dass \texttt{texindy} dieses beim internen Filtern in eckigen 
+% Klammern beibehält und es anschließend über eine in \texttt{tudscrman.xdy} 
+% eigens definierte \texttt{merge-rule} verworfen werden kann.
+%    \begin{macrocode}
+\newrobustcmd*\hyperidx[2][]{\manualhyperref{#1}{#2}}
+%    \end{macrocode}
+% \end{macro}^^A hyperidx
+% \begin{macro}{\@HyperIndex}
+% \changes{v2.02}{2014/10/08}{überarbeitet}%^^A
+% Dieser Befehl sorgt für die eigentlichen Indexeinträge. Dabei werden für 
+% Einträge, welche innerhalb der \env{Declaration}-Umgebung deklariert wurden, 
+% ein Hyperlink im Index erstellt. Das erste Argument \marg{Index} enthält den 
+% gewünschten Zielindex. Danach folgt~-- für Parameter~-- der Haupteintrag. 
+% Daran schließt der Indexeintrag selbst mit \marg{Vorsatz}, \marg{Eintrag},
+% \marg{Anhang} und zum Abschluss \oarg{Formatierung} an. Der vollständige 
+% Funktionsaufruf lautet:
+% \newline\begingroup\scriptsize
+% \cs{@HyperIndex}\marg{Index}\marg{Haupteintrag}\ignorespaces%
+% \marg{Vorsatz}\marg{Eintrag}\marg{Anhang}\marg{Formatierung}
+% \endgroup
+%    \begin{macrocode}
+\NewDocumentCommand\@HyperIndex{mmmmmm}{%
+  \IfValueTF{#3}{\def\@tempa{#3}}{\def\@tempa{}}%
+  \IfValueTF{#5}{\def\@tempb{#5}}{\def\@tempb{}}%
+  \IfValueTF{#6}{\edef\@tempc{|#6}}{\def\@tempc{}}%
+%    \end{macrocode}
+% Auch hier wird unterschieden, ob es sich um einen Parameter (keys) handelt. 
+% Wurde für einen Parameter eine Umgebung oder ein Befehl bereits definiert, 
+% werden zwei Indexeinträge generiert. Einer beim Befehl selber als 
+% Untereintrag für den jeweiligen Parameter und einer im Index für Parameter
+% selbst mit der dazugehörigen Umgebung bzw. dem dazugehörigen Befehl. Beide
+% erhalten einen entsprechenden Hyperlink zur Deklaration.
+%    \begin{macrocode}
+  \IfValueTF{#2}{%
+    \ifcsdef{r@#1:#2:#4}{%
+      \edef\@tempb{#1:#2:#4}%
+      \index[#1]{%
+        #2!\hyperidx[\@tempb]{\begingroup\expandonce\@tempa#4\endgroup}%
+        ~{\idxfont(Parameter)}\expandonce\@tempc%
+      }%
+      \begingroup%
+        \let\Environment\@firstofone%
+        \def\Macro##1{\bsc##1}%
+        \index[keys]{%
+          \hyperidx[\@tempb]{%
+            \begingroup\expandonce\@tempa#4\endgroup~{\idxfont(\texttt{#2})}%
+          }%
+          \expandonce\@tempc%
+        }%
+      \endgroup%
+    }{%
+      \index[#1]{%
+        #2!\begingroup\expandonce\@tempa#4\endgroup%
+        ~{\idxfont(Parameter)}\expandonce\@tempc%
+      }%
+      \index[keys]{%
+        \begingroup\expandonce\@tempa#4\endgroup~{\idxfont(\texttt{#2})}%
+        \expandonce\@tempc%
+      }%
+    }%
+%    \end{macrocode}
+% Falls es sich nicht um einen Parameter handelt, wird lediglich der Eintrag im 
+% speziellen Index vorgenommen und ggf. ein Hyperlink erzeugt.
+%    \begin{macrocode}
+  }{%
+    \ifcsdef{r@#1:#4}{%
+      \index[#1]{%
+        \hyperidx[#1:#4]{%
+          \begingroup\expandonce\@tempa#4\endgroup\expandonce\@tempb%
+        }%
+        \expandonce\@tempc%
+      }%
+    }{%
+      \index[#1]{%
+        \begingroup\expandonce\@tempa#4\endgroup%
+        \expandonce\@tempb\expandonce\@tempc%
+      }%
+    }%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@HyperIndex
+%
+% \subsubsection{Deklarationen}
+%
+% Die Umgebungen \env{Declaration} und \env{Declaration*} werden beide für die 
+% Auszeichnung von Optionen, Umgebungen und Befehlen verwendet, die \TUDScript 
+% dem Anwender zur Verfügung stellt.
+%
+% \begin{environment}{Declaration}
+% \begin{macro}{\printdeclarationlist}
+% \begin{macro}{\@declarationlist}
+% \begin{macro}{\@presetlist}
+% \begin{macro}{\if@presetlist}
+% \begin{macro}{\@additionallist}
+% \begin{macro}{\if@additionallist}
+% \begin{macro}{\@gobbleparameters}
+% \changes{v2.02}{2014/10/09}{neu}%^^A
+% Es werden einige Hilfsmakros für die Ausgabe einer Deklaration sowie der 
+% dazugehörigen Änderungsliste initialisiert.
+%    \begin{macrocode}
+\newcommand*\@declarationlist{}
+\let\@declarationlist\relax
+\newcommand*\@presetlist{}
+\let\@presetlist\relax
+\newif\if@presetlist
+\newcommand*\@additionallist{}
+\let\@additionallist\relax
+\newif\if@additionallist
+\newcommand*\@gobbleparameters{%
+  \let\PName\@gobble%
+  \let\PBoolean\relax%
+  \let\PBName\@gobble%
+  \let\PSet\relax%
+  \let\PValue\@gobble%
+  \let\Parameter\@gobble%
+  \let\OParameter\@gobble%
+  \let\LParameter\relax%
+  \let\OLParameter\@gobble%
+  \let\PParameter\@gobble%
+  \let\POParameter\@gobble%
+}
+%    \end{macrocode}
+% Die \env{Declaration}-Umgebung dient zur Deklaration von Optionen, Umgebungen,
+% Befehlen, Parametern, Bezeichnern, Längen, Schriftelementen und Farben. Diese 
+% werden mit den entsprechenden Auszeichnungsbefehlen als obligatorisches 
+% Argument übergeben. Zuvor kann noch vorher im ersten optionalen Argument eine
+% Beschreibung für die Änderungsliste in der Form \oarg{Verison!Beschreibung}
+% angegeben werden. Danach kann im dritten Argument~-- das zweite optionale~-- 
+% die Voreinstellung für eine Option oder dergleichen angegeben werden. Das
+% nächste optionale Argument erlaubt die Angabe einer bedingten Voreinstellung, 
+% also einer anderen Voreinstellung als der zuerst angegeben unter bestimmten
+% Voraussetzungen. Diese wird in der Form \oarg{Bedingung:Voreinstellung}
+% angegeben. Das letzte Argument ist ebenfalls optional, wird aber in der Form
+% \marg{Zusatz} angegeben und enthält ggf. zusätzliche Informationen.
+%
+% Die Umgebung selbst gibt zu Beginn nichts weiter aus sondern sammelt 
+% lediglich alle übergebenen Argumente in jeweiligen Listen. Die eigentliche
+% Ausgabe erfolgt mit dem Befehl \cs{printdeclarationlist}.
+%    \begin{macrocode}
+\NewDocumentEnvironment{Declaration}{omoog}{%
+  \listadd\@declarationlist{#2}%
+%    \end{macrocode}
+% Die optional angegebenen Änderungen werden später mit \cs{ChangedAt@Process} 
+% verarbeitet und für die Änderungsliste sowie die Randnotiz mit
+% \cs{@changedatdeclare} in der Liste \cs{@changedatdeclarelist} gesichert.
+%    \begin{macrocode}
+  \@changedatdeclare{#1}{#2}% 
+%    \end{macrocode}
+% Hier noch die Listen für Voreinstellungen\dots
+%    \begin{macrocode}
+  \IfValueTF{#3}{%
+    \@presetlisttrue%
+    \IfValueTF{#4}{%
+      \def\@tempa[##1:##2]{##1:\,##2}%
+      \listeadd\@presetlist{preset:\,#3\,|\,\expandonce{\@tempa[#4]}}%
+    }{%
+      \listadd\@presetlist{preset:\,#3}%
+    }%
+  }{%
+    \listadd\@presetlist{\relax}%
+  }%
+%    \end{macrocode}
+% \dots sowie zusätliche Informationen.
+%    \begin{macrocode}
+  \IfValueTF{#5}{%
+    \@additionallisttrue%
+    \listadd\@additionallist{\hspace*{\tabcolsep}\small(#5)}%
+    \in@{\Environment}{#2}%
+    \ifin@ \listadd\@additionallist{\tabularnewline}\fi%
+  }{%
+    \listadd\@additionallist{\relax}%
+  }%
+}{%
+%    \end{macrocode}
+% Am Ende der Umgebung wird das übergebenen Hauptargument erneut ausgeführt,
+% was zum Beenden der Indexeinträge für die jeweilige Deklaration führt
+% (\cs{@openindexfalse}, siehe \cs{@ProcessOutput}). Dafür werden die Makros für
+% die Angabe obligatorischer und optionaler Parameter lokal umdefiniert.
+%    \begin{macrocode}
+  \ifx\@declarationlist\relax\else%
+    \ClassError{\tudcls@name}{\string\printdeclarationlist\space is missing}{%
+      \string\@declarationlist\space is not empty. Did you forget\MessageBreak%
+      to print this list with \string\printdeclarationlist?%
+    }%
+  \fi%
+  \@gobbleparameters%
+  \vskip-\lastskip%
+  \@declaretrue\@openindexfalse#2\@declarefalse%
+  \pagebreak[0]%
+}
+%    \end{macrocode}
+% Mit dem Befehl \cs{printdeclarationlist} erfolgt die eingentliche Ausgabe 
+% aller Deklarationen. Zweck ist es, mehrere \env{Declaration}-Umgebungen 
+% ineinander verschachteln zu können und eine Ausgabe aller auf einmal zu 
+% erzeugen. Die durch die ggf. nacheinander folgenden Deklarationen wurden in 
+% entsprechenden Listen gesammelt und werden hier jetzt formatiert ausgegben.
+%    \begin{macrocode}
+\NewDocumentCommand\printdeclarationlist{sod()}{%
+  \ifx\@declarationlist\relax\else%
+    \ifvmode\else\par\fi%
+    \addpenalty{\@beginparpenalty}%
+    \addvspace{1.5\baselineskipglue}%
+%    \end{macrocode}
+% Die Sternversion erzeugt die Ausgabe ohne Deklarationsindexbefehle. Das 
+% optionale Argument kann genutzt werden, um das standardmäßige Atrribut für 
+% die Änderungsliste, welches in \cs{@changedatdeclaredefault} hinterlegt ist,
+% zu ändern. Dies ist für die normale Version auf \emph{neu} und für die
+% Sternversion auf \emph{entfällt} voreingestellt.
+%    \begin{macrocode}
+    \IfBooleanTF{#1}{%
+      \global\@noindextrue%
+      \renewcommand*\@changedatdeclaredefault{\emph{entf\"allt}}%
+    }{%
+      \global\@noindexfalse%
+    }%
+    \IfValueT{#2}{\renewcommand*\@changedatdeclaredefault{\emph{#2}}}%
+    \@declaretrue\@openindextrue%
+    \@afterindentfalse\@afterheading%
+%    \end{macrocode}
+% Die deklarierten Optionen, Umgebungen, Befehle etc. werden umrahmt. Dabe
+% erfolgt die Ausgabe mithilfe einer Box, um die Größe des Deklarationsrahmens
+% zu speichern und die Änderungsmarkierung am Seitenrand auf die richtige Höhe
+% zu platzieren. Da innerhalb von Tabellen der Wert von \cs{baselineskip} auf
+% \makeatletter\the\z@\makeatother~gesetzt wird, muss für einen richtig
+% platzierten Link dieser in \cs{HyperRaiseLinkDefault} gesichert werden.
+%    \begin{macrocode}
+    \def\@tempa##1{\ignorespaces##1\tabularnewline}%
+    \edef\HyperRaiseLinkDefault{\the\baselineskip}%
+    \setbox0\hbox{%
+      \begin{tabular}{|l|}%
+        \hline%
+        \forlistloop\@tempa{\@declarationlist}%
+        \hline%
+      \end{tabular}%
+    }\usebox0%
+    \@declarefalse%
+%    \end{macrocode}
+% Danach werden ggf. die Voreinstellungen und Zusatzinformationen gesetzt.
+%    \begin{macrocode}
+    \ifboolexpr{bool {@presetlist} or bool {@additionallist}}{%
+      \if@presetlist%
+        \qquad%
+        \texttt{%
+          \begin{tabular}{l}%
+            \forlistloop\@tempa{\@presetlist}%
+          \end{tabular}%
+        }%
+      \fi%
+      \if@additionallist%
+        \begin{tabular}{@{}l@{}}%
+          \forlistloop\@tempa{\@additionallist}%
+        \end{tabular}%
+      \fi%
+    }{}%
+%    \end{macrocode}
+% Alle für die Deklaration verwendeten Listen werden nach ihrer Abarbeitung 
+% zurückgesetzt.
+%    \begin{macrocode}
+    \global\let\@declarationlist\relax%
+    \global\let\@presetlist\relax%
+    \global\@presetlistfalse%
+    \global\let\@additionallist\relax%
+    \global\@additionallistfalse%
+%    \end{macrocode}
+% Die Einträge in der Änderungsliste sowie die dazugehörige Randnotiz werden
+% innerhalb der Deklaration mit \cs{printchangedatlist} erzeugt. Das optionale 
+% Argument sorgt für die Verschiebung der Randnotiz auf die richtige Höhe, um 
+% den Höhenversatz zwischen Randnotiz und Deklarationsrahmen auszugleichen.
+%    \begin{macrocode}
+    \printchangedatlist*[%
+      \dimexpr.5\ht\strutbox+.5\dp\strutbox-.5\ht0-.5\dp0\relax%
+    ]%
+%    \end{macrocode}
+% Zum Schluss wird das optionale Argument (in runden Klammern) neben der
+% Deklarationsbox ausgegeben.
+%    \begin{macrocode}
+    \IfValueT{#3}{#3}%
+    \par\nobreak%
+    \vskip 1.5\baselineskipglue%
+    \@afterindentfalse\@afterheading%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@gobbleparameters
+% \end{macro}^^A \if@additionallist
+% \end{macro}^^A \@additionallist
+% \end{macro}^^A \if@presetlist
+% \end{macro}^^A \@presetlist
+% \end{macro}^^A \@declarationlist
+% \end{macro}^^A \printdeclarationlist
+% \end{environment}^^A Declaration
+% \begin{environment}{Declaration*}
+% \changes{v2.02}{2014/10/09}{neu}%^^A
+% Die Sternversion der Umgebung \env{Declaration*} ist für die vereinfachte 
+% Deklaration von Klassen, Paketen etc. gedacht, bei denen keine Ausgabe 
+% sondern lediglich Hyperlink, Indexeintrag und Änderungsnotiz erzeugt werden 
+% sollen. Dabei sollte diese direkt nach einer Gliederungsüberschrift genutzt 
+% werden, in welcher das zu deklarierende ELement (Klasse, Paket etc.) genannt 
+% wird.
+%    \begin{macrocode}
+\NewDocumentEnvironment{Declaration*}{om}{%
+  \@changedatdeclare{#1}{#2}%
+  \@stareddeclaretrue%
+  \global\@noindexfalse%
+  \@declaretrue\@openindextrue#2\@declarefalse%
+  \@stareddeclarefalse%
+}{%
+  \ifx\@changedatdeclarelist\relax\else%
+    \ClassError{\tudcls@name}{\string\printchangedatlist\space is missing}{%
+      \string\@changedatdeclarelist\space is not empty. Did you\MessageBreak%
+      forget to print this list with \string\printchangedatlist?%
+    }%
+  \fi%
+  \@gobbleparameters%
+  \@declaretrue\@openindexfalse#2\@declarefalse%
+}
+%    \end{macrocode}
+% \end{environment}^^A Declaration*
+% \begin{environment}{tabularm}
+% \begin{macro}{\allcolumnpar}
+% \begin{macro}{\@allcolumnpar}
+% \begin{macro}{\tabularm@box}
+% \begin{macro}{\tabularm@num}
+% \begin{length}{\tabularm@wd}
+% Die Umgebung \env{tabularm} ist eine Erweiterung der \env{tabularm}-Umgebung.
+% In dieser wird die Breite der zu setzenden Tabelle mit Hilfe der Box 
+% \cs{tabularm@box} in \cs{tabularm@wd} gespeichert. Anschließend kann mit dem
+% Befehl \cs{allcolumnpar} eine Zeile über alle Spalten der Tabelle 
+% ausgegeben werden. Dabei ist das zu übergebende Argument die Anzahl der zu 
+% erzeugenden, linksbündigen Spalten.
+%    \begin{macrocode}
+\newsavebox\tabularm@box
+\newlength\tabularm@wd
+\newcommand*\tabularm@num{1}
+\NewEnviron{tabularm}[1]{%
+  \begin{lrbox}{\tabularm@box}%
+    \let\allcolumnpar\@gobble%
+    \begin{tabular}{*{#1}l}\BODY\end{tabular}%
+  \end{lrbox}%
+  \setlength{\tabularm@wd}{\wd\tabularm@box}%
+  \def\tabularm@num{#1}%
+  \let\allcolumnpar\@allcolumnpar%
+  \begin{tabular}{*{#1}l}\BODY\end{tabular}%
+}
+\newcommand*\@allcolumnpar[1]{%
+  \multicolumn{\tabularm@num}{@{}p{\tabularm@wd}@{}}{#1}%
+}
+%    \end{macrocode}
+% \end{length}^^A \tabularm@wd
+% \end{macro}^^A \tabularm@box
+% \end{macro}^^A \tabularm@num
+% \end{macro}^^A \@allcolumnpar
+% \end{macro}^^A \allcolumnpar
+% \end{environment}^^A tabularm
+% \begin{environment}{values}
+% \begin{macro}{\before@values}
+% \begin{macro}{\item@values}
+% \begin{macro}{\itemtrue}
+% \begin{macro}{\itemfalse}
+% \begin{macro}{\tud@item@val}
+% \begin{macro}{\tud@item@add}
+% \begin{macro}{\tud@item@format}
+% \begin{macro}{\tud@item}
+% \begin{macro}{\tud@@item}
+% \begin{macro}{\tud@@@item}
+% Die Liste \env{values} dient zum Benennen der möglichen Werte für einen 
+% bestimmten Schlüssel. Im Handbuch kommt diese Liste vorallem bei Optionen 
+% aber auch bei bestimmten Befehls- und Optionsparametern zum Einsatz.
+%    \begin{macrocode}
+\newlist{values}{description}{1}
+\setlist[values]{%
+  topsep=.5\baselineskipglue,labelwidth=\columnwidth,labelsep=0pt,%
+  font=\normalfont\ttfamily,before*=\before@values%
+}
+%    \end{macrocode}
+% Zu Beginn der Umgebung wird die Definition des \cs{item}-Befehls gesichert 
+% und anschließend geändert.
+%    \begin{macrocode}
+\newcommand*\before@values{%
+  \let\item@values\item%
+  \let\item\tud@item%
+}
+%    \end{macrocode}
+% Die folgenden beiden Befehle enthalten die Standardwerte für boolsche 
+% Schalter.
+%    \begin{macrocode}
+\newcommand*\itemfalse{\def\tud@item@val{false/off/no}\item}
+\newcommand*\itemtrue{\def\tud@item@val{true/on/yes}\item}
+%    \end{macrocode}
+% Mit der neuen Definition kann der Säumniswert mit \cs{item*} explizit in der 
+% Liste hervorgehoben werden.
+%    \begin{macrocode}
+\newcommand*\item@values{}
+\newcommand*\tud@item@val{}
+\newcommand*\tud@item@add{}
+\newcommand*\tud@item@format{}
+\newcommand*\tud@item{%
+  \@ifstar{%
+    \def\tud@item@add{(S\"aumniswert)}%
+    \let\tud@item@format\emph%
+    \tud@@item%
+  }{%
+    \let\tud@item@add\relax%
+    \let\tud@item@format\relax%
+    \tud@@item%
+  }%
+}
+%    \end{macrocode}
+% In der zweiten Instanz wird das optionale Argument von \cs{item} ausgewertet.
+% Dabei wird das Hilfsmakro \cs{tud@item@val} beachtet, welches evtl. mit den 
+% Befehlen \cs{itemtrue} oder \cs{itemfalse} gesetzt wurde und vor dem 
+% optionalen Argument aufgeführt wird. 
+%    \begin{macrocode}
+\newcommand*\tud@@item[1][]{%
+  \ifstrempty{#1}%
+    {\edef\@tempa{\tud@item@val}}%
+    {\ifstr{\tud@item@val}{}%
+      {\edef\@tempa{#1}}%
+      {\edef\@tempa{\tud@item@val/#1}}%
+    }%
+  \def\tud@item@val{}%
+%    \end{macrocode}
+% Wurde weder \cs{tud@item@val} gesetzt noch ein Wert im optionalen Argument 
+% von \cs{item} angegeben, so wird der gesicherte Befehl ausgeführt. Ansonsten 
+% folgt die dritte Instanz.
+%    \begin{macrocode}
+  \ifstr{\@tempa}{}{\item@values}{\tud@@@item}%
+}
+%    \end{macrocode}
+% Der gesicherte Befehl wird mit den aufbereiteten Formatierungen genutzt.
+%    \begin{macrocode}
+\newcommand*\tud@@@item[1][]{%
+  \ifstrempty{#1}{}{%
+    \ifx\tud@item@add\relax%
+      \def\tud@item@add{#1}%
+    \else%
+      \apptocmd{\tud@item@add}{~#1}{}{}%
+    \fi%
+  }%
+  \item@values[%
+    \tud@item@format{\@tempa:}%
+    \ifx\tud@item@add\relax\else%
+      {\normalfont\space\footnotesize\tud@item@add}%
+    \fi%
+  ]%
+}
+%    \end{macrocode}
+% \end{macro}^^A \tud@@@item
+% \end{macro}^^A \tud@@item
+% \end{macro}^^A \tud@item
+% \end{macro}^^A \tud@item@format
+% \end{macro}^^A \tud@item@add
+% \end{macro}^^A \tud@item@val
+% \end{macro}^^A \itemfalse
+% \end{macro}^^A \itemtrue
+% \end{macro}^^A \item@values
+% \end{macro}^^A \before@values
+% \end{environment}^^A values
+%
+% \subsubsection{Erläuterungen und weiterführende Ergänzungen im Handbuch}
+%
+% Es folgen einige Umgebungen, mit welchen bestimmte Aspekte oder Pakete im
+% Handbuch erläutert werden.
+%
+% \begin{environment}{Example}
+% \begin{environment}{Example*}
+% Diese Umgebung wird für die exemplarische Erläuterung von bestimmten Aspekten 
+% im Handbuch verwendet. Wenn dafür ein Quelltextauszug nötig ist, kann 
+% innerhalb dieser die \env{Code}-Umgebung genutzt werden. Die Sternversion 
+% unterdrückt dabei das Zurücksetzen des eigentlich entfernten vertikalen 
+% Abstandes.
+%    \begin{macrocode}
+\newenvironment{Example}{\@nameuse{Example*}}{%
+  \@nameuse{endExample*}%
+  \addvspace{-\topsep}%
+}
+\newenvironment{Example*}{%
+  \labeling{{\usekomafont{disposition}Beispiel:\ }}%
+  \item[{\usekomafont{disposition}Beispiel:\ }]%
+}{%
+  \endlabeling%
+}
+%    \end{macrocode}
+% \end{environment}^^A Example*
+% \end{environment}^^A Example
+% \begin{environment}{Code}
+% \begin{macro}{\tud@currentHref}
+% Folgend werden Befehle und Umgebungen für die Darstellung von Quelltexten im 
+% Handbuch definiert. Mit dieser Umgebung können kurze Quelltextbeispiele im
+% Handbuch ausgegeben werden. Sicherlich sinnvoll ist, die \env{Code}-Umgebung
+% innerhalb von \env{Example} oder \env{quoting} zu verwenden, um den
+% Quelltext etwas abzuheben.
+%    \begin{macrocode}
+\lstnewenvironment{Code}[1][]{\lstset{style=tudscr,#1}}{}
+%    \end{macrocode}
+% Innerhalb der Umgebung \env{Code} wird \cs{@currentHref} unerwünschter Weise
+% geändert. Um dies zu vermeiden, wird dieser Befehl gesichert und anschließend
+% zurückgesetzt.
+%    \begin{macrocode}
+\newcommand*\tud@currentHref{}
+\BeforeBeginEnvironment{Code}{\global\let\tud@currentHref\@currentHref}
+\AfterEndEnvironment{Code}{\global\let\@currentHref\tud@currentHref}
+%    \end{macrocode}
+% \end{macro}^^A \tud@currentHref
+% \end{environment}^^A Code
+% \begin{environment}{packages}
+% \begin{macro}{\itempackages}
+% \begin{macro}{\tud@item@pkg}
+% \changes{v2.02}{2014/10/08}{\cs{DeclarePackage} entfernt}%^^A
+% \changes{v2.02}{2014/10/09}{optionales Argument für CTAN-Link}%^^A
+% \begin{macro}{\before@packages}
+% Ähnlich wie für die Auflistung von Werten eines Schlüssels wird auch mit der 
+% Charakterisierung von Paketen verfahren. Diese werden in der Auflistung 
+% speziell gekennzeichnet und mit \cs{DeclarePackage} im Index eingetragen.
+%    \begin{macrocode}
+\newlist{packages}{description}{2}
+\setlist[packages]{%
+  topsep=\medskipamount,labelwidth=\linewidth,labelsep=0pt,font=\normalfont,%
+  parsep=\parskip,listparindent=\parindent,before=\before@packages%
+}
+\newcommand*\itempackages{}
+\newcommand*\before@packages{%
+  \ifdefvoid{\itempackages}{%
+    \let\itempackages\item%
+    \let\item\tud@item@pkg%
+  }{}%
+}
+\NewDocumentCommand\tud@item@pkg{od()}{%
+  \itempackages[{%
+    \IfValueT{#1}{%
+      \manualhyperdef{files:#1}%
+      \IfValueTF{#2}{%
+        \def\@tempa{http://www.ctan.org/pkg/#2}%
+      }{%
+        \def\@tempa{http://www.ctan.org/pkg/#1}%
+      }%
+      \href{\@tempa}{\Package{#1}'none'|!|}%
+    }%
+  }]%
+}
+%    \end{macrocode}
+% \end{macro}^^A \before@packages
+% \end{macro}^^A \tud@item@pkg
+% \end{macro}^^A \itempackages
+% \end{environment}^^A packages
+%
+% \subsubsection{Änderungsliste}
+%
+% Um dem Anwender einen schnellen Überblick zu Änderungen der aktuellen Verison 
+% bereitstellen zu können, werden Befehle zur automatisierten Erzeugung  einer 
+% solchen Liste definiert.
+%
+% \begin{macro}{\printchangedatlist}
+% \changes{v2.02}{2014/10/09}{neu}%^^A
+% \begin{macro}{\@changedatdeclare}
+% \changes{v2.02}{2014/10/09}{neu}%^^A
+% \begin{macro}{\@changedatdeclaredefault}
+% \changes{v2.02}{2014/10/09}{neu}%^^A
+% \begin{macro}{\@changedatdeclarelist}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% Um für Änderungsnotizen die dazugehörige Option, Befehl etc. bei einer 
+% Deklaration kenntlich zu machen, wird das deklarierte Element zusammen mit 
+% der Notiz in einer Liste gespeichert. Da mehrere kommaseparierte Werte
+% angegeben werden können, muss das optionale Argument der Umgebung
+% \env{Declaration} dahingehend abgearbeitet werden. Wenn keine weitere
+% Erklärung angegeben wurde, wird der entspredchende Eintrag mit dem Attribut
+% versehen, welches in \cs{@changedatdeclaredefault} gespeichert ist.
+%    \begin{macrocode}
+\newcommand*\@changedatdeclarelist{}
+\let\@changedatdeclarelist\relax
+\newcommand*\@changedatdeclaredefault{\emph{neu}}
+\newcommand*\@changedatdeclare[2]{%
+  \IfValueT{#1}{%
+    \@for\@tempa:=#1\do{%
+      \protected@expandtwoargs\in@{!}{\@tempa}%
+      \ifin@%
+        \expandafter\listadd\expandafter\@changedatdeclarelist%
+          \expandafter{\@tempa!#2}%
+      \else%
+        \expandafter\listadd\expandafter\@changedatdeclarelist%
+          \expandafter{\@tempa!\@changedatdeclaredefault!#2}%
+      \fi%
+    }%
+  }%
+}
+%    \end{macrocode}
+% Die Einträge in der Änderungsliste sowie die dazugehörige Randnotiz werden 
+% mit dem Makro \cs{ChangedAt@Process} abgearbeitet, sortiert und erstellt. Bei
+% \cs{printchangedatlist} wird mit dem optionalen Argument der Versatz für die 
+% Randnotiz gesetzt. Dieser wird wie auch die Liste an \cs{ChangedAt@Process}
+% übergeben, womit diese und die Randnotiz letztendlich erzeugt werden.
+%    \begin{macrocode}
+\NewDocumentCommand\printchangedatlist{sO{\z@}}{%
+  \ifx\@changedatdeclarelist\relax\else%
+    \ChangedAt@Process{#2}{\@changedatdeclarelist}%
+    \global\let\@changedatdeclarelist\relax%
+    \IfBooleanF{#1}{%
+      \par\nobreak\vskip\dimexpr-\parskip-\baselineskip%
+      \@afterindentfalse\@afterheading%
+    }%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@changedatdeclarelist
+% \end{macro}^^A \@changedatdeclaredefault
+% \end{macro}^^A \@changedatdeclare
+% \end{macro}^^A \printchangedatlist
+% \begin{macro}{\ChangedAt}
+% \changes{v2.02}{2014/07/25}{erweitert}%^^A
+% \changes{v2.02}{2014/10/15}{Sternversion neu (keine Randnotiz)}%^^A
+% An den Befehl \cs{ChangedAt} kann eine kommagetrente Liste mit verschiedenen
+% Versionsnummern und dazugehörigen Änderungen übergeben werden. Er wird in der 
+% Form: \cs{ChangedAt}\marg{Version!Definition,Version!Erweiterung} genutzt.
+% Der Prozess selbst wird mit \cs{ChangedAt@Process} durchgeführt. Es wird
+% zu der angegebenen Versionsnummer ein Eintrag in die Änderungsliste erstellt,
+% wenn mit einem Ausrufezeichen getrennt der gewünschte Inhalt gegeben wurde.
+%
+% Alle übergegebenen Versionsnummern werden als Liste mit einmaligen Einträgen 
+% in einer Randnotiz gesetzt. Mit dem optionalen Argument kann ein vertikaler 
+% dieser angegeben werden. Die Sternversion von \cs{ChangedAt} unterdrückt die
+% Ausgabe dieser Randnotiz.
+%    \begin{macrocode}
+\NewDocumentCommand\ChangedAt{sO{\z@}m}{\ChangedAt@Process[#1]{#2}{#3}}
+%    \end{macrocode}
+% \end{macro}^^A \ChangedAt
+% \begin{macro}{\ChangedAt@Process}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% \begin{macro}{\ChangedAt@@Process}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% \begin{macro}{\ChangedAt@@@Process}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% \changes{v2.02}{2014/10/16}{Unterteilung Änderungsliste in Bereiche}%^^A
+% \begin{macro}{\ChangedAt@Default}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% \begin{macro}{\ChangedAt@Split}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% \begin{macro}{\@changedatlist}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% \begin{macro}{\@changedatversionlist}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% Mit diesen Befehlen wird die Änderungshistorie in Form eines Index erstellt. 
+% Der Befehl \cs{ChangedAt@Process} setzt eine kommagetrennte Liste in eine 
+% im Format von \pkg{etoolbox} um. Anschließend wird diese für die Liste der
+% Änderungen mit \cs{ChangedAt@Split} aufgespalten. Die einzelnen Einträge
+% werden mit \cs{ChangedAt@@Process} weiter verarbeitet.
+%    \begin{macrocode}
+\newcommand*\@changedatlist{}
+\newcommand*\ChangedAt@Default{}
+\newcommand*\@changedatversionlist{}
+\let\@changedatversionlist\relax
+\newcommand*\ChangedAt@Process[3][]{%
+  \let\@changedatlist\relax%
+  \let\@changedatversionlist\relax%
+  \@for\@tempa:=#3\do{\listeadd{\@changedatlist}{\expandonce\@tempa}}%
+  \forlistloop\ChangedAt@Split{\@changedatlist}%
+%    \end{macrocode}
+% Nach der Verarbeitung aller Einräge sind in \cs{@changedatlist} alle 
+% angegebenen Versionsnummern genau einmal enthalten. Mit \cs{sortlist} werden 
+% diese in die richtige Reihenfolge sortiert und anschließend als Randnotiz in
+% einer Tabelle ausgegeben, falls nicht die Sternversion verwendet wurde.
+%    \begin{macrocode}
+  \IfBooleanF{#1}{%
+    \sortlist{\@changedatversionlist}%
+    \strut%
+    \marginnote{%
+      \def\@tempa####1{%
+        \ignorespaces\manualhyperref{####1}{####1}\tabularnewline%
+      }%
+      \begin{tabular}{|l|}%
+        \hline%
+        \forlistloop\@tempa{\@changedatversionlist}%
+        \hline%
+      \end{tabular}%
+    }[#2]%
+    \ignorespaces%
+  }%
+}
+%    \end{macrocode}
+% Der Befehl \cs{ChangedAt@Split} teilt ein gegebenes Argument am Delimiter
+% Ausrufezeichen (\enquote{!}) in drei Argumente auf und reicht diese an 
+% \cs{ChangedAt@@Process} weiter. Sollte kein oder nur Ausrufezeichen gefunden 
+% werden, so wird das zweite und/oder dritte Argument mit dem~-- vom Paket
+% \pkg{xparse} definierten~-- leeren Wert \texttt{-NoValue-} an den Befehl
+% \cs{ChangedAt@@Process} übergeben.
+%    \begin{macrocode}
+\NewDocumentCommand\ChangedAt@Split{>{\SplitArgument{2}{!}}m}{%
+  \ChangedAt@@Process#1%
+}
+%    \end{macrocode}
+% Hiermit wird der Eintrag in die Änderungshistorie erzeugt. Dabei ist zu 
+% unterscheiden, ob der Befehl \cs{ChangedAt} direkt genutzt wurde oder aber 
+% der Eintrag innerhalb der \env{Declaration}-Umgebung erfolgte. Dies wird 
+% anhand von des dritten Argumentes erkannt. Für den ersten Fall erfolgt ein
+% Eintrag lediglich, wenn neben der Versionsnummer selbst auch eine Erklärung
+% angegben wurde~-- eine Randnotiz wird aber in jedem Fall gesetzt. Im zweiten
+% Fall wird der Erklärung \emph{immer} \cs{ChangedAt@Default} vorangestellt.
+% Sollte keine Erklärung direkt angegeben worden sein, so wird in der
+% Änderungsliste vermerkt, dass es sich um eine \emph{neue} Option, Befehl etc.
+% handelt. Der eigentliche Eintrag selbst erfolgt mit \cs{ChangedAt@@@Process}.
+%    \begin{macrocode}
+\newcommand*\ChangedAt@@Process[3]{%
+  \IfValueTF{#3}{%
+%    \end{macrocode}
+% Bei der Deklaration von Optionen, Befehlen etc. werden diese automatisch in 
+% der Liste der Änderungen im Bereich \enquote{Implementierung} vor der
+% gegebenen Erklärung selbst ausgegeben. Hierfür wird das dritte Argument
+% genutzt. Damit lediglich diese und nicht noch die dazugehörigen Argumente
+% eingetragen werden, werden die relevanten Befehle deaktiviert und das
+% optionale Argument in \cs{ChangedAt@Default} expandiert.
+%    \begin{macrocode}
+    \begingroup%
+      \@gobbleparameters%
+      \xdef\ChangedAt@Default{#3}%
+    \endgroup%
+    \ChangedAt@@@Process{#1}{Implementierung}{\ChangedAt@Default: #2}%
+  }{%
+%    \end{macrocode}
+% Wurde \cs{ChangedAt} direkt und nicht über das optionale Argument der 
+% Umgebungen \env{Declaration} genutzt, erscheint der gewünschte Eintrag im
+% Bereich \enquote{Allgemein}.
+%    \begin{macrocode}
+    \IfValueT{#2}{\ChangedAt@@@Process{#1}{Allgemein}{#2}}%
+  }%
+%    \end{macrocode}
+% Außerdem wird der Liste \cs{changedatversionlist} die aktuelle Version
+% einmalig hinzugefügt, um alle in einer Randnotiz ausgeben zu können.
+%    \begin{macrocode}
+  \xifinlist{#1}{\@changedatversionlist}{}{\listeadd\@changedatversionlist{#1}}%
+}
+%    \end{macrocode}
+% Mit \cs{ChangedAt@@@Process} Erfolgen die Einträge in die Änderungsliste.
+%    \begin{macrocode}
+\newcommand*\ChangedAt@@@Process[3]{%
+  \begingroup%
+%    \end{macrocode}
+% Für geänderte Parameter wird als Haupteintrag das dazugehörige Makro bzw. die
+% entsprechende Umgebung verwendet. Der geänderte Parameter folgt danach.
+% Zuerst muss ggf. das Makro \cs{ChangedAt@Default} expandiert werden.
+%    \begin{macrocode}
+    \def\@tempa{#3}%
+    \in@{\ChangedAt@Default}{#3}%
+    \ifin@%
+      \expandafter\def\expandafter\@tempa\expandafter{\ChangedAt@Default}%
+    \fi%
+%    \end{macrocode}
+% Danach wird geprüft, ob das Makro \cs{Key} übergeben wurde. Außerdem wird ein 
+% Anker in der Änderungsliste für die Referenzierung auf die einzelnen Bereiche 
+% (\enquote{Allgemein}, \enquote{Implementierung} und \enquote{Umbenennungen}) 
+% gesetzt.
+%    \begin{macrocode}
+    \expandafter\in@\expandafter\Key\expandafter{\@tempa}%
+    \ifin@%
+      \begingroup%
+        \RenewDocumentCommand\Key{sommo}{\xdef\@TempKey{##3:}}%
+        \setbox0\hbox{#3}%
+      \endgroup%
+      \index[changelog]{%
+        #1 \manualhyperdef*{#1}!\manualhyperdef*{#1:#2}{#2}!\@TempKey\ #3%
+      }%
+    \else%
+      \index[changelog]{%
+        #1 \manualhyperdef*{#1}!\manualhyperdef*{#1:#2}{#2}!#3%
+      }%
+    \fi%
+  \endgroup%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@changedatversionlist
+% \end{macro}^^A \@changedatlist
+% \end{macro}^^A \ChangedAt@Split
+% \end{macro}^^A \ChangedAt@Default
+% \end{macro}^^A \ChangedAt@@@Process
+% \end{macro}^^A \ChangedAt@@Process
+% \end{macro}^^A \ChangedAt@Process
+% \begin{macro}{\Rename}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% Der Befehl \cs{Rename} erzeugt einen Eintrag in der Änderungshistorie sowie 
+% einen Eintrag im gewünschten Index mit einem Verweis auf den neuen Befehl.
+%    \begin{macrocode}
+\newcommand*\Rename[4][]{%
+  \ChangedAt@@@Process{#2}{Umbenennungen}{%
+    #3: \emph{umbenannt}~\textrightarrow~siehe #4%
+  }%
+  \ChangedAt@@@Process{#2}{Implementierung}{%
+    #4: \emph{neu}~\textrightarrow~ersetzt #3%
+  }%
+  \listeadd\@changedatdeclarelist{#2}%
+  \index[#1]{#3|see{#4}}%
+}
+%    \end{macrocode}
+% \end{macro}^^A \Rename
+% \begin{macro}{\@ProcessChangedAt}
+% \changes{v2.02}{2014/07/25}{erweitert}%^^A
+% \changes{v2.02}{2014/10/08}{Sternversion ergänzt}%^^A
+% Die Änderungsliste erhält ebenfalls einen Hyperlink zur Deklaration. Für
+% Umgebungs- und Befehlsparameter wird mit dem zweiten optionalen Argument ein
+% Untereintrag für die dazugehörige Umgebung beziehungsweise den dazugehörigen
+% Befehl erzeugt.
+%    \begin{macrocode}
+\NewDocumentCommand\@ProcessChangedAt{mmd()mmm}{%
+  \begingroup%
+    \let\texttt\@firstofone%
+    \let\textsbn\@firstofone%
+    \let\textsbs\@firstofone%
+    \let\Environment\@firstofone%
+    \let\Macro\@firstofone%
+    \IfValueTF{#3}{\xdef\@tempa{#2:#3:#5}}{\xdef\@tempa{#2:#5}}%
+  \endgroup%
+  \IfBooleanTF{#1}{%
+    \def\@tempb{\begingroup#4#5\endgroup}%
+  }{%
+    \def\@tempb{\begingroup#4#5\endgroup~{\idxfont(#6)}}%
+  }%
+  \ifcsdef{r@\@tempa}{\hyperidx[\@tempa]{\@tempb}}{\@tempb}%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@ProcessChangedAt
+% \begin{macro}{\sortlist}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% \begin{macro}{\@sortlist}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% \begin{macro}{\@sortedlist}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% \begin{macro}{\if@listsorted}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% Der Befehl \cs{sortlist} erwartet eine \pkg{etoolbox}-Liste und sortiert diese
+% mit \cs{@sortlist} in alphabetischer Reihenfolge in eine kommagetrennte 
+% Auflistung. Diese wird anschließend wieder in eine \pkg{etoolbox}-Liste 
+% umgewandelt.
+%    \begin{macrocode}
+\newif\if@listsorted
+\newcommand*\@sortedlist{}
+\newcommand*\sortlist[1]{%
+  \let\@sortedlist\relax%
+  \forlistloop\@sortlist{#1}%
+  \let#1\relax%
+  \@for\@tempa:=\@sortedlist\do{\listeadd{#1}{\@tempa}}%
+}
+%    \end{macrocode}
+% Hier erfolgt die eigentliche Sortierung der Liste.
+%    \begin{macrocode}
+\newcommand*\@sortlist[1]{%
+%    \end{macrocode}
+% Der erste Eintrag wird direkt der Liste hinzugefügt.
+%    \begin{macrocode}
+  \ifx\@sortedlist\relax%
+    \def\@sortedlist{#1}%
+%    \end{macrocode}
+% Weitere Einräge werden mit \cs{pdfstrcmp} an der richtigen Stelle eingefügt.
+% Dabei wird die kommagetrennte Liste \cs{@sortedlist} mit \cs{@for} durchlaufen
+% und \cs{@tempb} als Hilfsmakro verwendet, in welches die aktuelle Liste 
+% innerhalb der \cs{@for}-Schelife stückweise expandiert wird. Der Schalter
+% \cs{if@listsorted} wird gesetzt, wenn das aktuelle Element an der richtigen
+% Stelle eingesetzt wurde.
+%    \begin{macrocode}
+  \else%
+    \@listsortedfalse%
+    \let\@tempb\@empty%
+    \@for\@tempa:=\@sortedlist\do{%
+%    \end{macrocode}
+% Ist der Eintrag bereits erfolgt, wird der verbliebene Teil der Liste 
+% angehängt.
+%    \begin{macrocode}
+      \if@listsorted%
+        \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
+      \else%
+%    \end{macrocode}
+% Liegt der Eintrag in alphabetischer Reihenfolge vor dem aktuellen der 
+% durchlaufenenen Liste, so wird dieser davor eingefügt. Dabei muss der Fall, 
+% dass das Element der erste Eintrag in der temporären Liste \cs{@tempb} ist, 
+% eine Sonderbehandlung erfolgen. Anschließend wird \cs{@listsortedtrue} 
+% gesetzt.
+%    \begin{macrocode}
+        \expandafter\ifnum\pdfstrcmp{#1}{\@tempa}<0\relax%
+          \ifx\@tempb\@empty%
+            \expandafter\edef\expandafter\@tempb\expandafter{%
+              #1,\@tempa%
+            }%
+          \else%
+            \expandafter\edef\expandafter\@tempb\expandafter{%
+              \@tempb,#1,\@tempa%
+            }%
+          \fi%
+          \@listsortedtrue%
+        \else%
+%    \end{macrocode}
+% Ist Eintrag in alphabetischer Reihenfolge nach dem aktuellen der geprüften 
+% Liste, so wird dieser (noch) nicht eingefügt. Der Sonderfall des ersten
+% Elementes wird abgedeckt.
+%    \begin{macrocode}
+          \ifx\@tempb\@empty%
+            \expandafter\edef\expandafter\@tempb\expandafter{\@tempa}%
+          \else%
+            \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
+          \fi%
+        \fi%
+      \fi%
+    }%
+%    \end{macrocode}
+% Wurde der Eintrag nach dem Durchlaufen der Liste nicht eingefügt, so erfolgt 
+% dies hier am Ende der Liste.
+%    \begin{macrocode}
+    \if@listsorted\else%
+      \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,#1}%
+    \fi%
+%    \end{macrocode}
+% Die temporäre Liste \cs{@tempb} wird auf \cs{@sortedlist} überschrieben.
+%    \begin{macrocode}
+    \let\@sortedlist\@tempb%
+  \fi%
+}
+%    \end{macrocode}
+% \end{macro}^^A \if@listsorted
+% \end{macro}^^A \@sortedlist
+% \end{macro}^^A \@sortlist
+% \end{macro}^^A \sortlist
+%
+% \iffalse
+%</class>
+%<*package>
+% \fi
+%
+% \subsection{Befehle und Umgebungen für das Paket}
+%
+% Hier taucht alles auf, was lediglich für das Paket \pkg{tudscrman} und nicht 
+% für die Klasse benötigt wird.
+%
+% Für den Anwender werden im \TUDScript-Bundle einige Tutorials für die Nutzung 
+% von \LaTeXe bereitgestellt. Innerhalb dieser werden Auszüge von Quelltexten 
+% verwendet und erläutert. Zum einen soll die Möglichkeit geschaffen werden, 
+% diese gesammelt am Ende eines Tutorials für ein Copy"~\&"~Paste"~Beispiel zu 
+% verwenden. Andererseits soll auch das sofortige Ausführen des beschriebenen 
+% Quelltextauszuges direkt im Tutorial möglich sein. Dafür werden im Folgenden 
+% die Umgebungen \env{Preamble}, \env{Trunk} und \env{Hint} sowie daraus 
+% abgeleitet Varianten definiert, womit sich die Angabe und Erläuterung der 
+% Quelltexte im Tutorial logisch strukturieren lässt und dennoch die notwendige 
+% Ordnung dieser für das Copy"~\&"~Paste"~Beispiel aufrechterhalen werden kann.
+% Hierfür zeichnen die beiden Umgebungen \env{Preamble} und \env{Trunk} und
+% deren Derivate verantwortlich. Die Umgebung \env{Hint} steht für zusätzliche 
+% Erläuterungen bereit, welche jedoch nicht in das Copy"~\&"~Paste"~Beispiel 
+% übernommen werden.
+% 
+% Damit die Umgebungen nicht doppelt implementiert werden müssen, werden die
+% Hilfsmakros \cs{tud@tut@pre} und \cs{tud@tut@post} definiert. Diese nutzen 
+% die \env{filecontents}"=Umgebung, welche den Inhalt in die temporäre Datei 
+% \val{\string\jobname-temp.tex} schreibt. Zusätzlich wird dieser Inhalt mit
+% \cs{tud@tut@append} der Datei \val{\string\jobname-preamble-temp.tex} oder 
+% \val{\string\jobname-trunk-temp.tex}~-- abhängig vom gegebenen Argument~--
+% hinzugefügt. So werden die im Dokumentes gesetzten Quelltextauszüge für ein 
+% Copy"~\&"~Paste"~Beispiel gesammelt und mit \cs{FinishTutorial} ausgegeben.
+% \begin{environment}{Preamble}
+% \changes{v2.02}{2014/11/02}{neu}%^^A
+% \begin{environment}{Preamble*}
+% \changes{v2.02}{2014/11/03}{neu}%^^A
+% \begin{environment}{Preamble+}
+% \changes{v2.02}{2014/11/03}{neu}%^^A
+% Die Umgebung \env{Preamble} dient für die Ausgabe von Quelltexten, welche in 
+% einem \LaTeXe-Dokument in der Präambel verwendet werden müssen oder sollten. 
+% Die in ihr gesetzten Inhalte werden für das Copy"~\&"~Paste-Beispiel vor den 
+% Inhalten aus der Umgebung \env{Trunk} ausgegeben. Die Sternversion führt
+% den Inhalt zusätzlich im Dokument aus. Die Pluszechen"=Version fügt dem
+% Ausgabestream ihren Inhalt hinzu, ohne das dieser ausgegeben oder ausgeführt
+% wird.
+%    \begin{macrocode}
+\newenvironment{Preamble}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \tud@tut@append{\tud@write@i}%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Preamble*}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \tud@tut@append{\tud@write@i}%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \tud@tut@input%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Preamble+}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \tud@tut@append{\tud@write@i}%
+  \gdef\@tempa{%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+%    \end{macrocode}
+% \end{environment}^^A Preamble+
+% \end{environment}^^A Preamble*
+% \end{environment}^^A Preamble
+% \begin{environment}{Trunk}
+% \changes{v2.02}{2014/08/16}{neu}%^^A
+% \begin{environment}{Trunk*}
+% \changes{v2.02}{2014/08/19}{neu}%^^A
+% \begin{environment}{Trunk+}
+% \changes{v2.02}{2014/11/03}{neu}%^^A
+% \begin{environment}{Trunk!}
+% \changes{v2.02}{2014/10/07}{neu}%^^A
+% Die Umgebung \env{Trunk} dient zur Ausgabe von exemplarischen Quelltexten, 
+% welche in einem \LaTeXe-Dokument innerhalb der \env{document}-Umgebung
+% verwendet werden müssen oder sollten. Für das Copy"~\&"~Paste-Beispiel werden 
+% die gegebenen Inhalte nach den Inhalten aus der Umgebung \env{Preamble} 
+% ausgegeben. Die Sternversion der Umgebung führt ihren Inhalt zusätzlich im
+% Dokument aus. Die Pluszeichen"=Version fügt dem Ausgabestream ihren Inhalt
+% hinzu, ohne diesen auszugeben oder auszuführen. Die Ausrufezeichen"=Version
+% fügt den Quelltext im Dokument ein und führt diesen zusätzlich in einer
+% separaten Datei mit einem minimalen Dokumentkörper aus, um daraus eine
+% PDF-Datei zu erzeugen, welche im Nachhinein mit \cs{IncludeStandalone} als
+% Grafik eingebunden werden kann. Dies ist für Quelltextabschnitte gedacht,
+% deren Ausgabe zu groß ist, um diese direkt anzuzeigen und dennoch dargestellt
+% werden sollen.
+%    \begin{macrocode}
+\newenvironment{Trunk}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \tud@tut@append{\tud@write@ii}%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Trunk*}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \tud@tut@append{\tud@write@ii}%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \tud@tut@input%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Trunk+}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \tud@tut@append{\tud@write@ii}%
+  \gdef\@tempa{%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Trunk!}[1]{%
+  \gdef\@StandaloneFile{#1}%
+  \tud@tut@pre%
+}{%
+  \tud@tut@post%
+  \tud@tut@append{\tud@write@ii}%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \tud@tut@pdf%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+%    \end{macrocode}
+% \end{environment}^^A Trunk!
+% \end{environment}^^A Trunk+
+% \end{environment}^^A Trunk*
+% \end{environment}^^A Trunk
+% \begin{environment}{Hint}
+% \changes{v2.02}{2014/09/16}{neu}%^^A
+% \begin{environment}{Hint*}
+% \changes{v2.02}{2014/10/13}{neu}%^^A
+% \begin{environment}{Hint?}
+% \changes{v2.02}{2014/12/09}{neu}%^^A
+% \begin{environment}{Hint!}
+% \changes{v2.02}{2014/11/13}{neu}%^^A
+% Um Quelltextausschnitte zur weiterführenden Information anzugeben, wird die
+% Umgebung \env{Hint} definiert. Der Inhalt wird ausgegben und~-- falls die
+% Sternversion genutzt wurde~-- auch ausgeführt, allerdings nicht in das 
+% Copy"~\&"~Paste"~Beispiel übernommen. Ansonsten entsprechen alle Umgebungen 
+% in ihren Eigenschaften den äquivalenten \env{Trunk}-Umgebungen. Die Version 
+% mit Fragezeichen ist für Quelltextauszüge gedacht, die ungeprüft \emph{vor}
+% dessen Ausgabe ausgeführt werden sollen. 
+%    \begin{macrocode}
+\newenvironment{Hint}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Hint*}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \tud@tut@input%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Hint?}{\tud@tut@pre}{%
+  \tud@tut@post%
+  \gdef\@tempa{%
+    \InputCode%
+    \tud@tut@lst%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+\newenvironment{Hint!}[1]{%
+  \gdef\@StandaloneFile{#1}%
+  \tud@tut@pre%
+}{%
+  \tud@tut@post%
+  \gdef\@tempa{%
+    \tud@tut@lst%
+    \tud@tut@pdf%
+    \global\let\@CodePreamble\relax%
+  }%
+  \aftergroup\@tempa%
+}
+%    \end{macrocode}
+% \end{environment}^^A Hint!
+% \end{environment}^^A Hint?
+% \end{environment}^^A Hint*
+% \end{environment}^^A Hint
+% \begin{macro}{\@StandaloneFile}
+% \changes{v2.02}{2014/08/19}{neu}%^^A
+% Die Umgebungen \env{Trunk!} und \env{Hint!} erzeugen nach der Ausgabe des
+% Quelltextes mit dem Makro \cs{tud@tut@pdf} eine PDF-Datei, welche mit
+% \cs{IncludeStandalone} in das Tutorial eingebunden werden kann.
+%    \begin{macrocode}
+\newcommand*\@StandaloneFile{}
+\let\@StandaloneFile\relax
+%    \end{macrocode}
+% \end{macro}^^A \@StandaloneFile
+% \begin{macro}{\tud@tut@pre}
+% \changes{v2.02}{2014/08/19}{neu}%^^A
+% \begin{macro}{\tud@tut@post}
+% \changes{v2.02}{2014/08/19}{neu}%^^A
+% Dies sind die Hilfsmakros, welche zu Beginn und Ende der Quelltextumgebungen 
+% \env{Preamble}, \env{Trunk} und \env{Hint} für das Sichern der Inhalte in
+% eine Hilfsdatei verantwortlich zeichnen.
+%    \begin{macrocode}
+\newcommand*\tud@tut@pre{%
+  \ActivateWarningFilters[Tutorial]%
+  \@nameuse{filecontents*}{\jobname-temp.tex}%
+}
+\newcommand*\tud@tut@post{%
+  \@nameuse{endfilecontents*}%
+  \DeactivateWarningFilters[Tutorial]%
+}
+%    \end{macrocode}
+% \end{macro}^^A \tud@tut@post
+% \end{macro}^^A \tud@tut@pre
+% \begin{macro}{\tud@tut@lst}
+% \changes{v2.02}{2014/10/07}{neu}%^^A
+% Damit wird der Quelltext eingezogen ausgegeben.
+%    \begin{macrocode}
+\newcommand*\tud@tut@lst{%
+  \begin{quoting}[rightmargin=0pt]%
+  \lstinputlisting[style=tudscr]{\jobname-temp.tex}%
+  \end{quoting}%
+}
+%    \end{macrocode}
+% \end{macro}^^A \tud@tut@lst
+% \begin{macro}{\tud@tut@input}
+% \changes{v2.02}{2014/10/13}{neu}%^^A
+% \begin{macro}{\CodePreamble}
+% \changes{v2.02}{2014/08/20}{neu}%^^A
+% \begin{macro}{\@CodePreamble}
+% \changes{v2.02}{2014/10/22}{neu}%^^A
+% \begin{macro}{\CodeHook}
+% \changes{v2.02}{2014/10/11}{neu}%^^A
+% \begin{macro}{\@CodeHook}
+% \changes{v2.02}{2014/10/11}{neu}%^^A
+% Bereitstellung von Hilfsmakros für die formatierte Ausgabe von Quelltexten.
+%    \begin{macrocode}
+\newcommand\@CodePreamble{}
+\let\@CodePreamble\relax
+\newcommand\CodePreamble[1]{\long\gdef\@CodePreamble{#1}}
+\newcommand*\@CodeHook{}
+\let\@CodeHook\relax
+\newcommand*\CodeHook[1]{\gdef\@CodeHook{#1}}%
+%    \end{macrocode}
+% Für die Ausgabe des Quelltextergebnisses erfolgt ein linker Einzug. Außerdem 
+% werden unter anderem abhängig von der Verwendung eines erklärenden Textes die 
+% eingefügten vertikalen Abstände angepasst.
+%    \begin{macrocode}
+\newcommand*\tud@tut@input{%
+%    \end{macrocode}
+% Nach dem Ausführen des ersten Argumentes von \cs{@tempa} wird geprüft, ob
+% dieses überhaupt eine sichtbare Ausgabe erzeugt hat. Nur für diesen Fall wird
+% nach dieser vertikaler Leerraum eingefügt. Der Anfang entspricht prinzipiell
+% dem Standardbefehl \cs{settoheight}, jedoch wird im Inneren zusätzlich eine
+% \cs{vbox} verwendet, um damit auch mathematische Umgebungen testen zu können. 
+% Das Ganze findet innerhalb einer Gruppierung statt, um keine Änderungen zu
+% erzeugen.
+%    \begin{macrocode}
+  \def\@tempa##1##2{%
+    ##1%
+    \begingroup%
+      ##2%
+      \setbox\@tempboxa\hbox{\vbox{##1}}%
+      \@tempdima=\ht\@tempboxa%
+      \setbox\@tempboxa\box\voidb@x%
+      \ifdim\@tempdima>\z@\relax%
+        \endgraf%
+        \vspace{\baselineskipglue}%
+        \noindent\ignorespaces%
+      \fi%
+    \endgroup%
+  }%
+%    \end{macrocode}
+% Da aufgrund der Verwendung der \env{filecontents}"=Umgebung ein optionales
+% Argument für alle Abwandlungen der Quelltextumgebungen nicht möglich ist,
+% wird \cs{CodePreamble} bereitgestellt, womit der Ausgabe ein erläuternder
+% Text vorangestellt werden kann.
+%    \begin{macrocode}
+  \@tempa{\@CodePreamble}{}%
+  \setlength{\@tempdimc}{\leftskip}%
+  \setlength{\leftskip}{\leftmargin}%
+%    \end{macrocode}
+% Durch die zweimalige Verwendung von \val{\string\jobname-temp.tex}~-- einmal 
+% dirket und einmal innerhalb einer Box~-- können darin verwendete Befehle wie
+% \cs{newcommand} zu Fehler führen. Mit dem Makro \cs{CodeHook} lassen sich 
+% diese Konflikte durch eine lokale Redefinition ebensoclher Befehle auflösen
+% (bspw. \cs{let}\cs{newcommand}\cs{renewcommand}).
+%    \begin{macrocode}
+  \ActivateWarningFilters[Tutorial]%
+  \@tempa{\input{\jobname-temp.tex}}{\@CodeHook}%
+  \DeactivateWarningFilters[Tutorial]%
+  \global\let\@CodeHook\relax%
+  \setlength{\leftskip}{\@tempdimc}%
+  \noindent\ignorespaces%
+}
+%    \end{macrocode}
+% \end{macro}^^A \@CodeHook
+% \end{macro}^^A \CodeHook
+% \end{macro}^^A \@CodePreamble
+% \end{macro}^^A \CodePreamble
+% \end{macro}^^A \tud@tut@input
+% \begin{macro}{\InputCode}
+% \changes{v2.02}{2014/10/21}{neu}%^^A
+% Mit \cs{InputCode} kann der Inhalt der letzen \env{Trunk}"=Umgebung 
+% direkt ausgeführt werden, ohne diesen zuvor mit \cs{tud@tut@input} zu prüfen 
+% und zu formatieren.
+%    \begin{macrocode}
+\newcommand*\InputCode{\input{\jobname-temp.tex}}
+%    \end{macrocode}
+% \end{macro}^^A \InputCode
+% \begin{macro}{\tud@tut@pdf}
+% \changes{v2.02}{2014/10/22}{neu}%^^A
+% Die Umgebung \env{Trunk!} verwendet nach der Ausgabe des Quelltextes diesen
+% abermals, um daraus eine PDF-Datei zu erzeugen. Dafür wird mithilfe einer
+% \env{filecontents}"=Umgebung eine temporäre \LaTeX-Datei erzeugt. Diese 
+% bindet die mit \env{Trunk!} erzeugte Datei ein und wird anschließende via 
+% \cs{write18} kompiliert. Dabei sollte man sich nicht von der doppelten
+% Verwendung von \cs{jobname} verwirren lassen. Der Dateiname der temporär
+% erzeugten \LaTeX-Datei ist abhängig vom gesetzten Tutorial. Beim Aufruf
+% dieser wird über die Optionen von pdf\LaTeX{} der verwendete \cs{jobname}
+% angepasst (siehe \cs{tud@tut@pdf}).
+%    \begin{macrocode}
+\ifnum\pdfshellescape=1\relax%
+\ActivateWarningFilters[Tutorial]%
+\begin{filecontents*}{tutorial-temp.tex}
+\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
+\documentclass[english,ngerman]{tudscrreprt}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{babel}
+\usepackage{tudscrsupervisor}
+\usepackage{isodate}
+\usepackage{enumitem}
+\setlist{noitemsep}
+\begin{document}
+\input{\jobname.tex}
+\end{document}
+\end{filecontents*}
+\DeactivateWarningFilters[Tutorial]%
+\fi
+%    \end{macrocode}
+% Der Quelltext aus der \env{Trunk!}"=Umgebung wird~-- wie bei allen anderen
+% Derivaten der Umgebungen \env{Trunk}~-- in \val{\string\jobname-temp.tex}
+% gesichert. Beim Aufruf von pdf\LaTeX{} wird durch die Verwendung der Option 
+% \opt{-jobname=\string\jobname-temp} die eigentliche Definition des Makros 
+% \cs{jobname} in der aufgerufenen Datei \val{tutorial-temp.tex} überschrieben
+% und der Inhalt von \val{\string\jobname-temp.tex} wie gewünscht eingebunden
+% und kompiliert. Damit die so erstellte PDF-Datei mit \cs{IncludeStandalone} 
+% im weiteren Verlauf in das Tutorial eingebunden werden kann, wird diese noch
+% in \cs{\meta{Argument}-temp.pdf} umbenannt.
+%    \begin{macrocode}
+\newcommand*\tud@tut@pdf{%
+  \ifnum\pdfshellescape=1\relax%
+    \immediate\write18{%
+      pdflatex -jobname=\jobname-temp tutorial-temp.tex
+      pdflatex -jobname=\jobname-temp tutorial-temp.tex
+      pdflatex -jobname=\jobname-temp tutorial-temp.tex
+    }%
+    \ifwindows%
+      \immediate\write18{rename \jobname-temp.pdf \@StandaloneFile-temp.pdf}%
+    \else%
+      \immediate\write18{mv \jobname-temp.pdf \@StandaloneFile-temp.pdf}%
+    \fi%
+  \fi%
+  \global\let\@StandaloneFile\relax%
+}
+%    \end{macrocode}
+% \end{macro}^^A \tud@tut@pdf
+% \begin{macro}{\IncludeStandalone}
+% \changes{v2.02}{2014/09/10}{neu}%^^A
+% Der Befehl \cs{IncludeStandalone} bindet die durch \env{Trunk!} generierten
+% PDF-Dateien ein. Das angehängte optionale Argument dient zur Angabe der
+% einzubindenden Seiten der PDF-Datei, wobei diese automatisch auf die passende
+% Breite skaliert werden.
+%    \begin{macrocode}
+\NewDocumentCommand\IncludeStandalone{omO{1}}{%
+  \IfFileExists{#2-temp.pdf}{%
+    \@tempcnta\z@%
+    \@for\@tempa:=#3\do{\advance\@tempcnta\@ne}%
+    \ifnum\@tempcnta>\z@%
+      \setlength{\@tempdima}{\textwidth}%
+      \divide\@tempdima\@tempcnta%
+      \advance\@tempcnta\m@ne%
+      \multiply\@tempcnta 2%
+      \addtolength{\@tempdima}{-\@tempcnta\tabcolsep}%
+      \@for\@tempa:=#3\do{%
+        \advance\@tempcnta\m@ne%
+        \edef\@tempb{%
+          keepaspectratio,page=\@tempa,width=\the\@tempdima,%
+          \IfValueT{#1}{#1}%
+        }
+        \fbox{\expandafter\includegraphics\expandafter[\@tempb]{#2-temp.pdf}}%
+        \ifnum\@tempcnta>\z@\hfill\fi%
+      }%
+    \fi%
+  }{%
+    \tud@shellescape@wrn%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}^^A \IncludeStandalone
+% \begin{macro}{\StartTutorial}
+% \changes{v2.02}{2014/08/21}{neu}%^^A
+% \begin{macro}{\FinishTutorial}
+% \changes{v2.02}{2014/08/21}{neu}%^^A
+% Mit \cs{StartTutorial} wird ein Hyperlink für den Querverweis aus dem 
+% Handbuch definiert. Außerdem wird gleich der Titel und ein einleitender Satz 
+% gesetzt.
+%    \begin{macrocode}
+\newcommand\StartTutorial[1][%
+  Bevor das eigentliche Tutorial beginnt, werden sowohl eine Dokumentklasse 
+  als auch die f\"ur jedes \hologo{pdfLaTeX}-Dokument meiner Meinung nach 
+  sinnvollen Pakete geladen.
+]{%
+  \Hy@raisedlink{\hyperdef{\jobname}{tutorials:\jobname}{}}%
+  \faculty{}%
+  \setlength\headingsvskip{-15mm}%
+  \maketitle\noindent#1%
+  \immediate\openout\tud@write@i=\jobname-preamble-temp.tex\relax
+  \immediate\openout\tud@write@ii=\jobname-trunk-temp.tex\relax
+  \immediate\write\tud@write@ii{^^J\string\begin{document}^^J}
+}
+%    \end{macrocode}
+% Der Befehl \cs{FinishTutorial} schleißt den noch offenen Ausgabestream und
+% gibt den vorgestellten Quelltext vollständig aus.
+%    \begin{macrocode}
+\newcommand\FinishTutorial[1][]{%
+  \immediate\write\tud@write@ii{^^J\string\end{document}^^J}
+  \immediate\closeout\tud@write@ii%
+  \immediate\closeout\tud@write@i%
+  \tud@tut@collect%
+  \clearpage%
+  \addsec{Copy~\&~Paste}%
+  \pagestyle{empty}%
+  Zum Ende des Dokumentes wird das vorgestellte Tutorial als \"ubersetzbarer 
+  Quelltext ausgegeben, um dieses via Copy~\&~Paste verwenden und alle Punkte
+  nachvollziehen zu k\"onnen. Bitte beachten Sie, dass~-- abh\"angig vom 
+  genutzten PDF-Betrachter~-- beim Kopieren die dargestellten Einz\"uge und 
+  Abs\"atze m\"oglicherweise verloren gehen k\"onnen. Dies kann insbesondere 
+  aufgrund fehlender Leerzeilen zu einem unvorteilhaften Ausgabeergebnis 
+  f\"uhren. Alternativ finden Sie den folgenden \hologo{LaTeX}-Quelltext auch 
+  im Pfad \Path{texmf/source/latex/tudscr/doc/examples/} als Datei  
+  \File{\jobname-example.tex}. \par #1
+  \begin{quoting}[rightmargin=0pt]%
+  \lstinputlisting[style=tudscr]{\jobname-example-temp.tex}%
+  \end{quoting}%
+}
+%    \end{macrocode}
+% \end{macro}^^A \FinishTutorial
+% \end{macro}^^A \StartTutorial
+% \begin{macro}{\tud@tut@readtostream}
+% \changes{v2.02}{2014/12/16}{neu}%^^A
+% \begin{macro}{\tud@tut@line}
+% \changes{v2.02}{2014/08/19}{neu}%^^A
+% \begin{macro}{\tud@tut@append}
+% \changes{v2.02}{2014/08/19}{neu}%^^A
+% \begin{macro}{\tud@tut@collect}
+% \changes{v2.02}{2014/12/16}{neu}%^^A
+% Bei den Tutorials soll zum Schluss ein komplett kompilierbares Beispiel für
+% Copy~\&~Paste gegeben werden. Um dieses zusammenzubauen, werden alle im 
+% Dokument innerhalb der Varianten der \env{Trunk}"=Umgebungen gegebenen
+% Codefragmente zusammengesetzt. Um die Quelltexte einlesen und verarbeiten zu
+% können, werden zwei Eingabe- sowie ein Ausgabestream benötigt, welche bereits 
+% zuvor initilaisiert wurden.
+%
+% Mit \cs{tud@tut@readtostream} wird der Inhalt der Datei im ersten Argument 
+% in den Ausgabestream des zweiten Argumentes geschrieben. Dies wird durch die
+% Makros \cs{tud@tut@append} und \cs{tud@tut@collect} genutzt.
+%    \begin{macrocode}
+\newcommand*\tud@tut@line{}
+\newcommand*\tud@tut@readtostream[2]{%
+  \begingroup%
+  \endlinechar=-1\relax%
+  \openin\tud@read=#1%
+%    \end{macrocode}
+% Der Schalter \cs{if@tempswa} wird verwendet, um unnötige Leerzeilen in der
+% Ausgabedatei zu entfernen. Wurde eine nicht leere Zeile gefunden, wird diese 
+% auf jeden Fall geschrieben, indem \cs{@tempswatrue} gesetzt wird. Eine leere 
+% Zeile wird~-- bis auf den Sonderfall, dass es sich um die letzte Zeile in der
+% Datei handelt~-- zunächst nicht weiter beachtet. Im Zweifelsfall wird diese
+% (erste) Leerzeile geschrieben. 
+%    \begin{macrocode}
+  \@tempswafalse%
+  \loop\unless\ifeof\tud@read%
+    \readline\tud@read to\tud@tut@line%
+    \ifx\tud@tut@line\@empty%
+      \ifeof\tud@read\@tempswafalse\fi%
+    \else%
+      \@tempswatrue%
+    \fi%
+%    \end{macrocode}
+% Hier erfolgt das eigentliche Schreiben im selektierten Stream.
+%    \begin{macrocode}
+    \if@tempswa%
+      \immediate\write#2{\unexpanded\expandafter{\tud@tut@line}}%
+    \fi%
+%    \end{macrocode}
+% Im Nachgang wird überprüft, ob die aktuell geschriebene Zeile leer war. Ist 
+% dies der Fall, so wird \cs{@tempswafalse} gesetzt, um eine etwaig folgende 
+% Leerzeile nicht in die Ausgabedatei zu schrieben.
+%    \begin{macrocode}
+    \ifx\tud@tut@line\@empty\@tempswafalse\fi%
+  \repeat%
+  \closein\tud@read%
+  \endgroup%
+}
+%    \end{macrocode}
+% Der innerhalb der Umgebungen \env{Preamble} und \env{Trunk}~-- sowie deren 
+% Derivaten~-- angegeben Inhalt wird beim Beenden dieser in die Hilfsdatei
+% \cs{jobname-temp.tex} zwischengespeichert. Mit dem Befehl \cs{tud@tut@append}
+% wird der Inhalt dieser Datei ausgelesen und den zusätzlichen Hilfsdateien
+% \cs{jobname-preamble-temp.tex} beziehungsweise  \cs{jobname-trunk-temp.tex} 
+% angehangen und damit gesichert, um Quelltextauszüge aus dem Tutorial für die
+% Präambel sowie den Dokumentteil trennen beziehungsweise sortieren zu können.
+%    \begin{macrocode}
+\newcommand*\tud@tut@append[1]{\tud@tut@readtostream{\jobname-temp.tex}{#1}}
+%    \end{macrocode}
+% Das Makro \cs{tud@tut@collect} fügt alle Quelltexte des Tutorials, welche 
+% nach Präambel und Dokumentteil sortiert wurden, in einer Datei zusammen. 
+% Diese wird zum einen am Ende des Tutorials mit \cs{FinishTutorial} ausgeben, 
+% zum anderen wird diese als Beispiel in den Ordner für Beispiele beim Erzeugen 
+% eines Release kopiert.
+%    \begin{macrocode}
+\newcommand*\tud@tut@collect{%
+  \immediate\openout\tud@write@ii\jobname-example-temp.tex\relax%
+  \tud@tut@readtostream{\jobname-preamble-temp.tex}{\tud@write@ii}%
+  \tud@tut@readtostream{\jobname-trunk-temp.tex}{\tud@write@ii}%
+  \immediate\closeout\tud@write@ii
+}
+%    \end{macrocode}
+% \end{macro}^^A \tud@tut@collect
+% \end{macro}^^A \tud@tut@append
+% \end{macro}^^A \tud@tut@line
+% \end{macro}^^A \tud@tut@readtostream
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \subsection{Ausgabe von Index und Änderungsliste}
+%
+% Ein Index kann sowhol mit dem Paket als auch mit der Klasse erzeugt werden, 
+% die Änderungsliste ist der Klasse vorbehalten.
+% \begin{macro}{\idxfont}
+% Für zusätzliche Informationen im Index nach dem eigentlichen Eintrag wird 
+% eine etwas kleinere Schrift verwendet.
+%    \begin{macrocode}
+\newcommand*\idxfont{}
+\let\idxfont\footnotesize
+\robustify{\idxfont}
+%    \end{macrocode}
+% \end{macro}^^A \idxfont
+% \begin{macro}{\PrintIndex}
+% \begin{macro}{\PrintIndexPrologue}
+% \changes{v2.02}{2014/08/20}{neu}%^^A
+% \begin{macro}{\@printindexprologue}
+% \changes{v2.02}{2014/08/20}{neu}%^^A
+% \begin{macro}{\@printindexskip}
+% \changes{v2.02}{2014/09/02}{neu}%^^A
+% \begin{macro}{\Index}
+% \begin{macro}{\seeidx}
+% \begin{macro}{\@printindex}
+% \changes{v2.02}{2014/07/25}{neu}%^^A
+% Der Befehl \cs{PrintIndex} ist die Zusammenfassung für die Ausgabe aller 
+% Indexe.
+%    \begin{macrocode}
+\newcommand*\PrintIndex{%
+  \begingroup%
+%<*class>
+    \@printindex%
+%</class>
+    \@printindex[options]%
+    \@printindex[macros]%
+%<*class>
+    \@printindex[keys]%
+    \@printindex[terms]%
+    \begingroup%
+      \let\lettergroup\@gobble%
+      \let\indexspace\par%
+      \@printindex[fonts]%
+      \@printindex[colors]%
+    \endgroup%
+%</class>
+    \@printindex[files]%
+  \endgroup%
+}
+%    \end{macrocode}
+% Hiermit kann der einleitende Teil für den allgemeinen Index gesetzt werden.
+%    \begin{macrocode}
+%<*class>
+\newcommand*\PrintIndexPrologue[1]{\long\gdef\@printindexprologue{#1}}
+\newcommand*\@printindexprologue{}
+%</class>
+%    \end{macrocode}
+% Durch die Verwendung der \env{multicols}"=Umgebung werden zu große vertikale 
+% Abstände gesetzt. Dies wird mit diesem Befehl rückgängig gemacht.
+%    \begin{macrocode}
+\newcommand*\@printindexskip{\ifnum\imki@columns>\@ne\vspace{-\multicolsep}\fi}
+%    \end{macrocode}
+% Der Befehl \cs{@printindex} setzt vor jedem Unterindex ein referenzierbares
+% Label und gibt diesen danach aus.
+%    \begin{macrocode}
+\newcommand*\@printindex[1][]{%
+  \pagebreak[3]%
+  \apptocmd{\prepare@multicols}{\hbadness10000}{}{}%
+%<*class>
+  \ifblank{#1}{%
+    \ifx\@printindexprologue\@empty%
+      \indexprologue[\@printindexskip]{\manualhyperdef'{idx:main}}%
+    \else%
+      \indexprologue{%
+        \manualhyperdef'{idx:main}%
+        \@printindexprologue%
+      }%
+    \fi%
+    \printindex\@printindexskip%
+    \let\@printindexprologue\@empty%
+  }{%
+    \indexprologue[\@printindexskip]{\manualhyperdef'{idx:#1}}%
+    \printindex[#1]\@printindexskip%
+  }%
+%</class>
+%<*package>
+  \indexprologue[\@printindexskip]{}%
+  \printindex[#1]\@printindexskip%
+%</package>
+}
+%    \end{macrocode}
+% Der Befehl \cs{Index} dient zum Eintragen eines Schlagwortes im allgemeinen
+% Index und verweist auf den speziellen, zum Schlagwort gehörigen Index. Das
+% optionale Argument kann verwendet werden, um ggf. den Eintrag in den
+% allgemeinen Index anders zu benennen, als den Verweis.
+%    \begin{macrocode}
+%<*class>
+\newcommand*\seeidx[2]{\pageref{idx:#1}}
+\NewDocumentCommand\Index{mom}{%
+  \index{%
+    #1!\textrightarrow{}\space%
+    \manualhyperref{idx:#3}{Index der \IfValueTF{#2}{#2}{#1}}|seeidx{#3}%
+  }%
+}
+%</class>
+%    \end{macrocode}
+% \end{macro}^^A \@printindex
+% \end{macro}^^A \seeidx
+% \end{macro}^^A \Index
+% \end{macro}^^A \@printindexskip
+% \end{macro}^^A \@printindexprologue
+% \end{macro}^^A \PrintIndexPrologue
+% \end{macro}^^A \PrintIndex
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \begin{macro}{\PrintChangelog}
+% \begin{macro}{\if@changelog}
+% \begin{macro}{\Changelog}
+% \changes{v2.02}{2014/08/20}{neu}%^^A
+% Ähnlich wie für den Index wird auch für die Änderungsliste verfahren.
+%    \begin{macrocode}
+\newif\if@changelog
+\newcommand*\PrintChangelog{%
+  \begingroup%
+    \let\lettergroup\@gobble%
+    \@changelogtrue%
+    \@printindex[changelog]%
+  \endgroup%
+}
+\NewDocumentCommand\Changelog{m}{%
+  \index{%
+    #1!\textrightarrow{}\space%
+    \manualhyperref{idx:changelog}{\"Anderungsliste}|seeidx{changelog}%
+  }%
+}
+%    \end{macrocode}
+% \end{macro}^^A \Changelog
+% \end{macro}^^A \if@changelog
+% \end{macro}^^A \PrintChangelog
+%
+% \iffalse
+%</class>
+%</body>
+% \fi
+%
+% \Finale
+%
+\endinput
-- 
cgit v1.2.3

