% \CheckSum{2094} % \iffalse meta-comment % % TUD-Script -- Corporate Design of Technische Universität Dresden % ---------------------------------------------------------------------------- % % Copyright (C) Falk Hanisch , 2012-2020 % % ---------------------------------------------------------------------------- % % 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} \iftutex \usepackage{fontspec} \else \usepackage[T1]{fontenc} \usepackage[ngerman=ngerman-x-latest]{hyphsubst} \fi \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} % % \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&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 % % \fi % % \Finale % \endinput