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