summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tudscr/source/tudscr-doc.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tudscr/source/tudscr-doc.dtx')
-rw-r--r--macros/latex/contrib/tudscr/source/tudscr-doc.dtx2189
1 files changed, 1230 insertions, 959 deletions
diff --git a/macros/latex/contrib/tudscr/source/tudscr-doc.dtx b/macros/latex/contrib/tudscr/source/tudscr-doc.dtx
index 0089781abe..7580c84da5 100644
--- a/macros/latex/contrib/tudscr/source/tudscr-doc.dtx
+++ b/macros/latex/contrib/tudscr/source/tudscr-doc.dtx
@@ -1,10 +1,10 @@
-% \CheckSum{2094}
% \iffalse meta-comment
+%/GitFileInfo=tudscr-doc.dtx
%
% TUD-Script -- Corporate Design of Technische Universität Dresden
% ----------------------------------------------------------------------------
%
-% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2021
+% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2022
%
% ----------------------------------------------------------------------------
%
@@ -23,33 +23,19 @@
%
% \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
+% \iffalse ins:batch + dtx:driver
+%<*ins>
+\ifx\documentclass\undefined
+ \input docstrip.tex
+ \ifToplevel{\batchinput{tudscr.ins}}
+\else
+ \let\endbatchfile\relax
+\fi
+\endbatchfile
+%</ins>
%<*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
+\ProvidesFile{tudscr-doc.dtx}[2022/08/09]
+\RequirePackage{tudscr-gitinfo}
\documentclass[english,ngerman,xindy]{tudscrdoc}
\iftutex
\usepackage{fontspec}
@@ -59,18 +45,11 @@
\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)}
-
+\GitHubBase{\TUDScriptRepository}
\begin{document}
+ \author{Falk Hanisch\TUDScriptContactTitle}
\maketitle
\tableofcontents
\DocInput{\filename}
@@ -83,14 +62,14 @@
% \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
@@ -98,27 +77,30 @@
% 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}%
+\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*\sd@saved@LoadClass{}
-\let\sd@saved@LoadClass=\LoadClass
+\newcommand*\tud@saved@LoadClass{}
+\let\tud@saved@LoadClass=\LoadClass
\renewcommand*\LoadClass[2][]{%
\begingroup%
\edef\@tempc{#2}\def\@tempb{article}%
\ifx\@tempc\@tempb%
- \let\LoadClass\sd@saved@LoadClass%
+ \let\LoadClass\tud@saved@LoadClass%
\def\@tempc{scrartcl}%
\fi%
\edef\@tempc{%
- \noexpand\endgroup\noexpand\sd@saved@LoadClass[{#1}]{\@tempc}}%
+ \endgroup%
+ \noexpand\tud@saved@LoadClass[{#1}]{\@tempc}%
+ }%
\@tempc%
}
-\newcommand*\sd@saved@PassOptionsToClass{}
-\let\sd@saved@PassOptionsToClass=\PassOptionsToClass
+\newcommand*\tud@saved@PassOptionsToClass{}
+\let\tud@saved@PassOptionsToClass=\PassOptionsToClass
\renewcommand*\PassOptionsToClass[2]{%
\begingroup%
\edef\@tempc{#2}\def\@tempb{article}%
@@ -126,8 +108,9 @@
\def\@tempc{scrartcl}%
\fi%
\edef\@tempc{%
- \noexpand\endgroup\noexpand\sd@saved@PassOptionsToClass{#1}{%
- \@tempc}}%
+ \endgroup%
+ \noexpand\tud@saved@PassOptionsToClass{#1}{\@tempc}%
+ }%
\@tempc%
}
\LoadClassWithOptions{ltxdoc}[2015/03/26]
@@ -135,6 +118,21 @@
\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}
@@ -169,697 +167,892 @@
\ProcessOptions\relax
% \end{macrocode}
%
-% \subsection{Ignorierte Makros bei der Nutzung von zusätzlichen Indexeinträgen}
-%
-% Befehle, welche bei der Verwendung von \cs{EnableCrossrefs} dennoch nicht im
-% Index erscheinen sollen.
-%
-% \begin{macro}{\DisableCrossrefsForced}
-% \changes{v2.05i}{2017/03/02}{neu}^^A
-% Deaktivieren von Makroeinträgen im Index nach der Verwendung von
-% \cs{EnableCrossrefs}. Sollte in einer Gruppe genutzt werden!
-% \begin{macrocode}
-\newcommand*\DisableCrossrefsForced{}
-\let\DisableCrossrefsForced\DisableCrossrefs
-% \end{macrocode}
-% \end{macro}^^A \DisableCrossrefsForced
-%
-% \begingroup%
-% \DisableCrossrefsForced%
-% \begin{macrocode}
-%^^A\DoNotIndex{\ ,\",\.,\@,\\,\{,\}}
-%^^A\DoNotIndex{\@abstrtfalse,\@abstrttrue,\@addtoreset}
-%^^A\DoNotIndex{\@afterheading,\@afterindentfalse}
-%^^A\DoNotIndex{\@Alph,\@alph,\@arabic}
-%^^A\DoNotIndex{\@beginparpenalty}
-%^^A\DoNotIndex{\@car,\@cdr,\@centercr}
-%^^A\DoNotIndex{\@dblfloat,\@dotsep,\@dottedtocline}
-%^^A\DoNotIndex{\@empty,\@endparpenalty}
-%^^A\DoNotIndex{\@float,\@fontswitch}
-%^^A\DoNotIndex{\@gobbletwo}
-%^^A\DoNotIndex{\@hangfrom,\@highpenalty}
-%^^A\DoNotIndex{\@ifnextchar,\@ifundefined,\@itempenalty}
-%^^A\DoNotIndex{\@latex@warning}
-%^^A\DoNotIndex{\@M,\@m,\@medpenalty,\@minus,\@mkboth}
-%^^A\DoNotIndex{\@mparswitchfalse,\@mparswitchtrue}
-%^^A\DoNotIndex{\@ne,\@nil,\@nobreakfalse,\@nobreaktrue,\@nomath}
-%^^A\DoNotIndex{\@plus}
-%^^A\DoNotIndex{\@Roman,\@roman}
-%^^A\DoNotIndex{\@tempa,\@tempb,\@tempc}
-%^^A\DoNotIndex{\@tempcnta,\@tempcntb,\@tempcntc}
-%^^A\DoNotIndex{\@tempdima,\@tempdimb,\@tempdimc}
-%^^A\DoNotIndex{\@tempskipka,\@tempskipkb,\@tempskipkc}
-%^^A\DoNotIndex{\@tempswafalse,\@tempswatrue,\@tempswbfalse,\@tempswbtrue}
-%^^A\DoNotIndex{\@tocrmarg,\@topnewpage,\@topnum}
-%^^A\DoNotIndex{\@twocolumnfalse,\@twocolumntrue,\@twosidefalse,\@twosidetrue}
-%^^A\DoNotIndex{\@undefined,\@whiledim,\@whilenum}
-%^^A\DoNotIndex{\addcontentsline,\addpenalty,\addtocontents}
-%^^A\DoNotIndex{\addtolength,\addvspace,\advance}
-%^^A\DoNotIndex{\begin,\begingroup,\bfseries,\box,\bullet}
-%^^A\DoNotIndex{\c@figure,\c@page,\c@secnumdepth,\c@table,\c@tocdepth,\cdot}
-%^^A\DoNotIndex{\centering,\changes,\cleardoublepage,\clearpage,\cmd}
-%^^A\DoNotIndex{\CodelineIndex,\col@number,\cs,\CurrentOption}
-%^^A\DoNotIndex{\dblfloatpagefraction,\dbltopfraction,\def,\divide,\DoNotIndex}
-%^^A\DoNotIndex{\DeclareOldFontCommand,\DeclareOption,\DisableCrossrefs}
-%^^A\DoNotIndex{\else,\em,\empty,\EnableCrossrefs,\end,\end@dblfloat,\end@float}
-%^^A\DoNotIndex{\endgroup,\endlist,\endquotation,\endtitlepage,\everypar}
-%^^A\DoNotIndex{\ExecuteOptions,\expandafter}
-%^^A\DoNotIndex{\fboxrule,\fboxsep,\fi}
-%^^A\DoNotIndex{\gdef,\global}
-%^^A\DoNotIndex{\hangindent,\hbox,\hfil,\hrule,\hsize,\hskip,\hspace,\hss}
-%^^A\DoNotIndex{\if,\if@tempswa,\ifcase,\ifdim,\ifnum,\ifodd,\ifx,\include}
-%^^A\DoNotIndex{\input,\InputIfFileExists,\item,\itshape}
-%^^A\DoNotIndex{\kern}
-%^^A\DoNotIndex{\leavevmode,\leftmark,\leftskip,\let,\lineskip,\list,\long}
-%^^A\DoNotIndex{\m@ne,\m@th,\marginpar,\markboth,\markright}
-%^^A\DoNotIndex{\mathbf,\mathcal,\mathit,\mathnormal,\mathrm,\mathsf,\mathtt}
-%^^A\DoNotIndex{\MessageBreak,\month}
-%^^A\DoNotIndex{\newblock,\newcommand,\newcount,\newcounter,\newdimen}
-%^^A\DoNotIndex{\newenvironment,\newlength,\newpage,\nobreak,\noindent}
-%^^A\DoNotIndex{\normalcolor,\normalfont,\normallineskip,\normalsize}
-%^^A\DoNotIndex{\null,\number,\numberline}
-%^^A\DoNotIndex{\OldMakeindex,\OnlyDescription,\or,\overfullrule}
-%^^A\DoNotIndex{\p@,\PackageError,\PackageInfo,\PackageWarningNoLine}
-%^^A\DoNotIndex{\pagenumbering,\pagestyle,\par,\paragraph,\parbox}
-%^^A\DoNotIndex{\PassOptionsToPackage,\pcal,\penalty,\protect,\providecommand}
-%^^A\DoNotIndex{\PrintIndex,\PrintChanges,\ProcessOptions,\ProvidesClass}
-%^^A\DoNotIndex{\raggedbottom,\raggedleft,\raggedright,\refstepcounter,\relax}
-%^^A\DoNotIndex{\renewcommand,\RequirePackage,\reset@font,\rightmargin}
-%^^A\DoNotIndex{\rightmark,\rightskip,\rmfamily}
-%^^A\DoNotIndex{\scshape,\secdef,\setbox,\setcounter,\setlength,\settowidth}
-%^^A\DoNotIndex{\sfcode,\sffamily,\skip,\sloppy,\slshape,\space,\string}
-%^^A\DoNotIndex{\the,\thispagestyle,\ttfamily,\twocolumn,\typeout}
-%^^A\DoNotIndex{\undefined,\usecounter}
-%^^A\DoNotIndex{\vfil,\vfill,\vspace}
-%^^A\DoNotIndex{\wd}
-%^^A\DoNotIndex{\xdef}
-%^^A\DoNotIndex{\year}
-%^^A\DoNotIndex{\z@}
-% \end{macrocode}
-% \endgroup%
-%
% \iffalse
%</class&option>
%<*class&body>
% \fi
%
-% \subsection{Definition und Erscheinungsbild von Deklarationselementen}
+% \subsection{Standardwerte für Titelei, Absatzauszeichnung und Index}
%
-% 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.
+% Folgende Werte sind standardmäßig für den Titel eingestellt, können aber
+% jederzeit überschrieben werden.
% \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%
- }%
-}{}%
+\AtEndOfClass{%
+ \@ifpackageloaded{tudscr-gitinfo}{%
+ \GetFileInfo{\jobname}%
+ \title{\file{\filename}}%
+ \date{%
+ \filedate%
+ \ifdefvoid{\fileversion}{}{\nobreakspace\fileversion}%
+ \ifdefvoid{\filerevision}{}{\nobreakspace\texttt{\filerevision}}%
+ }%
+ }{}%
+ \CodelineIndex%
+ \RecordChanges%
+}
% \end{macrocode}
-% \begin{macro}{\m@cro@}
-% Nach dem Laden des Paketes werden die Definitionen einiger Makros überprüft.
+% Wurde in der Präambel \cs{GetFileInfo} nicht aufgerufen, dann erfolgt dies zu
+% Beginn des Dokumentes.
% \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
+\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}
-% \end{macro}^^A \m@cro@
%
-% \subsubsection{Erweiterte Einträge für Index und Änderungsliste}
+% \subsection{Seitenstil}
%
-% \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{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}
-\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}%
+\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 \doxitem
-% \begin{macro}{\@doxcreatedescribes}
-% \changes{v2.05i}{2017/03/09}{neu}^^A
-% \begin{length}{\marginnotevskip}
+% \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}
-% 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.
+% 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}
-\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}
+\tud@newdim\tud@dim@marginnotevskip
\AfterPackage*{marginnote}{%
\renewcommand*\marginpar[2][]{%
\IfArgIsEmpty{#1}{%
- \marginnote{#2}[\marginnotevskip]%
+ \marginnote{#2}[\tud@dim@marginnotevskip]%
}{%
- \marginnote[{#1}]{#2}[\marginnotevskip]%
+ \marginnote[{#1}]{#2}[\tud@dim@marginnotevskip]%
}%
}%
}
% \end{macrocode}
% \end{macro}^^A \marginpar
-% \end{length}^^A \marginnotevskip
-% \end{macro}^^A \@doxcreatedescribes
-% \begin{macro}{\index@type}
+% \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 und Änderungsliste.
+% Index, Änderungsliste und Randnotizen.
% \begin{macrocode}
-\newrobustcmd*\index@type[1]{%
+\NewDocumentCommand{\tud@idx@typemarkup}{r()}{%
\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}
+% \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 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.
+% 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*\@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%
+\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}
-% Um den Typ der Deklarationselemente in den Index einzutragen, wird der Typ
-% geschützt expandiert, um beispielsweise Umlaute problemlos nutzen zu können.
+% 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}
-\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%
+ % 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
}%
- \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%
+ % PATCH: reset settings for nested index and changelog entries
+ \gdef\noexpand\tud@idx@element{#1}%
+ \global\let\noexpand\tud@idx@parent\relax%
}%
-}
-\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%
+ \@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
}%
- \@esphack%
- \let\parameter@parent@changes\relax%
- \hypersourcedef{\filesep\number\c@CodelineNo}%
+ % PATCH: reset settings for nested index and changelog entries
+ \gdef\noexpand\tud@idx@element{#1}%
+ \global\let\noexpand\tud@idx@parent\relax%
}%
}
-\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%
+\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%
}%
-}
-\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%
+ \@nameedef{SpecialMain#1Index}##1{%
+ \expandafter\noexpand\csname Code#1Index\endcsname{main}{##1}%
}%
-}
-\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%
+ \@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*\@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%
+\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}
-% \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.
+% 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}
-\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\ %
+ \@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%
}%
- }{}%
-}
-\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\ %
+ \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
}%
- }{}%
-}
-% \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}%
+ % 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}
-% \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.
+% Zur Sicherung der Indexeinträge das selbe Spiel für die Expansion wie zuvor.
% \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}%
+ % 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
+ }%
}
-\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
+% \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 Dokumentatiton notwendigen Umgebungen mit \cs{docitem} erstellt
-% werden. Dabei kommen die Lokalisierungsvariablen \cs{tud@\dots{}@name} zum
-% Tragen.
+% die für die Dokumentation notwendigen Umgebungen mit \cs{NewDocElement}
+% erstellt werden, wobei die Lokalisierungsvariablen |\tud@|\meta{\dots}|@name|
+% zum Tragen kommen.
% \begin{macrocode}
-\renewcommand*\tud@reserved[3][]{%
- \doxitem[#1,idxtype=\csname tud@#3@name\endcsname]{#2}{#3}{%
- \csname tud@#3s@name\endcsname%
- }%
+\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}%
}
-\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}
+\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}{\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{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*\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
+\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}
-% \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.
+% 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}
-\apptocmd{\@SaveMacroIndexName}{%
- \edef\parameter@parent@indexname{\expandafter\@gobble#1}%
- \edef\parameter@parent@indexformat{%
- \string\verb\quotechar*\verbatimchar#1\verbatimchar%
+ \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%
+ }%
}%
-}{}{\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}%
+% \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}%
}%
-}{}{\tud@patch@wrn{@SaveEnvIndexName}}
+ \global\let\tud@idx@parent\relax%
+}
% \end{macrocode}
-% \end{macro}^^A \@SaveEnvIndexName
-% \end{macro}^^A \@SaveMacroIndexName
+% \end{macro}^^A \Describe@Parameters
+% \end{macro}^^A \DescribeEnvParameters
+% \end{macro}^^A \DescribeMacroParameters
% \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.
+% \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\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'.%
+ \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%
- \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}
+% Hier wird die Gestalt der Indexeinträge für Parameter festgelegt, wenn diese
+% durch \cs{Describe@Parameters} erzeugt werden.
% \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}{%
+ \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 macro\MessageBreak%
- `\string\DescribeParameter' only within the environment\MessageBreak%
- `DescribeParameterParent'.%
+ 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%
- \@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%
+}
+% \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 \SpecialParameterIndex
-% \end{environment}^^A DescribeParameterParent
+% \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@}
-% Bei der Erstellung der Änderungsliste fehlt bei Makros in der aktuellen
-% Version von \pkg{doc} ein Leerzeichen. Das Problem ist bereits gemeldet.
+% \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\levelchar
+ #1%
+ \ifdoc@reportchangedates\space -- #2\fi
+ \levelchar
\ifx\saved@macroname\@empty
- \space
+ \quotechar!%
\actualchar
\generalname
\else
@@ -877,165 +1070,110 @@
% \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.
+% Erscheinens der einzelnen Einträge wird das in |#2| 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%
- }%
+\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}
-% 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.
+% Das an die vorderster Stelle sortierte Zeichen ist |~| bei \app{texindy}.
% \begin{macrocode}
- \else%
- \protected@edef\@tempb{%
- \parameter@parent@changes%
- \saved@indexname%
- \ifx\saved@indextype\@empty\else%
- \space\saved@indextype%
- \fi%
- \actualchar%
+ \ifx\saved@macroname\@empty
+ \string~\actualchar\tud@general@name%
% \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.
+% 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}
- {\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
+ \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}%
}%
- \else%
- \let\@tempa\relax%
- \fi%
+ }%
\@tempa\endgroup\@esphack%
}%
-\else%
+\else
% \end{macrocode}
-% Für \app{makeindex} wird der Befehl insebsondere für das Listen der Parameter
+% 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\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%
+ #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%
+\fi
% \end{macrocode}
+% \end{macro}^^A \changes@@
% \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.
+% \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}
-\CheckCommand*\@wrglossary[1]{%
- \protected@write\@glossaryfile{}%
- {\string\glossaryentry{#1}{\thepage}}%
- \endgroup
- \@esphack%
-}
+\ifdefined\tudxdyflag
+\newcommand*\tud@xdy@wrglossary[1]{%
% \end{macrocode}
-% Allgemeine Einträge werden mit Seitenzahlenerzeugt. Für Einträge bzgl. einer
-% Implementierungen werden Codezeilen als Basis verwendet, falls aktiv.
+% 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}
-\def\@wrglossary#1{%
- \ifx\saved@macroname\@empty%
+ \@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|usage}{\thepage}%
+ \string\glossaryentry{#1|change}%
+ {\tud@xdy@reference{\if@tud@res@swa\number\c@CodelineNo\else0\fi}}%
}%
- \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%
+ \global\advance\c@CodelineNo\m@ne%
\endgroup%
\@esphack%
}
+\fi
% \end{macrocode}
-% \end{macro}^^A \@wrglossary
+% \end{macro}^^A \tud@xdy@wrglossary
%
% \subsubsection{Erscheinung von Einträgen in der Änderungsliste}
%
@@ -1061,11 +1199,9 @@
% \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}
+% \begin{macro}{\tud@lst@@sub}
% \changes{v2.05g}{2016/11/02}{neu}^^A
-% \begin{macro}{\tud@lst@subsubsub}
-% \changes{v2.05g}{2016/11/02}{neu}^^A
-% \begin{macro}{\subsubsubitem}
+% \begin{macro}{\tud@lst@@@sub}
% \changes{v2.05g}{2016/11/02}{neu}^^A
% \begin{macro}{\efil}
% \changes{v2.05g}{2016/11/02}{neu}^^A
@@ -1075,24 +1211,23 @@
% 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*\tud@lst@@sub{}
+\newcommand*\tud@lst@@@sub{}
\newcommand*\efil{\hfil\nopagebreak}%
\newcommand*\tud@lst@def{%
\newcommand*\tud@lst@values{}%
- \newif\if@tud@lst@multi%
+ \tud@newif\if@tud@lst@multi%
\newcommand*\tud@lst@init{%
\let\tud@lst@values\relax%
- \let\tud@lst@subsub\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@subsub{\subsubitem}%
+ \def\tud@lst@@sub{\subitem}%
\fi%
- \listadd\tud@lst@values{\tud@lst@subsub ##1}%
+ \listadd\tud@lst@values{\tud@lst@@sub ##1}%
}%
\newcommand*\tud@lst@process{%
\if@tud@lst@multi%
@@ -1102,18 +1237,18 @@
\tud@lst@init%
}%
\newcommand*\tud@lst@@values{}%
- \newif\if@tud@lst@@multi%
+ \tud@newif\if@tud@lst@@multi%
\newcommand*\tud@lst@@init{%
\let\tud@lst@@values\relax%
- \def\tud@lst@subsub{\subsubitem}%
- \def\tud@lst@subsubsub{\space}%
+ \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@subsubsub{\subsubsubitem}%
+ \def\tud@lst@@@sub{\subsubitem}%
\fi%
\listadd\tud@lst@@values{##1}%
}%
@@ -1121,9 +1256,9 @@
\if@tud@lst@@multi%
\appto\tud@lst@values{\efill}%
\fi%
- \edef\tud@reserved####1{%
+ \protected@edef\tud@reserved####1{%
\noexpand\listadd\noexpand\tud@lst@values{%
- \expandonce\tud@lst@subsubsub####1%
+ \expandonce\tud@lst@@@sub####1%
}%
}%
\forlistloop{\tud@reserved}{\tud@lst@@values}%
@@ -1132,9 +1267,8 @@
}
% \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@@@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
@@ -1147,27 +1281,126 @@
% \end{macro}^^A \tud@lst@values
% \end{macro}^^A \tud@lst@def
%
-% \subsubsection{Erzeugen von Index und Änderungsliste}
+% \subsubsection{Setzen der Anpassungen für Index und Änderungsliste}
%
-% \begin{macro}{\tud@write@replace}
+% Ü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@read@replace}
+% \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
- \newcommand*\tud@write@replace{}%
- \newwrite\tud@write@replace%
- \newcommand*\tud@read@replace{}%
- \newread\tud@read@replace%
+ \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-
@@ -1182,47 +1415,71 @@
\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%
+ \immediate\openin\tud@xdy@read=\jobname.#1\relax%
+ \immediate\openout\tud@xdy@write=\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%
+ \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\expandafter\tud@line@replace%
+ \expandafter\tud@replace@@in\expandafter\tud@line@replace%
\expandafter{\quotechar}{"}%
- \expandafter\tud@replace\expandafter\tud@line@replace%
+ \expandafter\tud@replace@@in\expandafter\tud@line@replace%
\expandafter{\levelchar}{!}%
- \tud@replace\tud@line@replace{" @}{}%
- \ifeof\tud@read@replace\else%
- \immediate\write\tud@write@replace{%
+ \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@read@replace%
- \immediate\closeout\tud@write@replace%
+ \immediate\closein\tud@xdy@read%
+ \immediate\closeout\tud@xdy@write%
\ifnum\pdf@shellescape=\@ne\relax%
\if@tempswa%
\ShellEscape{%
texindy\space%
- -o \jobname.#2\space%
- -M \@currname-#2.xdy\space%
- -t \jobname-#2.xlg\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@write@replace=\jobname.#2\relax%
- \immediate\closeout\tud@write@replace%
+ \immediate\openout\tud@xdy@write=\jobname.#2\relax%
+ \immediate\closeout\tud@xdy@write%
\fi%
\fi%
}{}%
@@ -1245,40 +1502,114 @@
\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@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}
+% \end{macro}^^A \tud@xdy@read
+% \end{macro}^^A \tud@xdy@write
%
-% \subsection{ToDo-Liste}
+% \subsection{Liste anstehender Aufgaben}
%
% \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.
+% Für ToDo-Notizen wird eine Liste aller anstehender Aufgaben definiert.
% \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}
+\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}
-% 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.
+% Werden mit \cs{DocInclude} mehrere Dateien in das Dokument eingefügt, so
+% erhält die ToDo-Notiz einen entsprechenden Hinweis.
% \begin{macrocode}
-\patchcmd{\@docinclude}{%
+ \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
@@ -1291,7 +1622,7 @@
\let\@ltxdoc@PrintToDos\PrintToDos
\let\PrintToDos\relax
}{}{\tud@patch@wrn{@docinclude}}
-\patchcmd{\@docinclude}{%
+\patchcmd\@docinclude{%
\let\PrintIndex\@ltxdoc@PrintIndex
\let\PrintChanges\@ltxdoc@PrintChanges
}{%
@@ -1301,56 +1632,6 @@
}{}{\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}
%
@@ -1360,19 +1641,19 @@
% 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}{%
+\AfterPackage*{mweights}{%
\CheckCommand*\MacroFont{%
\fontencoding\encodingdefault%
\fontfamily\ttdefault%
\fontseries\mddefault%
- \fontshape\updefault%
+ \fontshape\shapedefault%
\small%
}%
\renewcommand*\MacroFont{%
\fontencoding\encodingdefault%
\fontfamily\ttdefault%
\fontseries\mdseries@tt%
- \fontshape\updefault%
+ \fontshape\shapedefault%
\small%
}%
\CheckCommand*\AltMacroFont{%
@@ -1398,6 +1679,14 @@
}%
}
% \end{macrocode}
+% \end{macro}^^A \AltMacroFont
+% \end{macro}^^A \MacroFont
+%
+% \iffalse
+%</class&body>
+%<*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.
@@ -1411,8 +1700,11 @@
}%
}
% \end{macrocode}
-% \end{macro}^^A \AltMacroFont
-% \end{macro}^^A \MacroFont
+%
+% \iffalse
+%</class&option>
+%<*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
@@ -1430,17 +1722,19 @@
% \begin{length}{\textheight}
% \begin{length}{\textwidth}
% \begin{length}{\columnsep}
+% \begin{length}{\labelsep}
% \begin{length}{\marginparsep}
% \begin{length}{\marginparwidth}
% \begin{length}{\oddsidemargin}
-% Hiermit wird die Berechnung des Satzspiegels ausgeführt.
+% 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{%
- \setlength\topmargin{-1in}%
- \setlength\headheight{0pt}%
- \setlength\headsep{3em}%
- \setlength\footskip{1.5\headsep}%
- \setlength\textheight{\dimexpr\paperheight-2.5\headsep-\footskip\relax}%
+ \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%
@@ -1448,29 +1742,28 @@
\begingroup%
\MacroFont\selectfont%
\settowidth\@tempdima{\space}%
- \setlength\@tempdima{80\@tempdima}%
-%^^A \addtolength\@tempdima{\dimexpr\MacroIndent+.1\p@\relax}%
- \addtolength\@tempdima{\MacroIndent}%
+ \tud@setdim\@tempdima{80\@tempdima}%
+ \tud@addtodim\@tempdima{\MacroIndent}%
\edef\@tempa{%
\endgroup%
- \noexpand\setlength\noexpand\textwidth{\the\@tempdima}%
+ \unexpanded{\tud@setdim\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}%
+ \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
@@ -1480,13 +1773,35 @@
% \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}
@@ -1495,24 +1810,29 @@
% \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}{%
+\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%
@@ -1525,67 +1845,18 @@
% \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
%
-% \subsection{Rückfalloptionen bei fehlenden Paketen}
-%
-% Zum Schluss erfolgen einige Anpassungen mit \cs{AtEndPreamble}, um abhängig
-% vom Ladezustand einiger Pakete reagieren zu können.
-% \begin{macrocode}
-\AtEndPreamble{%
-% \end{macrocode}
-% \begin{macro}{\selectlanguage}
-% \begin{macro}{\glqq}
-% \begin{macro}{\grqq}
-% Etwas Kleinkram für \pkg{babel}\dots
-% \begin{macrocode}
- \@ifpackageloaded{babel}{}{%
- \ClassWarning{\TUD@Class@Name}{Package `babel' not loaded}%
- \providecommand*\selectlanguage[1]{}%
- \providecommand*\glqq{}%
- \providecommand*\grqq{}%
- }%
-% \end{macrocode}
-% \end{macro}^^A \grqq
-% \end{macro}^^A \glqq
-% \end{macro}^^A \selectlanguage
-% \begin{macro}{\enquote}
-% \dots und \pkg{csquotes}.
-% \begin{macrocode}
- \@ifpackageloaded{csquotes}{}{%
- \ClassWarning{\TUD@Class@Name}{Package `csquotes' not loaded}%
- \providecommand\enquote[1]{\emph{#1}}%
- }%
-% \end{macrocode}
-% \end{macro}^^A \enquote
-% Sollte das Paket \pkg{tudscrfonts} nicht geladen worden sein, so wird das
-% Paket \pkg{lmodern} geladen und die fehlenden Befehle zur Schriftauswahl
-% rudimentär definiert.
-% \begin{macrocode}
- \@ifpackageloaded{tudscrfonts}{}{%
- \RequirePackage{lmodern}[2009/10/30]%
- \providecommand*\textcdln[1]{\textsf{#1}}%
- \providecommand*\textcdrn[1]{\textcdln{#1}}%
- \providecommand*\textcdsn[1]{\textcdln{#1}}%
- \providecommand*\textcdbn[1]{\textbf{\textcdln{#1}}}%
- \providecommand*\textcdxn[1]{\textcdbn{#1}}%
- \providecommand*\textcdli[1]{\textsl{\textcdln{#1}}}%
- \providecommand*\textcdri[1]{\textcdli{#1}}%
- \providecommand*\textcdsi[1]{\textcdli{#1}}%
- \providecommand*\textcdbi[1]{\textbf{\textcdli{#1}}}%
- \providecommand*\textcdxi[1]{\textcdbi{#1}}%
- }%
-}
-% \end{macrocode}
-%
% \iffalse
%</class&body>
% \fi
%
-% \Finale
+% \PrintBackMatter
%
\endinput