% \iffalse meta-comment %/GitFileInfo=tudscr-doc.dtx % % TUD-Script -- Corporate Design of Technische Universität Dresden % ---------------------------------------------------------------------------- % % Copyright (C) Falk Hanisch , 2012-2022 % % ---------------------------------------------------------------------------- % % This work may be distributed and/or modified under the conditions of the % LaTeX Project Public License, either version 1.3c of this license or % any later version. The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of % LaTeX version 2008-05-04 or later. % % This work has the LPPL maintenance status "maintained". % % The current maintainer and author of this work is Falk Hanisch. % % ---------------------------------------------------------------------------- % % \fi % % \iffalse ins:batch + dtx:driver %<*ins> \ifx\documentclass\undefined \input docstrip.tex \ifToplevel{\batchinput{tudscr.ins}} \else \let\endbatchfile\relax \fi \endbatchfile % %<*dtx> \ProvidesFile{tudscr-doc.dtx}[2022/08/09] \RequirePackage{tudscr-gitinfo} \documentclass[english,ngerman,xindy]{tudscrdoc} \iftutex \usepackage{fontspec} \else \usepackage[T1]{fontenc} \usepackage[ngerman=ngerman-x-latest]{hyphsubst} \fi \usepackage{babel} \usepackage{tudscrfonts} \usepackage[babel]{microtype} \GitHubBase{\TUDScriptRepository} \begin{document} \author{Falk Hanisch\TUDScriptContactTitle} \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}. % % \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,parskip=half-}{scrartcl} \AfterClass{scrartcl}{\let\scr@maketitle\@maketitle} \AfterClass{ltxdoc}{\let\@maketitle\scr@maketitle} % \end{macrocode} % Der folgende Quelltext ist 1:1 aus \cls{scrdoc} kopiert. % \begin{macrocode} \newcommand*\tud@saved@LoadClass{} \let\tud@saved@LoadClass=\LoadClass \renewcommand*\LoadClass[2][]{% \begingroup% \edef\@tempc{#2}\def\@tempb{article}% \ifx\@tempc\@tempb% \let\LoadClass\tud@saved@LoadClass% \def\@tempc{scrartcl}% \fi% \edef\@tempc{% \endgroup% \noexpand\tud@saved@LoadClass[{#1}]{\@tempc}% }% \@tempc% } \newcommand*\tud@saved@PassOptionsToClass{} \let\tud@saved@PassOptionsToClass=\PassOptionsToClass \renewcommand*\PassOptionsToClass[2]{% \begingroup% \edef\@tempc{#2}\def\@tempb{article}% \ifx\@tempc\@tempb% \def\@tempc{scrartcl}% \fi% \edef\@tempc{% \endgroup% \noexpand\tud@saved@PassOptionsToClass{#1}{\@tempc}% }% \@tempc% } \LoadClassWithOptions{ltxdoc}[2015/03/26] \setcounter{IndexColumns}{2} \setcounter{StandardModuleDepth}{2} % \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, müssen mit \cs{DoNotIndex angegeben werden.} % % \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 % % \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} % % \iffalse % %<*class&body> % \fi % % \subsection{Standardwerte für Titelei, Absatzauszeichnung und Index} % % Folgende Werte sind standardmäßig für den Titel eingestellt, können aber % jederzeit überschrieben werden. % \begin{macrocode} \AtEndOfClass{% \@ifpackageloaded{tudscr-gitinfo}{% \GetFileInfo{\jobname}% \title{\file{\filename}}% \date{% \filedate% \ifdefvoid{\fileversion}{}{\nobreakspace\fileversion}% \ifdefvoid{\filerevision}{}{\nobreakspace\texttt{\filerevision}}% }% }{}% \CodelineIndex% \RecordChanges% } % \end{macrocode} % Wurde in der Präambel \cs{GetFileInfo} nicht aufgerufen, dann erfolgt dies zu % Beginn des Dokumentes. % \begin{macrocode} \AtBeginDocument{% \ifdefvoid{\filename}{% \IfFileExists{\jobname.dtx}{% \edef\filename{\jobname.dtx}% }{% \edef\filename{\jobname.tex}% }% \undef\filedate% \undef\fileversion% \undef\filerevision% \undef\fileinfo% \expandafter\GetFileInfo\expandafter{\filename}% }{}% \ifdefvoid{\filerevision}{\let\filerevision\@empty}{}% } % \end{macrocode} % % \subsection{Seitenstil} % % \begin{macro}{\@docinclude} % \begin{macro}{\ps@tudscrdoc} % Die Auswahl des Seitenstils wird im Vergleich zur Klasse \cls{ltxdoc} % verbessert und an das Paket \pkg{tudscr-gitinfo} angepasst. % \begin{macrocode} \pretocmd\@docinclude{% \GetFileInfo{#1}\pagestyle{tudscrdoc}% }{}{\tud@patch@wrn{@docinclude}} \def\ps@tudscrdoc{% \let\@mkboth\@gobbletwo% \let\@oddhead\@empty% \let\@evenhead\@empty% \def\@oddfoot{% File\ifnum\c@part>\z@\nobreakspace\thepart\fi:% \nobreakspace\texttt{\ifdefvoid{\filename}{?}{\filename}}% \enskip Version:\nobreakspace\ifdefvoid{\filedate}{?}{\filedate}% \ifdefvoid{\fileversion}{}{\nobreakspace\fileversion}% \ifdefvoid{\filerevision}{}{\enskip\texttt{\filerevision}}% \hfill\thepage% }% \def\@evenfoot{\@oddfoot}% } \pagestyle{tudscrdoc}% \let\ps@titlepage\ps@tudscrdoc% % \end{macrocode} % \end{macro}^^A \ps@tudscrdoc % \end{macro}^^A \@docinclude % % \subsection{Definition und Erscheinungsbild von Deklarationselementen} % % Das Paket~\pkg{doc} stellt die Funktionalitäten zur Quelltextdokumentation % innerhalb von \file{.dtx}-Dateien bereit. Mit \pkg{doc}~|v3.0| ist es % zusätzlich möglich, mit \cs{NewDocElement} weitere Deklarationselemente zu % erstellen. Allerdings wird für die Anpassung des Erscheinungsbildes der % Indexeinträge keine Schnittstelle bereitgestellt, weshalb im Folgenden einige % Patches notwendig sind. % % \subsubsection{Randnotizen und multiple Erläuterungen} % % Das Paket~\pkg{doc} stellt mit |\Describe|\meta{Typ} Befehle für die % Erläuterung einzelner Deklarationselemente bereit. Sollen gleich mehrere % Elemente in einem Abschnitt erläutert werden, fehlt jedoch die entsprechende % Schnittstelle, weshalb zusätzlich die Befehle |\Describe|\meta{Typ}|s| % darauf aufbauend definiert werden. % % \begin{length}{\tud@dim@marginnotevskip} % \changes{v2.05i}{2017/03/09}{neu}^^A % \begin{macro}{\marginpar} % Da die Befehle |\Describe|\meta{Typ} zur Erzeugung einer Randnotiz für % jeden Eintrag \cs{marginpar} verwenden, müssen diese mit einem vertikalen % Versatz gesetzt werden, falls gleich mehrere auf einmal zu erzeugen sind. % Hierfür wird das Paket~\pkg{marginnote} genutzt. % \begin{macrocode} \tud@newdim\tud@dim@marginnotevskip \AfterPackage*{marginnote}{% \renewcommand*\marginpar[2][]{% \IfArgIsEmpty{#1}{% \marginnote{#2}[\tud@dim@marginnotevskip]% }{% \marginnote[{#1}]{#2}[\tud@dim@marginnotevskip]% }% }% } % \end{macrocode} % \end{macro}^^A \marginpar % \end{length}^^A \tud@dim@marginnotevskip % \begin{macro}{\doc@createdescribes} % \changes{v2.05i}{2017/03/09}{neu}^^A % Die Definition für |\Describe|\meta{Typ}|s|. Die so erzeugten Befehle passen % für jeden neuen Eintrag die Länge \cs{marginnotevskip} selbstständig an. Für % jeden angegebenen Eintrag |\Describe|\meta{Typ}|s|\oarg{...}\marg{Element(e)} % wird an |\Describe|\meta{Typ}\oarg{...}\marg{Element} das optionale Argument % durchgereicht. Erzeugt werden Befehle via \cs{@NewDocElement}. % \begin{macrocode} \newcommand*\doc@createdescribes[1]{% \expandafter\newcommand\expandafter*\csname Describe#1s\endcsname[2][]{% \tud@setdim\tud@dim@marginnotevskip{\z@}% \def\@tempc{##2}% \@for\@tempa:=\@tempc\do{% \trim@spaces@in\@tempa% \ifx\@tempa\@empty\else% \def\@tempb{\@nameuse{Describe#1}[{##1}]}% \expandafter\@tempb\expandafter{\@tempa}% \tud@addtodim\tud@dim@marginnotevskip{1\baselineskip}% \fi% }% \tud@setdim\tud@dim@marginnotevskip{\z@}% \ignorespaces% }% } % \end{macrocode} % \end{macro}^^A \doc@createdescribes % \begin{macro}{\tud@idx@typemarkup} % \changes{v2.05g}{2016/11/10}{neu}^^A % \changes{v2.06o}{2022/07/20}{Anpassungen für \pkg{doc}}^^A % Dieses Makro dient zur Formatierung des Typen der Deklarationselemente in % Index, Änderungsliste und Randnotizen. % \begin{macrocode} \NewDocumentCommand{\tud@idx@typemarkup}{r()}{% \begingroup% \normalfont\scriptsize\space(#1)% \endgroup% } % \end{macrocode} % \end{macro}^^A \tud@idx@typemarkup % \begin{macro}{\@NewDocElement} % \changes{v2.06o}{2022/07/20}{neu}^^A % Erzeugen der Befehle von |\Describe|\meta{Typ}|s|\oarg{...}\marg{Element(e)}. % Weiterhin werden für die Verwendung von \cls{ltxdoc} und \pkg{hypdoc} % \hrfn{https://github.com/latex3/latex2e/issues/900}{einige Bugs} gefixt. % \begin{macrocode} \AtBeginDocument{\let\PrintMacroName\@@PrintMacroName} \apptocmd\@NewDocElement{% \doc@createdescribes{#2}% \csletcs{@@PrintDescribe#2}{PrintDescribe#2}% \csletcs{@@Print#2Name}{Print#2Name}% \csletcs{@@SpecialMain#2Index}{SpecialMain#2Index}% \csletcs{@@Special#2Index}{Special#2Index}% }{}{\tud@patch@wrn{@NewDocElement}} % \end{macrocode} % Hiermit wird die Formatierung des Elementtyps bei Deklarationen angepasst. % Zu beachten ist, das zusätzlich zur ursprünglichen Definition \cs{strut} zum % Schluss (nochmals) ausgeführt wird. Somit lassen sich potenzielle Probleme % mit dem Paket \pkg{microtype} vermeiden. % \begin{macrocode} \patchcmd\@NewDocElement{% \@temptokena\expandafter{% \expandafter\textnormal\expandafter{% \expandafter\space\expandafter(\doc@printtype)% }% }% }{% \@temptokena\expandafter{% \expandafter\textnormal\expandafter{% \expandafter\tud@idx@typemarkup\expandafter(\doc@printtype)\strut% }% }% }{}{\tud@patch@wrn{@NewDocElement}} % \end{macrocode} % \end{macro}^^A \@NewDocElement % % \subsubsection{Erweiterte Einträge für Index und Änderungsliste} % % \begin{macro}{\tud@idx@sortkey} % \changes{v2.05g}{2016/11/02}{neu}^^A % \begin{macro}{\tud@idx@format} % \changes{v2.05g}{2016/11/02}{neu}^^A % \begin{macro}{\tud@idx@element} % \changes{v2.05g}{2016/11/02}{neu}^^A % \begin{macro}{\tud@idx@parent} % \changes{v2.05g}{2016/11/02}{neu}^^A % \changes{v2.06o}{2022/07/20}{Anpassungen für \pkg{doc}}^^A % Mit diesen Befehlen kann beim Erzeugen von Einträgen für die Änderungsliste % auf die zuvor bereits erzeugten Indexeinträge zurückggegriffen werden. Ein % zuvor erzeugter Elterneintrag wird mit Sortierschlüssel und der eigentlichen % Formatierung in zwei Token in \cs{tud@idx@parent} expandiert, um später % darauf zurückgreifen zu können~-- dies ist insbesondere für Parameter nötig. % \begin{macrocode} \newcommand*\tud@idx@sortkey{} \let\tud@idx@sortkey\relax \newcommand*\tud@idx@format{} \let\tud@idx@format\relax \newcommand*\tud@idx@element{} \let\tud@idx@element\relax \newcommand*\tud@idx@parent{} \let\tud@idx@parent\relax % \end{macrocode} % \end{macro}^^A \tud@idx@parent % \end{macro}^^A \tud@idx@element % \end{macro}^^A \tud@idx@format % \end{macro}^^A \tud@idx@sortkey % \begin{macro}{\doc@createspecialindexes} % \changes{v2.06o}{2022/07/20}{neu}^^A % \begin{macro}{\doc@createspecialmacrolikeindexes} % \changes{v2.06o}{2022/07/20}{neu}^^A % 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 gleichnamige Umgebungen und Optionen) % gibt, unterschlagen werden. Deshalb wird den erzeugten Sortierschlüsseln die % Ausgabe des Deklarationstyps aus |#2| respektive |\@temptokena| hinzugefügt. % Außerdem wird der Markupbefehl \cs{tud@idx@typemarkup} für diese eingehangen. % % Weiterhin werden das Deklarationselement in \cs{tud@idx@element} sowie der % Sortierschlüssel in \cs{tud@idx@sortkey} und der formatierte Indexeintrag in % \cs{tud@idx@format} gesichert, um diese sowohl in der Änderungsliste als auch % für eigens definierte Elterneinträge (\cs{tud@idx@parent}) nutzen zu können. % \begin{macrocode} \CheckCommand*\doc@createspecialindexes[3]{% \@temptokena{\space (#2)}% \@temptokenb{#3:}% \@nameedef{SpecialMain#1Index}##1{% \noexpand\@bsphack \ifdoc@toplevel \noexpand\special@index{% ##1\noexpand\actualchar{\string\ttfamily\space##1}% \ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\encapchar main% }% \fi \ifx\@nil#3\@nil\else \noexpand\special@index{% \the\@temptokenb\noexpand\levelchar ##1\noexpand\actualchar{\string\ttfamily\space##1}% \noexpand\encapchar main% }% \fi \noexpand\@esphack% }% \@nameedef{Special#1Index}##1{% \noexpand\@bsphack \ifdoc@toplevel \noexpand\doc@providetarget \noexpand\index{% ##1\noexpand\actualchar{\string\ttfamily\space##1}% \ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\doc@handleencap{usage}% }% \fi \ifx\@nil#3\@nil\else \noexpand\index{% \the\@temptokenb\noexpand\levelchar ##1\noexpand\actualchar{\string\ttfamily\space##1}% \noexpand\doc@handleencap{usage}% }% \fi \noexpand\@esphack% }% } \renewcommand*\doc@createspecialindexes[3]{% \@temptokena{\space (#2)}% \@temptokenb{#3:}% \@nameedef{SpecialMain#1Index}##1{% \noexpand\@bsphack \ifdoc@toplevel \noexpand\special@index{% % PATCH: add `\the\@temptokena' to sorting argument ##1\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar{\string\ttfamily\space##1}% % PATCH: add `\tud@idx@typemarkup' for markup \ifx\@nil#2\@nil\else\noexpand\tud@idx@typemarkup\the\@temptokena\fi \noexpand\encapchar main% }% \fi \ifx\@nil#3\@nil\else \noexpand\special@index{% \the\@temptokenb\noexpand\levelchar % PATCH: add `\the\@temptokena' to sorting argument ##1\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar{\string\ttfamily\space##1}% \noexpand\encapchar main% }% \fi \noexpand\@esphack% % \end{macrocode} % Bei allen Varianten der Indexeinträge werden diese nach dem Erstellen % gesichert, um diese in der richtigen Formatierung als Elterneinträge % für Parameter im Index sowie für die Änderungsliste nutzen zu können. % \begin{macrocode} % PATCH: assign used sort key and formatted entry to dedicated macros \gdef\noexpand\tud@idx@sortkey{##1\ifx\@nil#2\@nil\else\the\@temptokena\fi}% \gdef\noexpand\tud@idx@format{% {\string\ttfamily\space##1}% \ifx\@nil#2\@nil\else\noexpand\tud@idx@typemarkup\the\@temptokena\fi }% % PATCH: reset settings for nested index and changelog entries \gdef\noexpand\tud@idx@element{#1}% \global\let\noexpand\tud@idx@parent\relax% }% \@nameedef{Special#1Index}##1{% \noexpand\@bsphack \ifdoc@toplevel \noexpand\doc@providetarget \noexpand\index{% % PATCH: add `\the\@temptokena' to sorting argument ##1\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar{\string\ttfamily\space##1}% % PATCH: add `\tud@idx@typemarkup' for markup \ifx\@nil#2\@nil\else\noexpand\tud@idx@typemarkup\the\@temptokena\fi \noexpand\doc@handleencap{usage}% }% \fi \ifx\@nil#3\@nil\else \noexpand\index{% \the\@temptokenb\noexpand\levelchar % PATCH: add `\the\@temptokena' to sorting argument ##1\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar{\string\ttfamily\space##1}% \noexpand\doc@handleencap{usage}% }% \fi \noexpand\@esphack% % PATCH: assign used sort key and formatted entry to dedicated macros \gdef\noexpand\tud@idx@sortkey{##1\ifx\@nil#2\@nil\else\the\@temptokena\fi}% \gdef\noexpand\tud@idx@format{% {\string\ttfamily\space##1}% \ifx\@nil#2\@nil\else\noexpand\tud@idx@typemarkup\the\@temptokena\fi }% % PATCH: reset settings for nested index and changelog entries \gdef\noexpand\tud@idx@element{#1}% \global\let\noexpand\tud@idx@parent\relax% }% } \CheckCommand*\doc@createspecialmacrolikeindexes[3]{% \@temptokena{\space (#2)}% \@temptokenb{#3:}% \@nameedef{Code#1Index}##1##2{% \noexpand\@SpecialIndexHelper@##2\noexpand\@nil \noexpand\@bsphack \noexpand\ifdoc@noindex\noexpand\else \ifdoc@toplevel \noexpand\special@index{% \noexpand\@gtempa\noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar \ifx\@nil#2\@nil\else \the\@temptokena \fi \noexpand\encapchar ##1% }% \fi \ifx\@nil#3\@nil\else \noexpand\special@index{% \the\@temptokenb\noexpand\levelchar \noexpand\@gtempa\noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar \noexpand\encapchar ##1% }% \fi \noexpand\fi \noexpand\@esphack% }% \@nameedef{SpecialMain#1Index}##1{% \expandafter\noexpand\csname Code#1Index\endcsname{main}{##1}% }% \@nameedef{Special#1Index}##1{% \noexpand\@SpecialIndexHelper@##1\noexpand\@nil \noexpand\@bsphack \noexpand\ifdoc@noindex\noexpand\else \ifdoc@toplevel \noexpand\doc@providetarget \noexpand\index{% \noexpand\@gtempa\noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar \ifx\@nil#2\@nil\else \the\@temptokena \fi \noexpand\doc@handleencap{usage}% }% \fi \ifx\@nil#3\@nil\else \noexpand\index{% \the\@temptokenb\noexpand\levelchar \noexpand\@gtempa\noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar \noexpand\doc@handleencap{usage}% }% \fi \noexpand\fi \noexpand\@esphack% }% } \renewcommand*\doc@createspecialmacrolikeindexes[3]{% \@temptokena{\space (#2)}% \@temptokenb{#3:}% \@nameedef{Code#1Index}##1##2{% \noexpand\@SpecialIndexHelper@##2\noexpand\@nil \noexpand\@bsphack \noexpand\ifdoc@noindex\noexpand\else \ifdoc@toplevel \noexpand\special@index{% % PATCH: add `\the\@temptokena' to sorting argument \noexpand\@gtempa\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar % PATCH: add `\tud@idx@typemarkup' for markup \ifx\@nil#2\@nil\else\noexpand\tud@idx@typemarkup\the\@temptokena\fi \noexpand\encapchar ##1% }% \fi \ifx\@nil#3\@nil\else \noexpand\special@index{% \the\@temptokenb\noexpand\levelchar % PATCH: add `\the\@temptokena' to sorting argument \noexpand\@gtempa\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar \noexpand\encapchar ##1% }% \fi \noexpand\fi \noexpand\@esphack% }% % \end{macrocode} % Für das Sichern der Indexeinträge muss ein bisschen mit der Expansion der % Makros gezaubert werden. Der in \cs{@gtempa} relevante Teil für den Index % ist erst nach der Expansion (via \cs{doc@expr}) verfügbar, muss aber in einer % zweiten Expansion aus eben diesem Makro expandiert werden. Wiederum muss der % Teil aus |\ifx\@nil#2\@nil\else\the\@temptokena\fi| hier direkt expandiert % werden und wird danach vor weiterer Expansion geschützt! % \begin{macrocode} \@nameedef{SpecialMain#1Index}##1{% \expandafter\noexpand\csname Code#1Index\endcsname{main}{##1}% % PATCH: assign used sort key and formatted entry to dedicated macros \xdef\noexpand\tud@idx@sortkey{% \noexpand\expandonce\noexpand\@gtempa% \ifx\@nil#2\@nil\else\noexpand\unexpanded{\the\@temptokena}\fi% }% \xdef\noexpand\tud@idx@format{% \unexpanded{\noexpand\string\noexpand\verb}% \unexpanded{\noexpand\quotechar*\noexpand\verbatimchar}% \unexpanded{\noexpand\bslash}\noexpand\expandonce\noexpand\@gtempa% \unexpanded{\noexpand\verbatimchar}% \ifx\@nil#2\@nil\else \noexpand\unexpanded{\noexpand\tud@idx@typemarkup\the\@temptokena}% \fi }% % PATCH: reset settings for nested index and changelog entries \gdef\noexpand\tud@idx@element{#1}% \global\let\noexpand\tud@idx@parent\relax }% \@nameedef{Special#1Index}##1{% \noexpand\@SpecialIndexHelper@##1\noexpand\@nil \noexpand\@bsphack \noexpand\ifdoc@noindex\noexpand\else \ifdoc@toplevel \noexpand\doc@providetarget \noexpand\index{% % PATCH: add `\the\@temptokena' to sorting argument \noexpand\@gtempa\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar % PATCH: add `\tud@idx@typemarkup' for markup \ifx\@nil#2\@nil\else\noexpand\tud@idx@typemarkup\the\@temptokena\fi \noexpand\doc@handleencap{usage}% }% \fi \ifx\@nil#3\@nil\else \noexpand\index{% \the\@temptokenb\noexpand\levelchar % PATCH: add `\the\@temptokena' to sorting argument \noexpand\@gtempa\ifx\@nil#2\@nil\else\the\@temptokena\fi \noexpand\actualchar \string\verb% % to fool emacs highlighting \noexpand\quotechar*\noexpand\verbatimchar \noexpand\bslash\noexpand\@gtempa\noexpand\verbatimchar \noexpand\doc@handleencap{usage}% }% \fi \noexpand\fi \noexpand\@esphack% % \end{macrocode} % Zur Sicherung der Indexeinträge das selbe Spiel für die Expansion wie zuvor. % \begin{macrocode} % PATCH: assign used sort key and formatted entry to dedicated macros \xdef\noexpand\tud@idx@sortkey{% \noexpand\expandonce\noexpand\@gtempa% \ifx\@nil#2\@nil\else\noexpand\unexpanded{\the\@temptokena}\fi% }% \xdef\noexpand\tud@idx@format{% \unexpanded{\noexpand\string\noexpand\verb}% \unexpanded{\noexpand\quotechar*\noexpand\verbatimchar}% \unexpanded{\noexpand\bslash}\noexpand\expandonce\noexpand\@gtempa% \unexpanded{\noexpand\verbatimchar}% \ifx\@nil#2\@nil\else \noexpand\unexpanded{\noexpand\tud@idx@typemarkup\the\@temptokena}% \fi }% % PATCH: reset settings for nested index and changelog entries \gdef\noexpand\tud@idx@element{#1}% \global\let\noexpand\tud@idx@parent\relax }% } % \end{macrocode} % \end{macro}^^A \doc@createspecialmacrolikeindexes % \end{macro}^^A \doc@createspecialindexes % % \subsubsection{Erstellen aller Deklarationselemente} % % Nachdem nun die Anpassungen für die Änderungsliste erfolgt sind, können nun % die für die Dokumentation notwendigen Umgebungen mit \cs{NewDocElement} % erstellt werden, wobei die Lokalisierungsvariablen |\tud@|\meta{\dots}|@name| % zum Tragen kommen. % \begin{macrocode} \def\tud@res@a#1{% \kernel@ifnextchar[%] {\tud@res@b{#1}}{\tud@res@b{#1}[]}% } \def\tud@res@b#1[#2]#3#4{% #1[{% idxgroup=\csname tud@#4s@name\endcsname,% idxtype=\csname tud@#4@name\endcsname,% printtype=\csname tud@#4@name\endcsname,% #2% }]{#3}{#4}% } \tud@res@a\RenewDocElement[macrolike,idxgroup,idxtype,printtype]{Macro}{macro} \tud@res@a\RenewDocElement{Env}{environment} \tud@res@a\NewDocElement{Option}{option} \tud@res@a\NewDocElement{LayerPageStyle}{layerpagestyle} \tud@res@a\NewDocElement{Layer}{layer} \tud@res@a\NewDocElement[macrolike]{Length}{length} \tud@res@a\NewDocElement{Counter}{counter} \tud@res@a\NewDocElement{Color}{TUDcolor} \tud@res@a\NewDocElement[macrolike]{Localization}{localization} \tud@res@a\NewDocElement[macrolike]{Field}{field} \tud@res@a\NewDocElement{Font}{KOMAfont} \tud@res@a\NewDocElement{Parameter}{parameter} % \end{macrocode} % % \subsubsection{Besonderheiten des Deklarationselementes \emph{Parameter}} % % \begin{macro}{\DescribeMacroParameters} % \changes{v2.06o}{2022/07/20}{neu}^^A % \begin{macro}{\DescribeEnvParameters} % \changes{v2.06o}{2022/07/20}{neu}^^A % \begin{macro}{\Describe@Parameters} % \changes{v2.06o}{2022/07/20}{neu}^^A % Hiermit können Parameter für Befehle und Umgebungen beschrieben werden. Mit % |\Describe|\meta{Typ}|Parameters|\oarg{...}\marg{Element(e)}\marg{Parameter} % erfolgt der Aufruf, wobei das optionale Argument an \cs{DescribeParameter} % durchgereicht wird. % \begin{macrocode} \newcommand*\DescribeMacroParameters{} \def\DescribeMacroParameters{% \kernel@ifnextchar[%] {\Describe@Parameters{Macro}}{\Describe@Parameters{Macro}[]}% } \newcommand*\DescribeEnvParameters{} \def\DescribeEnvParameters{% \kernel@ifnextchar[%] {\Describe@Parameters{Env}}{\Describe@Parameters{Env}[]}% } % \end{macrocode} % Für eine möglichst einfache Schnittstelle wird ein bisschen getrickst. Das % optionale Argument wird zunächst dahingehend ausgewertet, ob Indexeinträge % überhaupt erzeugt werden sollen. In diesem Fall wird die Ausgabe unterdrückt, % um diese bei der Angabe mehrerer \marg{Element(e)} nicht mehrfach zu erhalten. % \begin{macrocode} \newcommand*\Describe@Parameters{} \def\Describe@Parameters#1[#2]#3#4{% \begingroup% \csname keys_set:nn\endcsname{doc}{#2}% \ifdoc@noindex% \aftergroup\@gobble% \else% \aftergroup\@firstofone% \fi% \endgroup{% \def\@tempc{#3}% \@for\@tempa:=\@tempc\do{% \trim@spaces@in\@tempa% \ifx\@tempa\@empty\else% \begingroup% % \end{macrocode} % Durch den Aufruf von |\Describe|\meta{Typ} wird der Elterneintrag erzeugt. % Dieser muss durch \pkg{doc} zwar erstellt, jedoch nicht in den Index % eingetragen werden, weshalb \prm{noindex} nicht möglich ist und stattdessen % \cs{index} hier das Argument verschluckt. % \begin{macrocode} \let\index\@gobble% \def\@tempb{\@nameuse{Describe#1}[noprint]}% \expandafter\@tempb\expandafter{\@tempa}% \xdef\tud@idx@parent{% {\expandonce\tud@idx@sortkey}{\expandonce\tud@idx@format}% }% \endgroup% \DescribeParameters[{#2,noprint}]{#4}% \fi% }% }% % \end{macrocode} % Nach dem Erstellen der Indexeinträge erfolgt die \emph{einmalige} Ausgabe % aller genannten Parameter. % \begin{macrocode} \begingroup% \csname keys_set:nn\endcsname{doc}{#2}% \ifdoc@noprint% \aftergroup\@gobble% \else% \aftergroup\@firstofone% \fi% \endgroup{% \DescribeParameters[{#2,noindex}]{#4}% }% \global\let\tud@idx@parent\relax% } % \end{macrocode} % \end{macro}^^A \Describe@Parameters % \end{macro}^^A \DescribeEnvParameters % \end{macro}^^A \DescribeMacroParameters % \begin{macro}{\SpecialMainParameterIndex} % \changes{v2.05g}{2016/11/02}{neu}^^A % \changes{v2.06o}{2022/07/20}{Anpassungen für \pkg{doc}}^^A % \begin{macro}{\SpecialParameterIndex} % \changes{v2.05i}{2017/02/20}{neu}^^A % \changes{v2.06o}{2022/07/20}{Anpassungen für \pkg{doc}}^^A % Die Gestalt der Parameter als Haupteinträge wird hier definiert. % \begin{macrocode} \renewcommand*\SpecialMainParameterIndex[1]{% \ifx\tud@idx@parent\relax% \@expandtwoargs\in@{\tud@idx@element}{Macro,Env}% \ifin@% \xdef\tud@idx@parent{% {\expandonce\tud@idx@sortkey}{\expandonce\tud@idx@format}% }% \else% \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% \fi% \ifx\tud@idx@parent\relax\else% \gdef\tud@idx@sortkey{#1\space(\tud@parameter@name)}% \gdef\tud@idx@format{% {\string\ttfamily\space#1}% \tud@idx@typemarkup\space(\tud@parameter@name)% }% \@bsphack% \special@index{% \expandafter\@firstoftwo\tud@idx@parent\actualchar% \expandafter\@secondoftwo\tud@idx@parent\levelchar% \tud@idx@sortkey\actualchar\tud@idx@format% \encapchar main% }% \@esphack% \fi% } % \end{macrocode} % Hier wird die Gestalt der Indexeinträge für Parameter festgelegt, wenn diese % durch \cs{Describe@Parameters} erzeugt werden. % \begin{macrocode} \renewcommand*\SpecialParameterIndex[1]{% \ifx\tud@idx@parent\relax% \ClassError{\TUD@Class@Name}{No macro or environment given}{% Since parameters can only be used for macros or\MessageBreak% environments, you have to use an appropriate command like\MessageBreak% `\string\DescribeMacroParameters' or `\string\DescribeEnvParameters'.% }% \else% \gdef\tud@idx@sortkey{#1\space(\tud@parameter@name)}% \gdef\tud@idx@format{% {\string\ttfamily\space#1}% \tud@idx@typemarkup\space(\tud@parameter@name)% }% \@bsphack% \index{% \expandafter\@firstoftwo\tud@idx@parent\actualchar% \expandafter\@secondoftwo\tud@idx@parent\levelchar% \tud@idx@sortkey\actualchar\tud@idx@format% \encapchar usage% }% \@esphack% \fi% } % \end{macrocode} % \end{macro}^^A \SpecialParameterIndex % \end{macro}^^A \SpecialMainParameterIndex % % \subsection{Index und Änderungsliste} % Sollte \app{texindy} zum Einsatz kommen, wird die Gestalt von Index und % Änderungsliste angepasst, was eine Anpassung der erzeugten Einträge bedingt. % Die notwendigen Befehle werden zunächst nachfolgenddefiniert. Über den Hook % |begindocument/before| erfolgt später die Zuweisung. % % \begin{macro}{\tud@xdy@reference} % \changes{v2.06o}{2022/07/24}{neu}^^A % \begin{macro}{\tud@xdy@destination} % \changes{v2.06o}{2022/07/24}{neu}^^A % \begin{macro}{\tud@xdy@filesep} % \changes{v2.06o}{2022/07/24}{neu}^^A % \begin{macro}{\tud@xdy@mapping} % \changes{v2.06o}{2022/07/24}{neu}^^A % \begin{macro}{\tud@xdy@@mapping} % \changes{v2.06o}{2022/07/24}{neu}^^A % Für die verwendeten Referenzen von Einträgen für Index und Änderungsliste % gibt es im Zusammenspiel von \pkg{doc} und \pkg{hypdoc} mehrere Varianten. % Das Paket \pkg{doc} unterscheidet zwischen Verweisen auf Seitenzahlen und % Codezeilen. Das Paket \pkg{hypdoc} stellt für beide Varianten jeweils eine % eigene Implentierung für das Erzeugen von Hyperlinks bereit. Mit dem Befehl % \cs{tud@xdy@reference} wird für die Verwendung von \app{texindy} für alle % Varianten eine einheitliche Form definiert. Alle Einträge für Index und % Änderungsliste verwenden das Format % \meta{Target}|:|\meta{Dateischlüssel}|-|\meta{Codezeile}|:|\meta{Seitenzahl} % für Referenzen. Es wird über \cs{tud@xdy@filesep} sichergestellt, dass für % den Dateischlüssel immer ein definierter Zustand besteht. % % An \cs{tud@xdy@reference} wird als einziges Argument die aktuelle Codezeile % \cs{c@CodelineNo} des Paketes \pkg{doc} übergeben, das Target für Link zur % Codezeile wird ggf. automatisch durch \pkg{hypdoc} gesetzt. Die Auswetung der % so erzeugten Referenz erfolgt mit \cs{tud@xdy@@mapping}. War das an % \cs{tud@xdy@reference} übergebene Argument größer 0, wird die Ausgabe für % eine Codezeile erzeugt, andernfalls für eine Seitenangabe. % \begin{macrocode} \ifdefined\tudxdyflag \newcommand*\tud@xdy@filesep{?-} \newcommand*\tud@xdy@reference[1]{0:\filesep#1:\thepage} % \end{macrocode} % Mit \cs{tud@xdy@destination} erfolgt die Formatierung bei der Ausgabe. Sollte % kein Dateischlüssel gesetzt sein, erfolgt dennoch eine Ausgabe. Der Zustand % besteht dann, wenn \cs{DocInclude} nicht verwendet wurde. % \begin{macrocode} \newcommand*\tud@xdy@destination[3]{% #1\if#2\expandafter\@car\tud@xdy@filesep\@nil\else\mbox{--}#2\fi% \ifnum#3>\z@\textsubscript{\kern.1em#3}\fi% } % \end{macrocode} % Neben der Refernz wird an \cs{tud@xdy@mapping} noch ein Attribut für die % Formatierung der Ausgabe übergeben. Gültige Werte sind |main|, |usage|, % |code| und |change| (siehe \file{tudscr-texindy.dtx}). Die erzeugte Ausgabe % der Referenz wird dann mit \cs{main}, \cs{usage}, \cs{code} oder \cs{change} % formatiert, falls vorhanden. Diese Befehle müssen genau ein obligatorisches % Argument verarbeiten. % \begin{macrocode} \newcommand*\tud@xdy@mapping[2]{\tud@xdy@@mapping{#1}#2\@nil} \newcommand*\tud@xdy@@mapping{} % \end{macrocode} % Ohne \pkg{hypdoc} werden für die Ausgabe Links auf die entsprechenden Seiten % erzeugt, falls zumindes \pkg{hyperref} geladen wurde. % \begin{macrocode} \def\tud@xdy@@mapping#1#2:#3-#4:#5\@nil{% \begingroup% \ifundef{\hyperlink}{\let\tud@res@a\@gobble}{\let\tud@res@a\@firstofone}% \csname\ifx\\#1\\relax\else#1\fi\endcsname{% \tud@res@a{\hyperlink{page.#5}}{\tud@xdy@destination{#5}{#3}{#4}}% }% \endgroup% } % \end{macrocode} % Mit \pkg{hypdoc} werden via \cs{c@HD@hypercount} Sprungmarken ins Dokument % sowie auf Codezeilen generiert. Diese werden durch \cs{tud@xdy@@mapping} % an die korrespondierenden Befehle von \pkg{hypdoc} durchgereicht. % \begin{macrocode} \AfterPackage*{hypdoc}{% \renewcommand*\tud@xdy@reference[1]{\the\c@HD@hypercount:\filesep#1:\thepage}% \def\tud@xdy@@mapping#1#2:#3-#4:#5\@nil{% \ifnum#2>\z@\relax \hdclindex{#2}{#1}{\tud@xdy@destination{#5}{#3}{#4}}% \else \csname\ifx\\#1\\relax\else#1\fi\endcsname{% \hyperlink{page.#5}{\tud@xdy@destination{#5}{#3}{#4}}% }% \fi }% } \fi % \end{macrocode} % \end{macro}^^A \tud@xdy@@mapping % \end{macro}^^A \tud@xdy@mapping % \end{macro}^^A \tud@xdy@filesep % \end{macro}^^A \tud@xdy@destination % \end{macro}^^A \tud@xdy@reference % % \subsubsection{Erzeugen von Indexeinträgen} % % Nachdem die Form der Referenzierung für \app{texindy} definiert wurde, müssen % die Einträge im Index auch entsprechend erstellt werden. % % \begin{macro}{\tud@xdy@wrindex} % \changes{v2.06o}{2022/07/24}{neu}^^A % \begin{macro}{\tud@xdy@page@wrindex} % \changes{v2.06o}{2022/07/24}{neu}^^A % \begin{macro}{\tud@xdy@codeline@wrindex} % \changes{v2.06o}{2022/07/24}{neu}^^A % Mit \cs{PageIndex} respektive \cs{CodelineIndex} aus dem Paket \pkg{doc} % wird festgelegt, ob Index und Änderungsliste Seitenzahlen oder Codezeilen % als Referenz verwenden. Dementsprechend werden \cs{tud@xdy@page@wrindex} und % \cs{tud@xdy@codeline@wrindex} definiert, die sich grundsätzlich nur darin % unterscheiden, ob \cs{tud@xdy@reference} mit |0| oder der aktuellen % Codezeile |\number\c@CodelineNo| als Argument genutzt wird. % \begin{macrocode} \ifdefined\tudxdyflag \newcommand*\tud@xdy@wrindex[1]{% \protected@write\@indexfile{}{% \string\indexentry{#1}{\tud@xdy@reference{0}}% }% \endgroup% \@esphack% } \newcommand*\tud@xdy@page@wrindex[1]{% \begingroup \let\@wrindex\tud@xdy@wrindex% \index{#1}% \endgroup } \AfterPackage*{hypdoc}{% \renewcommand*\tud@xdy@page@wrindex[1]{% \begingroup \let\@wrindex\tud@xdy@wrindex% \HDorg@index{#1}% \endgroup } } \newcommand*\tud@xdy@codeline@wrindex[1]{% \if@filesw \begingroup \let\protect\noexpand \immediate\write\@indexfile{% \string\indexentry{#1}{\tud@xdy@reference{\number\c@CodelineNo}}% }% \endgroup \fi } \fi % \end{macrocode} % \end{macro}^^A \tud@xdy@codeline@wrindex % \end{macro}^^A \tud@xdy@page@wrindex % \end{macro}^^A \tud@xdy@wrindex % % \subsubsection{Erzeugen von Änderungseinträgen} % % \begin{macro}{\changehistoryname} % \begin{macro}{\changes@} % \changes{v2.06o}{2022/07/20}{Anpassungen für \pkg{doc}}^^A % \changes{v2.06o}{2022/07/25}{Prüfen falscher Datumsangaben}^^A % \begin{macro}{\changes@@} % Vor den Änderungen wird geprüft, ob sich an der Definition aus dem Paket % \pkg{doc} etwas geändert hat. Der Befehl \cs{changehistoryname} wird vom % Paket \pkg{hypdoc} verwendet. % \begin{macrocode} \def\changehistoryname{\tud@changes@name} \CheckCommand*\changes@[3]{% \protected@edef\@tempa{% \noexpand\glossary{% #1% \ifdoc@reportchangedates\space -- #2\fi \levelchar \ifx\saved@macroname\@empty \quotechar!% \actualchar \generalname \else \saved@indexname \actualchar \string\verb\quotechar*% \verbatimchar\saved@macroname \verbatimchar \fi :\levelchar #3% }% }% \@tempa\endgroup\@esphack% } % \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 in |#2| angegebene Datum zur % Sortierung genutzt. % \begin{macrocode} \renewcommand*\changes@[3]{% \ifnum\@parse@version@1993/01/01\@nil<\expandafter\@parse@version@#2//00\@nil% \expandafter\@gobble% \else% \expandafter\@firstofone% \fi{\ClassWarning{\TUD@Class@Name}{The given date `#2' seems to be invalid}}% \changes@@{#1}{#2}{#3}% } \ifdefined\tudxdyflag \newcommand*\changes@@[3]{% \protected@edef\@tempa{% \noexpand\glossary{% #1\ifdoc@reportchangedates\space -- #2\fi \levelchar % \end{macrocode} % Das an die vorderster Stelle sortierte Zeichen ist |~| bei \app{texindy}. % \begin{macrocode} \ifx\saved@macroname\@empty \string~\actualchar\tud@general@name% % \end{macrocode} % Gilt der Änderungseintrag einem Parameter wird eine zusätzliche Ebene vor dem % eigentlichen Eintrag des Parameters erzeugt und der in \cs{tud@idx@parent} % zuvor gesicherte Elterneintrag~-- Befehl oder Umgebung~-- eingefügt. Weil % ohnehin eine Stildatei für \app{texindy} erzeugt wird, ist das Erzeugen % zusätzlicher Ebenen in der Änderungsliste einfach machbar. Prinzipiell wäre % das mit einer entsprechenden Stildatei auch für \app{makeindex} machbar. % \begin{macrocode} \else \ifx\tud@idx@parent\relax\else \expandafter\@firstoftwo\tud@idx@parent\actualchar \expandafter\@secondoftwo\tud@idx@parent:\levelchar \fi \tud@idx@sortkey\actualchar\tud@idx@format% \fi :\levelchar #2\space\protecting{#3}\actualchar\protecting{#3}% }% }% \@tempa\endgroup\@esphack% }% \else % \end{macrocode} % Für \app{makeindex} wird der Befehl insbesondere für das Listen der Parameter % angepasst. % \begin{macrocode} \renewcommand*\changes@[3]{% \protected@edef\@tempa{% \noexpand\glossary{% #1\ifdoc@reportchangedates\space -- #2\fi \levelchar \ifx\saved@macroname\@empty \quotechar!\actualchar\tud@general@name% \else \ifx\tud@idx@parent\relax\else \expandafter\@firstoftwo\tud@idx@parent\space--\space% \fi \tud@idx@sortkey\actualchar \ifx\tud@idx@parent\relax\else \expandafter\@secondoftwo\tud@idx@parent\noexpand\,--\noexpand\,% \fi \tud@idx@format% \fi :\levelchar #2\space\protecting{#3}\actualchar\protecting{#3}% }% }% \@tempa\endgroup\@esphack% }% \fi % \end{macrocode} % \end{macro}^^A \changes@@ % \end{macro}^^A \changes@ % \end{macro}^^A \changehistoryname % \begin{macro}{\tud@xdy@wrglossary} % \changes{v2.06o}{2022/07/24}{neu}^^A % Die Referenzierung für \app{texindy} wird auch für Änderungseinträge genutzt. % \begin{macrocode} \ifdefined\tudxdyflag \newcommand*\tud@xdy@wrglossary[1]{% % \end{macrocode} % Zunächst wird geprüft, ob eine Eintrag mit Refernz auf eine Seitenzahl oder % eine Codezeile erzeugt werden soll. Letztere werden nur erstellt, wenn im % Index überhaupt Codezeilen verwendet werden und der Änderungseintrag sich % auf ein zuletzt deklariertes Element (\cs{saved@macroname}) bezieht. % \begin{macrocode} \@tud@res@swafalse% \ifx\special@index\@gobble\else\ifcodeline@index \ifx\saved@macroname\@empty\else\@tud@res@swatrue\fi \fi\fi \global\advance\c@CodelineNo\@ne% \protected@write\@glossaryfile{}{% \string\glossaryentry{#1|change}% {\tud@xdy@reference{\if@tud@res@swa\number\c@CodelineNo\else0\fi}}% }% \global\advance\c@CodelineNo\m@ne% \endgroup% \@esphack% } \fi % \end{macrocode} % \end{macro}^^A \tud@xdy@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@@sub} % \changes{v2.05g}{2016/11/02}{neu}^^A % \begin{macro}{\tud@lst@@@sub} % \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@@sub{} \newcommand*\tud@lst@@@sub{} \newcommand*\efil{\hfil\nopagebreak}% \newcommand*\tud@lst@def{% \newcommand*\tud@lst@values{}% \tud@newif\if@tud@lst@multi% \newcommand*\tud@lst@init{% \let\tud@lst@values\relax% \let\tud@lst@@sub\relax% \@tud@lst@multifalse% }% \newcommand*\tud@lst@add[1]{% \ifx\tud@lst@values\relax\else% \@tud@lst@multitrue% \def\tud@lst@@sub{\subitem}% \fi% \listadd\tud@lst@values{\tud@lst@@sub ##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{}% \tud@newif\if@tud@lst@@multi% \newcommand*\tud@lst@@init{% \let\tud@lst@@values\relax% \def\tud@lst@@sub{\subitem}% \def\tud@lst@@@sub{\space}% \@tud@lst@@multifalse% }% \newcommand*\tud@lst@@add[1]{% \@tud@lst@multitrue% \ifx\tud@lst@@values\relax\else% \@tud@lst@@multitrue% \def\tud@lst@@@sub{\subsubitem}% \fi% \listadd\tud@lst@@values{##1}% }% \newcommand*\tud@lst@@process{% \if@tud@lst@@multi% \appto\tud@lst@values{\efill}% \fi% \protected@edef\tud@reserved####1{% \noexpand\listadd\noexpand\tud@lst@values{% \expandonce\tud@lst@@@sub####1% }% }% \forlistloop{\tud@reserved}{\tud@lst@@values}% \tud@lst@@init% }% } % \end{macrocode} % \end{macro}^^A \efil % \end{macro}^^A \tud@lst@@@sub % \end{macro}^^A \tud@lst@@sub % \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{Setzen der Anpassungen für Index und Änderungsliste} % % Über den Hook |begindocument/before| erfolgt nun die Zuweisung der zuvor % gemachten Anpassungen an die jeweiligen Befehle, wobei zuvor die Definitionen % der relevanten Befehle geprüft wird. Mit \cs{DeclareHookRule} für das durch % \pkg{doc} verwendete Label |doc/hyperref| wird sichergestellt, dass die % Anpassungen erst nach \pkg{doc} angewendet werden. % \begin{macrocode} \DeclareHookRule{begindocument/before}{doc/hyperref}{<}{.} \AddToHook{begindocument/before}{% \CheckCommand*\@wrindex[1]{% \protected@write\@indexfile{}{\string\indexentry{#1}{\thepage}}% \endgroup \@esphack% } \CheckCommand*\codeline@wrindex[1]{% ltxdoc \if@filesw \begingroup \let\protect\noexpand \immediate\write\@indexfile{% \string\indexentry{#1}{\filesep\number\c@CodelineNo}% }% \endgroup \fi } \@ifpackageloaded{hypdoc}{% \CheckCommand*\filesep{} \CheckCommand*\doc@handleencap[1]{% \encapchar hdclindex{\the\c@HD@hypercount}{#1}% } \CheckCommand*\HD@codeline@wrindex[1]{% \begingroup \let\HDorg@encapchar\encapchar \def\encapchar##1\encapchar##2\@nil{% \HDorg@encapchar hdclindex{\the\c@HD@hypercount}{##1}% }% \codeline@wrindex{#1\encapchar\encapchar\@nil}% \endgroup } \CheckCommand*\HD@page@wrindex[1]{% \begingroup \let\HDorg@encapchar\encapchar \def\encapchar##1\encapchar##2\@nil{% \HDorg@encapchar hdpindex{##1}% }% \HDorg@index{#1\encapchar\encapchar\@nil}% \endgroup } \CheckCommand*\@wrglossary[1]{% \let\HDorg@encapchar\encapchar \def\encapchar##1\encapchar##2\@nil{% \HDorg@encapchar hdpindex{##1}% }% \HDorg@wrglossary{#1\encapchar\encapchar\@nil}% } \CheckCommand*\HDorg@wrglossary[1]{% \protected@write\@glossaryfile{}% {\string\glossaryentry{#1}{\thepage}}% \endgroup \@esphack% } }{% \CheckCommand*\@wrglossary[1]{% \protected@write\@glossaryfile{}% {\string\glossaryentry{#1}{\thepage}}% \endgroup \@esphack% } } % \end{macrocode} % Prüfung beendet, jetzt erfolgt die eigentliche Zuweisung. % \begin{macrocode} \ifdefined\tudxdyflag \ifx\special@index\@gobble\else \ifcodeline@index \let\special@index\tud@xdy@codeline@wrindex \else \let\special@index\tud@xdy@page@wrindex \fi \@ifpackageloaded{hypdoc}{% \let\HD@codeline@wrindex\tud@xdy@codeline@wrindex \let\HD@page@wrindex\tud@xdy@page@wrindex }{}% \fi \let\filesep\tud@xdy@filesep \def\doc@handleencap#1{\encapchar #1} \let\@wrindex\tud@xdy@wrindex \let\@wrglossary\tud@xdy@wrglossary \fi } % \end{macrocode} % % \subsubsection{Verarbeiten der Hilfsdateien von Index und Änderungsliste} % % \begin{macro}{\tud@xdy@write} % \changes{v2.05}{2016/04/21}{neu}^^A % \begin{macro}{\tud@xdy@read} % \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} % \ToDo{äquivalent zu tudscrmanual.cls; shell-escape raus, via makefile}[v2.07] % \begin{macrocode} %^^A\BeforeClosingMainAux{% %^^A\immediate\closeout\@indexfile% %^^A\immediate\closeout\@glossaryfile% % \end{macrocode} % 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 \tud@newwrite\tud@xdy@write% \tud@newread\tud@xdy@read% % \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@xdy@read=\jobname.#1\relax% \immediate\openout\tud@xdy@write=\jobname-xdy.#1\relax% \@tempswafalse% \loop\unless\ifeof\tud@xdy@read% \readline\tud@xdy@read to\tud@line@replace% % \end{macrocode} % Um potenzielle Dopplungen zu vermeiden, wird \cs{quotechar} vor Zeichen % entfernt, die ohnehin gegebenenfalls manuell behandelt werden müssen. % \begin{macrocode} \expandafter\tud@replace@@in\expandafter\tud@line@replace% \expandafter{\quotechar"}{"}% \expandafter\tud@replace@@in\expandafter\tud@line@replace% \expandafter{\quotechar!}{!}% \expandafter\tud@replace@@in\expandafter\tud@line@replace% \expandafter{\quotechar:}{:}% \expandafter\tud@replace@@in\expandafter\tud@line@replace% \expandafter{\quotechar @}{@}% % \end{macrocode} % Jetzt die manuellen Anpassungen für Zeichen, die eigentlich zur Steuerung % der Indexeinträge genutzt werden. % \begin{macrocode} \tud@replace@@in\tud@line@replace{"}{""}% \tud@replace@@in\tud@line@replace{!}{"!}% \tud@replace@@in\tud@line@replace{:}{":}% \tud@replace@@in\tud@line@replace{@}{"@}% \tud@replace@@in\tud@line@replace{\"@}{"\"@}% % \end{macrocode} % Abschließend erfolgt das Einsetzen der Steuerzeichen. % \begin{macrocode} \expandafter\tud@replace@@in\expandafter\tud@line@replace% \expandafter{\actualchar}{@}% \expandafter\tud@replace@@in\expandafter\tud@line@replace% \expandafter{\quotechar}{"}% \expandafter\tud@replace@@in\expandafter\tud@line@replace% \expandafter{\levelchar}{!}% \tud@replace@@in\tud@line@replace{" @}{}% \ifeof\tud@xdy@read\else% \immediate\write\tud@xdy@write{% \unexpanded\expandafter{\tud@line@replace}% }% \@tempswatrue% \fi% \repeat% \immediate\closein\tud@xdy@read% \immediate\closeout\tud@xdy@write% \ifnum\pdf@shellescape=\@ne\relax% \if@tempswa% \ShellEscape{% texindy\space% -M \@currname-#2.xdy\space% \ifdefvoid{\inputencodingname}{% -C\space utf8% }{% -C\space\inputencodingname% }\space% -t \jobname-#2.xlg\space% -o \jobname.#2\space% \jobname-xdy.#1% }% % \end{macrocode} % Falls nichts geschrieben wurde, wird eine leere Ausgabedatei erzeugt. % \begin{macrocode} \else% \immediate\openout\tud@xdy@write=\jobname.#2\relax% \immediate\closeout\tud@xdy@write% \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} % \ToDo{äquivalent zu tudscrmanual.cls}[v2.07] % \begin{macrocode} %^^A} % \end{macrocode} % \end{macro}^^A \levelchar % \end{macro}^^A \quotechar % \end{macro}^^A \actualchar % \end{macro}^^A \tud@line@replace % \end{macro}^^A \tud@xdy@read % \end{macro}^^A \tud@xdy@write % % \subsection{Liste anstehender Aufgaben} % % \begin{macro}{\PrintToDos} % \changes{v2.05}{2016/05/19}{neu}^^A % Für ToDo-Notizen wird eine Liste aller anstehender Aufgaben definiert. % \begin{macrocode} \DeclareNewTOC[% listname={\tud@todo@name},% owner=\@currname,% ]{tdo} \setuptoc{tdo}{totoc,noindent} \newcommand*\PrintToDos{\ifdefined\tudfinalflag\else\listoftoc{tdo}\fi} % \end{macrocode} % \end{macro}^^A \PrintToDos % \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} \ifdefined\tudfinalflag \NewDocumentCommand\ToDo{mo}{} \else% \NewDocumentCommand\ToDo{mo}{% \begingroup% \csuse{phantomsection}% \IfValueTF{#2}{% \def\tud@reserved{#2}% }{% \def\tud@reserved{??}% }% \endgraf\ifdim\parskip>\z@\else\smallskip\fi\noindent% \hfuzz0.8pt% \leavevmode% \def\@tempa{\raggedleft\fbox{ToDo:\space\tud@reserved\strut}}% \ifundef{\marginnote}{% \expandafter\marginpar\expandafter{\@tempa}% }{% \expandafter\marginnote\expandafter{\@tempa}[% \dimexpr-\fboxsep-\fboxrule\relax% ]% }% \fbox{\parbox{\dimexpr\linewidth-\fboxsep*2\relax}{#1\strut}}% \endgraf\ifdim\parskip>\z@\else\bigskip\fi\noindent% % \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% \ifdefvoid{\currentfile}{}{% \def\@tempa{\,--\,\texttt{\currentfile}}% }% \addxcontentsline{tdo}{subsection}{\tud@reserved\@tempa:\space#1}% \endgroup% \ignorespaces% } \fi % \end{macrocode} % \end{macro}^^A \ToDo % % % \subsection{Ausgabe des Schlussteils} % % \begin{macro}{\PrintBackMatter} % \changes{v2.06o}{2022/07/24}{neu}^^A % \begin{macro}{\tud@index@heading} % \changes{v2.06o}{2022/07/24}{neu}^^A % Hiermit lassen sich Index, Änderungsliste und die Liste offener Aufgaben % gemeinsam ausgegeben. Dafür werden die Einleitungen für Index und % Änderungsliste angepasst und \cs{tud@index@heading} definiert. Somit lässt % sich das Level der Überschriften dynamisch anpassen ohne die bei der % Verarbeitung des Dokumentes durch \cls{ltxdoc} applizierten Anpassungen % zu beeinflussen. Die Sternversion von \cs{PrintBackMatter} setzt die % Überschriften mit \cs{addpart}, die Standardvariante via \cs{addsec}. % \begin{macrocode} \newcommand*\tud@index@heading{\addsec} \IndexPrologue{\tud@index@heading{\indexname}\tud@index@text} \GlossaryPrologue{\tud@index@heading{\tud@changes@name}} \NewDocumentCommand\PrintBackMatter{s}{% \begingroup% \@ifpackageloaded{bookmark}{\bookmarksetup{startatroot,open=false}}{}% \IfBooleanT{#1}{\renewcommand*\tud@index@heading{\addpart}}% \deftocheading{tdo}{\tud@index@heading{##1}}% \IfBooleanT{#1}{\cleardoublepage}\PrintIndex% \IfBooleanT{#1}{\cleardoublepage}\PrintChanges% \IfBooleanT{#1}{\cleardoublepage}\PrintToDos% \endgroup% } % \end{macrocode} % \end{macro}^^A\tud@index@heading % \end{macro}^^A\PrintBackMatter % \begin{macro}{\@docinclude} % Damit die Liste der anstehenden Aufgaben bei der Erzeugung der gesamten % Dokumentation des Quelltextes einmalig sowie vollständig und nicht nach jeder % Quelldatei einzeln ausgegeben wird, muss \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 % % \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\shapedefault% \small% }% \renewcommand*\MacroFont{% \fontencoding\encodingdefault% \fontfamily\ttdefault% \fontseries\mdseries@tt% \fontshape\shapedefault% \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} % \end{macro}^^A \AltMacroFont % \end{macro}^^A \MacroFont % % \iffalse % %<*class&option> % \fi % % 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} % % \iffalse % %<*class&body> % \fi % % 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}{\labelsep} % \begin{length}{\marginparsep} % \begin{length}{\marginparwidth} % \begin{length}{\oddsidemargin} % Hiermit wird der Satzspiegel berechnet, wobei \length{labelsep} als Maß für % die Seitenränder sowie den Abstand von Randnotizen und Textkörper dient. % \begin{macrocode} \newcommand*\tud@setarea{% \tud@setdim\topmargin{-1in}% \tud@setdim\headheight{0pt}% \tud@setdim\headsep{3em}% \tud@setdim\footskip{\headsep}% \tud@setdim\textheight{\paperheight-\headsep*5/2-\footskip*3/2}% \@colht=\textheight% \@colroom=\textheight% \vsize=\textheight% \settowidth\MacroIndent{\rmfamily\scriptsize 0000\ }% \begingroup% \MacroFont\selectfont% \settowidth\@tempdima{\space}% \tud@setdim\@tempdima{80\@tempdima}% \tud@addtodim\@tempdima{\MacroIndent}% \edef\@tempa{% \endgroup% \unexpanded{\tud@setdim\textwidth}{\the\@tempdima}% }% \@tempa% \columnwidth=\textwidth% \hsize=\columnwidth% \linewidth=\hsize% \tud@setdim\columnsep{1em}% \tud@setdim\labelsep{1em}% \tud@setdim\marginparsep{\labelsep}% \tud@setdim\oddsidemargin{\paperwidth-\textwidth-\labelsep-1in}% \tud@setdim\marginparwidth{\oddsidemargin+1in-\labelsep-\marginparsep}% } \AtBeginDocument{\tud@setarea} % \end{macrocode} % \end{length}^^A \oddsidemargin % \end{length}^^A \marginparwidth % \end{length}^^A \marginparsep % \end{length}^^A \labelsep % \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 % % 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} \TUD@UnwindPackage{tudscrfonts}{% \RequirePackage{lmodern} \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} % % \subsection{Zusätzliche Markup-Befehle} % % \begin{macro}{\app} % \begin{macro}{\bdl} % \begin{macro}{\cls} % \begin{macro}{\pkg} % \begin{macro}{\opt} % \begin{macro}{\val} % \begin{macro}{\default} % \changes{v2.06o}{2022/07/25}{neu}^^A % \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. % \ToDo{Befehl \cs{notebox}: siehe \file{svg.dtx}}[v2.07] % \begin{macrocode} \newrobustcmd*\app[1]{\mbox{\textsl{\textbf{#1}}}} \newrobustcmd*\bdl[1]{\mbox{\textsf{\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*\default[1]{\val{\textit{#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\bdl\@firstofone% \let\cls\@firstofone% \let\pkg\@firstofone% \let\opt\@firstofone% \let\val\@firstofone% \let\default\@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 \default % \end{macro}^^A \val % \end{macro}^^A \opt % \end{macro}^^A \pkg % \end{macro}^^A \cls % \end{macro}^^A \bdl % \end{macro}^^A \app % % \iffalse % % \fi % % \PrintBackMatter % \endinput