summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tudscr/source/tudscr-doc.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tudscr/source/tudscr-doc.dtx')
-rw-r--r--macros/latex/contrib/tudscr/source/tudscr-doc.dtx1598
1 files changed, 1598 insertions, 0 deletions
diff --git a/macros/latex/contrib/tudscr/source/tudscr-doc.dtx b/macros/latex/contrib/tudscr/source/tudscr-doc.dtx
new file mode 100644
index 0000000000..ef3754d43a
--- /dev/null
+++ b/macros/latex/contrib/tudscr/source/tudscr-doc.dtx
@@ -0,0 +1,1598 @@
+% \CheckSum{2094}
+% \iffalse meta-comment
+%
+% TUD-Script -- Corporate Design of Technische Universität Dresden
+% ----------------------------------------------------------------------------
+%
+% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019
+%
+% ----------------------------------------------------------------------------
+%
+% This work may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License, version 1.3c of the license. The latest
+% version of this license is in http://www.latex-project.org/lppl.txt and
+% version 1.3c or later is part of all distributions of LaTeX 2005/12/01
+% or later and of this work. This work has the LPPL maintenance status
+% "author-maintained". The current maintainer and author of this work
+% is Falk Hanisch.
+%
+% ----------------------------------------------------------------------------
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz
+% in der Version 1.3c, verteilt und/oder verändert werden. Die aktuelle
+% Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und
+% Version 1.3c oder später ist Teil aller Verteilungen von LaTeX 2005/12/01
+% oder später und dieses Werks. Dieses Werk hat den LPPL-Verwaltungs-Status
+% "author-maintained", wird somit allein durch den Autor verwaltet. Der
+% aktuelle Verwalter und Autor dieses Werkes ist Falk Hanisch.
+%
+% ----------------------------------------------------------------------------
+%
+% \fi
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse
+%%% From File: tudscr-doc.dtx
+%<*dtx>
+% \fi
+%
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\ProvidesFile{tudscr-doc.dtx}[2019/07/18 v2.06c TUD-Script\space%
+ (source code documentation based on scrartcl/scrdoc)%
+]
+%
+% \iffalse
+\documentclass[english,ngerman,xindy]{tudscrdoc}
+\ifpdftex{
+ \usepackage[T1]{fontenc}
+ \usepackage[ngerman=ngerman-x-latest]{hyphsubst}
+}{
+ \usepackage{fontspec}
+}
+\usepackage{babel}
+\usepackage{tudscrfonts}
+\KOMAoptions{parskip=half-}
+\usepackage{bookmark}
+\usepackage[babel]{microtype}
+
+\CodelineIndex
+\RecordChanges
+\GetFileInfo{tudscr-doc.dtx}
+\title{\file{\filename}}
+\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}}
+\date{\fileversion\nobreakspace(\filedate)}
+
+\begin{document}
+ \maketitle
+ \tableofcontents
+ \DocInput{\filename}
+\end{document}
+%</dtx>
+% \fi
+%
+% \selectlanguage{ngerman}
+%
+% \changes{v2.03}{2015/01/09}{\cls{tudscrdoc}: Indextyp Seitenstilebene}^^A
+% \changes{v2.05}{2016/04/21}{Verwendung von \app{texindy} möglich}^^A
+%
+% \section{Die Klasse \cls{tudscrdoc} -- Erweiterte Quelltextdokumentation}
+%
+% Mit dieser Klasse erfolgt die Quelltextdokumentation des \TUDScript-Bundles.
+% Sie lädt standarmäßig die Klasse \cls{ltxdoc}, ersetzt allerdings im Stile
+% von \cls{scrdoc} im Hintergrund \cls{article} durch \cls{scrartcl}.
+%
+% \StopEventually{\PrintIndex\PrintChanges\PrintToDos}
+%
+% \iffalse
+%<*class&option>
+% \fi
+%
+% Damit der zu \cls{scrartcl} gehörige Titel genutzt werden kann, wird dieser
+% temporär gesichert.
+% \begin{macrocode}
+\newcommand*\scr@maketitle{}%
+\PassOptionsToClass{toc=left,fontsize=10pt}{scrartcl}%
+\AfterClass{scrartcl}{\let\scr@maketitle\@maketitle}%
+% \end{macrocode}
+% Der folgende Quelltext ist 1:1 aus \cls{scrdoc} kopiert.
+% \begin{macrocode}
+\newcommand*\sd@saved@LoadClass{}
+\let\sd@saved@LoadClass=\LoadClass
+\renewcommand*\LoadClass[2][]{%
+ \begingroup%
+ \edef\@tempc{#2}\def\@tempb{article}%
+ \ifx\@tempc\@tempb%
+ \let\LoadClass\sd@saved@LoadClass%
+ \def\@tempc{scrartcl}%
+ \fi%
+ \edef\@tempc{%
+ \noexpand\endgroup\noexpand\sd@saved@LoadClass[{#1}]{\@tempc}}%
+ \@tempc%
+}
+\newcommand*\sd@saved@PassOptionsToClass{}
+\let\sd@saved@PassOptionsToClass=\PassOptionsToClass
+\renewcommand*\PassOptionsToClass[2]{%
+ \begingroup%
+ \edef\@tempc{#2}\def\@tempb{article}%
+ \ifx\@tempc\@tempb%
+ \def\@tempc{scrartcl}%
+ \fi%
+ \edef\@tempc{%
+ \noexpand\endgroup\noexpand\sd@saved@PassOptionsToClass{#1}{%
+ \@tempc}}%
+ \@tempc%
+}
+\LoadClassWithOptions{ltxdoc}[2015/03/26]
+\setcounter{IndexColumns}{2}
+\setcounter{StandardModuleDepth}{2}
+% \end{macrocode}
+%
+% \subsection{Klassenoptionen}
+%
+% \begin{option}{final}
+% \begin{macro}{\tudfinalflag}
+% Option bzw. Flag für das automatisierte Erzeugen der Quelltextdokumentation
+% mit einem Skript ohne ToDo-Befehle.
+% \begin{macrocode}
+\DeclareOption{final}{\let\tudfinalflag\relax}
+% \end{macrocode}
+% \end{macro}^^A \tudfinalflag
+% \end{option}^^A final
+% \begin{option}{texindy}
+% \changes{v2.05}{2016/04/21}{neu}^^A
+% \begin{option}{xindy}
+% \changes{v2.05}{2016/04/21}{neu}^^A
+% \begin{option}{xdy}
+% \changes{v2.05}{2016/04/21}{neu}^^A
+% \begin{macro}{\tudxdyflag}
+% \changes{v2.05}{2016/04/21}{neu}^^A
+% Option(en) für das Erstellen der Indexdateien im Stil von \app{texindy}.
+% \begin{macrocode}
+\DeclareOption{texindy}{\let\tudxdyflag\relax}
+\DeclareOption{xindy}{\let\tudxdyflag\relax}
+\DeclareOption{xdy}{\let\tudxdyflag\relax}
+% \end{macrocode}
+% \end{macro}^^A \tudxdyflag
+% \end{option}^^A xdy
+% \end{option}^^A xindy
+% \end{option}^^A texindy
+% Die beiden Optionen werden abgearbeitet
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% \subsection{Ignorierte Makros bei der Nutzung von zusätzlichen Indexeinträgen}
+%
+% Befehle, welche bei der Verwendung von \cs{EnableCrossrefs} dennoch nicht im
+% Index erscheinen sollen.
+%
+% \begin{macro}{\DisableCrossrefsForced}
+% \changes{v2.05i}{2017/03/02}{neu}^^A
+% Deaktivieren von Makroeinträgen im Index nach der Verwendung von
+% \cs{EnableCrossrefs}. Sollte in einer Gruppe genutzt werden!
+% \begin{macrocode}
+\newcommand*\DisableCrossrefsForced{}
+\let\DisableCrossrefsForced\DisableCrossrefs
+% \end{macrocode}
+% \end{macro}^^A \DisableCrossrefsForced
+%
+% \begingroup%
+% \DisableCrossrefsForced%
+% \begin{macrocode}
+%^^A\DoNotIndex{\ ,\",\.,\@,\\,\{,\}}
+%^^A\DoNotIndex{\@abstrtfalse,\@abstrttrue,\@addtoreset}
+%^^A\DoNotIndex{\@afterheading,\@afterindentfalse}
+%^^A\DoNotIndex{\@Alph,\@alph,\@arabic}
+%^^A\DoNotIndex{\@beginparpenalty}
+%^^A\DoNotIndex{\@car,\@cdr,\@centercr}
+%^^A\DoNotIndex{\@dblfloat,\@dotsep,\@dottedtocline}
+%^^A\DoNotIndex{\@empty,\@endparpenalty}
+%^^A\DoNotIndex{\@float,\@fontswitch}
+%^^A\DoNotIndex{\@gobbletwo}
+%^^A\DoNotIndex{\@hangfrom,\@highpenalty}
+%^^A\DoNotIndex{\@ifnextchar,\@ifundefined,\@itempenalty}
+%^^A\DoNotIndex{\@latex@warning}
+%^^A\DoNotIndex{\@M,\@m,\@medpenalty,\@minus,\@mkboth}
+%^^A\DoNotIndex{\@mparswitchfalse,\@mparswitchtrue}
+%^^A\DoNotIndex{\@ne,\@nil,\@nobreakfalse,\@nobreaktrue,\@nomath}
+%^^A\DoNotIndex{\@plus}
+%^^A\DoNotIndex{\@Roman,\@roman}
+%^^A\DoNotIndex{\@tempa,\@tempb,\@tempc}
+%^^A\DoNotIndex{\@tempcnta,\@tempcntb,\@tempcntc}
+%^^A\DoNotIndex{\@tempdima,\@tempdimb,\@tempdimc}
+%^^A\DoNotIndex{\@tempskipka,\@tempskipkb,\@tempskipkc}
+%^^A\DoNotIndex{\@tempswafalse,\@tempswatrue,\@tempswbfalse,\@tempswbtrue}
+%^^A\DoNotIndex{\@tocrmarg,\@topnewpage,\@topnum}
+%^^A\DoNotIndex{\@twocolumnfalse,\@twocolumntrue,\@twosidefalse,\@twosidetrue}
+%^^A\DoNotIndex{\@undefined,\@whiledim,\@whilenum}
+%^^A\DoNotIndex{\addcontentsline,\addpenalty,\addtocontents}
+%^^A\DoNotIndex{\addtolength,\addvspace,\advance}
+%^^A\DoNotIndex{\begin,\begingroup,\bfseries,\box,\bullet}
+%^^A\DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth,\cdot}
+%^^A\DoNotIndex{\centering,\changes,\cleardoublepage,\clearpage,\cmd}
+%^^A\DoNotIndex{\CodelineIndex,\col@number,\cs,\CurrentOption}
+%^^A\DoNotIndex{\dblfloatpagefraction,\dbltopfraction,\def,\divide,\DoNotIndex}
+%^^A\DoNotIndex{\DeclareOldFontCommand,\DeclareOption,\DisableCrossrefs}
+%^^A\DoNotIndex{\else,\em,\empty,\EnableCrossrefs,\end,\end@dblfloat,\end@float}
+%^^A\DoNotIndex{\endgroup,\endlist,\endquotation,\endtitlepage,\everypar}
+%^^A\DoNotIndex{\ExecuteOptions,\expandafter}
+%^^A\DoNotIndex{\fboxrule,\fboxsep,\fi}
+%^^A\DoNotIndex{\gdef,\global}
+%^^A\DoNotIndex{\hangindent,\hbox,\hfil,\hrule,\hsize,\hskip,\hspace,\hss}
+%^^A\DoNotIndex{\if,\if@tempswa,\ifcase,\ifdim,\ifnum,\ifodd,\ifx,\include}
+%^^A\DoNotIndex{\input,\InputIfFileExists,\item,\itshape}
+%^^A\DoNotIndex{\kern}
+%^^A\DoNotIndex{\leavevmode,\leftmark,\leftskip,\let,\lineskip,\list,\long}
+%^^A\DoNotIndex{\m@ne,\m@th,\marginpar,\markboth,\markright}
+%^^A\DoNotIndex{\mathbf,\mathcal,\mathit,\mathnormal,\mathrm,\mathsf,\mathtt}
+%^^A\DoNotIndex{\MessageBreak,\month}
+%^^A\DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen}
+%^^A\DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent}
+%^^A\DoNotIndex{\normalcolor,\normalfont,\normallineskip,\normalsize}
+%^^A\DoNotIndex{\null,\number,\numberline}
+%^^A\DoNotIndex{\OldMakeindex,\OnlyDescription,\or,\overfullrule}
+%^^A\DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine}
+%^^A\DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox}
+%^^A\DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\protect,\providecommand}
+%^^A\DoNotIndex{\PrintIndex,\PrintChanges,\ProcessOptions,\ProvidesClass}
+%^^A\DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax}
+%^^A\DoNotIndex{\renewcommand,\RequirePackage,\reset@font,\rightmargin}
+%^^A\DoNotIndex{\rightmark,\rightskip,\rmfamily}
+%^^A\DoNotIndex{\scshape,\secdef,\setbox,\setcounter,\setlength,\settowidth}
+%^^A\DoNotIndex{\sfcode,\sffamily,\skip,\sloppy,\slshape,\space,\string}
+%^^A\DoNotIndex{\the,\thispagestyle,\ttfamily,\twocolumn,\typeout}
+%^^A\DoNotIndex{\undefined,\usecounter}
+%^^A\DoNotIndex{\vfil,\vfill,\vspace}
+%^^A\DoNotIndex{\wd}
+%^^A\DoNotIndex{\xdef}
+%^^A\DoNotIndex{\year}
+%^^A\DoNotIndex{\z@}
+% \end{macrocode}
+% \endgroup%
+%
+% \iffalse
+%</class&option>
+%<*class&body>
+% \fi
+%
+% \subsection{Definition und Erscheinungsbild von Deklarationselementen}
+%
+% Mit dem Paket~\pkg{dox} können weitere Deklarationselemente erstellt werden.
+% Dieses lädt außerdem das Paket~\pkg{doc}, welches die Grundfunktionalitäten
+% für die Erstellung von \file{.dtx}-Dateien bereitstellt. In der momentanen
+% Version unterstützt das Paket~\pkg{dox} die aktuellen Anpassungen an die
+% Erstellung von Änderungsnotizen durch \pkg{doc} nicht, weshalb im Folgenden
+% einige Patches notwendig sind.
+% \begin{macrocode}
+\RequirePackage{dox}[2010/12/16]
+\@ifpackagelater{dox}{2017/12/07}{%
+ \ClassWarning{\TUD@Class@Name}{%
+ Package `dox' was updated so some patches\MessageBreak%
+ are maybe outdated%
+ }%
+}{}%
+% \end{macrocode}
+% \begin{macro}{\m@cro@}
+% Nach dem Laden des Paketes werden die Definitionen einiger Makros überprüft.
+% \begin{macrocode}
+\CheckCommand\m@cro@[2]{%
+ \endgroup \topsep\MacroTopsep \trivlist
+ \edef\saved@macroname{\string#2}%
+ #1
+ \let\saved@indexname\saved@macroname
+ \else
+ \edef\saved@indexname{\expandafter\@gobble\string#2}%
+ \fi
+ \def\makelabel##1{\llap{##1}}%
+ \if@inlabel
+ \let\@tempa\@empty \count@\macro@cnt
+ \loop \ifnum\count@>\z@
+ \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
+ \edef\makelabel##1{\llap{\vtop to\baselineskip
+ {\@tempa\hbox{##1}\vss}}}%
+ \advance \macro@cnt \@ne
+ \else \macro@cnt\@ne \fi
+ \edef\@tempa{\noexpand\item[%
+ #1%
+ \noexpand\PrintMacroName
+ \else
+ \noexpand\PrintEnvName
+ \fi
+ {\string#2}]}%
+ \@tempa
+ \global\advance\c@CodelineNo\@ne
+ #1%
+ \SpecialMainIndex{#2}\nobreak
+ \DoNotIndex{#2}%
+ \else
+ \SpecialMainEnvIndex{#2}\nobreak
+ \fi
+ \global\advance\c@CodelineNo\m@ne
+ \ignorespaces
+}
+% \end{macrocode}
+% \end{macro}^^A \m@cro@
+%
+% \subsubsection{Erweiterte Einträge für Index und Änderungsliste}
+%
+% \begin{macro}{\doxitem}
+% Mit dem Befehl \cs{doxitem} werden beliebige Deklarationselemente erstellt.
+% das Makro wird für das Hinzufügen des Eintragstyps für Index, Änderungsliste
+% und Randnotiz angepasst.
+% \begin{macrocode}
+\CheckCommand\doxitem[4][]{%
+ \@nameuse{dox@macrolike\dox@macrolikedefault}%
+ \def\dox@idxtype{#3}%
+ \setkeys{dox}{#1}
+ \@ifundefined{Print#2Name}{%
+ \ifdox@macrolike
+ \expandafter\def\csname Print#2Name\endcsname##1{%
+ \strut\MacroFont\string ##1\ }
+ \else
+ \expandafter\def\csname Print#2Name\endcsname##1{%
+ \strut\MacroFont ##1\ }
+ \fi}{}
+ \ifdox@macrolike
+ \def\@doxexpr{\@doxcreatespecialmainmacrolikeindex{#2}}%
+ \else
+ \def\@doxexpr{\@doxcreatespecialmainindex{#2}}%
+ \fi
+ \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
+ \@ifundefined{PrintDescribe#2}{%
+ \ifdox@macrolike
+ \expandafter\def\csname PrintDescribe#2\endcsname##1{%
+ \strut\MacroFont\string ##1\ }
+ \else
+ \expandafter\def\csname PrintDescribe#2\endcsname##1{%
+ \strut\MacroFont ##1\ }
+ \fi}{}
+ \ifdox@macrolike
+ \def\@doxexpr{\@doxcreatespecialmacrolikeindex{#2}}%
+ \else
+ \def\@doxexpr{\@doxcreatespecialindex{#2}}%
+ \fi
+ \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
+ \@doxcreatedescribe{#2}
+ \@doxcreateenv{#2}{#3}
+ \ifdox@macrolike
+ \expandafter\let\csname @Save#2IndexName\endcsname%
+ \@doxsavemacrolikeindexname%
+ \else
+ \expandafter\let\csname @Save#2IndexName\endcsname\@doxsaveindexname%
+ \fi
+}
+% \end{macrocode}
+% Das Makro wird dahingehend angepasst, dass alle für die Ausgabe erzeugten
+% Befehle der Form \cs{Print\meta{Typ}Name} und \cs{PrintDescribe\meta{Typ}}
+% um den Eintragstyp ergänzt werden, erstellt durch \cs{doxcreateprintname}
+% bzw. \cs{doxcreatemacrolikeprintname}. Zusätzlich werden für die Klasse
+% \cls{tudscrdoc} Befehle in der Form \cs{@Save\meta{Typ}IndexName} mit den
+% neuen Makros \cs{doxcreateindexname} bzw. \cs{doxcreatemacrolikeindexname}
+% erstellt. Mit diesen wird beim Aufruf einer Deklarationsumgebung der aktuelle
+% Name und Eintragstyp des jeweiligen Deklarationselementes gesichert, um diese
+% Informationen in der Änderungsliste nutzen zu können. Außerdem werden mit dem
+% Makro \cs{@doxcreatedescribes} Befehle erzeugt, mit denen eine Liste von zu
+% beschreibenden Elementen via \cs{DescribeOption\meta{Typ}s} erzeugt werden
+% kann. Dies dient insbesondere zum Erzeugen der Randnotizen mit \cs{marginnote}
+% aus dem glecihnamigen Paket.
+% \begin{macrocode}
+\renewcommand*\doxitem[4][]{%
+ \@nameuse{dox@macrolike\dox@macrolikedefault}%
+ \def\dox@idxtype{#3}%
+ \setkeys{dox}{#1}%
+ \ifdox@macrolike%
+ \def\@doxexpr{\@doxcreatespecialmainmacrolikeindex{#2}}%
+ \else%
+ \def\@doxexpr{\@doxcreatespecialmainindex{#2}}%
+ \fi%
+ \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
+ \ifdox@macrolike%
+ \def\@doxexpr{\@doxcreatespecialmacrolikeindex{#2}}%
+ \else%
+ \def\@doxexpr{\@doxcreatespecialindex{#2}}%
+ \fi%
+ \expandafter\@doxexpr\expandafter{\dox@idxtype}{#4}%
+ \ifdox@macrolike%
+ \def\@doxexpr{\@doxcreatemacrolikeprintname{#2}}%
+ \else%
+ \def\@doxexpr{\@doxcreateprintname{#2}}%
+ \fi%
+ \expandafter\@doxexpr\expandafter{\dox@idxtype}%
+ \ifdox@macrolike%
+ \def\@doxexpr{\@doxcreatemacrolikeindexname{#2}}%
+ \else%
+ \def\@doxexpr{\@doxcreateindexname{#2}}%
+ \fi%
+ \expandafter\@doxexpr\expandafter{\dox@idxtype}%
+ \@doxcreatedescribe{#2}%
+ \@doxcreatedescribes{#2}%
+ \@doxcreateenv{#2}{#3}%
+}
+% \end{macrocode}
+% \end{macro}^^A \doxitem
+% \begin{macro}{\@doxcreatedescribes}
+% \changes{v2.05i}{2017/03/09}{neu}^^A
+% \begin{length}{\marginnotevskip}
+% \changes{v2.05i}{2017/03/09}{neu}^^A
+% \begin{macro}{\marginpar}
+% Hiermit werden Befehle der Form \cs{DescribeOption\meta{Typ}s} erzeugt, mit
+% welchen mehrere Eintragstypen erzeugt werden können. Gleichzeitig werden die
+% Randnotizen via \cs{marginnote} mit den passenden vertikalen Abständen
+% erstellt.
+% \begin{macrocode}
+\newlength\marginnotevskip
+\newcommand*\@doxcreatedescribes[1]{%
+ \expandafter\def\csname Describe#1s\endcsname##1{%
+ \setlength\marginnotevskip{\z@}%
+ \def\@tempc{##1}%
+ \@for\@tempa:=\@tempc\do{%
+ \expandafter\ifblank\expandafter{\@tempa}{}{%
+ \edef\@tempb{%
+ \expandonce{\csname Describe#1\endcsname}{\expandonce{\@tempa}}%
+ }%
+ \@tempb%
+ \addtolength\marginnotevskip{\baselineskip}%
+ }%
+ }%
+ \setlength\marginnotevskip{\z@}%
+ \ignorespaces%
+ }%
+}
+\@doxcreatedescribes{Macro}
+\AfterPackage*{marginnote}{%
+ \renewcommand*\marginpar[2][]{%
+ \IfArgIsEmpty{#1}{%
+ \marginnote{#2}[\marginnotevskip]%
+ }{%
+ \marginnote[{#1}]{#2}[\marginnotevskip]%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \marginpar
+% \end{length}^^A \marginnotevskip
+% \end{macro}^^A \@doxcreatedescribes
+% \begin{macro}{\index@type}
+% \changes{v2.05g}{2016/11/10}{neu}^^A
+% Dieses Makro dient zur Formatierung des Typen der Deklarationselemente in
+% Index und Änderungsliste.
+% \begin{macrocode}
+\newrobustcmd*\index@type[1]{%
+ \begingroup%
+ \normalfont\scriptsize\space(#1)%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{macro}^^A \index@type
+% \begin{macro}{\@doxcreatespecialmainmacrolikeindex}
+% \begin{macro}{\@doxcreatespecialmainindex}
+% \begin{macro}{\@doxcreatespecialmacrolikeindex}
+% \begin{macro}{\@doxcreatespecialindex}
+% Für den Index muss bei diesen Makros eine Anpassung erfolgen, damit die
+% Sortierung auch bei der Verwendung von \app{texindy} richtig erfolgt und
+% keine Einträge, welche es trotz gleicher Bezeichnung für unterschiedliche
+% Deklarationselemente (beispielsweise Umgebung \env{abstract} und Option
+% \opt{abstract}) gibt, unterschlagen werden. Außerdem wird hier die Definition
+% der Quelltextanker eingehangen und die Elterneinträge für Parameteränderungen
+% zurückgesetzt.
+% \begin{macrocode}
+\CheckCommand*\@doxcreatespecialmainmacrolikeindex[3]{%
+ \expandafter\def\csname SpecialMain#1Index\endcsname##1{%
+ \@SpecialIndexHelper@##1\@nil
+ \@bsphack%
+ \special@index{\@gtempa\actualchar
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
+ \space(#2)\encapchar main}%
+ \special@index{#3:\levelchar\@gtempa\actualchar%
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
+ \encapchar main}%
+ \@esphack%
+ }%
+}
+% \end{macrocode}
+% Um den Typ der Deklarationselemente in den Index einzutragen, wird der Typ
+% geschützt expandiert, um beispielsweise Umlaute problemlos nutzen zu können.
+% \begin{macrocode}
+\renewcommand*\@doxcreatespecialmainmacrolikeindex[3]{%
+ \expandafter\def\csname SpecialMain#1Index\endcsname##1{%
+ \@SpecialIndexHelper@##1\@nil%
+ \@bsphack%
+ \protected@edef\tud@reserved{#2}%
+ \special@index{%
+ \@gtempa\space\expandonce\tud@reserved\actualchar%
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar%
+ \index@type{\expandonce\tud@reserved}\encapchar main%
+ }%
+ \protected@edef\tud@reserved{#3}%
+ \special@index{%
+ \expandonce\tud@reserved:\levelchar\@gtempa\actualchar%
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar%
+ \encapchar main%
+ }%
+ \@esphack%
+ \let\parameter@parent@changes\relax%
+ \hypersourcedef{\filesep\number\c@CodelineNo}%
+ }%
+}
+\CheckCommand*\@doxcreatespecialmainindex[3]{%
+ \expandafter\def\csname SpecialMain#1Index\endcsname##1{%
+ \@bsphack%
+ \special@index{##1\actualchar{\string\ttfamily\space##1} (#2)%
+ \encapchar main}%
+ \special@index{#3:\levelchar##1\actualchar{\string\ttfamily\space##1}%
+ \encapchar main}%
+ \@esphack%
+ }%
+}
+\renewcommand*\@doxcreatespecialmainindex[3]{%
+ \expandafter\def\csname SpecialMain#1Index\endcsname##1{%
+ \@bsphack%
+ \protected@edef\tud@reserved{#2}%
+ \special@index{%
+ ##1\space\expandonce\tud@reserved\actualchar%
+ {\string\ttfamily\space##1}\index@type{\expandonce\tud@reserved}%
+ \encapchar main%
+ }%
+ \protected@edef\tud@reserved{#3}%
+ \special@index{%
+ \expandonce\tud@reserved:\levelchar##1\actualchar%
+ {\string\ttfamily\space##1}\encapchar main%
+ }%
+ \@esphack%
+ \let\parameter@parent@changes\relax%
+ \hypersourcedef{\filesep\number\c@CodelineNo}%
+ }%
+}
+\CheckCommand*\@doxcreatespecialmacrolikeindex[3]{%
+ \expandafter\def\csname Special#1Index\endcsname##1{%
+ \@SpecialIndexHelper@##1\@nil
+ \@bsphack%
+ \index{\@gtempa\actualchar
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
+ \space(#2)\encapchar usage}%
+ \index{#3:\levelchar\@gtempa\actualchar
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar
+ \encapchar usage}%
+ \@esphack%
+ }%
+}
+\renewcommand*\@doxcreatespecialmacrolikeindex[3]{%
+ \expandafter\def\csname Special#1Index\endcsname##1{%
+ \@SpecialIndexHelper@##1\@nil%
+ \@bsphack%
+ \protected@edef\tud@reserved{#2}%
+ \index{%
+ \@gtempa\space\expandonce\tud@reserved\actualchar%
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar%
+ \index@type{\expandonce\tud@reserved}\encapchar usage%
+ }%
+ \protected@edef\tud@reserved{#3}%
+ \index{%
+ \expandonce\tud@reserved:\levelchar\@gtempa\actualchar%
+ \string\verb\quotechar*\verbatimchar\bslash\@gtempa\verbatimchar%
+ \encapchar usage%
+ }%
+ \@esphack%
+ }%
+}
+\CheckCommand*\@doxcreatespecialindex[3]{%
+ \expandafter\def\csname Special#1Index\endcsname##1{%
+ \@bsphack%
+ \index{##1\actualchar{\protect\ttfamily##1} (#2)\encapchar usage}%
+ \index{#3:\levelchar##1\actualchar{\protect\ttfamily##1}%
+ \encapchar usage}%
+ \@esphack%
+ }%
+}
+\renewcommand*\@doxcreatespecialindex[3]{%
+ \expandafter\def\csname Special#1Index\endcsname##1{%
+ \@bsphack%
+ \protected@edef\tud@reserved{#2}%
+ \index{%
+ ##1\space\expandonce\tud@reserved\actualchar%
+ {\protect\ttfamily##1}\index@type{\expandonce\tud@reserved}%
+ \encapchar usage%
+ }%
+ \protected@edef\tud@reserved{#3}%
+ \index{%
+ \expandonce\tud@reserved:\levelchar##1\actualchar%
+ {\protect\ttfamily##1}\encapchar usage%
+ }%
+ \@esphack%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \@doxcreatespecialindex
+% \end{macro}^^A \@doxcreatespecialmacrolikeindex
+% \end{macro}^^A \@doxcreatespecialmainindex
+% \end{macro}^^A \@doxcreatespecialmainmacrolikeindex
+% \begin{macro}{\@doxcreatemacrolikeprintname}
+% \begin{macro}{\@doxcreateprintname}
+% \begin{macro}{\@doxcreatemacrolikeindexname}
+% \begin{macro}{\@doxcreateindexname}
+% \begin{macro}{\saved@indextype}
+% Hiermit werden die Makros zur Ausgabe als Randnotiz definiert. Mit diesen
+% wird dem eigentlichen Eintrag der Eintragstyp angehängt. Zu beachten ist, das
+% entgegen der ursprünglichen Definition \cs{strut} erst zum Schluss ausgeführt
+% wird. Somit lassen sich potenzielle Probleme mit dem Paket \pkg{microtype}
+% vermeiden.
+% \begin{macrocode}
+\def\@doxcreatemacrolikeprintname#1#2{%
+ \ifcsundef{Print#1Name}{%
+ \expandafter\def\csname Print#1Name\endcsname##1{%
+ \MacroFont\string##1\index@type{#2}\strut\ %
+ }%
+ }{}%
+ \ifcsundef{PrintDescribe#1}{%
+ \expandafter\def\csname PrintDescribe#1\endcsname##1{%
+ \MacroFont\string##1\index@type{#2}\strut\ %
+ }%
+ }{}%
+}
+\def\@doxcreateprintname#1#2{%
+ \ifcsundef{Print#1Name}{%
+ \expandafter\def\csname Print#1Name\endcsname##1{%
+ \MacroFont##1\index@type{#2}\strut\ %
+ }%
+ }{}%
+ \ifcsundef{PrintDescribe#1}{%
+ \expandafter\def\csname PrintDescribe#1\endcsname##1{%
+ \MacroFont##1\index@type{#2}\strut\ %
+ }%
+ }{}%
+}
+% \end{macrocode}
+% Ziel ist es, in den
+% Makros \cs{saved@indexname} und \cs{saved@indextype} den Namen und den Typ
+% des aktuellen Deklarationselementes zu speichern.
+% \begin{macrocode}
+\newcommand*\saved@indextype{}
+\def\@doxcreatemacrolikeindexname#1#2{%
+ \expandafter\def\csname @Save#1IndexName\endcsname##1{%
+ \edef\saved@indexname{\expandafter\@gobble##1}%
+ \protected@edef\saved@indextype{#2}%
+ }%
+}
+\def\@doxcreateindexname#1#2{%
+ \expandafter\def\csname @Save#1IndexName\endcsname##1{%
+ \let\saved@indexname##1%
+ \protected@edef\saved@indextype{#2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \saved@indextype
+% \end{macro}^^A \@doxcreateindexname
+% \end{macro}^^A \@doxcreatemacrolikeindexname
+% \end{macro}^^A \@doxcreateprintname
+% \end{macro}^^A \@doxcreatemacrolikeprintname
+% \begin{macro}{\@SaveMacroIndexName}
+% \begin{macro}{\@SaveEnvIndexName}
+% \begin{macro}{\SpecialMainMacroIndex}
+% Da für Makros die notwendigen Befehle für die Anpassungen der Änderungsliste
+% nicht über \cs{doxitem} kreiert werden, erfolgt dies hier direkt.
+% \begin{macrocode}
+\CheckCommand*\@SaveMacroIndexName[1]{%
+ \edef\saved@indexname{\expandafter\@gobble#1}%
+}
+\CheckCommand*\@SaveEnvIndexName[1]{\let\saved@indexname#1}
+\apptocmd{\@SaveMacroIndexName}{%
+ \let\saved@indextype\@empty%
+}{}{\tud@patch@wrn{@SaveMacroIndexName}}
+\CheckCommand*\SpecialMainMacroIndex[1]{%
+ \SpecialMainIndex{#1}\nobreak%
+ \DoNotIndex{#1}%
+}
+\apptocmd{\SpecialMainMacroIndex}{%
+ \let\parameter@parent@changes\relax%
+ \hypersourcedef{\filesep\number\c@CodelineNo}%
+}{}{\tud@patch@wrn{SpecialMainMacroIndex}}
+% \end{macrocode}
+% \end{macro}^^A \SpecialMainMacroIndex
+% \end{macro}^^A \@SaveEnvIndexName
+% \end{macro}^^A \@SaveMacroIndexName
+%
+% \subsubsection{Erstellen aller Deklarationselemente}
+%
+% Nachdem nun die Anpassungen für die Änderungsliste erfolgt sind, können nun
+% die für die Dokumentatiton notwendigen Umgebungen mit \cs{docitem} erstellt
+% werden. Dabei kommen die Lokalisierungsvariablen \cs{tud@\dots{}@name} zum
+% Tragen.
+% \begin{macrocode}
+\renewcommand*\tud@reserved[3][]{%
+ \doxitem[#1,idxtype=\csname tud@#3@name\endcsname]{#2}{#3}{%
+ \csname tud@#3s@name\endcsname%
+ }%
+}
+\undef\PrintEnvName
+\undef\PrintDescribeEnv
+\tud@reserved{Env}{environment}
+\tud@reserved{Option}{option}
+\tud@reserved{LayerPageStyle}{layerpagestyle}
+\tud@reserved{Layer}{layer}
+\tud@reserved[macrolike]{Length}{length}
+\tud@reserved{Counter}{counter}
+\tud@reserved{Color}{TUDcolor}
+\tud@reserved[macrolike]{Localization}{localization}
+\tud@reserved[macrolike]{Field}{field}
+\tud@reserved{Font}{KOMAfont}
+\tud@reserved{Parameter}{parameter}
+% \end{macrocode}
+%
+% \subsubsection{Besonderheiten des Deklarationselementes \emph{Parameter}}
+%
+% \begin{macro}{\parameter@parent@changes}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\parameter@parent@indexname}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\parameter@parent@indexformat}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% Um für Parameter sowohl im Index als auch in der Änderungsliste eine weitere
+% Ebene zu definieren, werden diese Befehle eigens definiert.
+% \begin{macrocode}
+\newcommand*\parameter@parent@changes{}
+\let\parameter@parent@changes\relax
+\newcommand*\parameter@parent@indexname{}
+\let\parameter@parent@indexname\relax
+\newcommand*\parameter@parent@indexformat{}
+\let\parameter@parent@indexformat\relax
+% \end{macrocode}
+% \end{macro}^^A \parameter@parent@indexformat
+% \end{macro}^^A \parameter@parent@indexname
+% \end{macro}^^A \parameter@parent@changes
+% \begin{macro}{\@SaveMacroIndexName}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\@SaveEnvIndexName}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% Bei der Ausführung einer dieser beiden Befehle bei der Definition von einem
+% Makro oder einer Umgebung werden diese für evtl. nachfolgende Parameter als
+% Elterneinträge definiert. Hierfür werden die Einträge zur Sortierung sowohl
+% für den Index als auch die Änderungsliste in \cs{parameter@parent@indexname}
+% und für die Formatierung in \cs{parameter@parent@indexformat} gespeichert.
+% \begin{macrocode}
+\apptocmd{\@SaveMacroIndexName}{%
+ \edef\parameter@parent@indexname{\expandafter\@gobble#1}%
+ \edef\parameter@parent@indexformat{%
+ \string\verb\quotechar*\verbatimchar#1\verbatimchar%
+ }%
+}{}{\tud@patch@wrn{@SaveMacroIndexName}}
+\apptocmd{\@SaveEnvIndexName}{%
+ \protected@edef\parameter@parent@indexname{#1\space\saved@indextype}%
+ \protected@edef\parameter@parent@indexformat{%
+ \string\verb\quotechar*\verbatimchar#1\verbatimchar%
+ \index@type{\saved@indextype}%
+ }%
+}{}{\tud@patch@wrn{@SaveEnvIndexName}}
+% \end{macrocode}
+% \end{macro}^^A \@SaveEnvIndexName
+% \end{macro}^^A \@SaveMacroIndexName
+% \begin{macro}{\SpecialMainParameterIndex}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% Hier wird nun die Gestalt der Einträge für Parameter als Haupteintrag
+% festgelegt.
+% \begin{macrocode}
+\renewcommand*\SpecialMainParameterIndex[1]{%
+ \ifx\parameter@parent@indexname\relax%
+ \ClassError{\TUD@Class@Name}{No previous macro or environment}{%
+ Since parameters can only be used for macros or\MessageBreak%
+ environments, you have to use `parameter' within\MessageBreak%
+ `macro' or `environment'.%
+ }%
+ \fi%
+ \protected@edef\parameter@parent@changes{%
+ \parameter@parent@indexname\actualchar%
+ \parameter@parent@indexformat:\levelchar%
+ }%
+ \@bsphack%
+ \special@index{%
+ \parameter@parent@indexname\actualchar%
+ \parameter@parent@indexformat\levelchar%
+ #1\space\tud@parameter@name\actualchar%
+ {\string\ttfamily\space#1}\index@type{\tud@parameter@name}%
+ \encapchar main%
+ }%
+ \special@index{%
+ \tud@parameters@name:\levelchar%
+ #1\space\parameter@parent@indexname%
+ \actualchar{\string\ttfamily\space#1}%
+ \noexpand\,--\noexpand\,\parameter@parent@indexformat%
+ \encapchar main%
+ }%
+ \@esphack%
+ \hypersourcedef{\filesep\number\c@CodelineNo}%
+}
+% \end{macrocode}
+% \end{macro}^^A \SpecialMainParameterIndex
+% \begin{environment}{DescribeParameterParent}
+% \changes{v2.05i}{2017/02/20}{neu}^^A
+% \begin{macro}{\SpecialParameterIndex}
+% \changes{v2.05i}{2017/02/20}{neu}^^A
+% Selbiges für die Verwendung durch \cs{Describe\dots}
+% \begin{macrocode}
+\newenvironment{DescribeParameterParent}[2]{%
+ \@nameuse{@Save#1IndexName}{\string#2}%
+}{}
+\renewcommand*\SpecialParameterIndex[1]{%
+ \ifx\parameter@parent@indexname\relax%
+ \ClassError{\TUD@Class@Name}{No previous macro or environment}{%
+ Since parameters can only be used for macros or\MessageBreak%
+ environments, you have to use macro\MessageBreak%
+ `\string\DescribeParameter' only within the environment\MessageBreak%
+ `DescribeParameterParent'.%
+ }%
+ \fi%
+ \@bsphack%
+ \index{%
+ \parameter@parent@indexname\actualchar%
+ \parameter@parent@indexformat\levelchar%
+ #1\space\tud@parameter@name\actualchar%
+ {\protect\ttfamily#1}\index@type{\tud@parameter@name}%
+ \encapchar usage%
+ }%
+ \index{%
+ \tud@parameters@name:\levelchar#1\space\parameter@parent@indexname%
+ \actualchar{\protect\ttfamily#1}%
+ \noexpand\,--\noexpand\,\parameter@parent@indexformat%
+ \encapchar usage%
+ }%
+ \@esphack%
+}
+% \end{macrocode}
+% \end{macro}^^A \SpecialParameterIndex
+% \end{environment}^^A DescribeParameterParent
+%
+% \subsubsection{Erzeugen von Änderungseinträgen}
+%
+% \begin{macro}{\changes@}
+% Bei der Erstellung der Änderungsliste fehlt bei Makros in der aktuellen
+% Version von \pkg{doc} ein Leerzeichen. Das Problem ist bereits gemeldet.
+% \begin{macrocode}
+\CheckCommand*\changes@[3]{%
+ \protected@edef\@tempa{%
+ \noexpand\glossary{%
+ #1\levelchar
+ \ifx\saved@macroname\@empty
+ \space
+ \actualchar
+ \generalname
+ \else
+ \saved@indexname
+ \actualchar
+ \string\verb\quotechar*%
+ \verbatimchar\saved@macroname
+ \verbatimchar
+ \fi
+ :\levelchar #3%
+ }%
+ }%
+ \@tempa\endgroup\@esphack%
+}
+% \end{macrocode}
+% Bei der Erzeugung der Änderungseinträge wird zwischen der Verwendung von
+% \app{makeindex} und \app{texindy} unterschieden. Für die Reihenfolge des
+% Erscheinens der einzelnen Einträge wird das angegebene Datum zur Sortierung
+% genutzt.
+% \begin{macrocode}
+\ifdefined\tudxdyflag%
+ \renewcommand*\changes@[3]{%
+% \end{macrocode}
+% Einträge sollen nur erzeugt werden, wenn diese vollständig sind.
+% \begin{macrocode}
+ \@tempswatrue%
+ \ifblank{#1}{\@tempswafalse}{}%
+ \ifblank{#3}{\@tempswafalse}{}%
+ \if@tempswa%
+% \end{macrocode}
+% Es wird dabei unterschieden, ob der Änderungseintrag einem Parameter gilt.
+% Ist dies nicht der Fall, so wird der Eintrag mehr oder weniger standardmäßig
+% erzeugt.
+% \begin{macrocode}
+ \ifx\parameter@parent@changes\relax%
+ \protected@edef\@tempb{%
+ \saved@indexname%
+ \ifx\saved@indextype\@empty\else%
+ \space\saved@indextype%
+ \fi%
+ \actualchar%
+ \string\verb\quotechar*%
+ \verbatimchar\saved@macroname%
+ \verbatimchar%
+ \ifx\saved@indextype\@empty\else%
+ \index@type{\saved@indextype}%
+ \fi%
+ :\levelchar%
+ }%
+% \end{macrocode}
+% Andernfalls wird eine zusätzliche Ebene vor dem eigentlichen Eintrag des
+% Parameters erzeugt und der zuvor in \cs{parameter@parent@changes} gesicherte
+% Elterneintrag~-- Befehl oder Umgebung~-- dafür eingefügt.
+% \begin{macrocode}
+ \else%
+ \protected@edef\@tempb{%
+ \parameter@parent@changes%
+ \saved@indexname%
+ \ifx\saved@indextype\@empty\else%
+ \space\saved@indextype%
+ \fi%
+ \actualchar%
+% \end{macrocode}
+% Der so erzeugte Änderungseintrag soll durch \app{texindy} bei der Erzeugung
+% der Änderungsliste noch speziell sortiert werden. Daher wird nicht \cs{verb}
+% sondern lediglich \cs{ttfamily} verwendet.
+% \begin{macrocode}
+ {\noexpand\ttfamily\saved@macroname}%
+ \ifx\saved@indextype\@empty\else%
+ \index@type{\saved@indextype}%
+ \fi%
+ :\levelchar%
+ }%
+ \fi%
+ \protected@edef\@tempa{%
+ \noexpand\glossary{%
+ #1\levelchar%
+ \ifx\saved@macroname\@empty%
+ \tud@general@name%
+ \else%
+ \tud@implementation@name%
+ \fi%
+ \levelchar%
+ \ifx\saved@macroname\@empty\else%
+ \@tempb%
+ \fi%
+ #2 #3%
+ \actualchar%
+ #3% (#2)%
+ }%
+ }%
+ \else%
+ \let\@tempa\relax%
+ \fi%
+ \@tempa\endgroup\@esphack%
+ }%
+\else%
+% \end{macrocode}
+% Für \app{makeindex} wird der Befehl insebsondere für das Listen der Parameter
+% angepasst.
+% \begin{macrocode}
+ \renewcommand*\changes@[3]{%
+ \protected@edef\@tempa{%
+ \noexpand\glossary{%
+ #1\levelchar%
+ \ifx\saved@macroname\@empty%
+ \quotechar!%
+ \actualchar%
+ \tud@general@name%
+ :\levelchar%
+ \else%
+ \ifx\parameter@parent@changes\relax\else%
+ \parameter@parent@changes zzz\space%
+ \fi%
+ \saved@indexname%
+ \ifx\saved@indextype\@empty\else%
+ \space\saved@indextype%
+ \fi%
+ \actualchar%
+ \string\verb\quotechar*%
+ \verbatimchar\saved@macroname%
+ \verbatimchar%
+ \ifx\saved@indextype\@empty\else%
+ \index@type{\saved@indextype}%
+ \fi%
+ \ifx\parameter@parent@changes\relax%
+ :\levelchar%
+ \else%
+ :\space%
+ \fi%
+ \fi%
+ #3%
+ }%
+ }%
+ \@tempa\endgroup\@esphack%
+ }%
+\fi%
+% \end{macrocode}
+% \end{macro}^^A \changes@
+% \begin{macro}{\@wrglossary}
+% Für die Ausgabe der Änderungsliste soll nicht einfach nur die Seitenzahl
+% sondern zumindest für die Implementierungen die Codezeile ausgegeben werden.
+% \begin{macrocode}
+\CheckCommand*\@wrglossary[1]{%
+ \protected@write\@glossaryfile{}%
+ {\string\glossaryentry{#1}{\thepage}}%
+ \endgroup
+ \@esphack%
+}
+% \end{macrocode}
+% Allgemeine Einträge werden mit Seitenzahlenerzeugt. Für Einträge bzgl. einer
+% Implementierungen werden Codezeilen als Basis verwendet, falls aktiv.
+% \begin{macrocode}
+\def\@wrglossary#1{%
+ \ifx\saved@macroname\@empty%
+ \protected@write\@glossaryfile{}{%
+ \string\glossaryentry{#1|usage}{\thepage}%
+ }%
+ \else%
+ \ifcodeline@index%
+ \global\advance\c@CodelineNo\@ne%
+ \protected@write\@glossaryfile{}{%
+ \string\glossaryentry{#1|main}{\filesep\number\c@CodelineNo}%
+ }%
+ \global\advance\c@CodelineNo\m@ne%
+ \else%
+ \protected@write\@glossaryfile{}{%
+ \string\glossaryentry{#1|main}{\thepage}%
+ }%
+ \fi%
+ \fi%
+ \endgroup%
+ \@esphack%
+}
+% \end{macrocode}
+% \end{macro}^^A \@wrglossary
+%
+% \subsubsection{Erscheinung von Einträgen in der Änderungsliste}
+%
+% \begin{macro}{\tud@lst@def}
+% \changes{v2.05}{2016/04/25}{neu}^^A
+% \begin{macro}{\tud@lst@values}
+% \changes{v2.05}{2016/04/25}{neu}^^A
+% \begin{macro}{\if@tud@lst@multi}
+% \changes{v2.05}{2016/04/25}{neu}^^A
+% \begin{macro}{\tud@lst@init}
+% \changes{v2.05}{2016/04/25}{neu}^^A
+% \begin{macro}{\tud@lst@add}
+% \changes{v2.05}{2016/04/25}{neu}^^A
+% \begin{macro}{\tud@lst@process}
+% \changes{v2.05}{2016/04/25}{neu}^^A
+% \begin{macro}{\tud@lst@@values}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\if@tud@lst@@multi}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\tud@lst@@init}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\tud@lst@@add}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\tud@lst@@process}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\tud@lst@subsub}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\tud@lst@subsubsub}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\subsubsubitem}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\efil}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% Falls für die Sortierung der Änderungsliste in \cls{tudscrdoc} \app{texindy}
+% zum Einsatz kommt, wird bei der Beschreibung von Einträgen oder Parametern
+% nur dann eine Unterebene verwendet, wenn zu einem Eintrag mehrere Angaben
+% existieren. Sollte nur eine Anmerkung vorhanden sein, wird diese direkt in
+% der dazugehörigen Ebene nach dem Eintrag selbst ausgegeben.
+% \begin{macrocode}
+\newcommand*\tud@lst@subsub{}
+\newcommand*\tud@lst@subsubsub{}
+\newcommand*\subsubsubitem{\@idxitem\hspace*{35\p@}}
+\newcommand*\efil{\hfil\nopagebreak}%
+\newcommand*\tud@lst@def{%
+ \newcommand*\tud@lst@values{}%
+ \newif\if@tud@lst@multi%
+ \newcommand*\tud@lst@init{%
+ \let\tud@lst@values\relax%
+ \let\tud@lst@subsub\relax%
+ \@tud@lst@multifalse%
+ }%
+ \newcommand*\tud@lst@add[1]{%
+ \ifx\tud@lst@values\relax\else%
+ \@tud@lst@multitrue%
+ \def\tud@lst@subsub{\subsubitem}%
+ \fi%
+ \listadd\tud@lst@values{\tud@lst@subsub ##1}%
+ }%
+ \newcommand*\tud@lst@process{%
+ \if@tud@lst@multi%
+ \preto\tud@lst@values{\efill}%
+ \fi%
+ \forlistloop{}{\tud@lst@values}%
+ \tud@lst@init%
+ }%
+ \newcommand*\tud@lst@@values{}%
+ \newif\if@tud@lst@@multi%
+ \newcommand*\tud@lst@@init{%
+ \let\tud@lst@@values\relax%
+ \def\tud@lst@subsub{\subsubitem}%
+ \def\tud@lst@subsubsub{\space}%
+ \@tud@lst@@multifalse%
+ }%
+ \newcommand*\tud@lst@@add[1]{%
+ \@tud@lst@multitrue%
+ \ifx\tud@lst@@values\relax\else%
+ \@tud@lst@@multitrue%
+ \def\tud@lst@subsubsub{\subsubsubitem}%
+ \fi%
+ \listadd\tud@lst@@values{##1}%
+ }%
+ \newcommand*\tud@lst@@process{%
+ \if@tud@lst@@multi%
+ \appto\tud@lst@values{\efill}%
+ \fi%
+ \edef\tud@reserved####1{%
+ \noexpand\listadd\noexpand\tud@lst@values{%
+ \expandonce\tud@lst@subsubsub####1%
+ }%
+ }%
+ \forlistloop{\tud@reserved}{\tud@lst@@values}%
+ \tud@lst@@init%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \efil
+% \end{macro}^^A \subsubsubitem
+% \end{macro}^^A \tud@lst@subsubsub
+% \end{macro}^^A \tud@lst@subsub
+% \end{macro}^^A \tud@lst@@process
+% \end{macro}^^A \tud@lst@@add
+% \end{macro}^^A \tud@lst@@init
+% \end{macro}^^A \if@tud@lst@@multi
+% \end{macro}^^A \tud@lst@@values
+% \end{macro}^^A \tud@lst@process
+% \end{macro}^^A \tud@lst@add
+% \end{macro}^^A \tud@lst@init
+% \end{macro}^^A \if@tud@lst@multi
+% \end{macro}^^A \tud@lst@values
+% \end{macro}^^A \tud@lst@def
+%
+% \subsubsection{Erzeugen von Index und Änderungsliste}
+%
+% \begin{macro}{\tud@write@replace}
+% \changes{v2.05}{2016/04/21}{neu}^^A
+% \begin{macro}{\tud@read@replace}
+% \changes{v2.05}{2016/04/21}{neu}^^A
+% \begin{macro}{\tud@line@replace}
+% \changes{v2.05}{2016/04/21}{neu}^^A
+% \begin{macro}{\actualchar}
+% \begin{macro}{\quotechar}
+% \begin{macro}{\levelchar}
+% Damit die erzeugten Dateien für Index und Änderungsliste von \app{texindy}
+% verarbeitet werden können, müssen einige Steuerzeichen in der originalen
+% \file{.ind}-Datei getauscht werden. Dafür wird diese zeilenweise eingelesen,
+% die fraglichen Zeichen ersetzt und in eine weitere Hilfsdatei geschrieben.
+% \begin{macrocode}
+\ifdefined\tudxdyflag
+ \newcommand*\tud@write@replace{}%
+ \newwrite\tud@write@replace%
+ \newcommand*\tud@read@replace{}%
+ \newread\tud@read@replace%
+% \end{macrocode}
+% Die Makros für die fraglichen Steuerzeichen werden so angepasst, dass die
+% Wahrscheinlichkeit für eine Verwendung dieser Kombination in einem Makro-
+% oder Umgebungsnamen sehr gering ist. Anschließend werden die erzeugten
+% Hilfsdateien für Index und Änderungsliste für \app{texindy} angepasst. Dabei
+% werden diese automatisch erzeugt, falls dies möglich ist.
+% \begin{macrocode}
+ \def\actualchar{<|1|>}%
+ \def\quotechar{<|2|>}%
+ \def\levelchar{<|3|>}%
+ \begingroup%
+ \endlinechar=\m@ne\relax%
+ \def\tud@reserved#1#2{%
+ \IfFileExists{\jobname.#1}{%
+ \immediate\openin\tud@read@replace=\jobname.#1\relax%
+ \immediate\openout\tud@write@replace=\jobname-xdy.#1\relax%
+ \@tempswafalse%
+ \loop\unless\ifeof\tud@read@replace%
+ \readline\tud@read@replace to\tud@line@replace%
+ \tud@replace\tud@line@replace{"}{""}%
+ \tud@replace\tud@line@replace{!}{"!}%
+ \tud@replace\tud@line@replace{:}{":}%
+ \tud@replace\tud@line@replace{@}{"@}%
+ \tud@replace\tud@line@replace{\"@}{"\@backslashchar"@}%
+ \expandafter\tud@replace\expandafter\tud@line@replace%
+ \expandafter{\actualchar}{@}%
+ \expandafter\tud@replace\expandafter\tud@line@replace%
+ \expandafter{\quotechar}{"}%
+ \expandafter\tud@replace\expandafter\tud@line@replace%
+ \expandafter{\levelchar}{!}%
+ \tud@replace\tud@line@replace{" @}{}%
+ \ifeof\tud@read@replace\else%
+ \immediate\write\tud@write@replace{%
+ \unexpanded\expandafter{\tud@line@replace}%
+ }%
+ \@tempswatrue%
+ \fi%
+ \repeat%
+ \immediate\closein\tud@read@replace%
+ \immediate\closeout\tud@write@replace%
+ \ifnum\pdf@shellescape=\@ne\relax%
+ \if@tempswa%
+ \ShellEscape{%
+ texindy\space%
+ -o \jobname.#2\space%
+ -M \@currname-#2.xdy\space%
+ -t \jobname-#2.xlg\space%
+ \jobname-xdy.#1%
+ }%
+% \end{macrocode}
+% Falls nichts geschrieben wurde, wird eine leere Ausgabedatei erzeugt.
+% \begin{macrocode}
+ \else%
+ \immediate\openout\tud@write@replace=\jobname.#2\relax%
+ \immediate\closeout\tud@write@replace%
+ \fi%
+ \fi%
+ }{}%
+ }%
+ \tud@reserved{idx}{ind}%
+ \tud@reserved{glo}{gls}%
+ \endgroup%
+% \end{macrocode}
+% Sollte \app{texindy} nicht aktiv sein, werden Index und Änderungsliste mit
+% \app{makeindex} automatisch erzeugt.
+% \begin{macrocode}
+\else
+ \ifnum\pdf@shellescape=\@ne\relax%
+ \ShellEscape{%
+ makeindex -s gglo.ist -t \jobname.glg -o \jobname.gls \jobname.glo%
+ }%
+ \ShellEscape{%
+ makeindex -s gind.ist -t \jobname.ilg -o \jobname.ind \jobname.idx%
+ }%
+ \fi%
+\fi
+% \end{macrocode}
+% \end{macro}^^A \levelchar
+% \end{macro}^^A \quotechar
+% \end{macro}^^A \actualchar
+% \end{macro}^^A \tud@line@replace
+% \end{macro}^^A \tud@read@replace
+% \end{macro}^^A \tud@write@replace
+% Jetzt werden noch die Einleitungen für Index und Änderungsliste angepasst.
+% \begin{macrocode}
+\IndexPrologue{\addsec{\indexname}\tud@index@text}
+\GlossaryPrologue{\addsec{\tud@changes@name}}
+% \end{macrocode}
+%
+% \subsection{ToDo-Liste}
+%
+% \begin{macro}{\PrintToDos}
+% \changes{v2.05}{2016/05/19}{neu}^^A
+% \begin{macro}{\@docinclude}
+% Für ToDo-Notizen wird am Ende eine Liste aller offenen Punkte ausgegeben.
+% \begin{macrocode}
+\DeclareNewTOC[%
+ type=todo,%
+ listname={\tud@todo@name},%
+ name=ToDo,%
+ tocentryindent=\z@,%
+ owner=\@currname,%
+]{tdo}
+\setuptoc{tdo}{totoc}
+\newcommand*\PrintToDos{\ifdefined\tudfinalflag\else\listoftodos\fi}
+% \end{macrocode}
+% Damit die Liste der ToDo-Notizen bei der Erzeugung der gesamten Dokumentation
+% des Quelltextes einmalig sowie vollständig und nicht nach jeder Quelldatei
+% einzeln ausgegeben wird, muss der Befehl \cs{@docinclude} angepasst werden.
+% \begin{macrocode}
+\patchcmd{\@docinclude}{%
+ \let\@ltxdoc@PrintIndex\PrintIndex
+ \let\PrintIndex\relax
+ \let\@ltxdoc@PrintChanges\PrintChanges
+ \let\PrintChanges\relax
+}{%
+ \let\@ltxdoc@PrintIndex\PrintIndex
+ \let\PrintIndex\relax
+ \let\@ltxdoc@PrintChanges\PrintChanges
+ \let\PrintChanges\relax
+ \let\@ltxdoc@PrintToDos\PrintToDos
+ \let\PrintToDos\relax
+}{}{\tud@patch@wrn{@docinclude}}
+\patchcmd{\@docinclude}{%
+ \let\PrintIndex\@ltxdoc@PrintIndex
+ \let\PrintChanges\@ltxdoc@PrintChanges
+}{%
+ \let\PrintIndex\@ltxdoc@PrintIndex
+ \let\PrintChanges\@ltxdoc@PrintChanges
+ \let\PrintToDos\@ltxdoc@PrintToDos
+}{}{\tud@patch@wrn{@docinclude}}
+% \end{macrocode}
+% \end{macro}^^A \@docinclude
+% \end{macro}^^A \PrintToDos
+% \begin{macro}{\ToDo}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% \begin{macro}{\@ToDo}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% Die Befehle für die ToDo-Notizen. Um in der gleichen Nomenklatur wie beim
+% Handbuch bleiben zu können, wird die Randnotizmarke als optionales Argument
+% hinter dem eigentlichen Text angegeben.
+% \begin{macrocode}
+\newcommand*\ToDo[2][]{%
+ \kernel@ifnextchar[{\@ToDo{#2}}{\@ToDo{#2}[]}%
+}
+\newcommand*\@ToDo{}
+\def\@ToDo#1[#2]{%
+ \ifdefined\tudfinalflag\else%
+ \begingroup%
+ \csuse{phantomsection}%
+ \IfArgIsEmpty{#2}{%
+ \def\tud@reserved{??}%
+ }{%
+ \def\tud@reserved{#2}%
+ }%
+ \endgraf%
+ \hfuzz0.8pt%
+ \leavevmode%
+ \def\@tempa{\raggedleft\fbox{ToDo:\space\tud@reserved\strut}}%
+ \ifdefined\marginnote%
+ \expandafter\marginnote\expandafter{\@tempa}[%
+ \dimexpr-\fboxsep-\fboxrule\relax%
+ ]%
+ \else%
+ \expandafter\marginpar\expandafter{\@tempa}%
+ \fi%
+ \fbox{\parbox{\dimexpr\textwidth-2\fboxsep\relax}{#1\strut}}%
+ \endgraf%
+% \end{macrocode}
+% Werden mit \cs{DocInclude} mehrere Dateien in das Dokument eingefügt, so
+% erhält die ToDo-Notiz einen entsprechenden Hinweis.
+% \begin{macrocode}
+ \let\@tempa\@empty%
+ \ifdefined\currentfile%
+ \def\@tempa{\,--\,\texttt{\currentfile}}%
+ \fi%
+ \addxcontentsline{tdo}{todo}{\tud@reserved\@tempa:\space#1}%
+ \endgroup%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \@ToDo
+% \end{macro}^^A \ToDo
+%
+% \subsection{Schriften und Satzspiegel}
+%
+% \begin{macro}{\MacroFont}
+% \begin{macro}{\AltMacroFont}
+% Wird das Paket \pkg{mweights} geladen, so soll der passende Schriftschnitt
+% für die ausgewählten TypeWriter-Schriften genutzt werden. Damit dies mit dem
+% Paket \pkg{doc} funktioniert, muss der Befehl \cs{MacroFont} angepasst werden.
+% \begin{macrocode}
+\AfterPackage{mweights}{%
+ \CheckCommand*\MacroFont{%
+ \fontencoding\encodingdefault%
+ \fontfamily\ttdefault%
+ \fontseries\mddefault%
+ \fontshape\updefault%
+ \small%
+ }%
+ \renewcommand*\MacroFont{%
+ \fontencoding\encodingdefault%
+ \fontfamily\ttdefault%
+ \fontseries\mdseries@tt%
+ \fontshape\updefault%
+ \small%
+ }%
+ \CheckCommand*\AltMacroFont{%
+ \fontencoding\encodingdefault%
+ \fontfamily\ttdefault%
+ \fontseries\mddefault%
+ \fontshape\sldefault%
+ \small%
+ }%
+ \renewcommand*\AltMacroFont{%
+ \fontencoding\encodingdefault%
+ \fontfamily\ttdefault%
+ \fontseries\mdseries@tt%
+ \fontshape\sldefault%
+ \small%
+ }%
+% \end{macrocode}
+% Am Ende der Präambel wird dafür gesorgt, dass der Befehl \cs{mdseries@tt} in
+% jedem Fall definiert ist.
+% \begin{macrocode}
+ \AtEndPreamble{%
+ \ifundef{\mdseries@tt}{\edef\mdseries@tt{\mddefault}}{}%
+ }%
+}
+% \end{macrocode}
+% Wird das Paket \pkg{tudscrfonts} genutzt, erscheinen die TypeWriter-Schriften
+% zur Quelltextdokumentation sowohl für Latin~Modern als auch Roboto etwas zu
+% schlank.
+% \begin{macrocode}
+\PassOptionsToPackage{ttfont=lmtt}{tudscrfonts}
+\AfterPackage{tudscrfonts}{%
+ \AtEndPreamble{%
+ \ifnum\tud@ttfont@num>\z@\relax%
+ \edef\mdseries@tt{\tud@ttfont@bf}%
+ \fi%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \AltMacroFont
+% \end{macro}^^A \MacroFont
+%
+% Um den zur Verfügung stehenden Platz möglichst effektiv zu nutzen, soll der
+% Satzspiegel dahingehend aufgeteilt werden, dass für die Darstellung jeder
+% Quelltextzeile genau 80~Zeichen zur Verfügung stehen. Dies ist allerdings
+% abhängig von der geladenen TypeWriter-Schrift. Deshalb wird die Berechnung
+% des Satzspiegels erst zum Beginn des Dokumentes ausgeführt, um auf etwaige
+% Pakete zur Schriftauswahl reagieren zu können.
+%
+% \begin{macro}{\tud@setarea}
+% \changes{v2.05g}{2016/11/10}{neu}^^A
+% \begin{length}{\topmargin}
+% \begin{length}{\headheight}
+% \begin{length}{\headsep}
+% \begin{length}{\footskip}
+% \begin{length}{\textheight}
+% \begin{length}{\textwidth}
+% \begin{length}{\columnsep}
+% \begin{length}{\marginparsep}
+% \begin{length}{\marginparwidth}
+% \begin{length}{\oddsidemargin}
+% Hiermit wird die Berechnung des Satzspiegels ausgeführt.
+% \begin{macrocode}
+\newcommand*\tud@setarea{%
+ \setlength\topmargin{-1in}%
+ \setlength\headheight{0pt}%
+ \setlength\headsep{3em}%
+ \setlength\footskip{1.5\headsep}%
+ \setlength\textheight{\dimexpr\paperheight-2.5\headsep-\footskip\relax}%
+ \@colht=\textheight%
+ \@colroom=\textheight%
+ \vsize=\textheight%
+ \settowidth\MacroIndent{\rmfamily\scriptsize 0000\ }%
+ \begingroup%
+ \MacroFont\selectfont%
+ \settowidth\@tempdima{\space}%
+ \setlength\@tempdima{80\@tempdima}%
+%^^A \addtolength\@tempdima{\dimexpr\MacroIndent+.1\p@\relax}%
+ \addtolength\@tempdima{\MacroIndent}%
+ \edef\@tempa{%
+ \endgroup%
+ \noexpand\setlength\noexpand\textwidth{\the\@tempdima}%
+ }%
+ \@tempa%
+ \columnwidth=\textwidth%
+ \hsize=\columnwidth%
+ \linewidth=\hsize%
+ \setlength\columnsep{1em}%
+ \setlength\marginparsep{1em}%
+ \setlength\marginparwidth{%
+ \dimexpr\paperwidth-\textwidth-2\marginparsep\relax%
+ }%
+ \setlength\oddsidemargin{\dimexpr\marginparwidth+\marginparsep-1in\relax}%
+}
+\AtBeginDocument{\tud@setarea}
+% \end{macrocode}
+% \end{length}^^A \oddsidemargin
+% \end{length}^^A \marginparwidth
+% \end{length}^^A \marginparsep
+% \end{length}^^A \columnsep
+% \end{length}^^A \textwidth
+% \end{length}^^A \textheight
+% \end{length}^^A \footskip
+% \end{length}^^A \headsep
+% \end{length}^^A \headheight
+% \end{length}^^A \topmargin
+% \end{macro}^^A \tud@setarea
+%
+% \subsection{Zusätzliche Markup-Befehle}
+%
+% \begin{macro}{\app}
+% \begin{macro}{\cls}
+% \begin{macro}{\pkg}
+% \begin{macro}{\opt}
+% \begin{macro}{\val}
+% \begin{macro}{\pgs}
+% \begin{macro}{\env}
+% \begin{macro}{\prm}
+% \changes{v2.05g}{2016/11/02}{neu}^^A
+% \begin{macro}{\cnt}
+% \changes{v2.05i}{2017/02/23}{neu}^^A
+% \begin{macro}{\file}
+% Zusätzliche Auszeichnungsbefehle.
+% \begin{macrocode}
+\newrobustcmd*\app[1]{\mbox{\textsl{\textbf{#1}}}}
+\newrobustcmd*\cls[1]{\mbox{\textsf{\textbf{#1}}}}
+\newrobustcmd*\pkg[1]{\mbox{\textsf{\textbf{#1}}}}
+\newrobustcmd*\opt[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\val[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\pgs[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\env[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\prm[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\cnt[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\file[1]{\mbox{\texttt{#1}}}
+\AfterPackage{hyperref}{%
+ \pdfstringdefDisableCommands{%
+ \let\app\@firstofone%
+ \let\cls\@firstofone%
+ \let\pkg\@firstofone%
+ \let\opt\@firstofone%
+ \let\val\@firstofone%
+ \let\pgs\@firstofone%
+ \let\env\@firstofone%
+ \let\prm\@firstofone%
+ \let\file\@firstofone%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \file
+% \end{macro}^^A \cnt
+% \end{macro}^^A \prm
+% \end{macro}^^A \env
+% \end{macro}^^A \pgs
+% \end{macro}^^A \val
+% \end{macro}^^A \opt
+% \end{macro}^^A \pkg
+% \end{macro}^^A \cls
+% \end{macro}^^A \app
+%
+% \subsection{Rückfalloptionen bei fehlenden Paketen}
+%
+% Zum Schluss erfolgen einige Anpassungen mit \cs{AtEndPreamble}, um abhängig
+% vom Ladezustand einiger Pakete reagieren zu können.
+% \begin{macrocode}
+\AtEndPreamble{%
+% \end{macrocode}
+% \begin{macro}{\selectlanguage}
+% \begin{macro}{\glqq}
+% \begin{macro}{\grqq}
+% Etwas Kleinkram für \pkg{babel}\dots
+% \begin{macrocode}
+ \@ifpackageloaded{babel}{}{%
+ \ClassWarning{\TUD@Class@Name}{Package `babel' not loaded}%
+ \providecommand*\selectlanguage[1]{}%
+ \providecommand*\glqq{}%
+ \providecommand*\grqq{}%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \grqq
+% \end{macro}^^A \glqq
+% \end{macro}^^A \selectlanguage
+% \begin{macro}{\enquote}
+% \dots und \pkg{csquotes}.
+% \begin{macrocode}
+ \@ifpackageloaded{csquotes}{}{%
+ \ClassWarning{\TUD@Class@Name}{Package `csquotes' not loaded}%
+ \providecommand\enquote[1]{\emph{#1}}%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \enquote
+% Sollte das Paket \pkg{tudscrfonts} nicht geladen worden sein, so wird das
+% Paket \pkg{lmodern} geladen und die fehlenden Befehle zur Schriftauswahl
+% rudimentär definiert.
+% \begin{macrocode}
+ \@ifpackageloaded{tudscrfonts}{}{%
+ \RequirePackage{lmodern}[2009/10/30]%
+ \providecommand*\textcdln[1]{\textsf{#1}}%
+ \providecommand*\textcdrn[1]{\textcdln{#1}}%
+ \providecommand*\textcdsn[1]{\textcdln{#1}}%
+ \providecommand*\textcdbn[1]{\textbf{\textcdln{#1}}}%
+ \providecommand*\textcdxn[1]{\textcdbn{#1}}%
+ \providecommand*\textcdli[1]{\textsl{\textcdln{#1}}}%
+ \providecommand*\textcdri[1]{\textcdli{#1}}%
+ \providecommand*\textcdsi[1]{\textcdli{#1}}%
+ \providecommand*\textcdbi[1]{\textbf{\textcdli{#1}}}%
+ \providecommand*\textcdxi[1]{\textcdbi{#1}}%
+ }%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</class&body>
+% \fi
+%
+% \Finale
+%
+\endinput