summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-12-22 23:40:36 +0000
committerKarl Berry <karl@freefriends.org>2014-12-22 23:40:36 +0000
commit4f902263451a27826c05b01add75eba8ad70bcbb (patch)
tree122905b415c3dad65734d26cd0a706f6e13729b4 /Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
parent6a25d658147c100681ee893ce36f28ef9b689995 (diff)
tudscr has fallback for free fonts, so fine, restore
git-svn-id: svn://tug.org/texlive/trunk@35882 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx')
-rw-r--r--Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx3361
1 files changed, 3361 insertions, 0 deletions
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