diff options
Diffstat (limited to 'macros/latex/contrib/tudscr/source/tudscr-doc.dtx')
-rw-r--r-- | macros/latex/contrib/tudscr/source/tudscr-doc.dtx | 2189 |
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 |