summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx')
-rw-r--r--Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx7531
1 files changed, 4821 insertions, 2710 deletions
diff --git a/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx b/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
index 3371b857d33..485f2246f26 100644
--- a/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
+++ b/Master/texmf-dist/source/latex/tudscr/tudscr-manual.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{2999}
+% \CheckSum{4147}
% \iffalse meta-comment
%
% ============================================================================
@@ -18,13 +18,13 @@
%
% ----------------------------------------------------------------------------
%
-% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz
-% in der Version 1.3c, verteilt und/oder veraendert werden. Die aktuelle
-% Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und
-% Version 1.3c oder spaeter ist Teil aller Verteilungen von LaTeX 2005/12/01
-% oder spaeter 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.
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz
+% in der Version 1.3c, verteilt und/oder veraendert werden. Die aktuelle
+% Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und
+% Version 1.3c oder spaeter ist Teil aller Verteilungen von LaTeX 2005/12/01
+% oder spaeter 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.
%
% ============================================================================
%
@@ -51,23 +51,24 @@
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\ProvidesFile{tudscr-manual.dtx}[%
- 2015/07/02 v2.04 TUD-KOMA-Script\space%
+ 2016/07/26 v2.05 TUD-KOMA-Script\space%
%</driver>
-%<package&identify>\NeedsTeXFormat{LaTeX2e}
-%<package&identify>\ProvidesPackage{tudscrman}[%
+%<package&identify>\ProvidesPackage{tudscrtutorial}[%
%<*driver|package&identify>
-%!TUDVersion
+%!TUD@Version
%<package> package (internal tutorials)%
]
%</driver|package&identify>
%<*driver>
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
-\documentclass[english,ngerman]{tudscrdoc}
+\documentclass[english,ngerman,xindy]{tudscrdoc}
\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{tudscrfonts} % only load this package, if the fonts are installed
\KOMAoptions{parskip=half-}
+\usepackage{microtype}
+\usepackage{bookmark}
\CodelineIndex
\RecordChanges
\GetFileInfo{tudscr-manual.dtx}
@@ -80,576 +81,715 @@
%
% \selectlanguage{ngerman}
%
-% \changes{v2.02}{2014/11/18}{\cls{tudscrman} Index für Tutorials möglich}^^A
-% \changes{v2.02}{2014/12/17}{\cls{tudscrman} xindy-Stildatei wird bei der
-% Kompilierung erzeugt}^^A
+% \changes{v2.02}{2014/12/17}{Erstellung der \app{texindy}-Stildatei während
+% der Kompilierung}^^A
+% \changes{v2.02}{2014/11/18}{\pkg{tudscrtutorial}: Index für Tutorials}^^A
+% \changes{v2.05}{2015/08/04}{Geteilte Deklarationen für Klasse und Paket}^^A
%
-% \section{Klasse und Paket für die Anwenderdokumentation von \TUDScript}
+% \section{Klasse und Paket für Handbuch und Leitfäden zu \TUDScript}
%
-% Es werden die Klasse \cls{tudscrman} für das \TUDScript-Handuch sowie das
-% Paket \pkg{tudscrman} für das Setzen von einigen Anwenderleitfäden bzw.
+% Es werden die Klasse \cls{tudscrmanual} für das \TUDScript-Handuch sowie das
+% Paket \pkg{tudscrtutorial} für das Setzen von einigen Anwenderleitfäden bzw.
% Tutorials erzeugt. Da es zwischen der Klasse und dem Paket es eine große
% Menge an Überschneidungen gibt, basieren diese auf der gleichen Quelldatei.
%
-% \StopEventually{\PrintIndex\PrintChanges}
+% \StopEventually{\PrintIndex\PrintChanges\PrintToDos}
%
% \iffalse
-%<*!doc>
-%<*body>
+%<*body|doc>
% \fi
%
-% \subsection{Benötigte Pakete für die Anwenderdokumentation}
+% \subsection{Notwendige Pakete und Befehle für Klasse und Paket}
%
-% Basis für das Handbuch ist die Klasse \cls{tudscrreprt}. An diese werden alle
-% Klassenoptionen weitergereicht. Sie wird für das Setzen des Anwenderhandbuchs
-% genutzt. Zusätzlich wird das Paket \pkg{tudscrman} erstellt, um an das
-% Handbuch angelehnte Tutorials in einem Unterordner zu erstellen. Sowohl für
-% die Klasse als auch das Paket werden einige Pakete geladen.
+% Basis für die Handbuchklasse \cls{tudscrmanual} ist die \cls{tudscrreprt}.
+% Zusätzlich wird das Paket \pkg{tudscrtutorial} erstellt, um an das Handbuch
+% angelehnte Tutorials in einem Unterordner zu erstellen. Sowohl für die Klasse
+% als auch das Paket werden einige Pakete geladen, um Einstellungen vorzunehmen
+% und nützliche Befehle zu definieren.
%
% Das Paket \pkg{xparse} erlaubt eine sehr freie Deklaration von Makros mit
% nahezu beliebig arrangierbaren (optionalen) Argumenten.
% \begin{macrocode}
+%<*!doc>
+\PassOptionsToPackage{log-declarations=false}{xparse}
\RequirePackage{xparse}[2013/12/31]
+%</!doc>
% \end{macrocode}
-% Für den Fließtext werden Pfeile u.\,ä. durch \pkg{textcomp} bereitgestellt.
+% Bugfixes für unterschiedliche Pakete.
% \begin{macrocode}
-\RequirePackage{textcomp}[2005/09/27]
+\RequirePackage{scrhack}[2014/02/27]
% \end{macrocode}
-% Vergrößerung des Durchschusses.
+% Die Sprachunterstützung für Klasse und Paket.
% \begin{macrocode}
-\RequirePackage{setspace}[2011/12/19]
-\setstretch{1.1}\recalctypearea
+%<*!doc>
+\RequirePackage{babel}[2014/03/24]
+%</!doc>
% \end{macrocode}
-% Sprachunterstützung.
+% Das Paket \pkg{marginnote} stellt nicht fließenden Randnotizen bereit, welche
+% für die Kennzeichnung von Änderungen, Hinweise oder ToDo-Notizen verwendet
+% werden. Die Randnotizen werden auf dem linken~-- weil größeren~-- Seitenrand
+% gesetzt.
% \begin{macrocode}
-\RequirePackage{babel}[2014/03/24]
+%<*!doc>
+\PassOptionsToPackage{quiet}{marginnote}
+\RequirePackage{marginnote}[2012/03/29]
+\reversemarginpar
+%</!doc>
% \end{macrocode}
-% Sprachabhängiges Setzen von Anführungszeichen.
+% Das Paket für intelligente Leerzeichen am Ende von Makros mit \cs{xspace}.
% \begin{macrocode}
-\AfterPackage*{inputenc}{\RequirePackage{csquotes}[2011/10/22]}
-\AtBeginDocument{%
- \@ifpackageloaded{csquotes}{}{%
-%<*class>
- \ClassWarning%
-%</class>
-%<*package>
- \PackageWarning%
-%</package>
- {tudscrman}{Package `csquotes' not loaded}%
- \providecommand\enquote[1]{\glqg#1\grqq{}}%
+\RequirePackage{xspace}[2009/10/20]
+\xspaceaddexceptions{"=}
+% \end{macrocode}
+% Für das Paket \pkg{geometry} erfolgen durch \TUDScript vielerlei Anpassungen.
+% Um bei einer signifikanten Änderung des Paketes passend reagieren zu können,
+% wird auf das aktuelle Paketdatum geprüft und für neue Versionen eine Warnung
+% erzeugt.
+% \begin{macrocode}
+%<*!doc>
+\@ifpackagelater{geometry}{2010/09/13}{%
+ \ClassWarning{\TUD@Class@Name}{%
+ Package `geometry' was updated so some patches\MessageBreak%
+ are maybe outdated
}%
-}
+}{}%
+%</!doc>
% \end{macrocode}
-% Das Paket \pkg{microtype} wird für den optischen Randausgleich verwendet.
+% \begin{macro}{\vTUDScript}
+% \begin{macro}{\vKOMAScript}
+% Diese Befehle geben in der Dokumentation die aktuelle Version von \TUDScript
+% sowie die mindestens notwendige Version von \KOMAScript aus.
% \begin{macrocode}
-\AfterPackage*{hyperref}{\RequirePackage[babel]{microtype}[2013/05/23]}
+\newcommand*\vTUDScript{v\TUDScriptVersionNumber}
+\newcommand*\vKOMAScript{v\TUD@Version@KOMA}
% \end{macrocode}
-% \begin{length}{\baselineskipglue}
-% Diese Länge wird in der Dokumentation für alle möglichen stauch- und
-% dehnbaren Einfügen genutzt.
+% \end{macro}^^A \vKOMAScript
+% \end{macro}^^A \vTUDScript
+% \begin{macro}{\tud@english}
+% Mit diesem Befehl wird der Inhalt des Arumentes mit englischen Trennmustern
+% gesetzt, falls die Sprache geladen wurde.
% \begin{macrocode}
-\newlength\baselineskipglue
+\newcommand*\tud@english[1]{#1}
\AtBeginDocument{%
- \setlength\baselineskipglue{%
- .4\baselineskip plus .4\baselineskip minus .2\baselineskip%
+%<*doc>
+ \providecommand*\iflanguageloaded[3]{#3}%
+%</doc>
+ \iflanguageloaded{english}{%
+ \renewcommand*\tud@english[1]{\foreignlanguage{english}{#1}}%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@english
+%
+% \iffalse
+%</body|doc>
+%<*!doc>
+%<*body>
+% \fi
+%
+% \begin{macro}{\pdfstrcmp}
+% \begin{macro}{\pdfshellescape}
+% Sollte \app{lualatex} eingesetzt werden, sind diese \app{pdflatex}-Primitiven
+% dennoch notwendig, wofür \pkg{pdftexcmds} geladen wird.
+% \begin{macrocode}
+\RequirePackage{ifluatex}[2016/05/16]
+\ifluatex
+ \RequirePackage{pdftexcmds}[2016/05/21]
+ \let\pdfstrcmp\pdf@strcmp
+ \let\pdfshellescape\pdf@shellescape
+\fi
+% \end{macrocode}
+% \end{macro}^^A \pdfshellescape
+% \end{macro}^^A \pdfstrcmp
+% \begin{macro}{\tud@list@sort}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% \begin{macro}{\tud@list@@sort}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% \begin{macro}{\tud@templist}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% \begin{macro}{\if@tud@list@sorted}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% Der Befehl \cs{tud@list@sort} erwartet eine \pkg{etoolbox}-Liste und sortiert
+% diese mit \cs{sort@list} in alphabetischer Reihenfolge in eine kommagetrennte
+% Auflistung. Diese wird anschließend wieder in eine \pkg{etoolbox}-Liste
+% umgewandelt.
+% \begin{macrocode}
+\newcommand*\tud@templist{}
+\let\tud@templist\relax
+\newcommand*\tud@list@sort[1]{%
+ \ifdefvoid{#1}{%
+ \ClassWarning{tudscrmanual}{%
+ The given list \string#1\space\MessageBreak%
+ is empty, nothing to sort here%
+ }%
+ }{%
+ \let\tud@reserved#1%
+ \let\tud@templist\relax%
+ \forlistloop\tud@list@@sort{\tud@reserved}%
+ \let\tud@reserved\relax%
+ \@for\@tempa:=\tud@templist\do{\listeadd\tud@reserved{\@tempa}}%
+ \let#1\tud@reserved%
}%
}
% \end{macrocode}
-% \end{length}^^A \baselineskipglue
-% Verbesserte Zitate.
+% Hier erfolgt die eigentliche Sortierung der Liste.
% \begin{macrocode}
-\PassOptionsToPackage{vskip=.5\baselineskipglue}{quoting}
-\RequirePackage{quoting}[2014/01/28]
+\newif\if@tud@list@sorted
+\newcommand*\tud@list@@sort[1]{%
% \end{macrocode}
-% Automatisierte Datumsformatierung.
+% Der erste Eintrag wird direkt der Liste hinzugefügt.
% \begin{macrocode}
-\RequirePackage{isodate}[2010/01/03]
+ \ifx\tud@templist\relax%
+ \def\tud@templist{#1}%
% \end{macrocode}
-% Verschiedenste Symbole aus dem \LaTeX-Universum.
+% Weitere Einräge werden mit \cs{pdfstrcmp} an der richtigen Stelle eingefügt.
+% Dabei wird die kommagetrennte Liste \cs{tud@templist} durchlaufen und
+% \cs{@tempb} als Hilfsmakro verwendet, in welches die aktuelle Liste innerhalb
+% der \cs{@for}-Schleife stückweise expandiert wird. Wenn das aktuelle Element
+% an der dafür passenden Stelle eingesetzt wurde, wird \cs{if@tud@list@sorted}
+% gesetzt.
% \begin{macrocode}
-\RequirePackage{hologo}[2012/04/26]
+ \else%
+ \@tud@list@sortedfalse%
+ \let\@tempb\@empty%
+ \@for\@tempa:=\tud@templist\do{%
% \end{macrocode}
-% Das Paket \pkg{marginnote} stellt nicht fließenden Randnotizen bereit.
+% Ist der Eintrag bereits erfolgt, wird der verbliebene Teil der Liste
+% angehangen.
% \begin{macrocode}
-\RequirePackage{marginnote}[2012/03/29]
+ \if@tud@list@sorted%
+ \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
+ \else%
% \end{macrocode}
-% Sowohl im Handbuch als auch in den Tutroials werden Quelltextauszüge für das
-% bessere Verständnis des Anwenders angegeben. Um diese darzustellen wird das
-% Paket \pkg{listings} verwendet.
+% Liegt der Eintrag in alphabetischer Reihenfolge vor dem aktuellen der
+% durchlaufenenen Liste, so wird dieser davor eingefügt. Dabei muss der Fall,
+% dass das Element der erste Eintrag in der temporären Liste \cs{@tempb} ist,
+% eine Sonderbehandlung erfolgen. Anschließend wird \cs{@tud@list@sortedtrue}
+% gesetzt.
% \begin{macrocode}
-\RequirePackage{listings}[2014/03/04]
-\lstdefinestyle{tudscr}{%
- basicstyle=\ttfamily\setstretch{1},%
- keywordstyle=,%
- columns=fullflexible,keepspaces,%
- aboveskip=.5\baselineskipglue,%
- belowskip=.5\baselineskipglue,%
- language=[LaTeX]TeX,%
- texcl,%
-}
+ \expandafter\ifnum\pdfstrcmp{#1}{\@tempa}<\z@\relax%
+ \ifx\@tempb\@empty%
+ \expandafter\edef\expandafter\@tempb\expandafter{%
+ #1,\@tempa%
+ }%
+ \else%
+ \expandafter\edef\expandafter\@tempb\expandafter{%
+ \@tempb,#1,\@tempa%
+ }%
+ \fi%
+ \@tud@list@sortedtrue%
+ \else%
% \end{macrocode}
-% Mit dem Paket \pkg{silence} lassen sich ungewollte bzw. lästige Warnungen
-% deaktivieren.
+% Ist Eintrag in alphabetischer Reihenfolge nach dem aktuellen der geprüften
+% Liste, so wird dieser (noch) nicht eingefügt. Der Sonderfall des ersten
+% Elementes wird abgedeckt.
% \begin{macrocode}
-\RequirePackage{silence}[2012/07/02]
+ \ifx\@tempb\@empty%
+ \expandafter\edef\expandafter\@tempb\expandafter{\@tempa}%
+ \else%
+ \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
+ \fi%
+ \fi%
+ \fi%
+ }%
% \end{macrocode}
-% Das Pakete wird genutzt, um externer Dateien nur zu kompilieren, wenn dies
-% aufgrund einer Änderung auch notwendig ist.
+% Wurde der Eintrag nach dem Durchlaufen der Liste nicht eingefügt, so erfolgt
+% dies hier am Ende der Liste.
% \begin{macrocode}
-\RequirePackage{filemod}[2011/09/19]
+ \if@tud@list@sorted\else%
+ \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,#1}%
+ \fi%
% \end{macrocode}
-% Sollte \pkg{auto-pst-pdf} aktiv sein, so wird das Laden von \pkg{todonotes}
-% unterdrückt, da dieses wiederum das Paket \pkg{tikz} lädt, was zu Problem bei
-% der automatisierten Erstellung von \env{pstricks}"=Grafiken führt.
+% Die temporäre Liste \cs{@tempb} wird auf \cs{tud@templist} überschrieben.
% \begin{macrocode}
-\RequirePackage{ifpdf}[2011/01/30]
-\ifpdf
- \PassOptionsToPackage{colorinlistoftodos,obeyFinal,color=HKS92!10}{todonotes}
- \RequirePackage{todonotes}[2012/07/25]
-\else
- \TUDoptions{ToDo=false}
-\fi
+ \let\tud@templist\@tempb%
+ \fi%
+}
% \end{macrocode}
-% Um die \cs{write18} sowohl für Windows als auch für unixoide Betriebssysteme
-% nutzen zu können, wird das Paket \pkg{ifplatform} geladen. Damit dieses nicht
-% allzu lästig ist, wird mithilfe von \pkg{silence} die normalerweise erzeugte
-% Warnung der nicht aktivierten Option \opt{shell escape} deaktiviert.
+% \end{macro}^^A \if@tud@list@sorted
+% \end{macro}^^A \tud@templist
+% \end{macro}^^A \tud@list@@sort
+% \end{macro}^^A \tud@list@sort
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \subsubsection{Zusätzliche Pakete für das Paket \pkg{tudscrtutorial}}
+%
+% Mit dem Paket \pkg{scrwfile} lassen sich Probleme mit zu wenig verfügbaren
+% Streams für das Schreiben externer Datein beheben. Hintergrund ist die
+% Verwendung des Paketes \pkg{glossaries} in einem der Tutorials, welches eine
+% Vielzahl solcher Streams benötigt. Das Paket \pkg{morewrites} hat keinen
+% Einfluss auf \pkg{glossaries}.
% \begin{macrocode}
-\WarningFilter*{ifplatform}{^^J \space\space\space shell escape is disabled}
-\RequirePackage{ifplatform}[2010/10/22]
+\RequirePackage{scrwfile}[2013/08/05]
+% \end{macrocode}
+% Die Umgebungen \env{Preamble}, \env{Trunk} und \env{Hint} sowie deren
+% Varianten nutzen das Paket \pkg{filecontents}, um ihren Inhalt in eine
+% temporäre Datei zu schreiben und diese direkt mit dem Paket \pkg{listings}
+% darzustellen sowie ggf. den Quelltext auszuführen. Beim Überschreiben einer
+% Datei wird für gewöhnlich eine Warnung erzeugt. Mit dem Paket \pkg{silence}
+% wird diese innerhalb der genannten Umgebungen deaktiviert.
+% \begin{macrocode}
+\RequirePackage{silence}[2012/07/02]
+\RequirePackage{filecontents}[2011/10/08]
+\WarningFilter[Tutorial]{latex}{Overwriting file}%
+\WarningFilter[Tutorial]{latex}{Writing file}%
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+%<*class>
+% \fi
+%
+% \subsubsection{Debug-Traces für die Klasse \cls{tudscrmanual}}
+%
+% Ab und an ist es beim Erstellen des Handbuchs recht sinnvoll, verschiedene
+% Dinge direkt im Logfile zu überprüfen. Hierfür werden folgend einige Befehle
+% zur Ablaufkontrolle definiert.
+%
+% \begin{macro}{\tracinglabels}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% \begin{macro}{\tud@trace@lbl@created@add}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% \begin{macro}{\tud@trace@lbl@missing@add}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% \begin{macro}{\tud@trace@lbl@created@list}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% \begin{macro}{\tud@trace@lbl@missing@list}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% Mit \cs{tracinglabels} wird die Nachverfolgung aller erstellten Labels in der
+% Dokumentation aktiviert werden. Die Label werden zum einen direkt im Logfile
+% ausgegeben und am Ende des selbigen in einer sortierten Liste ausgegeben. Die
+% Sternversion des Befehls erzeugt keine sortierte Liste. Über das optionale
+% Argument kann mit verschiedenen Schlüsseln zudem eingestellt werden, ob alle
+% Label (\val{all}) oder nur die erstellten (\val{created}) beziehungsweise die
+% fehlenden (\val{missing}) nachverfolgt werden sollen.
+% \begin{macrocode}
+\newcommand*\tud@trace@lbl@created@add[1]{}
+\newcommand*\tud@trace@lbl@missing@add[1]{}
+\NewDocumentCommand\tracinglabels{sO{missing}}{%
+ \newcommand*\tud@trace@lbl@created@list{}%
+ \newcommand*\tud@trace@lbl@missing@list{}%
+ \@tempswafalse%
+ \ifstr{#2}{created}{\@tempswatrue}{}%
+ \ifstr{#2}{all}{\@tempswatrue}{}%
+ \if@tempswa%
+ \renewcommand*\tud@trace@lbl@created@add[1]{%
+ \typeout{%
+ +++++ label created: ##1 on page \thepage%
+ }%
+ \xifinlist{##1}{\tud@trace@lbl@created@list}{}{%
+ \listxadd\tud@trace@lbl@created@list{##1}%
+ }%
+ }%
+ \IfBooleanF{#1}{%
+ \AfterEndDocument{%
+ \typeout{+++++ labels created (sorted) +++++}%
+ \tud@list@sort\tud@trace@lbl@created@list%
+ \forlistloop\typeout{\tud@trace@lbl@created@list}%
+ }%
+ }%
+ \fi%
+ \@tempswafalse%
+ \ifstr{#2}{missing}{\@tempswatrue}{}%
+ \ifstr{#2}{all}{\@tempswatrue}{}%
+ \if@tempswa%
+ \renewcommand*\tud@trace@lbl@missing@add[1]{%
+ \typeout{%
+ +++++ label missing: ##1 on page \thepage%
+ }%
+ \xifinlist{##1}{\tud@trace@lbl@missing@list}{}{%
+ \listxadd\tud@trace@lbl@missing@list{##1}%
+ }%
+ }%
+ \IfBooleanF{#1}{%
+ \AfterEndDocument{%
+ \typeout{+++++ labels missing (sorted) +++++}%
+ \tud@list@sort\tud@trace@lbl@missing@list%
+ \forlistloop\typeout{\tud@trace@lbl@missing@list}%
+ }%
+ }%
+ \fi%
+}
+\@onlypreamble\tracinglabels
+% \end{macrocode}
+% \end{macro}^^A \tud@trace@lbl@missing@list
+% \end{macro}^^A \tud@trace@lbl@created@list
+% \end{macro}^^A \tud@trace@lbl@missing@add
+% \end{macro}^^A \tud@trace@lbl@created@add
+% \end{macro}^^A \tracinglabels
+% \begin{macro}{\tracingmarkup}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% \begin{macro}{\tud@trace@markup}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% Durch die Verwendung von \cs{tracinglabels} wird die Nachverfolgung aller
+% Aufrufe von \cs{Process@@MarkupDeclare} und \cs{Process@@MarkupInline} durch
+% \cs{Process@Markup} inklusive all ihrer Argumente aktiviert. Dies ist für die
+% Kontrolle des erzeugten Markups sinnvoll.
+% \begin{macrocode}
+\newcommand*\tud@trace@markup[2]{}
+\newcommand*\tracingmarkup{%
+ \renewcommand*\tud@trace@markup[2]{%
+ \typeout{+++++ markup ##1 on page \thepage^^J##2}%
+ }%
+}
+\@onlypreamble\tracingmarkup
+% \end{macrocode}
+% \end{macro}^^A \tud@trace@markup
+% \end{macro}^^A \tracingmarkup
+% \begin{macro}{\tracingbundle}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% \begin{macro}{\tud@trace@bdl@add}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% \begin{macro}{\tud@trace@bdl@list}
+% \changes{v2.05}{2015/10/29}{neu}^^A
+% Wird \cs{tracingbundle} in der Präambel verwendet, werden alle direkt oder
+% indirekt durch \cs{Process@Markup} im Handbuch erzeugten Querverweise auf
+% Klassen oder Pakete aus dem \TUDScript-Bundle nachverfolgt und am Ende des
+% Logfiles ausgegeben. Damit kann im Zweifel übeprüft werden, ob eventuell eine
+% falsche Referenz genutzt wurde, wodurch u.\,U. Querverweise oder Einträge in
+% Index und Änderungsliste fehlerhaft werden oder erst gar nicht erscheinen.
+% \begin{macrocode}
+\newcommand*\tud@trace@bdl@add[1]{}
+\newcommand*\tud@trace@bdl@list{}
+\newcommand*\tracingbundle{%
+ \renewcommand*\tud@trace@bdl@add[1]{%
+ \begingroup%
+ \def\Class####1{class:####1}%
+ \def\Package####1{package:####1}%
+ \xifinlist{##1}{\tud@trace@bdl@list}{}{%
+ \listxadd\tud@trace@bdl@list{##1}%
+ }%
+ \endgroup%
+ }%
+ \AfterEndDocument{%
+ \typeout{+++++ bundle list +++++}%
+ \forlistloop\typeout{\tud@trace@bdl@list}%
+ }%
+}
+\@onlypreamble\tracingbundle
% \end{macrocode}
+% \end{macro}^^A \tud@trace@bdl@list
+% \end{macro}^^A \tud@trace@bfundle
+% \end{macro}^^A \tracingbundle
+%
+% \iffalse
+%</class>
+% \fi
+%
+% \subsubsection{Anpassungen für das Paket \pkg{hyperref} und Querverweise}
+%
% Das Paket \pkg{hyperref} wird für alle möglichen Links und Querverweise
% geladen, \pkg{bookmark} verbesssert das Erstellen der Outline-Einträge.
% \begin{macrocode}
\PassOptionsToPackage{hyperindex=false,colorlinks,linkcolor=blue}{hyperref}
\PassOptionsToPackage{open,openlevel=0}{bookmark}
-\AtBeginDocument{%
- \RequirePackage{hyperref}[2012/11/06]
- \RequirePackage{bookmark}[2011/12/02]
% \end{macrocode}
-% Es folgen einige Befehle, die an das Paket \pkg{hyperref} gekoppelt sind.
+% Es folgen einige Befehle, die an das Paket \pkg{hyperref} gekoppelt sind.
+% Sobald das Paket geladen wurde, werden die Makros mit der jeweiligen
+% Funktionalität definiert.
+% \begin{macrocode}
+\AfterPackage*{hyperref}{%
+% \end{macrocode}
+% Die Bezeichner für die Abschnittsebenen werden umbenannt.
+% \begin{macrocode}
+ \renewcaptionname{ngerman}{\sectionautorefname}{Unterkapitel}%
+ \renewcaptionname{ngerman}{\subsectionautorefname}{Abschnitt}%
+ \renewcaptionname{ngerman}{\subsubsectionautorefname}{Unterabschnitt}%
+% \end{macrocode}
% \begin{macro}{\Email}
-% Hyperlink für die Angabe einer E-Mail-Adresse.
+% Hiermit wird ein Hyperlink für eine E"~Mail-Adresse erzeugt.
% \begin{macrocode}
- \newcommand*\Email[1]{\href{mailto:#1}{\nolinkurl{#1}}}
+ \newcommand*\Email[1]{\href{mailto:#1}{\nolinkurl{#1}}}%
% \end{macrocode}
% \end{macro}^^A \Email
-% Die Bezeichner für die Abschnittsebenen werden umbenannt.
+% \begin{macro}{\tudhyperdef}
+% \changes{v2.02}{2014/10/27}{neu}^^A
+% \begin{macro}{\tudhyperref}
+% \changes{v2.02}{2014/10/27}{neu}^^A
+% \begin{macro}{\tud@manualname}
+% \changes{v2.05}{2015/1q/19}{neu}^^A
+% Diese Befehle dienen sowohl zum Definieren von Textankern im Handbuch als
+% auch zum Referenzieren auf diese. Bei der Erstellung des Ankers mit
+% \cs{tudhyperdef} wird zusätzlich auch noch ein Label (\cs{label}) erzeugt.
+% Der Anker wird mit \cs{Hy@raisedlink}~-- wie es auch bei pkg{hyperref}-Labels
+% geschieht~-- über die Grundlinie gehoben. Die Sternversion sollte nach
+% Überschriften verwendet werden und verschiebt die vertikale Position des
+% Ankers noch weiter nach oben.
+% \begin{macrocode}
+ \newcommand*\tud@manualname{tudscr}%
+%<*class>
+ \NewDocumentCommand\tudhyperdef{sm}{%
+ \IfBooleanTF{#1}{%
+ \raisebox{4\baselineskip}[0pt][0pt]{\hyperdef{\tud@manualname}{#2}{}}%
+ \par\nobreak\vskip\dimexpr-\parskip-\baselineskip\relax%
+ \@afterindentfalse\@afterheading%
+ }{%
+ \Hy@raisedlink{\hyperdef{\tud@manualname}{#2}{}}\ignorespaces%
+ }%
+ \label{#2}%
+ \tud@trace@lbl@created@add{#2}%
+ }%
+ \newcommand*\tudhyperref[2]{\hyperref{}{\tud@manualname}{#1}{#2}}%
+%</class>
+% \end{macrocode}
+% Aus einem Tutorial erfolgen alle Querverweise mit \cs{tudhyperref} auf das
+% Anwenderhandbuch \enquote{tudscr} im übergeordneten Ordner.
% \begin{macrocode}
- \renewcaptionname{ngerman}{\sectionautorefname}{Unterkapitel}
- \renewcaptionname{ngerman}{\subsectionautorefname}{Abschnitt}
- \renewcaptionname{ngerman}{\subsubsectionautorefname}{Unterabschnitt}
+%<*package>
+ \newcommand*\tudhyperref[2]{%
+ \hyperref{../\tud@manualname.pdf}{\tud@manualname}{#1}{#2}%
+ }%
+%</package>
% \end{macrocode}
+% \end{macro}^^A \tud@manualname
+% \end{macro}^^A \tudhyperref
+% \end{macro}^^A \tudhyperdef
% \begin{macro}{\autorefname}
-% \begin{macro}{\@autorefname}
-% \begin{macro}{\@@autorefname}
+% \begin{macro}{\auto@refname}
+% \begin{macro}{\auto@@refname}
% Der Befehl \cs{autorefname} dient dazu, den Verweistyp beziehungsweise den
% Bezeichner des aktuellen oder optional zu einem speziellen Label ohne die
% dazugehörige Nummerierung zu erhalten. Auf der Seite LaTeX Stack Exchange%
-%\footnote{\url{http://tex.stackexchange.com/q/33776/}} wurde das Prinzip
+% \footnote{\url{http://tex.stackexchange.com/q/33776/}} wurde das Prinzip
% vorgestellt und hier übernommen.
% \begin{macrocode}
\newcommand*\autorefname[1][current]{%
\ifstr{#1}{current}{%
\expandafter\HyPsd@@autorefname\@currentHref\@nil%
}{%
- \@autorefname\HyPsd@@autorefname{#1}%
+ \auto@refname\HyPsd@@autorefname{#1}%
}%
\unskip\xspace%
- }
- \newcommand*\@autorefname[2]{%
+ }%
+ \newcommand*\auto@refname[2]{%
\expandafter\ifx\csname r@#2\endcsname\relax%
??%
\else%
- \expandafter\expandafter\expandafter\@@autorefname%
+ \expandafter\expandafter\expandafter\auto@@refname%
\csname r@#2\endcsname{}{}{}{}\@nil#1\@nil%
\fi%
- }
- \newcommand*\@@autorefname{}
- \def\@@autorefname#1#2#3#4#5\@nil#6\@nil{#6#4.\@nil}
+ }%
+ \newcommand*\auto@@refname{}%
+ \def\auto@@refname#1#2#3#4#5\@nil#6\@nil{#6#4.\@nil}%
% \end{macrocode}
-% \end{macro}^^A \@@autorefname
-% \end{macro}^^A \@autorefname
+% \end{macro}^^A \auto@@refname
+% \end{macro}^^A \auto@refname
% \end{macro}^^A \autorefname
-% \begin{macro}{\manualhyperdef}
-% \changes{v2.02}{2014/10/27}{neu}^^A
-% \begin{macro}{\manualhyperref}
-% \changes{v2.02}{2014/10/27}{neu}^^A
-% Diese beiden Befehle dienen zum Defnieren von Textankern im Handbuch und zum
-% Referenzieren auf diese. Bei der Erstelung des Ankers mit \cs{manualhyperdef}
-% wird zusätzlich auch noch ein Label (\cs{label}) erzeugt. Die Sternversion
-% des Befehls unterdrückt dies. Der Anker wird mit \cs{Hy@raisedlink}~-- wie es
-% auch bei normalen \pkg{hyperref}-Labels geschieht~-- über die Grundlinie
-% gehoben. Die Version mit Apostroph kann nach Überschriften verwendet werden
-% und verschiebt die vertikale Position des Ankers noch weiter nach oben.
-% \begin{macrocode}
-%<*class>
- \NewDocumentCommand\manualhyperdef{st'm}{%
- \IfBooleanTF{#2}{%
- \raisebox{4\baselineskip}[0pt][0pt]{\hyperdef{\jobname}{#3}{}}%
- \par\nobreak\vskip\dimexpr-\parskip-\baselineskip\relax%
- \@afterindentfalse\@afterheading%
- }{%
- \Hy@raisedlink{\hyperdef{\jobname}{#3}{}}%
- \ignorespaces%
- }%
- \IfBooleanF{#1}{\label{#3}}%
- }
- \newcommand*\manualhyperref[2]{\hyperref{}{\jobname}{#1}{#2}}
-%</class>
-% \end{macrocode}
-% Aus einem Tutorial erfolgen alle Querverweise mit \cs{manualhyperref} auf das
-% Anwenderhandbuch \enquote{tudscr}.
+% Damit sind die Ausführungen für das Paket \pkg{hyperref} beendet.
% \begin{macrocode}
-%<*package>
- \newcommand*\manualhyperref[2]{\hyperref{../tudscr}{tudscr}{#1}{#2}}
-%</package>
+}
% \end{macrocode}
-% \end{macro}^^A \manualhyperref
-% \end{macro}^^A \manualhyperdef
-% Damit sind die Ausführungen für das Paket \pkg{hyperref} \emph{fast} beendet.
-% Etwas später wird noch der Befehl \cs{pdfexpandableoutline} definiert.
+% Sollte das Paket \pkg{hyperref} nicht geladen werden, wird eine Rückfallebene
+% definiert, wodurch die Klasse dennoch verwendet werden kann.
% \begin{macrocode}
-}
+\TUD@UnwindPackage{hyperref}{%
% \end{macrocode}
-% Für die Erstellung des Indexes wird das Paket \pkg{imakeidx} zusammen mit
-% \pkg{xindy} verwendet. Zuerst ein paar kleinere Einstellungen für das Layout.
+% Zunächst die direkt innerhalb der Dokumentation verwendeten Befehle nebst
+% dazugehöriger Warnung.
+% \begin{macro}{\hypersetup}
+% \begin{macro}{\hyperdef}
+% \begin{macro}{\hyperref}
+% \begin{macro}{\tud@hyperref@a}
+% \begin{macro}{\tud@hyperref@b}
+% \begin{macro}{\href}
+% \begin{macro}{\hyperpage}
+% \begin{macro}{\autoref}
+% \begin{macro}{\texorpdfstring}
+% \begin{macro}{\phantomsection}
% \begin{macrocode}
-\PassOptionsToPackage{xindy,splitindex}{imakeidx}
-\RequirePackage{imakeidx}[2013/07/11]%
-\indexsetup{%
%<*class>
- level=\addsec,%
+ \ClassWarningNoLine{tudscrmanual}%
%</class>
%<*package>
- level=\subsection*,%
-%</package>
- noclearpage,firstpagestyle=headings,headers={\indexname}{\indexname},%
- othercode={\renewcommand*\subitem{\@idxitem\hspace*{15\p@}}}%
-}
-\newcommand*\xdyopt{-M tudscrman-temp.xdy -L german-din}
-% \end{macrocode}
-% \begin{macro}{\tud@write@i}
-% \changes{v2.02}{2014/10/22}{neu}^^A
-% \begin{macro}{\tud@write@ii}
-% \changes{v2.02}{2014/11/02}{neu}^^A
-% \begin{macro}{\tud@read}
-% \changes{v2.02}{2014/08/19}{neu}^^A
-% Für die Erstellung der Indizes wird zum Sortieren das Programm \pkg{xindy}
-% genutzt. Für dieses wird eine eigene Stildatei verwendet, welche zur Laufzeit
-% erzeugt wofür zuerst ein Ausgabestream reserviert wird.
-% \begin{macrocode}
-\newcommand*\tud@write@i{}
-\newwrite\tud@write@i
-% \end{macrocode}
-% Für die Tutorials werden später zusätzlich noch ein weiterer Ausgabe- sowie
-% ein Eingabestream benötigt, die hier gleich mit initilaisiert werden.
-% \begin{macrocode}
-%<*package>
-\newcommand*\tud@write@ii{}
-\newwrite\tud@write@ii
-\newcommand*\tud@read{}
-\newread\tud@read
+ \PackageWarningNoLine{tudscrtutorial}%
%</package>
+ {%
+ It is strongly recommended to load package `hyperref'.\MessageBreak%
+ Nevertheless, essential commands are rudimentarily\MessageBreak%
+ defined. At least the package `url' is loaded.%
+ }%
+ \RequirePackage{url}[2013/09/16]%
+ \providecommand*\hypersetup[1]{}%
+ \providecommand*\hyperdef[3]{\label{#1.#2}#3}%
% \end{macrocode}
-% \end{macro}^^A \tud@read
-% \end{macro}^^A \tud@write@ii
-% \end{macro}^^A \tud@write@i
-% Nachfolgend wird die zu erstellenden \pkg{xindy}-Stildatei kurz beschrieben.
-% \begin{macrocode}
-\openout\tud@write@i=tudscrman-temp.xdy
-% \end{macrocode}
-% Als erstes wird Standard-\LaTeX-Modul geladen.
-% \begin{macrocode}
-\write\tud@write@i{(require "texindy.xdy")}
-% \end{macrocode}
-% Leider lässt sich für Seitenzahlbereiche via \val{:attr} (noch) kein Markup
-% für angehängte \enquote{f.} sowie \enquote{ff.} einstellen. Diese würden
-% deshalb bei kursiven oder fetten Seitenzahlen trotzdem in normaler Schrift
-% erscheinen, weshalb auf die Auszeichnung folgender Seiten verzichtet wird.
-% \begin{macrocode}
-%\write\tud@write@i{(require "ff-ranges.xdy")}
-% \end{macrocode}
-%
-% Seitenbereiche werden sofort zusammengefasst, wobei als Trennzeichen ein
-% Halbgeviertstrich verwendet wird.
-% \begin{macrocode}
-\write\tud@write@i{%
-(define-location-class^^J%
-\space\space "arabic-page-numbers" ("arabic-numbers") :min-range-length 1^^J%
-)%
-}
-\write\tud@write@i{(markup-range :sep "--")}
-% \end{macrocode}
-% Alle Argumente in eckigen Klammern werden ignoriert. Dies wird bei einigen
-% Indexbefehlen genutzt, um die nicht beachteten RegExp-Regeln auszugleichen,
-% siehe den nächsten Absatz.
-% \begin{macrocode}
-\write\tud@write@i{%
-(merge-rule "\@backslashchar[(.*)\@backslashchar]" "" :eregexp)%
-}
-% \end{macrocode}
-% Innerhalb ausgewählter Auszeichnungs- und Textbefehle sollten die Befehle
-% selbst, nicht jedoch die Argumente verworfen werden. Leider werden die
-% manuell erstellten RegExp-Regeln durch \texttt{texindy} zu spät genutzt
-% (\url{http://sourceforge.net/p/xindy/bugs/22/}).
-% \begin{macrocode}
-%\write\tud@write@i{(merge-rule "\\hyperidx\{(.*)\}\{(.*)\}" "/2" :eregexp)}
-%\write\tud@write@i{(merge-rule "\\hologo\{(.*)\}" "/1" :eregexp)}
-%\write\tud@write@i{(merge-rule "\\texttt\{(.*)\}" "/1" :eregexp)}
-%\write\tud@write@i{(merge-rule "\\textsbn\{(.*)\}" "/1" :eregexp)}
-%\write\tud@write@i{(merge-rule "\\textsbs\{(.*)\}" "/1" :eregexp)}
-% \end{macrocode}
-% Es werden die Attribute \emph{declare} mit der Abkürzung \emph{!} sowie
-% \emph{important} mit der Abkürzung \emph{?} und \emph{default} definiert,
-% welche hierarchisch gleichgestellt sind.
-% \begin{macrocode}
-\write\tud@write@i{%
-(define-attributes (("declare" "!" "important" "?" "deprecated" "default")))%
-}
-% \end{macrocode}
-% Eine Alternative wäre, diese in der Hierarchie zu unterscheiden, allerdings
-% war eine Bildung von zufriedenstellenden Seitenbereichen dabei nicht möglich
-% und wurde deshalb verworfen.
-% \begin{macrocode}
-%\write\tud@write@i{(markup-attribute-group-list :sep ", ")}
-%\write\tud@write@i{%
-%(define-attributes (("declare" "!") ("important" "?")("default")))%
-%}
-% \end{macrocode}
-% Einträge, die als wichtig oder als Deklaration festgelegt wurden, könnten
-% auch für normale Indexeinträge zur Bereichsbildung verwendet werden.
-% Allerdings führt dies auch zur Erzeugung redundanter Einträge, falls es sich
-% bei den Sondereinträgen bereits um einen Seitenbereich handelt.
-% \begin{macrocode}
-%\write\tud@write@i{(merge-to "declare" "default")}
-%\write\tud@write@i{(merge-to "!" "default")}
-%\write\tud@write@i{(merge-to "important" "default")}
-%\write\tud@write@i{(merge-to "?" "default")}
-% \end{macrocode}
-% Hier erfolgt die Definition der Auszeichnugen der Attribute. Deklarationen
-% werden fett gedruckt, wichtige Einträge erscheinen kursiv. Außerdem wird ein
-% entsprechnder Link auf die Seite eingefügt.
-% \begin{macrocode}
-\write\tud@write@i{%
-(markup-locref^^J%
-\space\space :attr "declare"^^J%
-\space\space :open "\string\textbf{\string\hyperpage{"^^J%
-\space\space :close "}}"^^J%
-)%
-}
-\write\tud@write@i{%
-(markup-locref^^J%
-\space\space :attr "!"^^J%
-\space\space :open "\string\textbf{\string\hyperpage{"^^J%
-\space\space :close "}}"^^J%
-)%
-}
-\write\tud@write@i{%
-(markup-locref^^J%
-\space\space :attr "important"^^J%
-\space\space :open "\string\textsl{\string\hyperpage{"^^J%
-\space\space :close "}}"^^J%
-)%
-}
-\write\tud@write@i{%
-(markup-locref^^J%
-\space\space :attr "?"^^J%
-\space\space :open "\string\textsl{\string\hyperpage{"^^J%
-\space\space :close "}}"^^J%
-)%
-}
-\write\tud@write@i{%
-(markup-locref^^J%
-\space\space :attr "default"^^J%
-\space\space :open "\string\hyperpage{"^^J%
-\space\space :close "}"^^J%
-)%
-}
-% \end{macrocode}
-% Für die Änderungsliste wird ein separates Attribut erstellt. Mit diesem wird
-% es möglich, die Seitenangabe für Optionen und Befehle zu unterdrücken, welche
-% aus \TUDScript entfernt wurden oder veraltet sind, wenn mit \cs{Replace} eine
-% Alternative eingeführt wurde. Dafür wird der Befehl \cs{deprecatedhyperpage}
-% verwendet, welcher im Bedarfsball auf \cs{@gobble} gesetzt wird.
-% \begin{macrocode}
-\write\tud@write@i{%
-(markup-locref^^J%
-\space\space :attr "deprecated"^^J%
-\space\space :open "\string\deprecatedhyperpage{"^^J%
-\space\space :close "}"^^J%
-)%
-}
-% \end{macrocode}
-% Punkte zwischen Eintrag und Seitenzahl.
-% \begin{macrocode}
-\write\tud@write@i{%
- (markup-locclass-list :open "\string\,\string\dotfill\string\,")%
-}
-% \end{macrocode}
-% Dieser Querverweistyp wird speziell im allgemeinen Index verwendet, um auf
-% einen Spezialindex zu verweisen.
-% \begin{macrocode}
-\write\tud@write@i{(define-crossref-class "seeidx")}
-\write\tud@write@i{%
-(markup-crossref-list^^J%
-\space\space :class "seeidx" :open "\string\seeidx{" :sep "; " :close "}{}"^^J%
-)%
-}
-% \end{macrocode}
-% Damit ist die \pkg{xindy}-Stildatei fertig.
-% \begin{macrocode}
-\closeout\tud@write@i
-% \end{macrocode}
-% Nun können die einzelnen Indizes erstellt werden.
+% Der Befehl \cs{hyperref} existiert in zwei Varianten. Entweder mit einem
+% optionalen und einem obligatorischen Argument oder mit vier Argumenten.
% \begin{macrocode}
+ \providerobustcmd*\hyperref{%
+ \kernel@ifnextchar[{\tud@hyperref@a}{\tud@hyperref@b}%
+ }
+ \newcommand*\tud@hyperref@a[2][]{#2}
+ \newcommand*\tud@hyperref@b[4]{#4}
+ \providecommand*\href[3][]{#3}%
+ \providecommand*\hyperpage[1]{#1}%
+% \end{macrocode}
+% Der Befehl \cs{autoref} wird auch in der Sternversion genutzt.
+% \begin{macrocode}
+ \providecommand*\autoref{??\xspace\kernel@ifstar{\ref}{\ref}}%
+% \end{macrocode}
+% Auch \cs{texorpdfstring} und \cs{phantomsection} werden vorgehalten.
+% \begin{macrocode}
+ \providecommand*\phantomsection{}%
+ \providecommand*\texorpdfstring[2]{#1}%
+% \end{macrocode}
+% \end{macro}^^A \phantomsection
+% \end{macro}^^A \texorpdfstring
+% \end{macro}^^A \autoref
+% \end{macro}^^A \hyperpage
+% \end{macro}^^A \href
+% \end{macro}^^A \tud@hyperref@b
+% \end{macro}^^A \tud@hyperref@a
+% \end{macro}^^A \hyperref
+% \end{macro}^^A \hyperdef
+% \end{macro}^^A \hypersetup
+% \begin{macro}{\partautorefname}
+% \begin{macro}{\chapterautorefname}
+% \begin{macro}{\sectionautorefname}
+% \begin{macro}{\subsectionautorefname}
+% \begin{macro}{\subsubsectionautorefname}
+% Die notwendigen, lokalen Bezeichner der Gliederungsebenen.
+% \begin{macrocode}
+ \tud@locale@german{\partautorefname}{Teil}%
+ \tud@locale@german{\chapterautorefname}{Kapitel}%
+ \tud@locale@german{\sectionautorefname}{Unterkapitel}%
+ \tud@locale@german{\subsectionautorefname}{Abschnitt}%
+ \tud@locale@german{\subsubsectionautorefname}{Unterabschnitt}%
+ \tud@locale@english{\partautorefname}{Part}%
+ \tud@locale@english{\chapterautorefname}{chapter}%
+ \tud@locale@english{\sectionautorefname}{section}%
+ \tud@locale@english{\subsectionautorefname}{subsection}%
+ \tud@locale@english{\subsubsectionautorefname}{subsubsection}%
+% \end{macrocode}
+% \end{macro}^^A \subsubsectionautorefname
+% \end{macro}^^A \subsectionautorefname
+% \end{macro}^^A \sectionautorefname
+% \end{macro}^^A \chapterautorefname
+% \end{macro}^^A \partautorefname
+% Anschließend folgen die für Klasse und Paket eigens definierten Befehle.
+% \begin{macrocode}
+ \providecommand*\Email[1]{\mbox{#1}}%
%<*class>
-\makeindex[title={Allgemeiner Index},options=\xdyopt]%
-%</class>
-\makeindex[title={Klassen- und Paketoptionen},name=options,options=\xdyopt]%
-\makeindex[%
- title={Umgebungen, Befehle und Seitenstile},name=macros,options=\xdyopt%
-]%
-%<*class>
-\makeindex[title={Umgebungs- und Befehlsparameter},name=keys,options=\xdyopt]%
-\makeindex[title={Sprachabh\"angige Bezeichner},name=terms,options=\xdyopt]%
-\makeindex[title={Schriftelemente},name=fonts,options=\xdyopt]%
-\makeindex[title={Farben},name=colors,options=\xdyopt]%
-%</class>
-\makeindex[title={Klassen, Pakete und Dateien},name=files,options=\xdyopt]%
-%<*class>
-\makeindex[title={\"Anderungsliste},name=changelog,columns=1,options=\xdyopt]%
+ \ProvideDocumentCommand\tudhyperdef{sm}{\label{#2}}%
%</class>
-% \end{macrocode}
-%
-% \iffalse
-%<*class>
-% \fi
-%
-% \subsubsection{Pakete für die Klasse \cls{tudscrman}}
-%
-% Das Paket \pkg{enumitem} erlaubt das Beeinflussen der Standardlisten und die
-% Ableitung neuer Listen aus diesen. mit \cs{setlist\{noitemsep\}} werden die
-% zusätzlichen Zwischenräume innerhalb der Listen beseitigt.
-% \begin{macrocode}
-\RequirePackage{enumitem}[2011/09/28]
-\setlist{noitemsep}
-% \end{macrocode}
-% Das Paket \pkg{ellipsis} sorgt für korrekte Auslassungpunkte.
-% \begin{macrocode}
-\AtBeginDocument{
- \RequirePackage{ellipsis}[2004/9/28]
- \let\ellipsispunctuation\relax
+ \providecommand*\tudhyperref[2]{#2}%
+ \providecommand*\autorefname[1][]{??\xspace}%
}
% \end{macrocode}
-% Mit Hilfe von \pkg{tabularx} können Tabellen bestimmter Breite und
-% automatisch berechneten Spaltenbreiten gesetzt werden.
-% \begin{macrocode}
-\RequirePackage{tabularx}[1999/01/07]
-% \end{macrocode}
-% Mit \pkg{ragged2e} wird~-- falls benötigt~-- die Silbentrennung im
-% Flattersatz aktiviert.
-% \begin{macrocode}
-\RequirePackage{ragged2e}[2009/05/21]
-% \end{macrocode}
-% Die Fußnoten werden nicht mit jedem Kapitel zurückgesetzt.
-% \begin{macrocode}
-\RequirePackage{chngcntr}[2009/09/02]
-\counterwithout{footnote}{chapter}
-% \end{macrocode}
-% Das Paket wird für die Erstellung von Tabellen verwendet.
-% \begin{macrocode}
-\RequirePackage{booktabs}[2005/04/14]
-% \end{macrocode}
+% \begin{macro}{\fullref}
% Verbesserte Referenzierungen auf Seiten.
% \begin{macrocode}
-\RequirePackage{varioref}[2011/10/02]%
+\RequirePackage{varioref}[2011/10/02]
\renewcommand*\fullref[1]{\hyperref[#1]{\autoref*{#1} \vpageref{#1}}}
% \end{macrocode}
-% Erstellen von Grafiken.
+% \end{macro}^^A \fullref
+% \begin{macro}{\hrfn}
+% \changes{v2.02}{2014/08/16}{neu}^^A
+% \changes{v2.04}{2015/02/18}{Schriftgröße mit \cs{scalebox}}^^A
+% Mit diesem Makro können Hyperlinks im Fließtext erzeugt werden, welche
+% zusätzlich noch die dazugeörige URL als Fußnote anzeigen.
% \begin{macrocode}
-\RequirePackage{tikz}[2013/12/13]
+\newcommand*\hrfn[2]{%
+ \href{#1}{\trim@spaces{#2}}%
+ \footnote{%
+ \scalebox{0.95}{%
% \end{macrocode}
-% Einbinden von ganzseitigen PDF"~Dokumenten als Beispiel im Handbuch.
+% Die Box wird verwendet, um zu lange URLs ausreichend zu verkleinern. Außerdem
+% werden Unterstriche entschärft, die im Zweifel zu Fehlern führen können.
% \begin{macrocode}
-\RequirePackage{pdfpages}[2013/08/25]
+ \def\_{_}%
+ \edef\@tempa{#1}%
+ \strut\expandafter\url\expandafter{\@tempa}%
+ }%
+ }%
+}
% \end{macrocode}
-% Typographisch saubere Einheiten.
-% \begin{macrocode}
-\RequirePackage{units}[1998/08/04]
+% \end{macro}^^A \hrfn
+% Wenn \pkg{hyperref} geladen wird, erzeugt das Paket \pkg{babel} innerhalb von
+% \cs{pdfstringdef} ziemlich viele und absolut unnötige Infos in der Form
+% \texttt{Package babel Info: Redefining ngerman shorthand}. Dieser Patch dient
+% zum Unterdrücken dieser Infos.
+% \begin{macrocode}
+\AfterPackage*{hyperref}{%
+ \patchcmd{\pdfstringdef}{\csname HyPsd@babel@}{%
+ \let\bbl@info\@gobble\csname HyPsd@babel@%
+ }{}{\tud@patch@wrn{pdfstringdef}}%
+}
% \end{macrocode}
-% Befehle für die Dokumentation des Pakets \pkg{tudscrsupervisor}.
+% Das Paket \pkg{microtype} wird für den optischen Randausgleich verwendet. Es
+% sollte erst nach \pkg{hyperref} geladen werden.
% \begin{macrocode}
-\RequirePackage{tudscrsupervisor}[\TUDVersion]
-% \end{macrocode}
-%
-% \iffalse
-%</class>
-%<*package>
-% \fi
-%
-% \subsubsection{Pakete für das Paket \pkg{tudscrman}}
-%
-% Mit dem Paket \pkg{scrwfile} lassen sich Probleme mit zu wenig verfügbaren
-% Streams für das Schreiben externer Datein beheben. Hintergrund ist die
-% Verwendung des Paketes \pkg{glossaries} in einem der Tutorials, welches eine
-% Vielzahl solcher Streams benötigt. Das Paket \pkg{morewrites} hat keinen
-% Einfluss auf \pkg{glossaries}.
-% \begin{macrocode}
-\RequirePackage{scrwfile}[2013/08/05]
+\AfterPackage*{hyperref}{\RequirePackage[babel]{microtype}[2013/05/23]}
% \end{macrocode}
-% Die Umgebungen \env{Preamble}, \env{Trunk} und \env{Hint} sowie deren
-% Varianten nutzen das Paket \pkg{filecontents}, um ihren Inhalt in eine
-% temporäre Datei zu schreiben und diese direkt mit dem Paket \pkg{listings}
-% darzustellen sowie ggf. den Quelltext auszuführen. Beim Überschreiben einer
-% Datei wird für gewöhnlich eine Warnung erzeugt. Mit dem Paket \pkg{silence}
-% wird diese innerhalb der genannten Umgebungen deaktiviert.
+% Wurde \pkg{hyperref} nicht geladen, dann soll auf \pkg{microtype} trotzdem
+% nicht verzichtet werden.
% \begin{macrocode}
-\RequirePackage{filecontents}[2011/10/08]
-\WarningFilter[Tutorial]{latex}{Overwriting file}%
+\TUD@UnwindPackage{hyperref}{\RequirePackage[babel]{microtype}[2013/05/23]}
% \end{macrocode}
%
% \iffalse
-%</package>
%</body>
%<*option>
% \fi
%
-% \subsection{Optionen der Anwenderdokumentation}
+% \subsection{Optionen für das Ausgabeformat}
%
-% Hier werden die Optionen für Klasse und Paket definiert.
-%
-% \begin{option}{ToDo}
-% \changes{v2.02}{2014/07/10}{neu}^^A
-% \begin{macro}{\if@tud@todo}
-% \changes{v2.02}{2014/07/10}{neu}^^A
-% \begin{macro}{\tud@todo@type}
-% \changes{v2.03}{2015/01/25}{neu}^^A
-% Diese Option ist verantwortlich für den Schalter \cs{if@tud@todo}. Über
-% diesen wird gesteuert, ob ToDo-Notizen ausgegeben werden sollen.
+% \begin{option}{final}
+% \begin{option}{print}
+% \begin{macro}{\tudfinalflag}
+% \begin{macro}{\tudprintflag}
+% Diese beiden Optionen dienen zur finalen und/oder der unbunten Ausgabe.
% \begin{macrocode}
-\newif\if@tud@todo
-\@tud@todotrue
-\newcommand*\tud@todo@type{}
-\TUD@key{ToDo}[true]{%
- \TUD@set@ifkey{ToDo}{@tud@todo}{#1}%
+\TUD@key{final}[true]{%
+ \TUD@set@ifkey{final}{@tempswa}{#1}%
\ifx\FamilyKeyState\FamilyKeyStateProcessed%
- \let\tud@todo@type\relax%
- \else%
- \def\tud@todo@type{#1}%
- \@tud@todotrue%
- \FamilyKeyStateProcessed%
+ \if@tempswa%
+ \let\tudfinalflag\relax%
+ \fi%
+ \fi%
+}
+\TUD@key{print}[true]{%
+ \TUD@set@ifkey{print}{@tempswa}{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed%
+ \if@tempswa%
+ \let\tudprintflag\relax%
+ \fi%
\fi%
}
% \end{macrocode}
-% \end{macro}^^A \tud@todo@type
-% \end{macro}^^A \if@tud@todo
-% \end{option}^^A ToDo
+% Wurde eine oder beide der Optionen \opt{final} oder \opt{print} gesetzt bzw.
+% vor einem externen \app{pdflatex}-Aufruf die Flags \cs{tudfinalflag} und/oder
+% \cs{tudprintflag} definiert, werden die entsprechenden Einstellungen zur
+% finalen Ausgabe und/oder unbunten Druck vorgenommen und anschließend die
+% entsprechenden Optionen unschädlich gemacht.
+% \begin{macrocode}
+\AtEndPreamble{%
+ \ifdef{\tudfinalflag}{%
+ \TUDoptions{ToDo=false}%
+ \TUD@key{ToDo}{}%
+ }{}%
+ \ifdef{\tudprintflag}{%
+ \ifnum\tud@cd@num>\z@\relax%
+ \TUDoptions{cd=true}%
+ \fi%
+ \TUD@key{cd}{}%
+ \ifundef{\hypersetup}{}{\hypersetup{hidelinks}}%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tudprintflag
+% \end{macro}^^A \tudfinalflag
+% \end{option}^^A print
+% \end{option}^^A final
%
% \iffalse
%<*class>
% \fi
%
+% \subsection{Standardoptionen der Anwenderdokumentation}
+%
% Es werden einige Optionen für das Handbuch standardmäßig aktiviert. Dazu
% werden diese an die entsprechende Elternklasse übergeben.
% \begin{macrocode}
@@ -661,1550 +801,3671 @@
captions=tableheading,%
numbers=noenddot,%
cd=color,%
-}{\TUDClassName@Parent}
+}{\TUD@Class@Parent}
\PassOptionsToPackage{automark}{scrlayer-scrpage}
% \end{macrocode}
-% \begin{macro}{\tudfinalflag}
-% \begin{macro}{\tudprintflag}
-% Außerdem wird geprüft, ob durch einen externen pdf\LaTeX-Aufruf die Flags
-% \cs{tudfinalflag} und/oder \cs{tudprintflag} definiert wurde. In diesem Fall
-% werden Optionen zur finalen Ausgabe und/oder unbunten Druck aktiviert.
-% \begin{macrocode}
-\DeclareOption{final}{\let\tudfinalflag\relax}
-\DeclareOption{print}{\let\tudprintflag\relax}
-\AtBeginDocument{%
- \ifdef{\tudfinalflag}{\TUDoptions{ToDo=false}}{}%
- \ifdef{\tudprintflag}{%
- \TUDoptions{color=no}%
- \PassOptionsToPackage{hidelinks}{hyperref}%
- }{}%
-}
-% \end{macrocode}
-% \end{macro}^^A \tudprintflag
-% \end{macro}^^A \tudfinalflag
%
% \iffalse
%</class>
-%<*package>
+%</option>
+%<*body>
+%<*class>
% \fi
%
-% Wird das Paket \pkg{tudscrman} geladen, werden zu Beginn des Dokumentes ein
-% paar Standardeinstellungen gemacht.
+% \subsection{Deklarationen für die Klasse}
+%
+% Die Umgebungen \env{Declaration} und \env{Declaration*} werden beide für die
+% Auszeichnung von Optionen, Umgebungen und Befehlen verwendet, die \TUDScript
+% dem Anwender zur Verfügung stellt.
%
+% \begin{macro}{\if@tud@declare}
+% \begin{macro}{\if@openindex}
+% \begin{macro}{\tud@declare@num}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Dies sin ein paar Hilfsmakros zur Steuerung des Markup sowie der Ausgabe von
+% Deklarationen, Index und Änderungsliste, welche bei den nächsten Befehlen und
+% Umgebungen genutzt werden. Mit \cs{if@tud@declare} wird festgelegt, ob die
+% Befehle für das Markup in der Ausgabe als Deklaration oder anderweiteig
+% erfolgt. Der Schalter \cs{if@openindex} wird zu Beginn einer Deklaration auf
+% \val{true} gesetzt und vor dem Beenden auf \val{false}. Damit wird bestimmt,
+% ob ein öffnender oder ein schließender Indexeintrag erzeugt werden soll.
% \begin{macrocode}
-\KOMAoptions{headings=small}
-\TUDoptions{cd=true,cdfoot=true}
+\newif\if@tud@declare
+\newif\if@openindex
% \end{macrocode}
-% Falls innerhalb eines Tutorials das Paket \pkg{pstricks} verwendet wird, muss
-% dafür Sorge getragen werden, dass die automatische Kompilierung reibungslos
-% mit \pkg{auto-pst-pdf} funktioniert.
+% Das Makro \cs{tud@declare@num} bestimmt innerhalb einer Deklaration, wie
+% das Markup erfolgen soll. Die möglichen Werte für \cs{tud@declare@num} sind
+% bei der Beschreibung von \cs{Process@@MarkupDeclare} zu finden.
% \begin{macrocode}
-\AfterPackage*{pstricks}{%
- \ifnum\pdfshellescape=\@ne\relax\else%
- \PassOptionsToPackage{off}{auto-pst-pdf}%
- \fi%
- \RequirePackage{auto-pst-pdf}[2009/04/26]%
-}
+\newcommand*\tud@declare@num{0}
% \end{macrocode}
-%
-% \iffalse
-%</package>
-%</option>
-%<*body>
-% \fi
-%
-% \subsection{Gemeinsame Befehle und Umgebungen für Klasse und Paket}
-%
-% Es folgen die Definitionen für Befehle und Umgebungen für Klasse und Paket,
-% welche sich überschneidenden und für beide benötigt werden. Allerdings sind
-% diese jedoch für Klasse und Paket in ihrer Implementierung teilweise sehr
-% unterschiedlich.
-%
-% \subsubsection{Auszeichnung von Variablen, Parametern etc.}
-%
-% \begin{macro}{\PName}
-% \begin{macro}{\PBoolean}
-% \begin{macro}{\PBName}
-% \changes{v2.02}{2014/11/12}{neu}^^A
-% \begin{macro}{\PSet}
-% \begin{macro}{\Parameter}
-% \begin{macro}{\OParameter}
-% \begin{macro}{\LParameter}
-% \begin{macro}{\OLParameter}
-% \begin{macro}{\PValue}
-% \begin{macro}{\PParameter}
-% \begin{macro}{\POParameter}
-% \begin{macro}{\textOR}
-% \changes{v2.02}{2015/01/25}{neu}^^A
-% Diese Befehle dienen zum Auszeichnen von obligatorischen und optionalen
-% Parametern und Befehlen oder bestimmten Wertzuweisungen.
+% \end{macro}^^A \tud@declare@num
+% \end{macro}^^A \if@openindex
+% \end{macro}^^A \if@tud@declare
+% \begin{environment}{Declaration}
+% \begin{environment}{Obsolete}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\tud@declaration@list}
+% \begin{macro}{\if@tud@obsolete}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Es werden einige Hilfsmakros für die Ausgabe einer Deklaration sowie der
+% dazugehörigen Änderungsliste initialisiert.
% \begin{macrocode}
-\newrobustcmd*\textOR{\,\textbardbl\,}
-\newrobustcmd*\PName[1]{\mbox{\texttt{\textsl{<#1>}}}}
-\newrobustcmd*\PBoolean{\PName{Ein-Aus-Wert}}
-\newrobustcmd*\PBName[1]{\PBoolean\textOR\PName{#1}}
-\newrobustcmd*\PSet{\PName{Einstellung}}
-\newrobustcmd*\Parameter[1]{\mbox{\texttt{\{}\PName{#1}\texttt{\}}}}
-\newrobustcmd*\OParameter[1]{\mbox{\texttt{[}\PName{#1}\texttt{]}}}
-\newrobustcmd*\LParameter{\mbox{\texttt{[}\PName{Parameterliste}\texttt{]}}}
-\newrobustcmd*\OLParameter[1]{%
- \mbox{\texttt{[}\PName{#1}\textOR\PName{Parameterliste}\texttt{]}}%
-}
-\newrobustcmd*\PValue[1]{\mbox{\texttt{#1}}}
-\newrobustcmd*\PParameter[1]{\mbox{\texttt{\{#1\}}}}
-\newrobustcmd*\POParameter[1]{\mbox{\texttt{[#1]}}}
+\newcommand*\tud@declaration@list{}
+\let\tud@declaration@list\relax
% \end{macrocode}
-% \end{macro}^^A \textOR
-% \end{macro}^^A \POParameter
-% \end{macro}^^A \PParameter
-% \end{macro}^^A \PValue
-% \end{macro}^^A \OLParameter
-% \end{macro}^^A \LParameter
-% \end{macro}^^A \OParameter
-% \end{macro}^^A \Parameter
-% \end{macro}^^A \PSet
-% \end{macro}^^A \PBName
-% \end{macro}^^A \PBoolean
-% \end{macro}^^A \PName
-%
-% \subsubsection{Kompilieren von externen Dateien und Querverweise auf diese}
+% Die \env{Declaration}-Umgebung dient zur Deklaration von Optionen, Umgebungen,
+% Befehlen, Parametern, Bezeichnern, Längen, Schriftelementen und Farben. Diese
+% werden mit den entsprechenden Auszeichnungsbefehlen als obligatorisches
+% Argument übergeben. Zuvor kann noch vorher im ersten optionalen Argument eine
+% Beschreibung für die Änderungsliste in der Form \oarg{Verison!Beschreibung}
+% angegeben werden. Danach kann im dritten Argument~-- das zweite optionale~--
+% die Voreinstellung für eine Option oder dergleichen angegeben werden. Das
+% nächste optionale Argument erlaubt die Angabe einer bedingten Voreinstellung,
+% also einer anderen Voreinstellung als der zuerst angegeben unter bestimmten
+% Voraussetzungen. Diese wird in der Form \oarg{Bedingung:Voreinstellung}
+% angegeben. Das letzte Argument ist ebenfalls optional, wird aber in der Form
+% \marg{Zusatz} angegeben und enthält ggf. zusätzliche Informationen.
%
-% \begin{macro}{\Tutorial}
-% \changes{v2.02}{2014/08/22}{neu}^^A
-% \changes{v2.02}{2014/10/22}{Reimplementierung}^^A
-% \begin{macro}{\hypertut}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% Die gegebenenfalls notwendige Kompilierung und die Referenzierung eines
-% Tutorials aus dem Handbuch erfolgt mit \cs{Tutorial}. Außerdem erfolgt mit
-% \cs{hypertut} ein verlinkter Eintrag in den Index.
+% Die Umgebung \env{Obsolete} hat eine ganz ähnliche Funktion, wird allerdings
+% für die Deklaration veralteter Befehle, Umgebungen, Optionen etc. verwendet.
+% Da sich beide Umgebungen stark ähneln, werden zum Start bzw. zum Abschluss
+% die Makros \cs{tud@declare@start} bzw. \cs{tud@declare@end} aufgerufen. Zu
+% Beginn wird nichts weiter ausgegeben sondern lediglich alle übergebenen
+% Argumente in jeweiligen Listen gesammelt. Die eigentliche Ausgabe der
+% Deklaration erfolgt mit dem Befehl \cs{printdeclarationlist} bezieungsweise
+% \cs{printobsoletelist}.
% \begin{macrocode}
-%<*class>
-\newrobustcmd*\hypertut[2]{%
- \hyperref{tutorials/#1.pdf}{\jobname}{tutorials:#1}{\textsbn{#1.pdf}#2}%
+\NewDocumentEnvironment{Declaration}{omoog}{%
+ \listadd\tud@declaration@list{#2}%
+ \tud@declare@start[#1]{#2}{#3}{#4}{#5}%
+}{%
+ \tud@declare@end{#2}{\printdeclarationlist}%
}
-\NewDocumentCommand\Tutorial{smd||}{%
- \ifnum\pdfshellescape=\@ne\relax%
% \end{macrocode}
-% Um mit den verschachtelten Aufrufen von pdf\LaTeX{} umgehen zu können, wird
-% das ganze Prozedere in ein Skript ausgelagert. Somit können die Aufrufe von
-% pdf\LaTeX{} für die Tutorials im entsprechenden Ordner erfolgen.
+% Für die Umgebung \env{Obsolete} sieht die Eingabe etwas anders aus. Das erste
+% obligatorische Argument sollte eine Versionsnummer enthalten, ab wann die
+% Deklaration veraltet ist. Das erste optionale Argument wird genutzt, wenn
+% für eine weiterhin gültige Deklaration lediglich ein bestimmter Wert
+% entfällt. Wird das erste Argument leer gelassen, erfolgt lediglich die
+% Ausgabe der Deklaration ohne einen Eintrag in die Änderungsliste. Dies ist
+% für Umgebungen und Befehle gedacht, bei denen lediglich ein oder mehrere
+% Parameter geändert wurden bzw. entfallen.
+% \begin{macrocode}
+\newif\if@tud@obsolete
+\NewDocumentEnvironment{Obsolete}{momoog}{%
+ \@tud@obsoletetrue%
+ \ifxblank{#1}{%
+% \end{macrocode}
+% Ohne Versionsnummer erfolgt die Ausgabe ohne Label. Für den Eintrag wird auch
+% keine Änderungsnotiz erzeugt.
+% \begin{macrocode}
+ \listadd\tud@declaration@list{%
+ \def\tud@declare@num{1}%
+ #3%
+ \def\tud@declare@num{0}%
+ }%
+ \tud@declare@start{#3}{#4}{#5}{#6}%
+ }{%
+ \listadd\tud@declaration@list{#3}%
+% \end{macrocode}
+% Wurde ein optionales Argument angegeben, bezieht sich der Änderungseintrag
+% auf ebendieses Argument, die eigentliche, obsolete Deklaration wird als
+% Untereintrag genutzt.
% \begin{macrocode}
- \filemodCmp{tutorials/#2.pdf}{tutorials/#2.tex}{}{%
- \immediate\openout\tud@write@i=tutorials.sh%
- \immediate\write\tud@write@i{%
- cd tutorials^^J%
- pdflatex -shell-escape #2^^J%
- pdflatex #2^^J%
- biber #2^^J%
- pdflatex -shell-escape #2^^J%
- makeglossaries #2^^J%
- pdflatex #2%
- }%
- \immediate\closeout\tud@write@i%
+ \IfValueTF{#2}{%
+ \Changed@At@CreateList[#2]{#1!#3}%
+ }{%
+ \Changed@At@CreateList[#3]{#1}%
+ }%
+ \IfValueTF{#6}{%
+ \tud@declare@start{#3}{#4}{#5}{#6}%
% \end{macrocode}
-% Hier erfolgt die Unterscheidung der Befehle für die unterschiedlichen OS.
+% Ohne eine zusätzliche Angabe imletzten optionalen Argument wird standardmäßig
+% der Entfall der Deklaration angegeben. Alternativ dazu kann im ersten
+% Argument der Versionsangabe mit einem Dopppelpunkt von dieser getrennt eine
+% neue bzw. aktuell gültige Deklaration als Querverweis angegeben werden.
% \begin{macrocode}
- \ifwindows%
- \immediate\write18{rename tutorials.sh tutorials.bat}%
- \immediate\write18{tutorials.bat}%
- \immediate\write18{del tutorials.bat}%
- \else%
- \immediate\write18{bash tutorials.sh}%
- \immediate\write18{rm tutorials.sh}%
+ }{%
+ \toks@{\tud@declare@start{#3}{#4}{#5}}%
+ \def\@tempa{\emph{entf\"allt}}%
+ \in@{:}{#1}%
+ \ifin@%
+ \def\@tempb##1:##2\@nil{%
+ \IfArgIsEmpty{##2}{}{%
+ \def\@tempa{\seeref{##2'page'}}%
+ }%
+ }%
+ \@tempb#1\@nil%
\fi%
+ \eaddto@hook\toks@{\expandafter{\@tempa}}%
+ \the\toks@%
}%
- \fi%
+ }%
+ \@tud@obsoletefalse%
+}{%
+ \@tud@obsoletetrue%
+ \tud@declare@end{#3}{\printobsoletelist}%
+ \@tud@obsoletefalse%
+}
% \end{macrocode}
-% Hyperlink und Indexeintrag.
+% \end{macro}^^A \if@tud@obsolete
+% \end{macro}^^A \tud@declaration@list
+% \end{environment}^^A Obsolete
+% \end{environment}^^A Declaration
+% \begin{macro}{\tud@preset@list}
+% \begin{macro}{\if@tud@preset@list}
+% \begin{macro}{\tud@additional@list}
+% \begin{macro}{\if@tud@additional@list}
+% Dies sind die temporären listen, die für alle Deklarationen verwendet werden.
+% \begin{macrocode}
+\newcommand*\tud@preset@list{}
+\let\tud@preset@list\relax
+\newif\if@tud@preset@list
+\newcommand*\tud@additional@list{}
+\let\tud@additional@list\relax
+\newif\if@tud@additional@list
+% \end{macrocode}
+% \end{macro}^^A \if@tud@additional@list
+% \end{macro}^^A \tud@additional@list
+% \end{macro}^^A \if@tud@preset@list
+% \end{macro}^^A \tud@preset@list
+% \begin{macro}{\tud@declare@start}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\tud@declare@end}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Dies sind die Makros für die eigentliche Abarbeitung der Deklarationsbefehle
+% zu Beginn und Ende der Umgebungen \env{Declaration} und \env{Obsolete}.
+% \begin{macrocode}
+\NewDocumentCommand\tud@declare@start{ommmm}{%
+% \end{macrocode}
+% Die optional angegebenen Änderungen werden mit \cs{Changed@At@CreateList} in
+% der Liste \cs{tud@changedat@list} gesichert und später sowohl für die
+% Randnotiz als auch die Änderungsliste verarbeitet.
+% \begin{macrocode}
+ \Changed@At@CreateList[#2]{#1}%
+% \end{macrocode}
+% Hier noch die Listen für Voreinstellungen\dots
% \begin{macrocode}
- \IfFileExists{tutorials/#2.pdf}{%
- \hypertut{#2}{}%
+ \IfValueTF{#3}{%
+ \@tud@preset@listtrue%
+ \def\@tempa{Voreinstellung: \PValue{#3}}%
+ \IfValueT{#4}{%
+ \def\@tempb[##1:##2]{##1: \PValue{##2}}%
+ \eappto\@tempa{ | \expandonce{\@tempb[#4]}}%
+ }%
+ \listeadd\tud@preset@list{\expandonce\@tempa}%
}{%
- \textsbn{#2.pdf}%
- \tud@shellescape@wrn%
+ \listadd\tud@preset@list{\relax}%
}%
- \IfBooleanF{#1}{%
- \index[files]{\hypertut{#2}{~{\idxfont(Tutorial)}}\IfValueT{#3}{|#3}}%
+% \end{macrocode}
+% \dots sowie zusätliche Informationen.
+% \begin{macrocode}
+ \IfValueTF{#5}{%
+ \@tud@additional@listtrue%
+ \listadd\tud@additional@list{(#5)}%
+ \in@{\Environment}{#2}%
+ \ifin@\listadd\tud@additional@list{\tabularnewline}\fi%
+ }{%
+ \listadd\tud@additional@list{\relax}%
+ \in@{\Environment}{#2}%
+ \ifin@%
+ \listadd\tud@additional@list{\relax}%
+ \listadd\tud@additional@list{\relax}%
+ \fi%
}%
}
-%</class>
% \end{macrocode}
-% Der Befehl für die Querverweise innerhalb von Tutorials.
+% Am Ende der Umgebungen wird das übergebenen Hauptargument erneut ausgeführt,
+% was zum Beenden der Indexeinträge für die jeweilige Deklaration führt
+% (\cs{@openindexfalse}, siehe \cs{Process@Index}). Dafür werden die Makros für
+% die Angabe obligatorischer und optionaler Parameter lokal umdefiniert.
% \begin{macrocode}
-%<*package>
-\newcommand*\Tutorial[1]{\href{#1.pdf}{\textsbn{#1.pdf}}}
-%</package>
+\newcommand*\tud@declare@end[2]{%
+ \ifx\tud@declaration@list\relax\else%
+ \ClassError{tudscrmanual}{\string#2\space is missing}{%
+ \string\tud@declaration@list\space is not empty. Did you\MessageBreak%
+ forget to print this list with\MessageBreak%
+ \string#2?%
+ }%
+ \fi%
+ \vskip-\lastskip%
+ \@tud@declaretrue\@openindexfalse#1\@tud@declarefalse%
+ \pagebreak[1]%
+}
% \end{macrocode}
-% \end{macro}^^A \hypertut
-% \end{macro}^^A \Tutorial
-%
-% \iffalse
-%<*class>
-% \fi
-%
-% \begin{macro}{\IncludeExample}
-% \changes{v2.02}{2014/07/25}{Skalierung der eingefügten Seiten}^^A
-% \changes{v2.02}{2014/10/14}{Reimplementierung}^^A
-% Mit diesem Befehl wird eine \LaTeX-Datei ggf. übersetzt und anschließend als
-% PDF"~Datei wieder eingebunden. Zuvor wird der dazugehörige Quelltext mittels
-% \cs{lstinputlisting} im Dokument ausgegeben. Dieser Befehl wird lediglich für
-% die Klasse \cls{tudscrman} benötigt.
+% \end{macro}^^A \tud@declare@end
+% \end{macro}^^A \tud@declare@start
+% \begin{environment}{Declaration*}
+% \changes{v2.02}{2014/10/09}{neu}^^A
+% \changes{v2.05}{2015/08/04}{Indexaufteilung/-markup für Klassen und Pakete}^^A
+% Die Sternversion der Umgebung \env{Declaration*} ist für die vereinfachte
+% Deklaration von Klassen, Paketen etc. gedacht, bei denen keine Ausgabe
+% sondern lediglich Hyperlink, Indexeintrag und Änderungsnotiz erzeugt werden
+% sollen. Hierbei werden die Befehle \cs{tud@declare@special@start} sowie
+% \cs{tud@declare@special@end} genutzt, wobei der Anker des erzeugten Labels
+% nicht erhöht sondern auf der aktuellen Grundlinie erzeugt wird.
% \begin{macrocode}
-\newcommand*\IncludeExample[1]{%
- \lstinputlisting[style=tudscr]{examples/#1}%
+\NewDocumentEnvironment{Declaration*}{om}{%
+ \tud@declare@special@start[#1]{#2}{2}%
+}{%
+ \tud@declare@special@end{#2}%
+}
% \end{macrocode}
-% Die Beispiele werden nur erneut kompiliert, wenn sich diese geändert haben
-% oder noch gar kein entsprechendes PDF"~Dokument existiert.
-% \begin{macrocode}
- \ifnum\pdfshellescape=\@ne\relax%
- \filemodCmp{examples/#1.pdf}{examples/#1.tex}{}{%
- \immediate\write18{%
- pdflatex -output-directory examples examples/#1.tex
- pdflatex -output-directory examples examples/#1.tex
- }%
+% \end{environment}^^A Declaration*
+% \begin{environment}{Bundle*}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Die Umgebung \env{Bundle*} wird verwendet, wenn ein zusätzliche Paket oder
+% eine weitere Klasse in Ergänzung zu den Hauptklassen dokumentiert wird. Dabei
+% wird die Umgebung \env{Bundle} geöffnet, nachdem das obligatorischen Argument
+% mit dem Befehl \cs{tud@declare@special@start} deklariert wird. Dabei sollte
+% die Umgebung \env{Bundle*} direkt nach einer Gliederungsüberschrift genutzt
+% werden, in welcher das zu deklarierende Element (Klasse, Paket etc.) genannt
+% wird, da der Anker des erzeugten Labels weiter nach oben auf die Höhe der
+% Überschirft verschoben wird. Zum Abschluss der Deklaration wird nach dem
+% Schließen der Umgebung \env{Bundle} \cs{tud@declare@special@end} genutzt.
+% \begin{macrocode}
+\NewDocumentEnvironment{Bundle*}{om}{%
+ \tud@declare@special@start[#1]{#2}{3}%
+ \Bundle{#2}%
+}{%
+ \endBundle%
+ \tud@declare@special@end{#2}%
+}
+% \end{macrocode}
+% \end{environment}^^A Bundle*
+% \begin{macro}{\tud@declare@special@start}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\tud@declare@special@end}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Die beiden dienen zur vereinfachten Deklaration. Es wird keine Ausgabe
+% sondern lediglich Hyperlink, Indexeintrag und Änderungsnotiz erzeugt. Das
+% optionale Argument dient einem Änderungseintrag, das erste obligaotrische
+% gilt der eigentlichen Deklaration, das zweite zur Einstellung des Makros
+% \cs{tud@declare@num}, mit welchem das Verhalten für das Erzeugen der Labels
+% gesteuert wird.
+% \begin{macrocode}
+\NewDocumentCommand\tud@declare@special@start{omm}{%
+ \Changed@At@CreateList(#2){#1}%
+ \def\tud@declare@num{#3}%
+ \@tud@declaretrue\@openindextrue#2\@tud@declarefalse%
+ \def\tud@declare@num{0}%
+}
+\newcommand*\tud@declare@special@end[1]{%
+ \ifx\tud@changedat@list\relax\else%
+ \ClassError{tudscrmanual}{\string\printchangedatlist\space is missing}{%
+ \string\tud@changedat@list\space is not empty. Did you\MessageBreak%
+ forget to print this list with \string\printchangedatlist?%
}%
\fi%
-% \end{macrocode}
-% Ist die gesuchte Datei vorhanden, wird diese auch eingebunden. Andernfalls
-% wird eine Warnung mit dem Hinweis auf die notwendige Verwednung von
-% \val{pdflatex} mit der Option \opt{--shell-escape} erzeugt.
-% \begin{macrocode}
- \IfFileExists{examples/#1.pdf}{%
- \includepdf[%
- pages=-,noautoscale,frame,keepaspectratio,pagecommand={},%
- height=\textheight,width=\textwidth, offset=5mm 0mm%
- ]{examples/#1.pdf}%
- }{%
- \tud@shellescape@wrn%
- }%
+ \@tud@declaretrue\@openindexfalse#1\@tud@declarefalse%
}
% \end{macrocode}
-% \end{macro}^^A \IncludeExample
-%
-% \iffalse
-%</class>
-% \fi
-%
-% \subsubsection{ToDo-Liste}
+% \end{macro}^^A \tud@declare@special@end
+% \end{macro}^^A \tud@declare@special@start
+% \begin{macro}{\printdeclarationlist}
+% \begin{length}{\tud@lastskip}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\index}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\label}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Mit dem Befehl \cs{printdeclarationlist} erfolgt die eingentliche Ausgabe
+% aller Deklarationen. Zweck ist es, mehrere \env{Declaration}-Umgebungen
+% ineinander verschachteln zu können und eine Ausgabe aller auf einmal zu
+% erzeugen. Die durch die ggf. nacheinander folgenden Deklarationen wurden in
+% entsprechenden Listen gesammelt und werden hier jetzt formatiert ausgegben.
%
-% \begin{macro}{\ToDo}
-% \changes{v2.02}{2014/07/10}{Verwendung von \pkg{todonotes}}^^A
-% \changes{v2.03}{2015/01/25}{Ausgabe auf bestimmten Typ beschränkbar}^^A
-% \begin{macro}{\@ToDo}
-% \changes{v2.02}{2014/07/10}{neu}^^A
-% \begin{macro}{\ListOfToDo}
-% \changes{v2.02}{2014/07/10}{neu}^^A
-% Mit dem Befehl \cs{ToDo}\oarg{options}\marg{inline text}\oarg{marginnote}
-% kann bei aktivierter Option \opt{ToDo} eine Notiz mit einer offenen Ausgabe
-% erstellt werden. Das vorangestellte Argument kann Optionen beinhalten, welche
-% durch \pkg{todonotes} unterstützt werden. Außerdem werden die vier boolschen
-% Schlüssel \val{doc}, \val{man}, \val{imp} und \val{nxt} definiert, welche
-% eine feste, farbliche Kodierung erzeugen. Das angestellte optionale Argument
-% erzeugt eine gleichartige Notiz am Rand, in welcher vorzugsweise die
-% angedachte Version eingetragen werden kann. Mit \cs{ListOfToDo} wird abhängig
-% von der Option \opt{ToDo} eine Liste der offenen Aufgaben erstellt.
-% \begin{macrocode}
-\newcommand*\@ToDo{}
-\NewDocumentCommand\ToDo{somo}{%
- \ifbool{@tud@todo}{%
- \begingroup%
+% Da die Verwendung der Befehle \cs{index} und \cs{label} nach Überschriften
+% dazu führt, dass \cs{addvspace} nicht mehr richtig verendet werden kann,
+% wird hier etwas gebastelt, damit das trotzdem funktioniert. Dabei wird
+% einfach bei der verwendung der genannten Befehle der zuvor gesetzte vertikale
+% Abstand in \cs{tud@lastskip} gesichert.
+% \begin{macrocode}
+\newskip\tud@lastskip
+\pretocmd{\index}{\tud@lastskip=\lastskip}{}{\tud@patch@wrn{index}}
+\pretocmd{\label}{\tud@lastskip=\lastskip}{}{\tud@patch@wrn{label}}
+\NewDocumentCommand\printdeclarationlist{sd()}{%
+ \ifx\tud@declaration@list\relax\else%
+ \ifhmode%
+ \vskip\medskipamount%
+ \else%
% \end{macrocode}
-% Die boolschen Schlüssel.
+% Im vertikalen modus wird dann einfach vom eigentlich gewünschten Abstand der
+% durch \cs{label} bzw. \cs{index} erzwungene vertikale Freiraum abgezogen.
+% Sollte dann noch ein positiver Wert bestehen, wird dieser einfach zusätzlich
+% gesetzt.
% \begin{macrocode}
- \define@boolkey{todonotes}{doc}[true]{%
- \ifbool{KV@todonotes@doc}{\setkeys{todonotes}{color=HKS41!10}}{}%
- }%
- \define@boolkey{todonotes}{rls}[true]{%
- \ifbool{KV@todonotes@rls}{\setkeys{todonotes}{color=HKS44!50}}{}%
- }%
- \define@boolkey{todonotes}{imp}[true]{%
- \ifbool{KV@todonotes@imp}{\setkeys{todonotes}{color=HKS07!50}}{}%
- }%
- \define@boolkey{todonotes}{nxt}[true]{%
- \ifbool{KV@todonotes@nxt}{\setkeys{todonotes}{color=HKS57!50}}{}%
- }%
+ \@tempskipa=\glueexpr\medskipamount-\tud@lastskip\relax%
+ \ifdim\@tempskipa>\z@%
+ \addpenalty{\@beginparpenalty}%
+ \addvspace{\@tempskipa}%
+ \fi%
+ \fi%
% \end{macrocode}
-% In \cs{@ToDo} wird das optionale Argument für \pkg{todonotes} gesichert.
+% Anschließend wird die Länge auf jeden Fall zurückgesetzt.
% \begin{macrocode}
- \def\@ToDo{}%
- \IfValueTF{#2}{%
- \IfBooleanTF{#1}{\edef\@ToDo{#2,nolist}}{\edef\@ToDo{#2}}%
- }{%
- \IfBooleanT{#1}{\edef\@ToDo{nolist}}%
- }%
+ \global\tud@lastskip=\z@%
+ \@afterindentfalse\@afterheading%
+ \@tud@declaretrue\@openindextrue%
% \end{macrocode}
-% Damit die Randnotiz nicht verrutscht, wird \cs{marginnote} anstelle von
-% \cs{marginpar} verwendet.
+% Die deklarierten Optionen, Umgebungen, Befehle etc. werden umrahmt. Dabe
+% erfolgt die Ausgabe mithilfe einer Box, um die Größe des Deklarationsrahmens
+% zu speichern und die Änderungsmarkierung am Seitenrand auf die richtige Höhe
+% zu platzieren. Da innerhalb von Tabellen der Wert von \cs{baselineskip} auf
+% \makeatletter\the\z@\makeatother~gesetzt wird, muss für einen richtig
+% platzierten Link dieser in \cs{HyperRaiseLinkDefault} gesichert werden.
% \begin{macrocode}
- \renewcommand*\marginpar[2][]{%
- \marginnote[##1]{##2}[\dimexpr-1.6ex+1pt\relax]%
- }%
+ \def\@tempa##1{\ignorespaces##1\tabularnewline}%
+ \edef\HyperRaiseLinkDefault{\the\baselineskip}%
+ \sbox\z@{%
+ \begin{tabular}{|l|}%
+ \hline%
+ \forlistloop\@tempa{\tud@declaration@list}%
+ \hline%
+ \end{tabular}%
+ }\usebox\z@%
+ \@tud@declarefalse%
% \end{macrocode}
-% Die Ausgabe erfolgt entweder für alle ToDo-Notizen oder nur den per Option
-% festgelegten Typ.
+% Danach werden ggf. die Voreinstellungen und Zusatzinformationen in etwas
+% kleinerer Schrift gesetzt.
% \begin{macrocode}
- \@tempswafalse
- \ifdefvoid{\tud@todo@type}{\@tempswatrue}{}%
- \IfValueT{#2}{%
- \@for\@tempa:=#2\do{\ifstr{\@tempa}{\tud@todo@type}{\@tempswatrue}{}}%
- }%
+ \ifboolexpr{bool {@tud@preset@list} or bool {@tud@additional@list}}{%
+ \def\@tempa##1{\small\ignorespaces##1\tabularnewline}%
+ \qquad%
+ \if@tud@preset@list%
+ \begin{tabular}{@{}l@{}}%
+ \forlistloop\@tempa{\tud@preset@list}%
+ \end{tabular}%
+ \hspace{\tabcolsep}%
+ \fi%
+ \if@tud@additional@list%
+ \begin{tabular}{@{}l@{}}%
+ \forlistloop\@tempa{\tud@additional@list}%
+ \end{tabular}%
+ \fi%
+ }{}%
% \end{macrocode}
-% Vor der Ausgabe ist eine vertikale Verschiebung um den durch \pkg{todonotes}
-% definierten Leerraum notwendig.
+% Alle für die Deklaration verwendeten Listen werden nach ihrer Abarbeitung
+% zurückgesetzt.
% \begin{macrocode}
- \if@tempswa%
- \vskip.8ex%
- \IfValueT{#4}{%
- \settowidth\marginparwidth{#4}%
- \addtolength\marginparwidth{\dimexpr1.6ex+1pt\relax}%
- \let\par\relax\noindent%
- \edef\@tempa{\noexpand\todo[\@ToDo,noline,nolist]}%
- \@tempa{#4}%
- }%
- \edef\@tempa{\noexpand\todo[\@ToDo,inline]}%
- \@tempa{#3}%
- \fi%
- \endgroup%
- \par\noindent%
- }{}%
- \ignorespaces%
+ \global\let\tud@declaration@list\relax%
+ \global\let\tud@preset@list\relax%
+ \global\let\tud@additional@list\relax%
+ \global\@tud@preset@listfalse%
+ \global\@tud@additional@listfalse%
+% \end{macrocode}
+% Die Einträge in der Änderungsliste sowie die dazugehörige Randnotiz werden
+% innerhalb der Deklaration mit \cs{printchangedatlist} erzeugt. Das optionale
+% Argument sorgt für die Verschiebung der Randnotiz auf die richtige Höhe, um
+% den Höhenversatz zwischen Randnotiz und Deklarationsrahmen auszugleichen.
+% \begin{macrocode}
+ \print@changedatlist{#1}{%
+ \dimexpr.5\ht\strutbox+.5\dp\strutbox-.5\ht0-.5\dp0\relax%
+ }%
+% \end{macrocode}
+% Zum Schluss wird das optionale Argument (in runden Klammern) neben der
+% Deklarationsbox ausgegeben.
+% \begin{macrocode}
+ \IfValueT{#2}{#2}%
+ \par\nobreak%
+ \vskip\medskipamount%
+ \@afterindentfalse\@afterheading%
+ \fi%
}
% \end{macrocode}
-% Zum Schluss wird der Befehl \cs{ListOfToDo} definiert, der die Liste der noch
-% zu erledigenden Punkte nur ausgeführt ausgibt, wenn die Option \opt{ToDo}
-% aktiviert ist. Außerdem werden die Randnotizen auf den linken~-- weil
-% größeren~-- Rand gesetzt.
+% \end{macro}^^A \label
+% \end{macro}^^A \index
+% \end{length}^^A \tud@lastskip
+% \end{macro}^^A \printdeclarationlist
+% \begin{macro}{\printobsoletelist}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Damit werden Deklarationen der Umgebung \env{Obsolete} ausgegeben.
+% \begin{macrocode}
+\newcommand*\printobsoletelist{%
+ \@tud@obsoletetrue%
+ \printdeclarationlist*%
+ \@tud@obsoletefalse%
+}
+% \end{macrocode}
+% \end{macro}^^A \printobsoletelist
+% \begin{macro}{\printchangedatlist}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Damit werden Änderungsnotizen der Umgebungen \env{Declaration*} sowie
+% \env{Bundle} und \env{Bundle*} ausgegeben.
% \begin{macrocode}
-\newcommand*\ListOfToDo{\if@tud@todo\listoftodos\fi}
-\reversemarginpar
+\NewDocumentCommand\printchangedatlist{sO{\z@}}{%
+ \print@changedatlist{#1}{#2}%
+}
% \end{macrocode}
-% \end{macro}^^A \ListOfToDo
-% \end{macro}^^A \@ToDo
-% \end{macro}^^A \ToDo
+% \end{macro}^^A \printchangedatlista
+%
+% \iffalse
+%</class>
+% \fi
+%
+% \subsection{Markup von Klassen, Paketen, Optionen und weiteren Elementen}
+%
+% Es folgen die Definitionen für Befehle und Umgebungen für Klasse und Paket,
+% welche sich überschneidenden und für beide benötigt werden. Allerdings sind
+% diese für Klasse und Paket in ihrer Implementierung teilweise unterschiedlich.
+%
+% Als erstes werden für Klasse und Paket einige Hilfmakros definiert.
%
-% \subsubsection{Kleinkram}
-%
% \begin{macro}{\bsc}
-% \changes{v2.02}{2014/07/22}{\cs{newrobustcmd} aus \pkg{etoolbox} anstelle von
+% \changes{v2.02}{2014/07/22}{\cs{newrobustcmd} aus \pkg{etoolbox} anstatt
% \cs{DeclareRobustCommand}}^^A
% Eine einfacher zu verwendende Kurzform.
% \begin{macrocode}
\newrobustcmd*\bsc{\@backslashchar}
% \end{macrocode}
% \end{macro}^^A \bsc
-% \begin{macro}{\tud@shellescape@wrn}
-% \changes{v2.02}{2014/10/14}{neu}^^A
-% Dieses Makro wird verwendet, wenn eine gesuchte Datei nicht gefunden wurde,
-% weil das Dokument noch nicht mit der Option \opt{--shell-escape} kompiliert
-% wurde.
+% \begin{macro}{\suffix}
+% \changes{v2.05}{2015/10/27}{neu}^^A
+% Für alle möglichen, zusätzlichen Informationen bei Deklarationen, im Index
+% oder der normalen in Ausgabe im Fließtext wird eine etwas kleinere Schrift
+% verwendet.
+% \begin{macrocode}
+\newrobustcmd*\suffix[1]{\begingroup~\scriptsize(#1)\endgroup}
+% \end{macrocode}
+% \end{macro}^^A \suffix
+% \begin{macro}{\NewExpandableDocumentCommand}
+% \changes{v2.02}{2014/11/04}{neu}^^A
+% Für Labels, Index- und Änderungs sowie PDF-Outline-Einträge etc. müssen ganz
+% bestimmte Markup-Befehle durch eine expandierbare Version ersetzt werden. Der
+% Befehl \cs{NewExpandableDocumentCommand} wird definiert, um dies möglichst
+% einfach zu gestalten.
+% \begin{macrocode}
+\newcommand*\NewExpandableDocumentCommand[3]{%
+ \NewDocumentCommand#1{#2}{#3}%
+ \DeclareExpandableDocumentCommand#1{#2}{#3}%
+}
+% \end{macrocode}
+% \end{macro}^^A \NewExpandableDocumentCommand
+%
+% \subsubsection{Definition der Markup-Befehle}
+%
+% \changes{v2.05}{2015/11/02}{Markup-Befehle komplett überarbeitet}^^A
+%
+% Im Folgenden werden allerhand Befehle mit Hilfe des Paketes \pkg{xparse}
+% definiert, um bestimmte Begriffe, Klassen, Pakete, Optionen, Umgebungen,
+% Befehle, Parameter, Bezeichner, Längen, Schriftelemente und Farben speziell
+% auszuzeichnen. Diese Befehle lauten für Klasse und Paket aus Gründen der
+% Konsistenz zwar gleich, unterschieden sich jedoch ein klein wenig in der
+% Implementierung.
+%
+% Die Sternversion all dieser Befehlen tragen nichts in den Index ein. Für
+% (fast) alle der folgenden Befehle gilt, dass diese mit zwei optionalen
+% Argumenten am Ende genutzt werden können. Sollte ein Label existieren, wird
+% automatisch ein Hyperlink erzeugt, welcher mit der optionalen Angabe von
+% \val{'}\meta{Referenzvariante}\val{'} um einen textuellen Querverweis ergänzt
+% werden kann. Mit \val{\textbar}\meta{Indexmarkup}\val{\textbar} kann die
+% Erscheinung im Index angepasst werden. Bei einigen Befehlen kann zusätzlich
+% zuvor im Markup mit dem optionalen Argument \parg{Bundleelement} die
+% Zuweisung auf ein bestimmtes Paket oder eine Klasse aus dem \TUDScript-Bundle
+% erfolgen.
+%
+% Die eigentliche Behandlung erfolgt mit dem Befehl \cs{Process@Markup},
+% welcher die tatsächliche Auszeichnung im Fließtext bzw. als Deklaration
+% übernimmt. Das Auszeichnungsformat wird dafür zuvor mit \cs{Markup@SetFormat}
+% festgelegt. Ein Eintrag in den Index wird mit \cs{Process@Index} realisiert.
+% Für die Änderungsliste wird der Befehl \cs{Process@ChangedAt} genutzt, um die
+% entsprechende Formatierung zu gewährleisten, wobei dies nur für die Klasse
+% \cls{tudscrmanual} und nicht für das Paket \pkg{tudscrtutorial} gilt.
+%
+% \begin{macro}{\ProcessorKeyVal}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\tud@keyval@error}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Bei Optionen und Parametern können spezielle Werte einfach im Hauptargument
+% durch \val{=} getrennt angegeben werden. Um diese auszuwerten, wird dieser
+% Befehl definiert, welcher als Argumentprozessor verwendet wird.
+% \begin{macrocode}
+\newcommand*\ProcessorKeyVal[1]{%
+ \begingroup%
+ \in@{=}{#1}%
+% \end{macrocode}
+% Wird im Argument ein \val{=} gefunden, so wird alles Darauffolgende als Wert
+% erkannt und dem eigentlichen Hauptargument bei der Ausgabe angehangen. Das
+% Makro, welches diesen Argumentprozessor verwendet, erhält als Ausgabe also
+% entweder \marg{Schlüssel} oder \marg{Schlüssel}\val{=}\meta{Wert}\val{=}
+% falls \cs{ProcessorKeyVal} mit \marg{Schlüssel=Wert} verwendet wurde .
% \begin{macrocode}
-\newcommand*\tud@shellescape@wrn{%
+ \ifin@%
+ \def\@tempa##1=##2\@nil{\toks@{{##1}=##2=}}%
+ \else%
+ \def\@tempa##1\@nil{\toks@{{##1}}}%
+ \fi%
+ \@tempa#1\@nil%
+ \edef\tud@reserved{%
+ \noexpand\endgroup%
+ \def\noexpand\ProcessedArgument{\the\toks@}%
+ }%
+ \tud@reserved%
+}
+% \end{macrocode}
+% Es gibt auch noch eine interne Variante für ein optioneles Werte-Argument.
+% Dabei sollte vermieden werden, dass im Markup das Argument für einen Wert
+% doppelt angegeben wird. In diesem Fall wird dieser Fehler ausgegeben.
+% \begin{macrocode}
+\newcommand*\tud@keyval@error{%
%<*class>
- \ClassWarning%
+ \ClassError{tudscrmanual}%
%</class>
%<*package>
- \PackageWarning%
+ \PackageError{tudscrtutorial}%
%</package>
- {tudscrman}{%
- You have to recompile this document with\MessageBreak%
- activated shell escape option%
- }%
- \global\let\tud@shellescape@wrn\relax%
+ {Wrong usage of optional argument for value}%
+ {There are two optional arguments for a value given!}%
}
% \end{macrocode}
-% \end{macro}^^A \tud@shellescape@wrn
-% \begin{macro}{\pdfexpandableoutline}
-% \changes{v2.02}{2014/11/04}{neu}^^A
-% \begin{macro}{\@TUDScript}
-% \changes{v2.02}{2014/08/16}{neu}^^A
-% Für die PDF-Outline-Einträge müssen einige Befehle durch eine expandierbare
-% Version ersetzt werden. Der Befehl \cs{pdfexpandableoutline} wird definiert,
-% um dies möglichst einfach zu gestalten.
-% \begin{macrocode}
-\newcommand*\pdfexpandableoutline[1]{%
- \AfterPackage*{hyperref}{\pdfstringdefDisableCommands{\csletcs{#1}{@#1}}}
+% \end{macro}^^A \tud@keyval@error
+% \end{macro}^^A \ProcessorKeyVal
+% \begin{environment}{Bundle}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\tud@bdl@curr}
+% \changes{v2.05}{2015/08/04}{neu}^^A
+% \begin{macro}{\tud@bdl@dflt}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\tud@if@bdl}
+% \changes{v2.05}{2015/08/04}{neu}^^A
+% Die Umgebung \env{Bundle} kann nicht verschachtelt werden und prüft zuerst
+% dementsprechend die Verwendung. Anschließend wird lediglich das Makro
+% \cs{tud@bdl@curr} auf das übergebene Argument gesetzt, um innerhalb der
+% Umgebung erstellte Label und Indexeinträge zu beeinflussen.
+% \begin{macrocode}
+\newenvironment{Bundle}[1]{%
+ \tud@if@bdl{%
+%<*class>
+ \ClassError{tudscrmanual}%
+%</class>
+%<*package>
+ \PackageError{tudscrtutorial}%
+%</package>
+ {Nested environment `Bundle'}{%
+ It is not possible to nest this environment, when\MessageBreak%
+ a cross-label was given before.%
+ }%
+ }{%
+ \gdef\tud@bdl@curr{#1}%
+ }%
+ \ignorespaces%
+}{%
+ \global\let\tud@bdl@curr\tud@bdl@dflt%
+ \aftergroup\ignorespaces%
}
% \end{macrocode}
-% Den Anfang mach gleich \cs{TUDScript}.
+% Diese Makros werden für das Definieren eines Bundle-Elements und ggf. das
+% Prüfen des selbigen benötigt.
% \begin{macrocode}
-\newcommand*\@TUDScript{TUD-KOMA-Script}
-\pdfexpandableoutline{TUDScript}
+\newcommand*\tud@bdl@curr{}
+\newcommand*\tud@bdl@dflt{tudscr}
+\let\tud@bdl@curr\tud@bdl@dflt
+\newcommand*\tud@if@bdl[2]{\ifstr{\tud@bdl@curr}{\tud@bdl@dflt}{#2}{#1}}
% \end{macrocode}
-% \end{macro}^^A \@TUDScript
-% \end{macro}^^A \pdfexpandableoutline
-%
-% \subsubsection{Markup von Klassen, Paketen, Optionen und weiteren Elementen}
-%
-% Im Folgenden werden allerhand Befehle mit Hilfe des Paketes \pkg{xparse}
-% definiert, um bestimmte Begriffe, Klassen, Pakete, Optionen, Umgebungen,
-% Befehle, Parameter, Bezeichner, Längen, Schriftelemente und Farben speziell
-% auszuzeichnen. Diese Befehle lauten für Klasse und Paket nutzen aus Gründen
-% der Konsistenz zwar gleich, unterschieden sich jedoch in der Implementierung.
-%
-% Für die Klasse gilt, dass die Sternversion all dieser Befehlen nichts in den
-% Index einträgt, wenn diese denn im Fließtext Verwendung finden. Wird die
-% Sternversion jedoch in einer Änderungsnotiz genutzt, so wird die für diese
-% normalerweise angehängte Beschreibung des Elementes unterdrückt. Für (fast)
-% alle der folgenden Befehle gilt, dass diese mit zwei optionalen Befehlen am
-% Ende genutzt werden können. Mit \val{'refformat'} kann angegeben werden, ob
-% der automatisch erzeugte Hyperlink um einen textuellen Querverweis ergänzt
-% werden soll. Mit \val{|idxformat|} kann die Erscheinung im Index angepasst
-% werden. Die eigentliche Behandlung der Eingabe und die Eintragungen in den
-% Index erfolgen dabei mit dem Befehl \cs{@ProcessOutput}, für einen Eintrag
-% in die Änderungsliste wird der Befehl \cs{@ProcessChangedAt} genutzt.
-%
-% Die Befehle für das Paket \pkg{tudscrman} sind in ihrer Funktionalität um
-% einiges reduziert. Die meisten besitzen nur ein obligatorisches Argument für
-% die formatierte Ausgabe sowie evtl. eine Sternversion, die einen Querverweis
-% auf das Handbuch erzeugt.
+% \end{macro}^^A \tud@if@bdl
+% \end{macro}^^A \tud@bdl@dflt
+% \end{macro}^^A \tud@bdl@curr
+% \end{environment}^^A Bundle
% \begin{macro}{\Application}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
% \begin{macro}{\@Application}
% Die Auszeichnung und der Indexeintrag einer Anwendungssoftware.
% \begin{macrocode}
-%<*class>
-\NewDocumentCommand\Application{smd||}{%
- \ifdin{#2}{%
- \mbox{\textsbs{#2}}%
- \CheckIndexFormat{#1}{#3}%
- \IfBooleanF{#1}{%
- \index{\textsbs{#2}~{\idxfont(Anwendungssoftware)}\IfValueT{#3}{|#3}}%
- }%
+\NewExpandableDocumentCommand\@Application{sm}{#2}
+\NewDocumentCommand\Application{smd()d<>d||}{%
+ \Markup@SetFormat{\sbsfont}%
+ \IfValueTF{#4}{%
+ \Process@Markup{\Application{#2}}(#3)<#4>%
+ }{%
+ \Process@Markup{\Application{#2}}(#3)%
}%
+ \Process@Index{#1}{\Application{#2}}[Anwendungssoftware](#3)|#4|%
}
-\DeclareExpandableDocumentCommand\@Application{sm}{#2}
-\pdfexpandableoutline{Application}
-%</class>
-%<*package>
-\newcommand*\Application[1]{\ifdin{#1}{\mbox{\textsbs{#1}}}}
-%</package>
% \end{macrocode}
% \end{macro}^^A \@Application
% \end{macro}^^A \Application
% \begin{macro}{\Distribution}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% Die Auszeichnung und der Indexeintrag einer \LaTeX-Distribution.
-% \begin{macrocode}
-%<*class>
-\NewDocumentCommand\Distribution{smod||}{%
- \ifdin{#2\IfValueT{#3}{~#3}}{%
- \mbox{\textsbn{#2\IfValueT{#3}{~#3}}}%
- \CheckIndexFormat{#1}{#4}%
- \IfBooleanF{#1}{%
- \index{\textsbn{#2}~{\idxfont(Distribution)}\IfValueT{#4}{|#4}}%
- }%
+% \begin{macro}{\@Distribution}
+% Die Auszeichnung und der Indexeintrag einer \LaTeX-Distribution. Das
+% optionale Argument kann für das Anhängen einer Versionsnummer o.\,ä. im
+% Fließtext genutzt werden.
+% \begin{macrocode}
+\NewExpandableDocumentCommand\@Distribution{sm}{#2}
+\NewDocumentCommand\Distribution{smod()d||}{%
+ \Markup@SetFormat{\sbnfont}%
+ \IfValueTF{#3}{%
+ \Process@Markup{\Distribution{#2}}[~#3](#4)%
+ }{%
+ \Process@Markup{\Distribution{#2}}(#4)%
}%
+ \Process@Index{#1}{\Distribution{#2}}[Distribution](#4)|#5|%
}
-%</class>
-%<*package>
-\newcommand*\Distribution[1]{\ifdin{#1}{\mbox{\textsbn{#1}}}}
-%</package>
% \end{macrocode}
+% \end{macro}^^A \@Distribution
% \end{macro}^^A \Distribution
-% \begin{macro}{\Path}
-% \changes{v2.02}{2014/07/22}{\cs{DeclareRobustCommand} ersetzt durch
-% \cs{newrobustcmd} aus \pkg{etoolbox}}^^A
-% Die Auszeichnung eines Dateipfades.
-% \begin{macrocode}
-\newrobustcmd*\Path[1]{\mbox{\texttt{#1}}}
+% \begin{macro}{\Engine}
+% \changes{v2.05}{2015/11/04}{neu}^^A
+% \begin{macro}{\@Engine}
+% \changes{v2.05}{2015/11/04}{neu}^^A
+% Die Auszeichnung und der Indexeintrag für ein bestimmtes Textsatzsystem.
+% \begin{macrocode}
+\NewExpandableDocumentCommand\@Engine{sm}{#2}
+\NewDocumentCommand\Engine{smd()d||}{%
+ \Markup@SetFormat{\sbnfont}%
+ \Process@Markup{\Engine{\hologo{#2}}}(#3)%
+ \Process@Index{#1}{\Engine{#2}}[Textsatzsystem](#3)|#4|%
+}
% \end{macrocode}
-% \end{macro}^^A \Path
+% \end{macro}^^A \@Engine
+% \end{macro}^^A \Engine
% \begin{macro}{\File}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
+% \begin{macro}{\@File}
% Die Auszeichnung und der Indexeintrag einer Datei.
% \begin{macrocode}
-%<*class>
-\NewDocumentCommand\File{smd||}{%
- \ifdin{#2}{%
- \mbox{\textsbn{#2}}%
- \CheckIndexFormat{#1}{#3}%
- \IfBooleanF{#1}{%
- \index[files]{\textsbn{#2}~{\idxfont(Datei)}\IfValueT{#3}{|#3}}%
- }%
- }%
+\NewExpandableDocumentCommand\@File{sm}{#2}
+\NewDocumentCommand\File{smd()d||}{%
+ \Markup@SetFormat{\sbnfont}%
+ \Process@Markup{\File{#2}}(#3)%
+ \Process@Index{#1}{\File{#2}}[Datei](#3)|#4|%
}
-%</class>
-%<*package>
-\newcommand*\File[1]{\ifdin{#1}{\mbox{\textsbn{#1}}}}
-%</package>
% \end{macrocode}
+% \end{macro}^^A \@File
% \end{macro}^^A \File
% \begin{macro}{\Class}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
% \begin{macro}{\@Class}
-% \begin{macro}{\@TempClass}
-% \changes{v2.02}{2014/10/08}{entfernt}^^A
-% \begin{macro}{\DeclareClass}
-% \changes{v2.02}{2014/10/09}{entfernt}^^A
-% Die Auszeichnung und der Indexeintrag einer Klasse. Sollte gerade DIN~Bold
-% verwendet werden~-- der Befehl wird innerhalb einer Überschrift genutzt~--
-% wird lediglich das Hauptargument ausgegeben. Das optionale Argument zwischen
-% Apostrophen kann für die Formatierung eines Querverweises im Text genutzt
-% werden, das optionale Argument zwischen senkrechten Strichen dient der
-% Formatierung des Indexeintrages. Außerdem wird für Einträge mit dem Paket
-% \pkg{hyperref} mit \cs{@Class} eine expandierbare Version definiert.
-% \begin{macrocode}
-%<*class>
-\NewDocumentCommand\Class{smd''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{files}{\protect\sbnfont}{#2}{Klasse}%
+% Die Auszeichnung und der Indexeintrag einer Klasse. Das optionale Argument
+% zwischen Apostrophen kann für die Formatierung eines Querverweises im Text
+% genutzt werden, das optionale Argument zwischen senkrechten Strichen dient
+% der Formatierung des Indexeintrages.
+% \begin{macrocode}
+\NewExpandableDocumentCommand\@Class{sm}{#2}
+\NewDocumentCommand\Class{smd()d''d||}{%
+%<*class>
+ \if@tud@changedat%
+ \Process@ChangedAt{\Class{#2}}[Klasse]%
\else%
- \ifdin{#2}{%
- \SetIndexFormat{#1}{#4}%
- \@ProcessOutput{\textsbn{#2}}'#3'%
- {files}[\protect\sbnfont]{#2}[~{\idxfont(Klasse)}]%
- }%
+%</class>
+ \Markup@SetFormat{\sbnfont}%
+ \Process@Markup{\Class{#2}}(#3)'#4'%
+ \Process@Index{#1}{\Class{#2}}[Klasse](#3)|#5|%
+%<*class>
\fi%
-}
%</class>
-%<*package>
-\NewDocumentCommand\Class{sm}{%
- \ifdin{#2}{%
- \IfBooleanTF{#1}{%
- \manualhyperref{files:#2}{\textsbn{#2}}%
- }{%
- \textsbn{#2}%
- }%
- \index[files]{\begingroup\protect\sbnfont#2\endgroup~{\idxfont(Klasse)}}%
- }%
}
-%</package>
-\DeclareExpandableDocumentCommand\@Class{sm}{#2}
-\pdfexpandableoutline{Class}
% \end{macrocode}
-% \end{macro}^^A \DeclareClass
-% \end{macro}^^A \@TempClass
% \end{macro}^^A \@Class
% \end{macro}^^A \Class
% \begin{macro}{\Package}
-% \changes{v2.02}{2014/07/10}{Ausgabe für ChangeLog hinzugefügt}^^A
-% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
+% \changes{v2.02}{2014/07/10}{Ausgabe für Änderungsliste hinzugefügt}^^A
% \begin{macro}{\@Package}
-% \begin{macro}{\@TempPackage}
-% \begin{macro}{\DeclarePackage}
-% \changes{v2.02}{2014/10/09}{entfernt}^^A
% Für die Auszeichnungen von Paketen gelten vorherigen Aussagen äquivalent.
% Für Pakete wird ergänzend ein Hyperlink auf CTAN erzeugt, wenn für dieses
-% kein Label im Dokument besteht, wo dieses genauer erläutert wird. Mit dem
-% optionalen Argument in runden Klammern lässt sich der Paketname für den Link,
-% welcher normalerweise aus obligatorischen Argument entnommen wird, anpassen.
-% Zusätzlich wird ein Befehl für Tutorials erstellt, welcher auf das Handbuch
-% verweist.
+% kein Label im Dokument besteht. Genaueres ist der Beschreibung und Definition
+% von \cs{Process@Markup} zu entnehmen. Das optionale Argument in einfachen
+% Guillemets dient zum Anpassen des CTAN-Links, welcher normalerweise aus
+% obligatorischen Argument generiert wird.
% \begin{macrocode}
+\NewExpandableDocumentCommand\@Package{sm}{#2}
+\NewDocumentCommand\Package{smd()d<>d''d||}{%
%<*class>
-\newcommand*\@TempPackage{}
-\NewDocumentCommand\Package{smd''d()d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{files}{\protect\sbnfont}{#2}{Paket}%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Package{#2}}[Paket]%
\else%
- \ifdin{#2}{%
- \IfValueTF{#4}{\def\@TempPackage{#4}}{\def\@TempPackage{#2}}%
- \SetIndexFormat{#1}{#5}%
- \@ProcessOutput{\textsbn{#2}}'#3'(\@TempPackage)%
- {files}[\protect\sbnfont]{#2}[~{\idxfont(Paket)}]%
- }%
- \fi%
-}
%</class>
-%<*package>
-\NewDocumentCommand\Package{smd()}{%
- \ifdin{#2}{%
- \IfBooleanTF{#1}{%
- \manualhyperref{files:#2}{\textsbn{#2}}%
+ \Markup@SetFormat{\sbnfont}%
+ \IfValueTF{#4}{%
+ \Process@Markup{\Package{#2}}(#3)<#4>'#5'%
}{%
- \IfValueTF{#3}{%
- \href{http://www.ctan.org/pkg/#3}{\textsbn{#2}}%
- }{%
- \href{http://www.ctan.org/pkg/#2}{\textsbn{#2}}%
- }%
+ \Process@Markup{\Package{#2}}(#3)<#2>'#5'%
}%
- \index[files]{\begingroup\protect\sbnfont#2\endgroup~{\idxfont(Paket)}}%
- }%
+ \Process@Index{#1}{\Package{#2}}[Paket](#3)|#6|%
+%<*class>
+ \fi%
+%</class>
}
-%</package>
-\DeclareExpandableDocumentCommand\@Package{sm}{#2}
-\pdfexpandableoutline{Package}
% \end{macrocode}
-% \end{macro}^^A \DeclarePackage
-% \end{macro}^^A \@TempPackage
% \end{macro}^^A \@Package
% \end{macro}^^A \Package
% \begin{macro}{\Option}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
+% \begin{macro}{\Option@Value}
+% \changes{v2.05}{2015/11/02}{neu}^^A
% \begin{macro}{\@Option}
% \changes{v2.02}{2014/11/02}{neu}^^A
-% \begin{macro}{\@TempOption}
-% Im Gegensatz zu den vorherigen Befehlen gibt es ein ordinäres optionales
-% Argument nach dem Hauptargument. Damit kann der Option im Handbuch ein Wert
-% zugewiesen werden. Für Tutorials wird ein Befehl definiert, der auf das
-% Handbuch verweist.
+% Im Gegensatz zu den vorherigen Befehlen, kann im Hauptargument ein spezieller
+% Wert für eine Option optional durch ein \val{=} getrennt angegeben werden.
+% Durch den Argumentprozessor \cs{ProcessorKeyVal} wird dieses vom eigentlichen
+% Schlüssel getrennt. Dabei wird der gegebene Schlüssel immer in der Form
+% \marg{Schlüssel} ausgegeben. Sollte ein optionaler Wert gegeben worden sein,
+% wird dieser in der Form \val{=}\meta{Wert}\val{=} einfach angehängt und als
+% optionales Argument von \cs{Option@Value} weiter verarbeitet. Mit dem
+% optionalen Argument in runden Klammern kann ggf. auf eine Option aus einem
+% \TUDScript-Paket verwiesen
+% werden.
+% \begin{macrocode}
+\NewExpandableDocumentCommand\@Option{sm}{#2}
+\NewDocumentCommand\Option{s>{\ProcessorKeyVal}md==d()d''d||}{%
+ \Option@Value{#1}#2=#3=(#4)'#5'|#6|%
+}
+% \end{macrocode}
+% Für die interne Verwendung kann das optionale Argument für den Wert auch
+% direkt mit \val{=}\meta{Wert}\val{=} angehangen werden. Um die gleichzeitige
+% Verwendung beider Varianten zu unterdrücken, wird in diesem Fall ein Fehler
+% erzeugt.
% \begin{macrocode}
+\NewDocumentCommand\Option@Value{mmd==d==d()d''d||}{%
+ \IfValueT{#4}{\tud@keyval@error}%
%<*class>
-\newcommand*\@TempOption{}
-\NewDocumentCommand\Option{smod''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{options}{\ttfamily}{#2}{Option}%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Option{#2}}=#3=[Option](#5)%
\else%
- \IfValueTF{#3}{\gdef\@TempOption{\texttt{=#3}}}{\gdef\@TempOption{}}%
- \SetIndexFormat{#1}{#5}%
- \@ProcessOutput{\texttt{#2}}[\@TempOption]'#4'{options}[\ttfamily]{#2}%
+%</class>
+ \Markup@SetFormat{\ttfamily}%
+ \Process@Markup{\Option{#2}}=#3=(#5)'#6'%
+ \Process@Index{#1}{\Option{#2}}=#3=(#5)|#7|%
+%<*class>
\fi%
-}
%</class>
-%<*package>
-\NewDocumentCommand\Option{smo}{%
- \ifdin{#2}{%
- \IfBooleanTF{#1}{%
- \manualhyperref{options:#2}{\texttt{#2}}\IfValueT{#3}{\texttt{=#3}}%
- }{%
- \texttt{#2}\IfValueT{#3}{\texttt{=#3}}%
- }%
- \index[options]{\begingroup\ttfamily#2\endgroup}%
- }%
}
-%</package>
-\DeclareExpandableDocumentCommand\@Option{sm}{#2}
-\pdfexpandableoutline{Option}
% \end{macrocode}
-% \end{macro}^^A \@TempOption
% \end{macro}^^A \@Option
+% \end{macro}^^A \Option@Value
% \end{macro}^^A \Option
% \begin{macro}{\Environment}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
% \begin{macro}{\@Environment}
% \changes{v2.02}{2014/11/02}{neu}^^A
-% \begin{macro}{\@TempEnvironment}
-% Auch hier wird für die Änderungsliste unterschieden und für Tutorials ein
-% Befehl definiert, welcher auf das Handbuch referenziert.
+% Bei diesem Makro dient das optionale Argument für die Ausgabe der möglichen
+% Umgebungsargumente bzw. -parameter \emph{bei der Deklaration}.
% \begin{macrocode}
+\NewExpandableDocumentCommand\@Environment{sm}{#2}
+\NewDocumentCommand\Environment{smod()d''d||}{%
%<*class>
-\newcommand*\@TempEnvironment{}
-\NewDocumentCommand\Environment{smod''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{macros}{\ttfamily}{#2}{Umgebung}%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Environment{#2}}[Umgebung](#4)%
\else%
+%</class>
% \end{macrocode}
% Außerdem wird für den Fall, dass der \cs{Environment}-Befehl innerhalb der
-% Umgebung \env{Declaration} verwendet wird, eine spezielle Ausgabe erzeugt. Nur
-% hier kommt das optionale Argument nach dem Hauptargument zum Tragen. Damit
-% können etwaige obligatorische und optionale Argumente angegeben werden.
-% \begin{macrocode}
- \if@declare%
- \gdef\@TempEnvironment{%
- \texttt{\bsc{}begin\{#2\}\IfValueT{#3}{#3}}\tabularnewline%
- \texttt{\dots}\tabularnewline%
- \texttt{\bsc{}end\{#2\}}%
- }%
- \else%
- \gdef\@TempEnvironment{\texttt{#2}}%
- \fi%
- \SetIndexFormat{#1}{#5}%
- \@ProcessOutput{\@TempEnvironment}'#4'{macros}[\ttfamily]{#2}%
+% Umgebung \env{Declaration} verwendet wird, eine spezielle Ausgabe erzeugt.
+% Nur hier kommt das optionale Argument von \cs{Markup@SetFormat} nach dem
+% Hauptargument zum Tragen. Die resultierende Ausgabe hat die Gesatlt:
+%
+% \begin{tabular}{l}%
+% \cs{begin}\marg{Umgebung}\tabularnewline
+% \dots\tabularnewline
+% \cs{end}\marg{Umgebung}\tabularnewline
+% \end{tabular}%
+% \begin{macrocode}
+ \Markup@SetFormat{\ttfamily}(%
+ \ttfamily\bsc{}begin\textbraceleft#2\textbraceright\IfValueT{#3}{#3}%
+ \tabularnewline\ttfamily\dots%
+ \tabularnewline\ttfamily\bsc{}end\textbraceleft#2\textbraceright%
+ )%
+ \Process@Markup{\Environment{#2}}[#3](#4)'#5'%
+ \Process@Index{#1}{\Environment{#2}}[Umgebung](#4)|#6|%
+%<*class>
\fi%
-}
%</class>
-%<*package>
-\NewDocumentCommand\Environment{sm}{%
- \ifdin{#2}{%
- \IfBooleanTF{#1}{%
- \manualhyperref{macros:#2}{\texttt{#2}}%
- }{%
- \texttt{#2}%
- }%
- \index[macros]{\begingroup\ttfamily#2\endgroup}%
- }%
}
-%</package>
-\DeclareExpandableDocumentCommand\@Environment{sm}{#2}
-\pdfexpandableoutline{Environment}%
% \end{macrocode}
-% \end{macro}^^A \@TempEnvironment
% \end{macro}^^A \@Environment
% \end{macro}^^A \Environment
% \begin{macro}{\Macro}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
% \begin{macro}{\@Macro}
% \changes{v2.02}{2014/11/02}{neu}^^A
-% Die Auszeichnung und der Indexeintrag eines Befehls sowie für das Paket
-% \pkg{tudscrman} der Hyperlink auf das Handbuch.
-% \begin{macrocode}
+% Die Auszeichnung und der Indexeintrag eines Befehls. Das ordinäre optionale
+% Argument ist für das Anhängen von Parametern o.\,ä. nach dem eigentlichen
+% Makro zu verwenden. Das optionale Argument in runden Klammern dient dem
+% Hyperlink zu einem Befehl aus einem anderen Paket oder einer anderen Klasse
+% aus dem \TUDScript-Bundle.
+% \begin{macrocode}
+\NewExpandableDocumentCommand\@Macro{sm}{#2}
+\NewDocumentCommand\Macro{smod()d''d||}{%
%<*class>
-\NewDocumentCommand\Macro{smd''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{macros}{\ttfamily\bsc}{#2}{Befehl}%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Macro{#2}}[Befehl](#4)%
\else%
- \SetIndexFormat{#1}{#4}%
- \@ProcessOutput{\texttt{\bsc#2}}'#3'{macros}[\ttfamily\bsc]{#2}%
+%</class>
+ \Markup@SetFormat{\ttfamily\bsc}%
+ \Process@Markup{\Macro{#2}}[#3](#4)'#5'%
+ \Process@Index{#1}{\Macro{#2}}(#4)|#6|%
+%<*class>
\fi%
-}
%</class>
-%<*package>
-\NewDocumentCommand\Macro{sm}{%
- \ifdin{\bsc#2}{%
- \IfBooleanTF{#1}{%
- \manualhyperref{macros:#2}{\texttt{\bsc#2}}%
- }{%
- \texttt{\bsc#2}%
- }%
- \index[macros]{\begingroup\ttfamily\bsc#2\endgroup}%
- }%
}
-%</package>
-\DeclareExpandableDocumentCommand\@Macro{sm}{#2}
% \end{macrocode}
% \end{macro}^^A \@Macro
% \end{macro}^^A \Macro
% \begin{macro}{\Length}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% \begin{macro}{\@TempLength}
-% \changes{v2.02}{2014/10/08}{entfernt}^^A
+% \begin{macro}{\@Length}
% Die Auszeichnung und der Indexeintrag einer \LaTeX-Länge.
% \begin{macrocode}
+\NewExpandableDocumentCommand\@Length{sm}{#2}
+\NewDocumentCommand\Length{smd()d''d||}{%
%<*class>
-\NewDocumentCommand\Length{smd''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{macros}{\ttfamily\bsc}{#2}{L\"ange}%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Length{#2}}[L\"ange](#3)%
\else%
- \SetIndexFormat{#1}{#4}%
- \@ProcessOutput{\texttt{\bsc#2}}[\if@declare~{\idxfont(L\"ange)}\fi]'#3'%
- {macros}[\ttfamily\bsc]{#2}[~{\idxfont(L\"ange)}]%
+%</class>
+ \Markup@SetFormat{\ttfamily\bsc}[L\"ange]%
+ \Process@Markup{\Length{#2}}(#3)'#4'%
+ \Process@Index{#1}{\Length{#2}}[L\"ange](#3)|#5|%
+%<*class>
\fi%
-}
%</class>
-%<*package>
-\NewDocumentCommand\Length{sm}{%
- \ifdin{\bsc#2}{%
- \IfBooleanTF{#1}{%
- \manualhyperref{macros:#2}{\texttt{\bsc#2}}%
- }{%
- \texttt{\bsc#2}%
- }%
- \index[macros]{\begingroup\ttfamily\bsc#2\endgroup~{\idxfont(L\"ange)}}%
- }%
}
-%</package>
% \end{macrocode}
-% \end{macro}^^A \@TempLength
+% \end{macro}^^A \@Length
% \end{macro}^^A \Length
+% \begin{macro}{\Counter}
+% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
+% Die Auszeichnung und der Indexeintrag einer \LaTeX-Zählers.
+% \begin{macrocode}
+\NewExpandableDocumentCommand\@Counter{sm}{#2}
+\NewDocumentCommand\Counter{smd()d''d||}{%
+%<*class>
+ \if@tud@changedat%
+ \Process@ChangedAt{\Counter{#2}}[Z\"ahler](#3)%
+ \else%
+%</class>
+ \Markup@SetFormat{\ttfamily}[Z\"ahler]%
+ \Process@Markup{\Counter{#2}}(#3)'#4'%
+ \Process@Index{#1}{\Counter{#2}}[Z\"ahler](#3)|#5|%
+%<*class>
+ \fi%
+%</class>
+}
+% \end{macrocode}
+% \end{macro}^^A \Counter
%
% \iffalse
%<*class>
% \fi
%
% \minisec{Exklusive Auszeichnungen für die Klasse}
-% Alle weiteren Befehle werden ausschließlich für die Klasse \cls{tudscrman}
+% Alle weiteren Befehle werden ausschließlich für die Klasse \cls{tudscrmanual}
% definiert.
%
% \begin{macro}{\Key}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% \begin{macro}{\@TempKey}
+% \begin{macro}{\Key@Value}
+% \changes{v2.05}{2015/11/02}{neu}^^A
+% \begin{macro}{\@Key}
% Die Auszeichnung und der Indexeintrag eines Parameters für Umgebungen und
% Befehle. Das erste Argument ist die Umgebung oder der Befehl, wofür der
-% Parameter gültig ist. Das zweite Argument ist der Parameter selbst. Dafür
-% werden die Befehle \cs{Environment} und \cs{Macro} lokal umdefiniert. Das
-% ordinäre obligatorische Argument danach dient der Zuweisung eines Wertes im
-% Fließtext.
-% \begin{macrocode}
-\newcommand*\@TempKey{}
-\NewDocumentCommand\Key{smmod''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{macros}(#2){\ttfamily}{#3}{Parameter}%
- \else%
- \begingroup%
- \let\Environment\@firstofone%
- \let\Macro\@firstofone%
- \IfValueTF{#4}{%
- \gdef\@TempKey{\texttt{=#4}\if@declare~{\idxfont(Parameter)}\fi}%
- }{%
- \gdef\@TempKey{\if@declare~{\idxfont(Parameter)}\fi}%
- }%
- \SetIndexFormat{#1}{#6}%
- \@ProcessOutput{\texttt{#3}}[\@TempKey]'#5'{macros}(#2)[\ttfamily]{#3}%
- \endgroup%
- \fi%
-}
-% \end{macrocode}
-% \end{macro}^^A \@TempKey
-% \end{macro}^^A \Key
-% \begin{macro}{\PageStyle}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% Die Auszeichnung und der Indexeintrag eines Seitenstils.
+% Parameter gültig ist. Das zweite Argument ist der Parameter selbst. Die
+% optionale Zuweisung eines Wertes kann äquivalent zu \cs{Option} mit dem
+% Trennzeichen~\val{=} im Hauptargument erfolgen.
% \begin{macrocode}
-\NewDocumentCommand\PageStyle{smd''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{macros}{\ttfamily}{#2}{Seitenstil}%
- \else%
- \SetIndexFormat{#1}{#4}%
- \@ProcessOutput{\texttt{#2}\if@declare~{\idxfont(Seitenstil)}\fi}'#3'%
- {macros}[\ttfamily]{#2}[~{\idxfont(Seitenstil)}]%
- \fi%
+\NewExpandableDocumentCommand\@Key{smm}{#2!#3}
+\NewDocumentCommand\Key{sm>{\ProcessorKeyVal}md==d()d''d||}{%
+ \Key@Value{#1}{#2}#3=#4=(#5)'#6'|#7|%
}
-% \end{macrocode}
-% \end{macro}^^A \PageStyle
-% \begin{macro}{\Counter}
-% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% \begin{macro}{\@TempCounter}
-% \changes{v2.02}{2014/10/08}{entfernt}^^A
-% Die Auszeichnung und der Indexeintrag einer \LaTeX-Zählers.
-% \begin{macrocode}
-\NewDocumentCommand\Counter{smd''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{macros}{\ttfamily}{#2}{Z\"ahler}%
+\NewDocumentCommand\Key@Value{mmmd==d==d()d''d||}{%
+ \IfValueT{#5}{\tud@keyval@error}%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Key{#2}{#3}}=#4=[Parameter](#6)%
\else%
- \SetIndexFormat{#1}{#4}%
- \@ProcessOutput{\texttt{#2}}[\if@declare~{\idxfont(Z\"ahler)}\fi]%
- {macros}[\ttfamily]{#2}[~{\idxfont(Z\"ahler)}]%
+ \Markup@SetFormat{\ttfamily}[Parameter]%
+ \Process@Markup{\Key{#2}{#3}}=#4=(#6)'#7'%
+ \Process@Index{#1}{\Key{#2}{#3}}=#4=(#6)|#8|%
\fi%
}
% \end{macrocode}
-% \end{macro}^^A \@TempCounter
-% \end{macro}^^A \Counter
+% \end{macro}^^A \@Key
+% \end{macro}^^A \Key@Value
+% \end{macro}^^A \Key
% \begin{macro}{\Term}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% \begin{macro}{\@TempTerm}
-% \changes{v2.02}{2014/10/08}{entfernt}^^A
+% \begin{macro}{\@Term}
% Die Auszeichnung und der Indexeintrag eines sprachabhängigen Bezeichners.
% \begin{macrocode}
-\NewDocumentCommand\Term{smd''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{terms}{\ttfamily\bsc}{#2}{Bezeichner}%
+\NewExpandableDocumentCommand\@Term{sm}{#2}
+\NewDocumentCommand\Term{smd()d''d||}{%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Term{#2}}[Bezeichner](#3)%
\else%
- \SetIndexFormat{#1}{#4}%
- \@ProcessOutput{\texttt{\bsc#2}}[\if@declare~{\idxfont(Bezeichner)}\fi]'#3'%
- {terms}[\ttfamily\bsc]{#2}%
+ \Markup@SetFormat{\ttfamily\bsc}[Bezeichner]%
+ \Process@Markup{\Term{#2}}(#3)'#4'%
+ \Process@Index{#1}{\Term{#2}}(#3)|#5|%
\fi%
}
% \end{macrocode}
-% \end{macro}^^A \@TempTerm
+% \end{macro}^^A \@Term
% \end{macro}^^A \Term
-% \begin{macro}{\TermTable}
-% \begin{macro}{\@TermTable}
-% \begin{macro}{\@@TermTable}
-% \begin{macro}{\@termlist}
-% Für sprachabhängige Bezeichner wird zusätzlich der Befehl \cs{TermTable}
-% definiert, dem eine kommaseparierte Liste übergeben werden kann. Anhand
-% dieser Liste werden die enthalten Begriffe für die Sprachen Deutsch und
-% English in einer Tabelle ausgegeben. Die Sternversion dieses Befehls nutzt
-% dafür die \env{tabularx}-Umgebung. Für diese kann ein zweites Argument
-% angegeben werden, welches die gewünschte Breite der Tabelle angibt.
+% \begin{macro}{\PageStyle}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% \begin{macro}{\@PageStyle}
+% Die Auszeichnung und der Indexeintrag eines Seitenstils.
% \begin{macrocode}
-\newcommand\@termlist{}
-\let\@termlist\relax
-\NewDocumentCommand\TermTable{smg}{%
- \forcsvlist{\listadd\@termlist}{#2}%
- \ifvmode\else\par\fi%
- \vskip\baselineskipglue%
- \@afterindentfalse\@afterheading%
- \IfBooleanTF{#1}{%
- \IfValueTF{#3}{\setlength\@tempdima{#3}}{\setlength\@tempdima{\linewidth}}%
- \setlength\@tempdimc{-.7\baselineskip}%
- \begin{tabularx}{\@tempdima}{lXX}\@TermTable\end{tabularx}%
- }{%
- \setlength\@tempdimc{\z@}%
- \begin{tabular}{lll}\@TermTable\end{tabular}%
- }%
- \let\@termlist\relax%
-}
-\newcommand*\@TermTable{%
- \toprule%
- \textbf{Bezeichner} & \textbf{Deutsch} & \textbf{Englisch}\tabularnewline%
- \midrule%
- \forlistloop\@@TermTable{\@termlist}%
- \bottomrule%
-}
-\newcommand*\@@TermTable[1]{%
- \Term{#1} & %
- \ifstr{\@nameuse{#1}}{}{\PName{leer}}{\@nameuse{#1}} & %
- \selectlanguage{english}\vspace*{\@tempdimc}%
- \ifstr{\@nameuse{#1}}{}{\PName{empty}}{\@nameuse{#1}}\tabularnewline%
+\NewExpandableDocumentCommand\@PageStyle{sm}{#2}
+\NewDocumentCommand\PageStyle{smd()d''d||}{%
+ \if@tud@changedat%
+ \Process@ChangedAt{\PageStyle{#2}}[Seitenstil](#3)%
+ \else%
+ \Markup@SetFormat{\ttfamily}[Seitenstil]%
+ \Process@Markup{\PageStyle{#2}}(#3)'#4'%
+ \Process@Index{#1}{\PageStyle{#2}}[Seitenstil](#3)|#5|%
+ \fi%
}
% \end{macrocode}
-% \end{macro}^^A \@termlist
-% \end{macro}^^A \@@TermTable
-% \end{macro}^^A \@TermTable
-% \end{macro}^^A \TermTable
+% \end{macro}^^A \@PageStyle
+% \end{macro}^^A \PageStyle
% \begin{macro}{\Font}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% \begin{macro}{\@TempFont}
-% \changes{v2.02}{2014/10/08}{entfernt}^^A
+% \begin{macro}{\@Font}
% Die Auszeichnung und der Indexeintrag eines Schriftelementes.
% \begin{macrocode}
-\NewDocumentCommand\Font{smd''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{fonts}{\ttfamily}{#2}{Schriftelement}%
+\NewExpandableDocumentCommand\@Font{sm}{#2}
+\NewDocumentCommand\Font{smd()d''d||}{%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Font{#2}}[Schriftelement](#3)%
\else%
- \SetIndexFormat{#1}{#4}%
- \@ProcessOutput{\texttt{#2}\if@declare~{\idxfont(Schriftelement)}\fi}%
- {fonts}[\ttfamily]{#2}%
+ \Markup@SetFormat{\ttfamily}[Schriftelement]%
+ \Process@Markup{\Font{#2}}(#3)'#4'%
+ \Process@Index{#1}{\Font{#2}}[Schriftelement](#3)|#5|%
\fi%
}
% \end{macrocode}
-% \end{macro}^^A \@TempFont
+% \end{macro}^^A \@Font
% \end{macro}^^A \Font
% \begin{macro}{\Color}
% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% \begin{macro}{\@TempColor}
-% \changes{v2.02}{2014/10/08}{entfernt}^^A
-% Die Auszeichnung und der Indexeintrag einer Farbe des \CDs.
-% \begin{macrocode}
-\NewDocumentCommand\Color{smod''d||}{%
- \if@changelog%
- \@ProcessChangedAt{#1}{colors}{\ttfamily}{#2}{Farbe}%
+% \begin{macro}{\@Color}
+% Die Auszeichnung und der Indexeintrag einer Farbe des \CDs. Das optionale
+% Argument kann sowohl bei der Deklaration als auch im Fließtext für das
+% Anhängen eines Suffix verwendet werden. Alle mit \cs{Color} ausgezeichneten
+% Farben referenzieren standardmäßig auf das Paket \pkg{tudscrcolor}.
+% \begin{macrocode}
+\NewExpandableDocumentCommand\@Color{sm}{#2}
+\NewDocumentCommand\Color{smoD(){\Package{tudscrcolor}}d''d||}{%
+ \if@tud@changedat%
+ \Process@ChangedAt{\Color{#2}}[Farbe](#4)%
\else%
- \SetIndexFormat{#1}{#5}%
- \@ProcessOutput{\texttt{#2}}[%
- \IfValueT{#3}{~\texttt{(#3)}}\if@declare~{\idxfont(Farbe)}\fi%
- ]'#4'{colors}[\ttfamily]{#2}%
+ \Markup@SetFormat{\ttfamily}[Farbe](%
+ \begingroup\ttfamily{#2\IfValueT{#3}{~(#3)}}\endgroup%
+ )%
+ \Process@Markup{\Color{#2}}[#3](#4)'#5'%
+ \Process@Index{#1}{\Color{#2}}[Farbe](#4)|#5|%
\fi%
}
% \end{macrocode}
-% \end{macro}^^A \@TempColor
+% \end{macro}^^A \@Color
% \end{macro}^^A \Color
-% Damit ist das Intermezzo mit Auszeichnungsbefehlen speziell für die Klasse
-% beendet.
%
% \iffalse
%</class>
% \fi
%
-% \iffalse
+% \subsubsection{Zuordnung der Markup-Befehle für Label und Index}
+%
+% \begin{macro}{\tud@attr@get}
+% \changes{v2.05}{2015/11/03}{neu}^^A
+% Der Befehl \cs{tud@attr@get} ordnet den einzelnen Markup-Befehlen ihren
+% spezifischen Präfix für ein Label oder in der Sternversion den passenden
+% Index zu. Im ersten obligatorischen Argument wird ein Makro angegeben,
+% welches die Zuordnung enthalten soll, das zweite ist der Markup-Befehl selbst.
+% \begin{macrocode}
+\NewDocumentCommand\tud@attr@get{smm}{%
+ \begingroup%
+% \end{macrocode}
+% Das temporäre Makro \cs{@tempa} definiert zunächst alle Markup-Befehle lokal
+% neu und expandiert beim Aufruf für jeden dieser Markup-Befehle~-- abhängig
+% vom Aufruf von \cs{tud@attr@get} mit oder ohne Stern~-- entweder zum Markup
+% passenden Index oder das entsprechende Labelpräfix in \cs{@tempb}.
+% \begin{macrocode}
+ \def\@tempa##1##2##3{%
+ \def##1####1{%
+ \edef\@tempb{\IfBooleanTF{#1}{##2}{##3}}%
+ }%
+ }%
+ \@tempa\Application{\jobname}{app}%
+ \@tempa\Distribution{\jobname}{dst}%
+ \@tempa\Engine{\jobname}{eng}%
+ \@tempa\File{files}{fle}%
+ \@tempa\Class{files}{cls}%
+ \@tempa\Package{files}{pkg}%
+ \@tempa\Option{options}{opt}%
+ \@tempa\Environment{macros}{env}%
+ \@tempa\Macro{macros}{cmd}%
+ \@tempa\Length{misc}{len}%
+ \@tempa\Counter{misc}{cnt}%
+% \end{macrocode}
+% Da \cs{Key} mit zwei Hauptargumenten aufgerufen wird, ist nur die Expansion
+% des ersten Argumentes in \cs{@tempb} notwendig.
+% \begin{macrocode}
%<*class>
-% \fi
+ \def\Key##1##2{%
+ \edef\@tempb{\IfBooleanTF{#1}{macros}{key}}%
+ }%
+ \@tempa\Term{terms}{term}%
+ \@tempa\PageStyle{elements}{pgs}%
+ \@tempa\Font{elements}{font}%
+ \@tempa\Color{elements}{clr}%
+%</class>
+% \end{macrocode}
+% Nachdem alle Markup-Befehle lokal redefiniert wurden, wird der nun angegebene
+% Befehl ausgeführt, was zum eigentlichen Definieren von \cs{@tempb} führt.
+% \begin{macrocode}
+ #3%
+% \end{macrocode}
+% Damit alle Änderungen der temporären Makros lokal bleiben, wird das Ergebnis
+% nach der Gruppe in das erste obligatorische Argument expandiert.
+% \begin{macrocode}
+ \edef\tud@reserved{%
+ \noexpand\endgroup%
+ \def\noexpand#2{\@tempb}%
+ }%
+ \tud@reserved%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@attr@get
%
-% \subsection{Befehle und Umgebungen für die Klasse}
-%
-% Hier taucht alles auf, was lediglich für die Klasse \cls{tudscrman} und nicht
-% für das Paket benötigt wird.
-%
-% \begin{macro}{\CheckIndexFormat}
-% \changes{v2.02}{2014/10/08}{neu}^^A
-% \begin{macro}{\SetIndexFormat}
-% \changes{v2.02}{2014/10/08}{neu}^^A
-% \begin{macro}{\@IndexFormat}
-% \changes{v2.02}{2014/10/08}{neu}^^A
-% Zuerst werden jedoch einige Hilfsmakros erstellt mit denen überprüft wird, ob
-% die Sternversion der zuvor definierten Auszeichnung"=Befehle zusammen mit
-% einer Indexformatierung \val{|idxformat|} genutzt wurde, was sich natürlich
-% widerspricht. In diesem Fall erfolgt eine Warnung.
-% \begin{macrocode}
-\newcommand*\@IndexFormat{}
-\let\@IndexFormat\relax
-\newcommand*\CheckIndexFormat[2]{%
- \IfBooleanT{#1}{%
- \IfValueT{#2}{%
- \ClassWarning{tudscrman}{%
- You've used the starred version so no entry for\MessageBreak%
- the index is created and the optional argument\MessageBreak%
- |#2| will be ignored%
+% \subsubsection{Markup von Variablen, Parametern etc.}
+%
+% \begin{macro}{\Path}
+% \changes{v2.02}{2014/07/22}{\cs{DeclareRobustCommand} ersetzt durch
+% \cs{newrobustcmd} aus \pkg{etoolbox}}^^A
+% \begin{macro}{\PValue}
+% \begin{macro}{\PName}
+% \begin{macro}{\PValueName}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\PSet}
+% \begin{macro}{\PBoolean}
+% \begin{macro}{\PBName}
+% \changes{v2.02}{2014/11/12}{neu}^^A
+% \begin{macro}{\Parameter}
+% \begin{macro}{\OParameter}
+% \begin{macro}{\LParameter}
+% \begin{macro}{\OLParameter}
+% \begin{macro}{\PParameter}
+% \begin{macro}{\POParameter}
+% \changes{v2.03}{2015/01/25}{neu}^^A
+% \begin{macro}{\textOR}
+% Diese Befehle dienen zum Auszeichnen von obligatorischen und optionalen
+% Parametern und Befehlen oder bestimmten Wertzuweisungen.
+% \begin{macrocode}
+\newrobustcmd*\Path[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\PValue[1]{\mbox{\texttt{#1}}}
+\newrobustcmd*\PName[1]{\PValue{\textsl{<#1>}}}
+\newrobustcmd*\PValueName[1]{\PName{#1}}
+\newrobustcmd*\PSet{\PName{Einstellung}}
+\newrobustcmd*\PBoolean{\PName{Ein-Aus-Wert}}
+\newrobustcmd*\PBName[1]{\PBoolean\textOR\PName{#1}}
+\newrobustcmd*\Parameter[1]{%
+ \mbox{\texttt{\textbraceleft}\PName{#1}\texttt{\textbraceright}}%
+}
+\newrobustcmd*\OParameter[1]{\mbox{\texttt{[}\PName{#1}\texttt{]}}}
+\newrobustcmd*\LParameter{\mbox{\texttt{[}\PName{Parameterliste}\texttt{]}}}
+\newrobustcmd*\OLParameter[1]{%
+ \mbox{\texttt{[}\PName{#1}\textOR\PName{Parameterliste}\texttt{]}}%
+}
+\newrobustcmd*\PParameter[1]{\mbox{\texttt{\textbraceleft#1\textbraceright}}}
+\newrobustcmd*\POParameter[1]{\mbox{\texttt{[#1]}}}
+\newrobustcmd*\textOR{\PValue{\,\textbardbl\,}}
+% \end{macrocode}
+% \end{macro}^^A \textOR
+% \end{macro}^^A \POParameter
+% \end{macro}^^A \PParameter
+% \end{macro}^^A \OLParameter
+% \end{macro}^^A \LParameter
+% \end{macro}^^A \OParameter
+% \end{macro}^^A \Parameter
+% \end{macro}^^A \PBName
+% \end{macro}^^A \PBoolean
+% \end{macro}^^A \PSet
+% \end{macro}^^A \PValueName
+% \end{macro}^^A \PName
+% \end{macro}^^A \PValue
+% \end{macro}^^A \Path
+% \begin{macro}{\tud@doifPValue}
+% \changes{v2.05}{2015/11/14}{neu}^^A
+% Der Befehl wird von den Makros \cs{tud@lbl@get@curr} und \cs{tud@idx@get}
+% genutzt, um bedingten Quelltext auszuführen, falls im ersten obligatorischen
+% Argument entweder Parameter entweder direkt oder aber mit einem der beiden
+% Parameter-Markup-Befehle \cs{PValue} oder \cs{PValueName} angegeben wurde.
+% Alle anderen Auszeichnungsbefehle für Parameter sollen ingnoriert werden.
+% \begin{macrocode}
+\newcommand*\tud@doifPValue[3][]{%
+ \IfValueT{#2}{%
+ \begingroup%
+% \end{macrocode}
+% Zunächst wird der Inhalt fast aller ausgezeichneten Parameter unterdrückt.
+% Lediglich das Argument der beiden Makros \cs{PValue} und \cs{PValueName} wird
+% durchgereicht.Dies wird bei der Generierung von Labeln sowie der Erstellung
+% für Einträge im Index und der Änderungsliste benötigt, um die Angabe von
+% speziellen Werten bei Schlüsseln zu erhalten.
+% \begin{macrocode}
+ \let\PValue\@firstofone%
+ \let\PName\@gobble%
+ \let\PValueName\@firstofone%
+ \let\PSet\@empty%
+ \let\PBoolean\@empty%
+ \let\PBName\@gobble%
+ \let\Parameter\@gobble%
+ \let\OParameter\@gobble%
+ \let\LParameter\@empty%
+ \let\OLParameter\@gobble%
+ \let\PParameter\@gobble%
+ \let\POParameter\@gobble%
+ \let\textOR\relax%
+ \let\emph\@firstofone%
+% \end{macrocode}
+% Im optionalen Argument können weitere Angaben gemacht werden, beispielsweise
+% um weitere lokale Redefinitionen vorzunehmen.
+% \begin{macrocode}
+ #1%
+% \end{macrocode}
+% Falls tatsächlich ein passendes Argument angegeben wurde, wird der Quelltext
+% des zweiten obligatorischen Argumentes ausgeführt. Es ist zu beachten, dass
+% dieser \emph{expandiert} wird!
+% \begin{macrocode}
+ \ifxblank{#2}{%
+ \let\tud@reserved\endgroup%
+ }{%
+ \protected@edef\tud@reserved{\noexpand\endgroup#3}%
+ }%
+ \tud@reserved%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@doifPValue
+% \begin{macro}{\Markup@Gobble}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Dieser Befehl definiert alle Markup-Befehle in der Form um, dass diese nur
+% noch das eigentliche Hauptargument unformatiert durchreichen. Dies wird für
+% die Erstellung von Label und Indexeinträgen benötigt. Die Sternversion führt
+% dies auch noch für die Auszeichnung von Parametern etc. durch.
+% \begin{macrocode}
+\NewDocumentCommand\Markup@Gobble{s}{%
+ \let\Application\@Application%
+ \let\Distribution\@Distribution%
+ \let\Engine\@Engine%
+ \let\File\@File%
+ \let\Class\@Class%
+ \let\Package\@Package%
+ \let\Option\@Option%
+ \let\Environment\@Environment%
+ \let\Macro\@Macro%
+ \let\Length\@Length%
+ \let\Counter\@Counter%
+%<*class>
+ \let\Key\@Key%
+ \let\Term\@Term%
+ \let\PageStyle\@PageStyle%
+ \let\Font\@Font%
+ \let\Color\@Color%
+%</class>
+ \IfBooleanF{#1}{%
+ \let\PValue\@firstofone%
+ \let\PName\@firstofone%
+ \let\PValueName\@firstofone%
+ \let\PSet\relax%
+ \let\PBoolean\relax%
+ \let\PBName\@firstofone%
+ \let\Parameter\@firstofone%
+ \let\OParameter\@firstofone%
+ \let\LParameter\relax%
+ \let\OLParameter\@firstofone%
+ \let\PParameter\@firstofone%
+ \let\POParameter\@firstofone%
+ \let\textOR\relax%
+ \let\hologoRobust\@firstofone%
+ \def\TUDScript{TUD-KOMA-Script}%
+ \def\_{-}%
+ \protected\def~{~}%
+ }%
+}
+% \end{macrocode}
+% Mit dem zuvor definierten Makro \cs{Markup@Gobble} wird gleich dafür Sorge
+% getragen, dass die Auszeichnungsbefehle für PDF-Outline-Einträge korrekt
+% funktionieren.
+% \begin{macrocode}
+\AfterPackage*{hyperref}{%
+ \expandafter\pdfstringdefDisableCommands\expandafter{\Markup@Gobble}%
+}
+% \end{macrocode}
+% \end{macro}^^A \Markup@Gobble
+%
+% \subsubsection{Erstellung und Validierung von Labeln}
+%
+% \begin{macro}{\tud@lbl@tmp}
+% \changes{v2.05}{2015/11/03}{neu}^^A
+% \begin{macro}{\tud@lbl@fmt}
+% \changes{v2.05}{2015/11/03}{neu}^^A
+% In \cs{tud@lbl@tmp} werden nachfolgend die durch \cs{tud@lbl@get@curr} oder
+% \cs{tud@attr@get} erzeugten (Sub-)Label gespeichert. Mit dem Hilfsmakro
+% \cs{tud@lbl@fmt} wird innerhalb der beiden Befehle \cs{tud@lbl@@create} und
+% \cs{tud@lbl@get@@curr} dafür gesorgt, dass geschützte Leerzeichen sowie
+% eingabekodierungsabhängige Zeichen korrekt für ein Label umgesetzt werden.
+% Auch durch \cs{NoCaseChange} in Überschriften geschützte Inhalte werden
+% direkt übernommen.
+% \begin{macrocode}
+\newcommand*\tud@lbl@tmp{}
+\newcommand*\tud@lbl@fmt{%
+ \def~{-}%
+ \let\IeC\@firstofone%
+ \def\"##1{##1e}%
+ \def\ss{ss}%
+ \let\NoCaseChange\@firstofone%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@lbl@fmt
+% \end{macro}^^A \tud@lbl@tmp
+% \begin{macro}{\tud@lbl@get@curr}
+% \changes{v2.05}{2015/11/03}{neu}^^A
+% \begin{macro}{\tud@lbl@get@@curr}
+% \changes{v2.05}{2015/11/03}{neu}^^A
+% Für den Befehl \cs{tud@lbl@get@curr} wird das zweite obligatorische
+% Argument (\val{\#3}) für gewöhnlich in der Form
+% \val{\{\string\Bundle{\marg{Klasse/Paket}}:\string\Markup{\marg{Element}}\}}
+% angegeben. Dieses wird beim Einlesen direkt an die beiden Argumentprozessoren
+% \cs{SplitArgument}\val{\{2\}\{:\}} gefolgt von \cs{tud@lbl@create} übergeben.
+% Danach enthält das zweite obligatorische Argument ein Label der Form
+% \meta{Bundlepräfix}\val{:}\meta{Labelpräfix}\val{:}\meta{Element}. Auch die
+% Angabe eines Makros als zweites obligatorische Argument, welches das Label in
+% der richtigen Formatierung enthält, ist möglich.
+% \begin{macrocode}
+\NewDocumentCommand\tud@lbl@get@curr{%
+ sm>{\tud@lbl@create}>{\SplitArgument{2}{:}}md==%
+}{%
+% \end{macrocode}
+% Mit \cs{tud@lbl@get@@curr} wird das im zweiten obligatorischen Argument
+% (\val{\#3}) generierte Label in das im ersten obligatorischen Argument
+% (\val{\#2}) angegebenen Makro gespeichert und ggf. diesem das letzte
+% optionale Argument für einen speziellen Wert zu einem Schlüssel angehangen.
+% \begin{macrocode}
+ \tud@lbl@get@@curr#2{#3}=#4=%
+% \end{macrocode}
+% Die Sternversion von \cs{tud@lbl@get@curr} wird für das Definieren von Labeln
+% bei Deklarationen etc. genutzt. Sollte diese verwendet worden sein, ist die
+% Generierung beendet.
+% \begin{macrocode}
+%<*class>
+ \IfBooleanF{#1}{%
+% \end{macrocode}
+% Andernfalls wird geprüft, ob das erstellte Label überhaupt existiert. Sollte
+% dies nicht der Fall sein wird ein passendes Label für den gegebenen Schlüssel
+% ohne speziellen Wert gesucht.
+% \begin{macrocode}
+ \@tempswafalse%
+ \tud@if@lbl@exists{#2}{%
+ \@tempswatrue%
+ }{%
+ \IfValueT{#4}{%
+ \tud@lbl@get@@curr\tud@reserved{#3}%
+ \tud@if@lbl@exists{\tud@reserved}{%
+ \let#2\tud@reserved%
+ \@tempswatrue%
+ }{}%
}%
}%
+% \end{macrocode}
+% Wurde auch danach noch kein passendes Label gefunden, gibt es u.\,U. eine
+% letzte Möglichkeit, ein passendes Label zu finden. Wird in der Dokumentation
+% gerade ein Paket oder eine sich von den Hauptklassen unterscheidende Klasse
+% aus dem \TUDScript-Bundle erläutert (Umgebungen \env{Bundle}, \env{Bundle*}),
+% so wird eventuell auf ein Element aus ebendiesen Hauptklassen referenziert.
+% In diesem Fall wird \cs{tud@lbl@get@dflt} aufgerufen, um den Bundlepräfix
+% für das Label entsprechend zu setzen.
+% \begin{macrocode}
+ \if@tempswa\else%
+ \tud@if@bdl{\tud@lbl@get@dflt#2{#3}=#4=}{}%
+ \fi%
}%
+%</class>
}
% \end{macrocode}
-% Der Befehl \cs{SetIndexFormat} setzt das gewünschte Format für den jeweilgen
-% Indexeintrag.
+% Mit dem Befehl \cs{tud@lbl@get@@curr} wird das generierte Label in das beim
+% Aufruf von \cs{tud@lbl@get@curr} angegebenen Makro gespeichert.
% \begin{macrocode}
-\newcommand*\SetIndexFormat[2]{%
- \CheckIndexFormat{#1}{#2}%
- \IfBooleanTF{#1}{%
- \def\@IndexFormat{#1}%
+\NewDocumentCommand\tud@lbl@get@@curr{mmd==}{%
+ \def#1{#2}%
+% \end{macrocode}
+% Sollte optional mit \cs{PValue} bzw. \cs{PValueName} ein spezieller Wert für
+% einen Schlüssel übergeben worden sein, wird dieser ggf. angehängt.
+% \begin{macrocode}
+ \tud@doifPValue[\tud@lbl@fmt]{#3}{\noexpand\appto\noexpand#1{=#3}}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@lbl@get@@curr
+% \end{macro}^^A \tud@lbl@get@curr
+% \begin{macro}{\tud@lbl@get@dflt}
+% \changes{v2.05}{2015/11/04}{neu}^^A
+% \begin{macro}{\tud@lbl@get@@dflt}
+% \changes{v2.05}{2015/11/04}{neu}^^A
+% Diese beiden Makros werden genutzt, um mit \cs{tud@lbl@get@curr} innerhalb
+% der Umgebungen \env{Bundle} und \env{Bundle*} für den Fall, dass ein
+% gesuchtes Label für das aktuelle Bundle-Element nicht existiert, nach diesem
+% Element in den existierenden Labels der Hauptklassen zu suchen.
+%
+% Dabei wird das bereits generierte Label durch \cs{tud@lbl@get@dflt} in
+% seine drei Hauptbestandteile zur WEiterverarbeitung zerlegt.
+% \begin{macrocode}
+\NewDocumentCommand\tud@lbl@get@dflt{m>{\SplitArgument{2}{:}}mr==}{%
+ \tud@lbl@get@@dflt{#1}#2=#3=%
+}
+% \end{macrocode}
+% Durch \cs{tud@lbl@get@@dflt} wird als erstes geprüft, ob der Bundlepräfix
+% bereits dem Standardpräfix für die Hauptklassen entspricht. Nur wenn dies
+% nicht der Fall ist, wird die Labelgenerierung abermals ausgeführt.
+% \begin{macrocode}
+\NewDocumentCommand\tud@lbl@get@@dflt{mmmmr==}{%
+ \edef\tud@reserved{\expandafter\detokenize\expandafter{\tud@bdl@dflt}}%
+ \ifstr{\tud@reserved}{#2}{}{%
+% \end{macrocode}
+% Dabei erfolgt der Aufruf logischerweise mit dem richtigen Bundlepräfix.
+% \begin{macrocode}
+ \tud@lbl@get@curr#1{\tud@bdl@dflt:#3:#4}=#5=%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@lbl@get@@dflt
+% \end{macro}^^A \tud@lbl@get@dflt
+% \begin{macro}{\tud@if@lbl@exists}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Mit dem Befehl \cs{tud@if@lbl@exists} wird eine Fallunterscheidung bezüglich
+% der Existenz eines Labels in der Form
+% \meta{Bundlepräfix}\val{:}\meta{Labelpräfix}\val{:}\meta{Element}
+% durchgeführt. Das zu prüfende Label ist in gleicher Weise wie beim Makro
+% \cs{tud@lbl@get@curr} anzugeben. Je nachdem, ob ein existierendes Label
+% gefunden wird oder nicht, wird das zweite oder das dritte obligatorische
+% Argument ausgeführt.
+% \begin{macrocode}
+%<*class>
+\NewDocumentCommand\tud@if@lbl@exists{%
+ >{\tud@lbl@create}>{\SplitArgument{2}{:}}m%
+}{%
+ \ifcsdef{r@#1}{%
+ \expandafter\@firstoftwo%
}{%
- \IfValueTF{#2}{\def\@IndexFormat{#2}}{\def\@IndexFormat{}}%
+ \expandafter\@secondoftwo%
}%
}
+%</class>
% \end{macrocode}
-% \end{macro}^^A \@IndexFormat
-% \end{macro}^^A \SetIndexFormat
-% \end{macro}^^A \CheckIndexFormat
-% \begin{macro}{\if@declare}
-% \begin{macro}{\if@stareddeclare}
-% \changes{v2.02}{2014/10/09}{neu}^^A
-% \begin{macro}{\if@openindex}
-% \begin{macro}{\if@deprecated}
-% Dies sin ein paar Hilfsmakros zur Steuerung des Markup sowie der Ausgabe von
-% Deklarationen, Index und Änderungsliste, welche bei den nächsten Befehlen und
-% Umgebungen genutzt werden.
+% \end{macro}^^A \tud@if@lbl@exists
+% \begin{macro}{\tud@lbl@create}
+% \changes{v2.05}{2015/11/03}{neu}^^A
+% \begin{macro}{\tud@lbl@@create}
+% \changes{v2.05}{2015/11/03}{neu}^^A
+% Das Makro \cs{tud@lbl@@create} ist ein Argumentprozessor, welcher als Eingabe
+% genau drei Argumente für das Erstellen eines gültigen Labels erwartet. Er
+% wird sowohl von \cs{tud@lbl@get@curr} als auch von \cs{tud@if@lbl@exists}
+% verwendet. Vor der Nutzung von \cs{tud@lbl@create} muss das Argument zuvor
+% bereits mit \cs{SplitArgument}\val{\{2\}\{:\}} aufgerufen worden sein. Diese
+% Eigenheit macht die Definition von \cs{tud@lbl@create} notwendig, um das
+% Ergebnis der zuvor vorgenommenen Argumentaufspaltung verarbeiten zu können,
+% in dem dieses an \cs{tud@lbl@@create} durchgereicht wird. Eine Integration
+% der Spaltung des Argumentes in \cs{tud@lbl@create} ist aufgrund des
+% mehrmaligen rekursiven Aufrufs von \cs{tud@lbl@create} nicht möglich.
+%
+% Mit dem Argumentprozessor \cs{tud@lbl@create} wird es möglich, an die beiden
+% Befehle \cs{tud@lbl@get@curr} und \cs{tud@if@lbl@exists} sowohl ein
+% einzelnes Makro, welches das Label bereits beinhaltet als auch einen
+% Markup-Befehl ggf. mit einem Bundlepräfix zu übergeben. In beiden Fällen
+% wird aus dem übergebenen Argument ein eindeutiges Label in der Form
+% \meta{Bundlepräfix}\val{:}\meta{Labelpräfix}\val{:}\meta{Element} generiert
+% und als resultierendes Argument an das aufrufenden Makro übergeben.
+% \begin{macrocode}
+\NewDocumentCommand\tud@lbl@create{m}{\tud@lbl@@create#1}
+% \end{macrocode}
+% Es gibt insgesamt vier verschiedene Varianten der Argumentenübergabe an den
+% Argumentprozessor \cs{tud@lbl@@create}.
+% \begin{description}\let\itshape\slshape
+% \item[\cs{tud@lbl@@create}\val{\ignorespaces
+% \{\string\LabelMakro\}\{-NoValue-\}\{-NoValue-\}\ignorespaces
+% }]\strut\newline
+% Das Label ist bereits in \cs{LabelMakro} enthalten und soll expandiert
+% werden. Dabei spielt es keine Rolle, ob die durch \val{:} getrennten
+% Bestandteile innerhalb des Labels schon als einfacher String oder in der
+% Markupform gegeben sind.
+% \item[\cs{tud@lbl@@create}\val{\ignorespaces
+% \{-NoValue-\}\{\string\Markup{\marg{Element}}\}\{-NoValue-\}\ignorespaces
+% }]\strut\newline
+% Das Label soll für ein Markupelement generiert werden, wobei in jedem
+% Fall der Inhalt aus \cs{tud@bdl@curr} als Bundlepräfix genutzt wird.
+% \item[\cs{tud@lbl@@create}\val{\ignorespaces
+% \{\string\Class/\string\Package\marg{\dots}\}\ignorespaces
+% \{\string\Markup{\marg{Element}}\}\ignorespaces
+% \{-NoValue-\}\ignorespaces
+% }]\strut\newline
+% Das Label soll für ein Markupelement generiert werden.
+% Dabei wurde explizit ein Paket oder eine Klasse aus dem Bundle angegeben
+% oder implizit das Makro \cs{tud@bdl@curr} als Argument verwendet,
+% welches innerhalb der Umgebungen \env{Bundle} und \env{Bundle*} auf
+% das/die aktuell beschriebene Paket/Klasse gesetzt wurde.
+% \item[\cs{tud@lbl@@create}\val{\ignorespaces
+% \marg{Bundlepräfix}\ignorespaces
+% \marg{Labelpräfix}\ignorespaces
+% \marg{Element}\ignorespaces
+% }]\strut\newline
+% Das Label ist bereits vollständig bestimmt und die Argumente werden
+% entweder als String oder als Markup übergeben. Auch Mischformen sind
+% möglich. In diesem Fall wird es einfach wieder zusammengesetzt. Diese
+% Variante tritt durch rekursiven Aufruf des Argumentprozessors auf.
+% \end{description}
+% \begin{macrocode}
+\NewDocumentCommand\tud@lbl@@create{mmm}{%
+ \begingroup%
+% \end{macrocode}
+% Zu Beginn werden die Markup-Befehle auf ihre expandierbaren Varianten gesetzt
+% und die zusätzlichen Redefinitionen für die Labelgenerierung aktiviert.
% \begin{macrocode}
-\newif\if@declare
-\newif\if@stareddeclare
-\newif\if@openindex
-\newif\if@deprecated
+ \Markup@Gobble%
+ \tud@lbl@fmt%
% \end{macrocode}
-% \end{macro}^^A \if@deprecated
-% \end{macro}^^A \if@openindex
-% \end{macro}^^A \if@stareddeclare
-% \end{macro}^^A \if@declare
+% Sind alle drei Bestandteile bereits vorhanden, wird das Label einfach wieder
+% zusammengesetzt.
+% \begin{macrocode}
+ \IfValueTF{#3}{%
+ \edef\@tempa{#1:#2:#3}%
+ }{%
+% \end{macrocode}
+% Hier geschieht der eigentliche Vorgang der Labelgenerierung. Dabei wird mit
+% dem Makro \cs{tud@attr@get} der für den jeweiligen Markup-Befehl aus dem
+% zweiten obligatorischen Argument spezifische Labelpräfix generiert. Abhängig
+% davon, ob im ersten obligatorischen Argument ein spezieller Bundlepräfix
+% angegeben wurde, wird dieser entweder verwendet oder aber implizit auf den
+% Inhalt aus \cs{tud@bdl@dflt} zurückgegriffen.
+% \begin{macrocode}
+ \IfValueTF{#2}{%
+ \tud@attr@get\@tempb{#2}%
+ \IfValueTF{#1}{%
+ \ifxblank{#1}{%
+ \edef\@tempa{\tud@bdl@dflt:\@tempb:#2}%
+ }{%
+ \edef\@tempa{#1:\@tempb:#2}%
+ }%
+ }{%
+ \edef\@tempa{\tud@bdl@curr:\@tempb:#2}%
+ }%
+ }{%
+% \end{macrocode}
+% Wurde lediglich ein Makro angegeben, wird dieses einfach expandiert.
+% \begin{macrocode}
+ \edef\@tempa{#1}%
+ }%
+ }%
+% \end{macrocode}
+% Das Ergebnis der Labelgenrierung wurde für alle der behandelten Fälle in
+% \cs{@tempa} geschrieben. Abschließnd wird \cs{ProcessedArgument} nach der
+% Gruppe mit dessen Inhalt definiert. Dabei werden bei der Expansion die
+% catcodes aller Zeichen in Tokens der Klasse \val{other} gewandelt, um diese
+% später sicher vergleichen zu können.
+% \begin{macrocode}
+ \edef\@tempc{%
+ \noexpand\endgroup%
+ \def\noexpand\ProcessedArgument{%
+ \expandafter\detokenize\expandafter{\@tempa}%
+ }%
+ }%
+ \@tempc%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@lbl@@create
+% \end{macro}^^A \tud@lbl@create
%
% \subsubsection{Abarbeitung der Markup-Befehle}
%
-% In der Klasse \cls{tudscrman} werden die Markup-Befehle entweder im Fließtext
-% verwendet und dabei automatisch Einträge in den Index erzeugt oder aber diese
-% werden als Argument der Umgebung \env{Declaration} genutzt.
+% Die Festlegung des individuellen Markups der Einzelnen Elemente erfolgt bei
+% der Definition mit \cs{Markup@SetFormat}. Bei der Nutztung der Markup-Befehle
+% im Fließtext wird zum einen das in \cs{Markup@Format} individuell definierte
+% Markup umgesetzt und zum anderen wird dabei gleich automatisch ein Eintrag
+% für das Element im Index erzeugt.
+%
+% In der Klasse \cls{tudscrmanual} werden die Markup-Befehle zusätzlich auch
+% als Argument der Umgebung \env{Declaration} genutzt. Für diese Verwendung
+% kommt die Definiton von \cs{Markup@Declare} und ggf. \cs{Markup@Suffix} zum
+% Einsatz.
%
-% \begin{macro}{\@ProcessOutput}
+% \begin{macro}{\Process@Markup}
% \changes{v2.02}{2014/10/08}{Markup für Index und Fließtext getrennt}^^A
% \changes{v2.02}{2014/10/09}{Anpassung für Umgebung \env{Declaration*}}^^A
-% Der Befehl \cs{@ProcessOutput} ist das Herzstück der Auszeichnungen aller
-% Elemente. Das erste obligatorische Argument ist der übergebene Wert, welcher
-% in einer bestimmten Form ausgezeichnet werden soll. Darauf folgen die ein
-% möglicher \oarg{Anhang} sowie ggf. das \val{'}\meta{Kürzel}\val{'} für die
-% Erweiterung der Referenzierunug im Fließtext. Danach wird der Zielindex
-% \marg{Index} und~-- für Parameter~-- der \parg{Haupteintrag} übergeben. Es
-% folgt der zu erstellende Indexeintrag mit \oarg{Vorsatz}, \marg{Eintrag} und
-% \oarg{Anhang}. Die Formatierung für den Indexbefehl wurde zuvor durch
-% \cs{SetIndexFormat} in \cs{@IndexFormat} gespeichert. Der vollständige
-% Funktionsaufruf lautet:
+% \changes{v2.05}{2015/11/05}{Neuimplementierung}^^A
+% \begin{macro}{\Markup@Suppress}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@@Suppress}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Der Befehl \cs{Process@Markup} ist das Herzstück der Auszeichnungen aller
+% Elemente. Das obligatorische Argument ist das auszuzeichnende Element selbst,
+% welches im weiteren Verlauf der Abarbeitung expandiert wird. Darauf folgen
+% mehrere optionale Argumente. Mit \val{=}\meta{Wert}\val{=} kann ein Wert für
+% einen Schlüssel angegeben werden, was aktuell von \cs{Option} und \cs{Key}
+% genutzt wird. Darauf folgend kann in einem ordinären optionalen Argument ein
+% Suffix für die Fließtextausgabe angegeben werden, was von \cs{Distribution}
+% sowie \cs{Environment}, \cs{Macro} und \cs{Color} verwendet wird.
+%
+% Mit dem optionalen Argument in runden Klammern kann eine Klasse oder ein
+% Paket aus dem \TUDScript-Bundle angegeben werden, auf welche sich das
+% aktuelle auszuzeichnende Element bezieht und ggf. das Label und der
+% Indexeintrag dementsprechend erzeugt werden sollen. Verwendet wird es mit:
+% \val{(\string\Class\marg{Klasse}/\string\Package\marg{Paket})}
+%
+% Das optionale Argument in Guillemets wird von \cs{Package} benötigt, um ggf.
+% die automatisch generierten Links auf CTAN anzupassen. Zuletzt kann mit
+% \val{'}\meta{Referenzvariante}\val{'} der automatisch erzeugte Querverweis in
+% verschiedenen Varianten formatiert werden. Der vollständige Funktionsaufruf:
% \newline\begingroup\scriptsize
-% \cs{@ProcessOutput}*
-% \marg{Ausgabe}\oarg{Anhang}\val{'}\meta{Kürzel}\val{'}\ignorespaces%
-% \marg{Index}\parg{Haupteintrag}\oarg{Vorsatz}\marg{Eintrag}\oarg{Anhang}
+% \cs{Process@Markup}\val{\ignorespaces%
+% \marg{Element}=\meta{Wert}=\oarg{Ausgabesuffix}\ignorespaces%
+% \parg{Bundleelement}<\meta{CTAN-Paket}>\ignorespaces%
+% '\meta{Referenzvariante}'\ignorespaces%
+% }%
% \endgroup
+%
+% In eingen Fällen ist es beim Aufruf eines Markup-Befehls nicht erwünscht,
+% dass dieser auch tatsächlich ausgegeben wird. Für diesen Fall wird gleich zu
+% Beginn der Befehl \cs{Markup@Suppress} definiert, der dies ermöglicht.
+% \begin{macrocode}
+\newcommand*\Markup@Suppress{\let\Process@Markup\Markup@@Suppress}
+\NewDocumentCommand\Markup@@Suppress{md==od()d<>d''}{}
+% \end{macrocode}
+% Nun folgt die eigentliche Befehlsdefinition.
% \begin{macrocode}
-\NewDocumentCommand\@ProcessOutput{mod''d()md()omo}{%
+\NewDocumentCommand\Process@Markup{md==od()d<>d''}{%
% \end{macrocode}
-% Mit dem Schalter \cs{if@declare} wird unterschieden, ob ein beliebiger
-% Auszeichnungsbefehl innerhalb der Umgebung~\env{Declaration} verwendet wird.
-% Ist dies der Fall wird ein Label und mit \cs{@HyperIndex} ein spezieller
-% Indexeintrag für die Deklaration erstellt. Eine Ausgabe der Auszeichnung
-% erfolgt in diesem Fall nicht, dafür ist der Befehl \cs{printdeclarationlist}
-% verantwortlich. Außerdem wird mit Hilfe der \env{Declaration}-Umgebung der
-% Anfang und das Ende der Deklaration für den Indexeintrag mit \cs{@HyperIndex}
-% exakt festgelegt. Der Schalter \cs{if@openindex} wird zu Beginn der Umgebung
-% auf \cs{@openindextrue} gesetzt, am Ende dieser auf \cs{@openindexfalse}.
+% Zu Beginn wird mit dem Schalter \cs{if@tud@declare} geprüft, ob die der
+% Markup-Befehl in einer der Deklarationsumgebungen oder anderweitig genutzt
+% wird. Für den ersten Fall erfolgt die Weiterverarbeitung der Argumente mit
+% \cs{Process@@MarkupDeclare}, andernfalls kommt \cs{Process@@MarkupInline} zum
+% Einsatz. Da beide Makros die gleiche Reihenfolge der Argumente verlangen,
+% wird der jeweilige Befehlsaufruf über ein Token-Register realisiert, womit
+% das Zusammensetzen der notwendigen Übergabewerte erleichtert wird.
+%
+% Die Fallunterscheidung betrifft des Weiteren die Erzeugung des Labels. Für
+% eine Deklaration wird die Sternversion von \cs{tud@lbl@get@curr} verwendet,
+% welche ein Label aus den gegebenen Argumenten zusammensetzt. Ist keine
+% Deklaration aktiv, versucht \cs{tud@lbl@get@curr} ein gültiges, schon
+% vorhandenes Label zu verwenden. Das generierte Label wird anschließend als
+% erstes Argument für das weiterverabeitende Makro genutzt.
% \begin{macrocode}
- \if@declare%
+%<*class>
+ \if@tud@declare%
+ \tud@toks@{\Process@@MarkupDeclare}%
+ \IfValueTF{#4}{%
+ \tud@lbl@get@curr*\tud@lbl@tmp{#4:#1}=#2=%
+ }{%
+ \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:#1}=#2=%
+ }%
+ \else%
+%</class>
+ \tud@toks@{\Process@@MarkupInline}%
+ \tud@lbl@get@curr\tud@lbl@tmp{#4:#1}=#2=%
+%<*class>
+ \fi%
+%</class>
+ \eaddto@hook\tud@toks@{\expandafter{\tud@lbl@tmp}}%
+% \end{macrocode}
+% Danach wird der Inhalt des im ersten Argument übergebenen Markup-Befehls in
+% einer Gruppe ein temporäres Makro expandiert und als zweites Argument für die
+% Weiterverarbeitung genutzt.
+% \begin{macrocode}
+ \begingroup%
+ \Markup@Gobble*%
+ \protected@edef\tud@reserved{%
+ \noexpand\endgroup%
+ \def\noexpand\tud@reserved{#1}%
+ }%
+ \tud@reserved%
+ \eaddto@hook\tud@toks@{\expandafter{\tud@reserved}}%
+% \end{macrocode}
+% Es folgen gegebenenfalls die optionalen Argument \val{=}\meta{Wert}\val{=}
+% sowie \oarg{Ausgabesuffix}~-- falls diese angegeben wurden.
+% \begin{macrocode}
+ \IfValueT{#2}{\addto@hook\tud@toks@{=#2=}}%
+ \IfValueT{#3}{\addto@hook\tud@toks@{[#3]}}%
+% \end{macrocode}
+% Erfolgt gerade eine Deklaration, wird mit dem Schalter \cs{if@openindex}
+% eigentlich unterschieden, ob ein öffnender oder ein schließender Indexeintrag
+% erzeugt werden soll. Dieser wird mit \cs{Process@@Index} erstellt. Um den
+% schließenden Indexeintrag zu erzeugen, ist die Ausführung des Hauptargumentes
+% der Deklarationsumgebung am Ende dieser notwendig. Dabei soll allerdings das
+% Markup nicht noch ein weiteres Mal ausgegeben werden. Deshalb wird der
+% Schalter hier genutzt, um lediglich zu Beginn einer Deklaration das Markup
+% auszuführen. Dabei Angaben für eine \val{'}\meta{Referenzvariante}\val{'}
+% nicht erlaubt.
+% \begin{macrocode}
+%<*class>
+ \if@tud@declare%
\if@openindex%
- \IfValueT{#3}{%
- \ClassWarning{tudscrman}{%
+ \IfValueT{#6}{%
+ \ClassWarning{tudscrmanual}{%
It is not possible to use any cross-reference\MessageBreak%
- shorthand like '#3' within the arguments of\MessageBreak%
+ shorthand like '#6' within the arguments of\MessageBreak%
the environment `Declaration'%
}%
}%
% \end{macrocode}
-% Das zu erzeugende Label wird definiert.
+% Für ein eventuell notwendiges Debugging, wird \cs{Process@@MarkupDeclare} mit
+% seinen Argumenten ggf. in das Log-File geschrieben.
% \begin{macrocode}
- \IfValueTF{#6}{\edef\@tempa{#5:#6:#8}}{\edef\@tempa{#5:#8}}%
+ \tud@trace@markup{declare}{\the\tud@toks@}%
+ \else%
+ \tud@toks@{\relax}%
+ \fi%
% \end{macrocode}
-% Für die Deklaration veralteter Optionen, Befehle etc. kann die Sternvariante
-% des Auszeichnungsbefehls verwendet werden, um das Erzeugen eines Labels zu
-% unterbinden.
+% Findet der Auszeichnungsbefehl außerhalb einer Umgebung für Deklarationen
+% Verwendung, werden die optionalen Argumente für einen CTAN-Link
+% \val{<}\meta{CTAN-Paketname}\val{>} sowie die Formatierung des Querverweise
+% \val{'}\meta{Referenzvariante}\val{'} hinzugefügt~-- falls vorhanden. Dies
+% geschieht jedoch nur, wenn das Markup nicht innerhalb eines Index erfolgt,
+% da hier URL-Hyperlinks und formatierte Querverweise unerwünscht sind. Mit
+% der Angabe eines leeren Argumentes \val{<>} wird gar kein Hyperlink erstellt.
% \begin{macrocode}
- \if@deprecated%
- \expandafter\IfBooleanF\expandafter{\@IndexFormat}{%
- \manualhyperdef{\@tempa}%
- }%
+ \else%
+%</class>
+ \if@tud@index\else%
+ \IfValueT{#5}{%
+ \ifxblank{#5}{}{\addto@hook\tud@toks@{<http://www.ctan.org/pkg/#5>}}%
+ }%
+ \IfValueT{#6}{\addto@hook\tud@toks@{'#6'}}%
+ \fi%
+%<*class>
% \end{macrocode}
-% Wurde die Sternversion eines Auszeichnungsbefehls innerhalb der Umgebung
-% \env{Declaration} genutzt, wird lediglich ein Label aber kein Eintrag im
-% Index erzeugt.
+% Auch hier wird ggf. ein Debug-Eintrag ins Log-File geschrieben.
% \begin{macrocode}
- \else%
- \expandafter\IfBooleanTF\expandafter{\@IndexFormat}{%
- \manualhyperdef{\@tempa}%
+ \tud@trace@markup{output}{\the\tud@toks@}%
+ \fi%
% \end{macrocode}
-% Andernfalls werden Label bzw. Hyperlinkanker und ein Eintrag in den Index
-% erzeugt, wobei die Formatierung dieses Eintrags fest vorgegeben ist.
-% \begin{macrocode}
- }{%
- \ifx\@IndexFormat\@empty\else%
- \ClassWarning{tudscrman}{%
- It is not possible to use any indexing format\MessageBreak%
- like |\@IndexFormat| within the arguments of the\MessageBreak%
- environment `Declaration'%
+% Ganz zum Schluss wird noch für beide Fälle geprüft, ob \parg{Bundleelement}
+% angegeben wurde. Ist dies der Fall, wird zum einen das \meta{Bundleelement}
+% zur Überprüfung ggf. in das Log-File geschrieben, zum anderen wird geprüft,
+% ob für das \meta{Element} überhaupt ein Link definiert wurde, der verwendet
+% werden soll. Ist dies nicht der Fall, wird eine Warnung ausgegeben. Dies ist
+% möglich, da durch die automatische Labelgenerierung normalerweise alle nicht
+% existierenden Labels mit \meta{Bundlepräfix} auf \cs{tud@bdl@dftl} verweisen
+% müssten. Für die wenigen Fälle, in denen gezielt auf einen Querverweis
+% verzichtet werden soll, kann ein leeres Argument \val{()} angegeben werden.
+% \begin{macrocode}
+ \if@tud@index\else%
+ \IfValueT{#4}{%
+ \ifxblank{#4}{}{%
+ \tud@trace@bdl@add{#4}%
+ \ifstr{#6}{none}{}{%
+ \tud@if@lbl@exists{\tud@lbl@tmp}{}{%
+ \ClassWarning{tudscrmanual}{%
+ No existing label \tud@lbl@tmp\space for #4%
}%
- \fi%
-% \end{macrocode}
-% Wird zur Deklaration die Umgebung \env{Declaration*} genutzt, so wird der
-% Hyperlink ein ganzes Stück nach oben verschoben. Hintergrund ist, dass diese
-% Umgebung nur zum Deklarieren von Klassen und Paketen gedacht ist und direkt
-% nach einer Gliederungsüberschrift folgen sollte.
-% \begin{macrocode}
- \if@stareddeclare%
- \manualhyperdef'{\@tempa}%
+ }%
+ }%
+ }%
+ }%
+ \fi%
% \end{macrocode}
-% Andernfalls wird der normale Hyperlink gesetzt. Das Label zum Prüfen wird
-% implizit durch \cs{manualhyperdef} gesetzt.
+% Nun erfolgt mit \cs{Process@@MarkupDeclare} bzw. \cs{Process@@MarkupInline}
+% die Ausführung der eigentlichen Auszeichnung.
% \begin{macrocode}
- \else%
- \manualhyperdef{\@tempa}%
- \fi%
- \@HyperIndex{#5}{#6}{#7}{#8}{#9}{(declare}%
- }%
- \fi%
+%</class>
+ \the\tud@toks@%
+}
% \end{macrocode}
-% Die \env{Declaration*}"=Umgebung erzeugt keine direkte Ausgabe sondern nur
-% die Hyperlinks und Indexeinträge. Die Nennung der Klasse bzw. des Paketes
-% oder der Pakete sollte in der Überschrift davor erfolgen.
+% \end{macro}^^A \Markup@@Suppress
+% \end{macro}^^A \Markup@Suppress
+% \end{macro}^^A \Process@Markup
+% \begin{macro}{\Process@@MarkupDeclare}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Mit \cs{Process@@MarkupDeclare} wird die formatierte Ausgabe der Deklaration
+% realisiert. Wie diese genau gestaltet ist, wird durch \cs{tud@declare@num}
+% bestimmt. Folgende Werte sind möglich:
+% \begin{description}
+% \item[\val{0}:] Ausgabe von Markup, Erzeugen eines Labels
+% \item[\val{1}:] Ausgabe von Markup, kein Label
+% \item[\val{2}:] keine Ausgabe, aber Erzeugen eines Labels
+% \item[\val{3}:] keine Ausgabe, Erzeugen eines nach oben verschobenen Labels
+% \end{description}
+% Normalerweise kommt die erste Variante zum Einsatz. Die zweite Variante wird
+% genutzt, wenn mit mit der Umgebung \env{Obsolete} zwar eine Ausgabe aber kein
+% Label erstellt werden soll. Dies wird verwendet, um bei der Beschreibung
+% veralteter Werte oder Parameter diese im Kontext ihrer Option oder Umgebung
+% bzw. ihres Befehls anzugeben.
+%
+% Die dritte Version kommt bei Erklärungen mit der Umgebung \env{Declaration*}
+% zum Einsatz, welche im Fließtext verwendet wird und kein Markup, wohl aber
+% eine Label für das beschriebene Element erzeugt werden soll. Für die vierte
+% Variante, welche die Umgebung \env{Bundle*} betrifft, gilt dies im Prinzip
+% gleichermaßen. Allerdings wird diese Umgebung zu Beginn der Deklarationen
+% eines Bundleelements direkt nach einer Überschrift verwendet. Hier soll der
+% erzeugte Link direkt auf der Höhe der Überschrift platziert werden.
+%
+% Das erste Argument enthält das zu definierende Label, gefolgt vom Element,
+% welches ausgezeichnet werden soll. Die tatsächliche Ausgabe erfolgt mit dem
+% Makro \cs{Markup@Output}. An dieses werden die beiden optionalen Argumente
+% \val{=}\meta{Wert}\val{=} und \oarg{Ausgabesuffix} direkt weitergereicht.
+%
+% Vor der eigentlichen Ausführung wird mit \cs{Markup@CheckFormat} geprüft, ob
+% für das auszuzeichnende Element mit \cs{Markup@SetFormat} überhaupt eine
+% Ausgabeformatierung defineirt wurde. Nach der Ausgabe wird diese Formatierung
+% mit \cs{Markup@ClearFormat} zurückgesetzt.
% \begin{macrocode}
- \if@stareddeclare\else%
- #1\IfValueT{#2}{#2}%
- \fi%
+%<*class>
+\NewDocumentCommand\Process@@MarkupDeclare{mmd==o}{%
+ \Markup@CheckFormat%
+ \ifcase\tud@declare@num\relax%
+ \tudhyperdef{#1}%
+ \Markup@Output{#2}=#3=[#4]%
+ \or%
+ \Markup@Output{#2}=#3=[#4]%
+ \or%
+ \tudhyperdef{#1}%
+ \or%
+ \tudhyperdef*{#1}%
+ \def\@tempa##1:##2:##3\@nil{\tudhyperdef*{##3:##2:##3}}%
+ \@tempa#1\@nil%
+ \fi%
+ \Markup@ClearFormat%
+}
+%</class>
% \end{macrocode}
-% Zum Ende der \env{Declaration}"=Umgebung wird der Indexeintrag beendet.
+% \end{macro}^^A \Process@@MarkupDeclare
+% \begin{macro}{\Process@@MarkupInline}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Mit \cs{Process@@MarkupInline} wird die formatierte Ausgabe außerhalb der
+% Deklarationsumgebungen umgesetzt. Dabei entsprechen die ersten vier Argument
+% denen des Befehls \cs{Process@@MarkupDeclare} und werden bis auf das Label
+% ebenso an \cs{Markup@Output} übergeben, nachdem mit \cs{Markup@CheckFormat}
+% auf eine existierende Markup-Definition geprüft wurde.
% \begin{macrocode}
- \else%
- \if@deprecated\else%
- \expandafter\IfBooleanF\expandafter{\@IndexFormat}{%
- \@HyperIndex{#5}{#6}{#7}{#8}{#9}{declare)}%
- }%
- \fi%
- \fi%
- \else%
+\NewDocumentCommand\Process@@MarkupInline{mmd==od<>d''}{%
+ \Markup@CheckFormat%
% \end{macrocode}
-% Findet der Auszeichnungsbefehl außerhalb der \env{Declaration}-Umgebung im
-% Fließtext Verwendung, wird für den Fall, dass keine Sternversion genutzt
-% wurde, mit \cs{@HyperIndex} ein Eintrag im dazugehörigen Index erzeugt.
+% Um die aktuelle Definiton der temporären Makros nicht zu ändern, erfolgt die
+% formatierte Ausgabe in einer Gruppe. Dabei wird in \cs{@tempc} die minimale
+% Variante gesichert.
% \begin{macrocode}
- \ifx\@IndexFormat\relax%
- \ClassError{tudscrman}{\string\SetIndexFormat\space unused}{%
- It seems you have forgotten to use \string\SetIndexFormat.%
- }%
- \else%
- \expandafter\IfBooleanF\expandafter{\@IndexFormat}{%
- \@HyperIndex{#5}{#6}{#7}{#8}{#9}{\@IndexFormat}%
- }%
- \fi%
+ \begingroup%
+ \def\@tempc{\Markup@Output{#2}=#3=[#4]}%
% \end{macrocode}
-% Danach erfolgt die Ausgabe der Auszeichnung. Sollte für diesen ein Label
-% durch eine Deklaration innerhalb der \env{Declaration}-Umgebung definiert
-% worden sein, so wird auf dieses ein Hyperlink gesetzt. Ansonsten erfolgt die
-% normale textuelle Ausgabe. Für Parameter muss der Hyperlink dabei aufgrund
-% des definierten Haupteintrag etwas anders ausgeführt werden (\cs{@tempa}).
+% Danach wird eine Fallunterscheidung anhand des im ersten Argument übergebenen
+% Labels getroffen. Existiert dieses, soll das Element als Hyperlink ausgegeben
+% werden. Die Definition dafür wird in \cs{@tempa} gespeichert.
% \begin{macrocode}
- \IfValueTF{#6}{\edef\@tempa{#5:#6:#8}}{\edef\@tempa{#5:#8}}%
- \ifcsdef{r@\@tempa}{%
+%<*class>
+ \tud@if@lbl@exists{#1}{%
+ \def\@tempa{\hyperref{}{\tud@manualname}{#1}{\@tempc}}%
% \end{macrocode}
+% Anschließend wird \cs{@tempb} ggf. für den erweiterten Querverweis verwendet.
% Wurde ein Format für den Querverweis gesetzt, muss dieses validiert werden.
-% Gültige Kürzel sind 'auto', 'page' und 'full'. Damit werden die erzeugten
-% Querverweise um den Gliederungsabschnitt, die Seite oder beides ergänzt.
-% Außerdem kann mit 'none' der Hyperlink selbst unterbunden werden.
+% Gültige Kürzel sind \val{'auto'}, \val{'page'} und \val{'full'}. Damit werden
+% die erzeugten Querverweise um den Gliederungsabschnitt, die Seite oder beides
+% ergänzt. Außerdem kann mit \val{'none'} der Hyperlink komplett unterbunden
+% werden. Für \cs{Package} kann mit zusätzlich \val{'url'} noch der gCTAN-Link
+% forciert werden, auch wenn eigentlich ein Label für das Paket existiert.
% \begin{macrocode}
\let\@tempb\relax%
- \def\@tempc{\mbox{\hyperref{}{\jobname}{\@tempa}{#1}\IfValueT{#2}{#2}}}%
- \IfValueT{#3}{%
+ \IfValueT{#6}{%
\def\@tempb{%
- \ClassWarning{tudscrman}{%
+ \ClassWarning{tudscrmanual}{%
You've used the unknown cross-reference\MessageBreak%
- shorthand '#3'. Only 'auto', 'page'\MessageBreak%
- and 'full' as well as 'none' are valid%
+ shorthand '#6'. Only 'auto', 'page' and 'full'\MessageBreak%
+ as well as 'none' \IfValueT{#5}{or 'url' }are valid%
}%
}%
- \ifstr{#3}{auto}{\def\@tempb{ in \autoref{\@tempa}}}{}%
- \ifstr{#3}{page}{\def\@tempb{ \vpageref{\@tempa}}}{}%
- \ifstr{#3}{ppage}{\def\@tempb{ \reftextfaraway{\@tempa}}}{}%
- \ifstr{#3}{full}{\def\@tempb{ in \fullref{\@tempa}}}{}%
- \ifstr{#3}{none}{%
- \let\@tempb\relax%
- \def\@tempc{\mbox{#1\IfValueT{#2}{#2}}}%
- }{}%
+ \ifstr{#6}{auto}{\def\@tempb{ in \autoref{#1}}}{%
+ \ifstr{#6}{page}{\def\@tempb{ \vpageref{#1}}}{%
+ \ifstr{#6}{ppage}{\def\@tempb{ \reftextfaraway{#1}}}{%
+ \ifstr{#6}{full}{\def\@tempb{ in \fullref{#1}}}{%
+ \ifstr{#6}{none}{\let\@tempa\@tempc\let\@tempb\relax}{}}}}}%
+ \IfValueT{#5}{%
+ \ifstr{#6}{url}{\def\@tempa{\href{#5}{\@tempc}}\let\@tempb\relax}{}%
+ }%
}%
- \@tempc\@tempb%
}{%
+%</class>
% \end{macrocode}
-% Wurde ein Format für den Querverweis gesetzt und es existiert kein passendes
-% Label, wird eine Warnung ausgegeben.
+% Existiert kein Label, so wird einfach die minimale Markup-Variante verwendet.
+% Für Pakete wird ein CTAN-Link erzeugt.
% \begin{macrocode}
- \IfValueT{#3}{%
- \ClassWarning{tudscrman}{%
- No cross-reference created, label \@tempa\space is missing%
- }%
- }%
+ \let\@tempa\@tempc%
+ \IfValueT{#5}{\def\@tempa{\href{#5}{\@tempc}}}%
% \end{macrocode}
-% Sollte ein Paket mit \cs{Package} angegeben worden sein, so wurde das erste
-% optionale Argument in runden Klammern verwendet. Dieses wird genutzt, um
-% einen Hyperlink auf CTAN zu generieren. Die Ausgabe selbst besteht in jedem
-% Fall aus dem ersten obligatorischen und ggf. dem ersten optionalen Argument.
+% Ein Querverweis kann logischerweise nicht erstellt werden. Wurde dennoch im
+% letzten optionalen Argument eine \val{'}\meta{Referenzvariante}\val{'} für
+% den Querverweis angegeben, wird eine Warnung erzeugt.
% \begin{macrocode}
- \IfValueTF{#4}{%
- \ifstr{#4}{}{\mbox{#1\IfValueT{#2}{#2}}}{%
- \href{http://www.ctan.org/pkg/#4}{\mbox{#1\IfValueT{#2}{#2}}}%
+ \let\@tempb\relax%
+ \IfValueT{#6}{%
+ \ifstr{#6}{none}{\let\@tempa\@tempc}{%
+%<package> \ifstr{#6}{manual}{\def\@tempa{\tudhyperref{#1}{\@tempc}}}{%
+ \def\@tempb{%
+ \ClassWarning{tudscrmanual}{%
+%<*class>
+ Label #1\MessageBreak%
+ is missing, no cross-reference created.%
+%</class>
+%<*package>
+ You've used the unknown cross-reference\MessageBreak%
+ shorthand '#6'. Only 'none' and 'manual'\MessageBreak%
+ are valid%
+%</package>
+ }%
+ }%
+%<package> }%
}%
- }{%
- \mbox{#1\IfValueT{#2}{#2}}%
}%
+% \end{macrocode}
+% Um im Zweifel nach allen fehlenden Labels im Log-File prüfen zu können, gibt
+% es den passenden Debug-Befehl.
+% \begin{macrocode}
+%<*class>
+ \tud@trace@lbl@missing@add{#1}%
}%
+%</class>
+% \end{macrocode}
+% Ganz zum Schluss erfolgt die Ausgabe als Hyperlink mit optional erweitertem
+% Querverweis nicht, wenn gerade eine Überschrift gesetzt wird.
+% \begin{macrocode}
+ \ifdin{\@tempc}{\@tempa\@tempb}%
+% \end{macrocode}
+% Zum Schluss wird die Formatierung mit \cs{Markup@ClearFormat} zurückgesetzt.
+% \begin{macrocode}
+ \endgroup%
+ \Markup@ClearFormat%
+}
+% \end{macrocode}
+% \end{macro}^^A \Process@@MarkupInline
+% \begin{macro}{\Markup@Output}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@@Output}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Der Befehl \cs{Markup@Output} wird für die formatierte Markup-Ausgabe von den
+% beiden Makros \cs{Process@@MarkupDeclare} sowie \cs{Process@@MarkupInline}
+% aufgerufen. Das erste Argument enthält dabei das auszuzeichnende Element.
+% Dabei ist die Besonderheit des Makros \cs{Key}\marg{Makro}\marg{Parameter} zu
+% beachten, dessen beiden Argumente hier in der Form \marg{Makro!Parameter}
+% übergeben werden. Deshalb wird das erste Argument mit dem Argumentprozessor
+% \cs{SplitArgument}\val{\{1\}\{!\}} getrennt und dann weiter verarbeitet.
+% \begin{macrocode}
+\NewDocumentCommand\Markup@Output{>{\SplitArgument{1}{!}}md==o}{%
+ \Markup@@Output#1=#2=[#3]%
+}
+% \end{macrocode}
+% Anschließend wird entweder \cs{Markup@Declare} oder \cs{Markup@Inline}
+% aufgerufen~-- abermals abhängig vom Schalter \cs{if@tud@declare}. Auch hier
+% wird für den Befehlsaufruf mit dem dazugehörigen Argument zur Vereinfachung
+% ein Token-Register verwendet.
+% \begin{macrocode}
+\NewDocumentCommand\Markup@@Output{mmd==o}{%
+%<*class>
+ \if@tud@declare%
+ \tud@toks@{\Markup@Declare}%
+ \else%
+%</class>
+ \tud@toks@{\Markup@Inline}%
+%<*class>
\fi%
+%</class>
% \end{macrocode}
-% Zum Schluss wird \cs{@IndexFormat} zurückgesetzt.
+% Ist das aktuelle Element \cs{Key} wird nur das zweite Argument ausgegeben.
+% Das erste wird lediglich für Label und Indexeintrag benötigt.
% \begin{macrocode}
- \let\@IndexFormat\relax%
+ \IfValueTF{#2}{%
+ \def\@tempa{#2}%
+ }{%
+ \def\@tempa{#1}%
+ }%
+% \end{macrocode}
+% Die beiden optionalen Argumente werden ggf. in der gleichen Formatierung
+% ausgegeben.
+% \begin{macrocode}
+ \IfValueT{#3}{\appto\@tempa{=#3}}%
+ \IfValueT{#4}{\appto\@tempa{#4}}%
+ \eaddto@hook\tud@toks@{\expandafter{\@tempa}}%
+ \the\tud@toks@%
}
% \end{macrocode}
-% \end{macro}^^A \@ProcessOutput
-% \begin{macro}{\hyperidx}
-% \changes{v2.02}{2014/08/16}{neu}^^A
-% Aufgrund der Nichtbeachtung von RegExp"=Ausdrücken durch den Indexprozessor
-% \texttt{texindy} (\url{http://sourceforge.net/p/xindy/bugs/22/}) muss hierfür
-% etwas getrickst werden. Der Befehl \cs{hyperidx} hat ein optionales Argument,
-% in welchem das für \cs{manualhyperref} obligatorische Label enthalten ist.
-% Das führt dazu, dass \texttt{texindy} dieses beim internen Filtern in eckigen
-% Klammern beibehält und es anschließend über eine in \texttt{tudscrman.xdy}
-% eigens definierte \texttt{merge-rule} verworfen werden kann.
-% \begin{macrocode}
-\newrobustcmd*\hyperidx[2][]{\manualhyperref{#1}{#2}}
-% \end{macrocode}
-% \end{macro}^^A hyperidx
-% \begin{macro}{\@HyperIndex}
-% \changes{v2.02}{2014/10/08}{überarbeitet}^^A
-% Dieser Befehl sorgt für die eigentlichen Indexeinträge. Dabei werden für
-% Einträge, welche innerhalb der \env{Declaration}-Umgebung deklariert wurden,
-% ein Hyperlink im Index erstellt. Das erste Argument \marg{Index} enthält den
-% gewünschten Zielindex. Danach folgt~-- für Parameter~-- der Haupteintrag.
-% Daran schließt der Indexeintrag selbst mit \marg{Vorsatz}, \marg{Eintrag},
-% \marg{Anhang} und zum Abschluss \oarg{Formatierung} an. Der vollständige
-% Funktionsaufruf lautet:
+% \end{macro}^^A \Markup@@Output
+% \end{macro}^^A \Markup@Output
+% \begin{macro}{\Markup@Inline}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@Declare}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@@Declare}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Die Ausgabe selbst ist alles andere als spektakulär. Die zur Formatierung
+% verwendeten Makros \cs{Markup@Format} und \cs{Markup@Suffix} werden durch
+% \cs{Markup@SetFormat} für jedes Markup-Element individuell definiert.
+% \begin{macrocode}
+\newcommand*\Markup@Inline[1]{\mbox{\Markup@Format{#1}}}
+%<*class>
+\newcommand*\Markup@Declare{}
+\newcommand*\Markup@@Declare[1]{%
+ \begingroup\Markup@Format{#1}\endgroup\Markup@Suffix%
+}
+%</class>
+% \end{macrocode}
+% \end{macro}^^A \Markup@@Declare
+% \end{macro}^^A \Markup@Declare
+% \end{macro}^^A \Markup@Inline
+% \begin{macro}{\Markup@SetFormat}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@CheckFormat}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@ClearFormat}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@Format}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\Markup@Suffix}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\tud@x@textcase@uclcnotmath}
+% \begin{macro}{\tud@nonchangecase}
+% \changes{v2.05}{2015/11/20}{neu}^^A
+% \begin{macrocode}
+\newcommand*\Markup@Format{}
+\newcommand*\Markup@Suffix{}
+% \end{macrocode}
+% Der Befehl \cs{Markup@SetFormat} setzt das gewünschte Format für die jeweilge
+% Ausgabe. Dieses wird im ersten Argument angegeben. Das ordinäre optionale
+% Argument kann genutzt werden, wenn bei der Deklaration noch eine geanuere
+% Beschreibung oder Spezifizierung erscheinen soll, beispielsweise etwas wie
+% \enquote{Umgebung} oder \enquote{Parameter}. Mit dem optionalen Argument in
+% runden Klammern wird es möglich, die Definition von \cs{Markup@Declare}, die
+% ohne eine Angabe der von \cs{Markup@@Declare} entspricht, zu ändern. Dies
+% wird insbesondere von \cs{Environment} genutzt, um bei der Deklaration eine
+% Tabelle zu erzeugen.
+% \begin{macrocode}
+\NewDocumentCommand\Markup@SetFormat{mod()}{%
+% \end{macrocode}
+% Außerdem ist noch eine weitere Besonderheit zu beachten. Sollte gerade \DIN
+% verwendet werden~-- der Befehl wird innerhalb einer Überschrift genutzt~--
+% wird lediglich das Hauptargument unformatiert jedoch als Argument von
+% \cs{MakeTextUppercase} ausgegeben, um das Setzen von Majuskeln zu erzwingen.
+% Der Hintergrund wird bei der Erweiterung von \cs{tud@x@textcase@uclcnotmath}
+% erläutert.
+% \begin{macrocode}
+ \def\Markup@Format{\ifdin{\MakeTextUppercase}{#1}}%
+ \IfValueT{#2}{\def\Markup@Suffix{\suffix{#2}}}%
+%<*class>
+ \IfValueT{#3}{\renewcommand*\Markup@Declare[1]{#3\Markup@Suffix}}%
+%</class>
+}
+% \end{macrocode}
+% Das durch die \TUDScript-Hauptklassen in Ergänzung zum Paket \pkg{fontspec}
+% erstellte Makro \cs{tud@x@textcase@uclcnotmath} erlaubt die Definition von
+% Makros, welche von \cs{MakeTextUppercase} nicht beachtet werden sollen.
+% Dieser Befehl kommt bei den \TUDScript-Klassen in Überschriften zum Einsatz,
+% wenn diese in \DIN gesetzt werden. Das hat zu Folge, dass die Argumente der
+% Markup-Befehle bereits in Majuskeln übergeben werden würden, was unter
+% anderem für die Erstellung von Labeln und Einträgen für den Index nicht
+% gewünscht wäre. Deshalb werden \emph{alle} Markup-Befehle der Liste zum
+% Ignorieren hinzugefügt. Damit aber bei der eigentlichen Ausgabe alles in
+% Majuskeln erscheint, wird für diesen Fall \cs{Markup@Format} genutzt.
+% \begin{macrocode}
+\robustify\NoCaseChange
+\NewDocumentCommand\tud@nonchangecase{m}{%
+ \DeclareExpandableDocumentCommand#1{sm}{%
+ \IfBooleanT{##1}{\noexpand\@tud@indextrue}%
+ \NoCaseChange{#1{##2}}%
+ }%
+}
+\apptocmd{\tud@x@textcase@uclcnotmath}{%
+ \tud@nonchangecase\Application%
+ \tud@nonchangecase\Distribution%
+ \tud@nonchangecase\Engine%
+ \tud@nonchangecase\File%
+ \tud@nonchangecase\Class%
+ \tud@nonchangecase\Package%
+ \tud@nonchangecase\Option%
+ \tud@nonchangecase\Environment%
+ \tud@nonchangecase\Macro%
+ \tud@nonchangecase\Length%
+ \tud@nonchangecase\Counter%
+%<*class>
+ \DeclareExpandableDocumentCommand\Key{smm}{%
+ \IfBooleanT{##1}{\noexpand\@tud@indextrue}%
+ \NoCaseChange{#1{##2}{##3}}%
+ }%
+ \tud@nonchangecase\Term%
+ \tud@nonchangecase\PageStyle%
+ \tud@nonchangecase\Font%
+ \tud@nonchangecase\Color%
+%</class>
+}{}{\tud@patch@wrn{tud@x@textcase@uclcnotmath}}
+% \end{macrocode}
+% Nach der formatierten Ausgabe wird \cs{Markup@ClearFormat} aufgerufen, um die
+% aktuell definierte Formatierung zurückzusetzen und bei einem neuen Aufruf
+% eines der Markup-Befehle mit \cs{Markup@CheckFormat} auf die Verwendung von
+% \cs{Markup@SetFormat} prüfen zu können.
+% \begin{macrocode}
+\newcommand*\Markup@ClearFormat{%
+ \let\Markup@Format\relax%
+ \let\Markup@Declare\Markup@@Declare%
+ \let\Markup@Suffix\relax%
+}
+\Markup@ClearFormat
+\newcommand*\Markup@CheckFormat{%
+ \ifx\Markup@Format\relax%
+ \ClassError{tudscrmanual}{\string\Markup@SetFormat\space unused}{%
+ It seems you have forgotten to use \string\Markup@SetFormat.%
+ }%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@nonchangecase
+% \end{macro}^^A \tud@x@textcase@uclcnotmath
+% \end{macro}^^A \Markup@Suffix
+% \end{macro}^^A \Markup@Format
+% \end{macro}^^A \Markup@ClearFormat
+% \end{macro}^^A \Markup@SetFormat
+% \end{macro}^^A \Markup@CheckFormat
+%
+% \subsection{Index}
+%
+% Hier erscheint alles, was für Erstellen und Ausgabe der einzelnen Indexe
+% notwendig ist.
+%
+% \subsubsection{Indexerstellung}
+%
+% Für die Erstellung aller Indexe wird das Paket \pkg{imakeidx} zusammen mit
+% \app{texindy} verwendet. Diese können sowohl mit dem Paket als auch mit der
+% Klasse erzeugt werden.
+% \begin{macrocode}
+\PassOptionsToPackage{xindy,splitindex}{imakeidx}
+\RequirePackage{imakeidx}[2013/07/11]
+% \end{macrocode}
+% Zuerst ein paar kleinere Einstellungen für das Layout\dots
+% \begin{macrocode}
+\indexsetup{%
+%<*class>
+ level=\addsec,%
+%</class>
+%<*package>
+ level=\subsection*,%
+%</package>
+ noclearpage,firstpagestyle=headings,headers={\indexname}{\indexname},%
+ othercode={\renewcommand*\subitem{\@idxitem\hspace*{15\p@}}}%
+}
+% \end{macrocode}
+% \begin{environment}{theindex}
+% \dots gefolgt von einem Patch für die Umgebung \env{theindex}, um unschöne
+% Seitenumbrüche direkt nach Überschriften zu vermeiden. Diese treten auf, das
+% das Paket \pkg{imakeidx} meiner Meinung nach die Überschriften zusammen mit
+% der \env{multicols}-Umgebung falsch setzt. Der Patch sorgt dafür, dass die
+% Überschriften (\cs{imki@indexlevel}\val{\{}{\cs{indexname}\val{\{\}}}) nicht
+% vor der Umgebung sondern~-- wie für \pkg{multicol} auch dokumentiert~-- im
+% optionalen Argument von \env{multicols} aufgerufen werden.
+% \begin{macrocode}
+\ifimki@original\else%
+ \CheckCommand\theindex{%
+ \imki@maybeaddtotoc
+ \imki@indexlevel{\indexname}\imki@indexheaders
+ \thispagestyle{\imki@firstpagestyle}%
+ \ifnum\imki@columns>\@ne
+ \columnsep \imki@columnsep
+ \ifx\imki@idxprologue\relax
+ \begin{multicols}{\imki@columns}
+ \else
+ \begin{multicols}{\imki@columns}[\imki@idxprologue]
+ \fi
+ \else
+ \imki@idxprologue
+ \fi
+ \global\let\imki@idxprologue\relax
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \columnseprule \ifKV@imki@columnseprule.4\p@\else\z@\fi
+ \raggedright
+ \let\item\@idxitem
+ \imki@othercode%
+ }%
+ \patchcmd{\theindex}{%
+ \imki@indexlevel{\indexname}\imki@indexheaders%
+ }{%
+ \imki@indexheaders%
+ }{}{\tud@patch@wrn{theindex}}%
+ \patchcmd{\theindex}{%
+ \ifnum\imki@columns>\@ne
+ \columnsep \imki@columnsep
+ \ifx\imki@idxprologue\relax
+ \begin{multicols}{\imki@columns}
+ \else
+ \begin{multicols}{\imki@columns}[\imki@idxprologue]
+ \fi
+ \else
+ \imki@idxprologue
+ \fi
+ }{%
+ \ifnum\imki@columns>\@ne\relax%
+ \columnsep \imki@columnsep%
+ \ifx\imki@idxprologue\relax%
+ \begin{multicols}{\imki@columns}[\imki@indexlevel{\indexname}]%
+ \else%
+ \begin{multicols}{\imki@columns}[%
+ \imki@indexlevel{\indexname}%
+ \imki@idxprologue%
+ ]%
+ \fi%
+ \else%
+ \imki@indexlevel{\indexname}\imki@idxprologue%
+ \fi%
+ }{}{\tud@patch@wrn{theindex}}%
+\fi%
+% \end{macrocode}
+% \end{environment}^^A theindex
+% \begin{macro}{\cleversee}
+% \changes{v2.05}{2015/11/02}{neu}^^A
+% \begin{macro}{\cleverseealso}
+% \changes{v2.05}{2015/11/02}{neu}^^A
+% \begin{macro}{\tud@cleversee}
+% \changes{v2.05}{2015/11/02}{neu}^^A
+% Diese Befehle dienen zum smarten Setzen von Hinweisen im Index. Existiert
+% lediglich dieser Hinweis im Index, wird dieser mit dem Präfix \cs{seename}
+% ausgegeben. Sind jedoch für einen Indexeintrag auch Seitenzahlen vorhanden,
+% so werden diese zuerst ausgegeben, danach folgt der Querverweis mit dem
+% Präfix \cs{seealsoname}. Der Befehl \cs{cleverseealso} verwendet letzteren
+% Präfix in jedem Fall.
+% \begin{macrocode}
+\newrobustcmd*\cleversee{\tud@cleversee{\seename}}
+\newrobustcmd*\cleverseealso{%
+ \ClassWarning{tudscrmanual}{You should use `|see' instead of `|seealso'}%
+ \tud@cleversee{\alsoname}%
+}
+% \end{macrocode}
+% Diese Makro übernimmt die eigentliche Arbeit. Es ist darauf angewiesen, dass
+% die angegebene Seitenzahlen eines Indexeintrages erst \emph{nach} den
+% Hinweisen ausgegeben und mit \cs{relax} abgeschlossen werden. Dies wird mit
+% der später definierten Stildatei für \app{texindy} sichergestellt. So wird es
+% möglich, dass das Makro \cs{tud@cleversee} auf alles ihm bis \cs{relax}
+% nachfolgende parsen kann und abhängig davon die Ausgabe gestaltet.
+% \begin{macrocode}
+\newcommand*\tud@cleversee{}
+\def\tud@cleversee#1#2#3\relax{%
+ \IfArgIsEmpty{#3}{%
+ \emph{#1}\space#2%
+ }{%
+ #3, \emph{\alsoname}\space#2%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@cleversee
+% \end{macro}^^A \cleverseealso
+% \end{macro}^^A \cleversee
+% \begin{macro}{\seeref}
+% \changes{v2.05}{2015/11/02}{neu}^^A
+% \begin{macro}{\seeidx}
+% Der Befehl \cs{seeref} kann anstelle von \cs{see} bzw. in der Sternversion
+% statt \cs{alsosee} genutzt werden. Das Makro \cs{seeidx} verweist auf die
+% Seite eines Indexes.
+% \begin{macrocode}
+%<*class>
+\NewDocumentCommand\seeref{sm}{%
+ \emph{\IfBooleanTF{#1}{\alsoname}{\seename}}\space#2%
+}
+\newcommand*\seeidx[2]{\pageref{idx:#1}}
+%</class>
+% \end{macrocode}
+% \end{macro}^^A \seeidx
+% \end{macro}^^A \seeref
+% \begin{macro}{\makexdyindex}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Um die einzelnen Indexe erstellen zu können, wird das Makro \cs{makexdyindex}
+% definiert. Die Sternversion dieses Befehle erstellt dabei neben dem normalen
+% Spezialindex einen weiteren, welcher explizit für Deklarationen genutzt wird.
+% Dieser wird anschließen als erstes an \app{texindy} weitergereicht, um die
+% richtige Formatierung der einzelnen Einträge gewährleisten zu können. Erst
+% danach wird die Datei mit den normalen Einträgen verarbeitet. Siehe hierzu
+% auch \cs{Process@@Index}.
+% \begin{macrocode}
+\NewDocumentCommand\makexdyindex{somo}{%
+ \let\@tempb\@empty%
+%<*class>
+ \IfBooleanT{#1}{%
+ \def\@tempc{\jobname-#4-declare.idx}%
+ \makeindex[name={#4-declare}]%
+ \IfFileExists{\@tempc}{%
+ \edef\@tempb{-o \jobname-#4.ind \@tempc}%
+ }{%
+ \ClassWarning{tudscrmanual}{File \@tempc\space not found}%
+ }%
+ }%
+%</class>
+ \protected@edef\@tempa{%
+ title={#3},%
+ columnsep=\noexpand\f@size\noexpand\p@,%
+ \IfValueTF{#4}{%
+ name={#4},%
+ options={-M \@currname-ind.xdy -L german-din -t \jobname-#4.xlg \@tempb},%
+ }{%
+ options={-M \@currname-ind.xdy -L german-din -t \jobname.xlg},%
+ }%
+ \IfValueT{#2}{#2}%
+ }%
+ \expandafter\makeindex\expandafter[\@tempa]%
+}
+% \end{macrocode}
+% \end{macro}^^A \makexdyindex
+% Nun können mit \cs{makexdyindex} die einzelnen Indexe erstellt werden.
+% \begin{macrocode}
+\makexdyindex{Allgemeiner Index}
+\makexdyindex*{Klassen- und Paketoptionen}[options]
+\makexdyindex*{Befehle und Umgebungen mit zugeh\"origen Parametern}[macros]
+%<*class>
+\makexdyindex*{Sprachabh\"angige Bezeichner}[terms]
+\makexdyindex*{Seitenstile, Schriftelemente und Farben}[elements]
+%</class>
+\makexdyindex{L\"angen und Z\"ahler}[misc]
+\makexdyindex*{Klassen, Pakete und Dateien}[files]
+%<*class>
+\makexdyindex[columns=1]{\"Anderungsliste}[changelog]
+%</class>
+\undef\makexdyindex
+% \end{macrocode}
+% \begin{macro}{\if@tud@index}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Dieser Schalter wird zwei unterschiedliche Aufgaben verwendet. Zum einen wird
+% er bei der Ausgabe von Verzeichnissen auf \val{true} gesetzt, um das Setzen
+% von Indexeinträgen durch Markup-Befehle in den Verzeichnissen selbst zu
+% unterbinden. Weiterhin verhindert der aktivierte Schalter bei der Ausführung
+% von \cs{Process@Markup} das erstellen von erweiterten Querverweisen sowie das
+% Setzen von CTAN-Links bei Paketen (\cs{Package}), was weder in Verzeichnissen
+% noch im Index erwünscht ist, weshalb vom Makro \cs{@printindex} ebenfalls
+% \cs{@tud@indextrue} gesetzt wird.
+% \begin{macrocode}
+\newif\if@tud@index
+\addtoeachtocfile{\protect\@tud@indextrue}
+% \end{macrocode}
+% \end{macro}^^A \if@tud@index
+% \begin{macro}{\tud@idx@get}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\tud@idx@key}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\tud@idx@fmt}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\tud@idx@val}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% \begin{macro}{\tud@idx@bdl}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Mit dem Makro \cs{tud@idx@get} wird die Formatierung eines Indexeintrags für
+% einen Markup-Befehl realisiert. Für das Sortieren der Indexeinträge kommt
+% \app{texindy} zum Einsatz. Um die Indexeinträge wie gewünscht zu Formatieren,
+% gibt es zwei Möglichkeit.
+%
+% Bei der ersten Variante würde der Indexeintrag einfach direkt mit den
+% Markup-Befehlen erstellt und in der \app{texindy}-Stildatei wird für alle
+% Auszeichnungsbefehle die passende \val{merge-rule} erstellt, um die korrekte
+% Sortierung zu gewährleisten. Tatsächlich war in einer früheren Version genau
+% das der Ansatz. Allerdings werden die manuell erstellten RegExp-Regeln leider
+% durch \app{texindy} zu spät genutzt, weshalb der Ansatz verworfen wurde.
+% (\url{http://sourceforge.net/p/xindy/bugs/22/}).
+%
+% Damit das Sortieren verlässlich funktioniert, werden die Einträge für den
+% Index deshalb in der gewohnten Syntax von \app{makeindex} in der Form
+% \meta{Schlüsselwort}\val{@}\meta{Markup} erstellt. Diese Syntax kann auch mit
+% \app{texindy} genutzt werden.
+%
+% An \cs{tud@idx@get} werden vier obligatorische gefolgt von vier optionalen
+% Argumenten übergeben. Die ersten beiden Argumente sind die Makros, in welche
+% \meta{Schlüsselwort}~-- für gewöhnlich \cs{tud@idx@key}~-- sowie die
+% Formatierung \meta{Markup}~-- normalerweise \cs{tud@idx@fmt}~-- expandiert
+% werden. Mit dem Makro im dritten Argument wird es möglich, Untereinträge zu
+% einem \meta{Schlüsselwort} für beispielsweise Parameter von Umgebungen oder
+% Befehlen (\cs{Key}) sowie spezielle Schlüsselwerte von Optionen zu erzeugen.
+% Dabei wird vor der Erstellung des Untereintrages der direkt zuvor generierte
+% Indexhaupteintrag ins dritte Argument~-- normalerweise \cs{tud@idx@val}~--
+% gesichert. Das vierte und letzte obligatorische Argument enthält schließlich
+% den eigentlichen Markup-Befehl, für welchen der Indexeintrag erzeugt werden
+% soll.
+%
+% Daran schließen sich vier optionale Argumente an, mit denen die Formatierung
+% des Indexeintrags differenziert werden kann. Das erste optionale Argument
+% \val{=}\meta{Wert}\val{=} kann wie bereits gewohnt für das Hinzufügen eines
+% Schlüsselwertes genutzt werden. Das zweite, ordinäre optionale Argument
+% \oarg{Anmerkung} fügt dem Eintrag in den Index eine zusätzliche Anmerkung
+% hinzu. Soll der Indexeintrag für ein spezifisches Paket oder eine Klasse aus
+% dem \TUDScript-Bundle erstellt werden, wird das optionale Argument in runden
+% Klammern \val{(\string\Class\marg{Klasse}/\string\Package\marg{Paket})} für
+% einen Verweis auf das \parg{Bundleelement} verwendet, der in \cs{@idxbundle}
+% gespeichert wird. Das Argument \val{\textbar}\meta{Indexmarkup}\val{\textbar}
+% wird bei Deklarationen zur Unterdrückung von Untereinträgen verwendet.
+% Der vollständige Funktionsaufruf lautet:
% \newline\begingroup\scriptsize
-% \cs{@HyperIndex}\marg{Index}\marg{Haupteintrag}\ignorespaces%
-% \marg{Vorsatz}\marg{Eintrag}\marg{Anhang}\marg{Formatierung}
+% \cs{tud@idx@get}\cs{tud@idx@key}\cs{tud@idx@fmt}\cs{tud@idx@val}%
+% \val{\ignorespaces%
+% \marg{Elem.}=\meta{Wert}=\oarg{Anm.}\ignorespaces%
+% \parg{Bundleelem.}\textbar\meta{Indexmark.}\textbar\ignorespaces%
+% }%
% \endgroup
% \begin{macrocode}
-\NewDocumentCommand\@HyperIndex{mmmmmm}{%
- \IfValueTF{#3}{\def\@tempa{#3}}{\def\@tempa{}}%
- \IfValueTF{#5}{\def\@tempb{#5}}{\def\@tempb{}}%
- \IfValueTF{#6}{\edef\@tempc{|#6}}{\def\@tempc{}}%
+\newcommand*\tud@idx@key{}
+\newcommand*\tud@idx@fmt{}
+\newcommand*\tud@idx@val{}
+\newcommand*\tud@idx@bdl{}
+\NewDocumentCommand\tud@idx@get{smmmmr==r[]r()d||}{%
% \end{macrocode}
-% Auch hier wird unterschieden, ob es sich um einen Parameter (keys) handelt.
-% Wurde für einen Parameter eine Umgebung oder ein Befehl bereits definiert,
-% werden zwei Indexeinträge generiert. Einer beim Befehl selber als
-% Untereintrag für den jeweiligen Parameter und einer im Index für Parameter
-% selbst mit der dazugehörigen Umgebung bzw. dem dazugehörigen Befehl. Beide
-% erhalten einen entsprechenden Hyperlink zur Deklaration.
+% Die Änderungen an allerhand temporären Makros sollen lokal bleibens.
% \begin{macrocode}
- \IfValueTF{#2}{%
- \ifcsdef{r@#1:#2:#4}{%
- \edef\@tempb{#1:#2:#4}%
- \index[#1]{%
- #2!\hyperidx[\@tempb]{\begingroup\expandonce\@tempa#4\endgroup}%
- ~{\idxfont(Parameter)}\expandonce\@tempc%
+ \begingroup%
+% \end{macrocode}
+% In einer weiteren Gruppe wird der Markup-Befehl des vierten obligatorischen
+% Arguments ausgewertet. Es wird eine Fallunterschiedung durchgeführt, ob es
+% sich dabei um einen Parameter (\cs{Key}) handelt oder nicht. Ist dies der
+% Fall, wird für diesen Parameter der hier nachfolgend formatierte Indexeintrag
+% als Untereintrag verwendet. Dafür wird zuvor ein Haupteintrag aus dem ersten
+% Argument von \cs{Key} generiert und in das dritte obligatorische Argument
+% gespeichert (\cs{tud@idx@val}).
+% \begin{macrocode}
+ \begingroup%
+%<*class>
+ \let#4\@empty%
+ \in@{\Key}{#5}%
+% \end{macrocode}
+% Um den Haupteintrag zu extrahieren, wird mit \cs{Markup@Suppress} die Ausgabe
+% des Markups deaktiviert und das erste Argument von \cs{Key} ausgeführt. Dies
+% führt über \cs{Process@Index} zum rekursiven Aufruf von \cs{tud@idx@get}. Als
+% Ergebnis sind im zweiten und dritten Argument~-- sprich in \cs{tud@idx@key}
+% und \cs{tud@idx@fmt}~-- sowohl \meta{Schlüsselwort} als auch \meta{Markup}
+% für den Elterneintrag enthalten. Diese werden in das vierte Argument
+% (\cs{idxentry}) gespeichert.
+% \begin{macrocode}
+ \ifin@%
+ \Markup@Suppress%
+ \let\Key\@firstoftwo%
+ #5%
+% \end{macrocode}
+% Da der Inhalt des vierten Arguments am Ende der Gruppe expandiert wird, wird
+% mit \cs{expandonce} dafür gesorgt, dass die Expansion nur einmalig erfolgt.
+% Zu beachten ist außerdem, dass der Hauptindexeintrag bereits in der Form
+% \meta{Schlüsselwort}\val{@}\meta{Markup}\textbf{\val{!}} zusammengefügt wird.
+% Die Sternversion wird für die Änderungsnotizen verwendet. Für diese wird eine
+% kleine Anmerkung im Haupteintrag ergänzt.
+% \begin{macrocode}
+ \let\@tempa\@empty%
+ \IfBooleanT{#1}{\def\@tempa{: Parameter angepasst}}%
+ \def#4{%
+ \expandonce#2\expandonce\@tempa{}@%
+ \expandonce#3\expandonce\@tempa{}!%
+ }%
+ \fi%
+%</class>
+% \end{macrocode}
+% Nachdem ein möglicher Haupteintrag für Parameter erzeugt wurde, folgt nun
+% der formatierte Indexeintrag für das aktuelle Markup-Element. Um diesen zu
+% erstellen, wird für \meta{Schlüsselwort} zunächst nur der Inhalt des
+% Hauptargumentes benötigt. Dieser wird hier in das zweite Argument
+% expandiert, der ggf. erzeugte Haupteintrag in das vierte. Für \cs{Key} ist
+% hier nur noch das zweite Argument relevant.
+% \begin{macrocode}
+ \Markup@Gobble%
+%<class> \let\Key\@secondoftwo%
+ \edef\tud@reserved{%
+ \noexpand\endgroup%
+ \def\noexpand#2{#5}%
+%<class> \def\noexpand#4{#4}%
}%
+ \tud@reserved%
+% \end{macrocode}
+% Die Auszeichnung für den Indexeintrag besteht in erster Linie aus dem
+% Markup-Befehl selbst. Damit ein \val{@}-Zeichen beispielsweise in einem
+% Makronamen korrekt verarbeitet wird, wird dieses im Stil von \app{makeindex}
+% mit \val{"} maskiert.
+% \begin{macrocode}
+ \def#3{#5}%
+ \tud@replace#2{@}{"@}%
+ \tud@replace#3{@}{"@}%
+% \end{macrocode}
+% In \cs{@idxbundle} wird ggf. das Paket oder die Klasse gespeichert, für die
+% der aktuelle Eintrag erzeugt werden soll. Eine explizite Angabe wird in jedem
+% Fall genutzt,\dots
+% \begin{macrocode}
+ \let\tud@idx@bdl\tud@bdl@dflt%
+ \IfValueTF{#8}{%
+ \def\tud@idx@bdl{#8}%
+ }{%
+% \end{macrocode}
+% \dots eine implizite nur, wenn auch tatsächlich das passende Label existiert,
+% da sonst mit Sicherheit falsche Einträge im Index erscheinen würden.
+% \begin{macrocode}
+%<*class>
+ \tud@if@bdl{%
+ \tud@if@lbl@exists{\tud@bdl@curr:#5}{%
+ \edef\tud@idx@bdl{\expandonce\tud@bdl@curr}%
+% \end{macrocode}
+% Sollte der Eintrag selbst dem Suffix für Paket oder Klasse entsprechen, wird
+% dieser ignoriert.
+% \begin{macrocode}
+ \def\tud@reserved{#5}%
+ \ifx\tud@reserved\tud@idx@bdl%
+ \let\tud@idx@bdl\tud@bdl@dflt%
+ \fi%
+ }{}%
+ }{}%
+%</class>
+ }%
+% \end{macrocode}
+% Nachfolgend wird für den zu erzeugenden Indexeintrag die Zugehörigkeit des
+% aktuellen Elements zu einem Paket oder einer Klasse aus dem \TUDScript-Bundle
+% durch das Anhängen des jeweiligen \TUDScript-Bundle-Elements signalisiert.
+% Dabei werden für die Anpassung von Schlüssel und Formatierung des Eintrags
+% die temporären Makros \cs{@tempa}~(Schlüssel) und \cs{@tempb}~(Formatierung)
+% gespeichert. In \cs{@tempc} wird der Inhalt von \cs{@tempb} zwischenzeitlich
+% zur späteren Verwendung gesichert.
+% \begin{macrocode}
+ \let\@tempa\@empty%
+ \let\@tempb\@empty%
+ \let\@tempc\@empty%
+% \end{macrocode}
+% Der temporäre Schalter \cs{@tempswa} wird genutzt, um das Hinzufügen der
+% Ergänzungen zu steuern. Diese sollen nur für Elemente, welche nicht zu den
+% Hauptklassen gehören, erfolgen.
+% \begin{macrocode}
+ \@tempswatrue%
+ \ifx\tud@idx@bdl\tud@bdl@dflt%
+ \@tempswafalse%
+% \end{macrocode}
+% Ebenso werden die Anmerkungen für \cs{Key}-Elemente unterfdrückt, da diese
+% sowieso als Untereintrag erzeugt werden. Einträge in der Änderungsliste
+% werden ohnehin separat für jedes \TUDScript-Bundle-Element ausgegeben. In
+% jedem Fall ist jedoch Formatierung beim Markup für das Erzeugen des richtigen
+% Querverweises notwendig und wird in \cs{@tempb} und \cs{@tempc} abgelegt.
+% \begin{macrocode}
+ \else%
+%<class> \in@{\Key}{#5}\ifin@\@tempswafalse\fi%
+ \IfBooleanT{#1}{\@tempswafalse}%
+ \edef\@tempb{(\expandonce\tud@idx@bdl)}%
+ \fi%
+ \let\@tempc\@tempb%
+% \end{macrocode}
+% Der Indexeintrag kann zur besseren Kenntnisnahme außerdem standardmäßig mit
+% einer Beschreibung versehen werden.
+% \begin{macrocode}
+ \IfValueT{#7}{%
+ \appto\@tempa{ #7}%
+ \appto\@tempb{\suffix{#7}}%
+ }%
+% \end{macrocode}
+% Wird die Anmerkung gesetzt, ist für den Schlüssel nur der Inhalt des in
+% \cs{@idxbundle} gesicherten Markup-Befehls relevant. Dieser wird in der
+% folgenden Gruppe extrahiert und \cs{@tempa} angehangen. Für die Formatierung
+% bleibt das Markup erhalten und wird \cs{tempb} hinzugefügt.
+% \begin{macrocode}
+ \if@tempswa%
\begingroup%
- \let\Environment\@firstofone%
- \def\Macro##1{\bsc##1}%
- \index[keys]{%
- \hyperidx[\@tempb]{%
- \begingroup\expandonce\@tempa#4\endgroup~{\idxfont(\texttt{#2})}%
- }%
- \expandonce\@tempc%
+ \Markup@Gobble%
+ \edef\tud@reserved{%
+ \noexpand\endgroup%
+ \noexpand\appto\noexpand\@tempa{ \tud@idx@bdl}%
}%
- \endgroup%
- }{%
- \index[#1]{%
- #2!\begingroup\expandonce\@tempa#4\endgroup%
- ~{\idxfont(Parameter)}\expandonce\@tempc%
- }%
- \index[keys]{%
- \begingroup\expandonce\@tempa#4\endgroup~{\idxfont(\texttt{#2})}%
- \expandonce\@tempc%
- }%
+ \tud@reserved%
+ \eappto\@tempb{\suffix{\expandonce\tud@idx@bdl}}%
+ \fi%
+% \end{macrocode}
+% Sollte mit \val{=}\meta{Wert}\val{=} ein spezieller Schlüsselwert angegeben
+% worden sein, wird für diesen normalerweise ein separater Untereintrag
+% erstellt. Der Schalter \cs{@tempswa} wird genutzt, um das Erzeugen dieses
+% Untereintrages im Zweifel zu unterdrücken und diesen stattdessen als normalen
+% Eintrag zu setzen. Dies ist zum einen bei Deklarationen und zum anderen in
+% der Änderungsliste notwendig. Außerdem kann dies auch mit der Anagabe von
+% \val{default} als Indexargument erzwungen werden.
+% \begin{macrocode}
+ \@tempswafalse%
+ \IfBooleanT{#1}{\@tempswatrue}%
+ \IfValueT{#9}{\ifstr{#9}{declare}{\@tempswatrue}{}}%
+ \IfValueT{#9}{\ifstr{#9}{default}{\@tempswatrue}{}}%
+% \end{macrocode}
+% In diesem Fall die Ergänzungen für Schlüssel und Formatierung ggf. um die
+% speziellen Schlüsselwerte für das Element ergänzt.
+% \begin{macrocode}
+ \if@tempswa%
+ \protected@eappto#2{\expandonce\@tempa}%
+ \tud@doifPValue{#6}{\noexpand\appto\noexpand#2{=#6}}%
+ \protected@eappto#3{\IfValueT{#6}{=#6=}\expandonce\@tempb}%
+% \end{macrocode}
+% Andernfalls wird geprüft, ob ein verwertbarer Schlüsselwert angegeben wurde.
+% \begin{macrocode}
+ \else%
+ \tud@doifPValue{#6}{\noexpand\@tempswatrue}%
+% \end{macrocode}
+% Ist dies der Fall, wird aus den bisherigen Eingaben der Hauoteintrag und
+% daran anschließend der dazugehörige Untereintrag erstellt\dots
+% \begin{macrocode}
+ \if@tempswa%
+ \eappto#4{%
+ \expandonce#2\expandonce\@tempa{}@%
+ \expandonce#3\expandonce\@tempb{}!%
+ }%
+ \appto#2{=#6}%
+ \appto#3{=#6=}%
+ \protected@eappto#3{\expandonce\@tempc}%
+% \end{macrocode}
+% \dots andernfalls bleibt es bei einem normalem Eintrag in den Index.
+% \begin{macrocode}
+ \else%
+ \protected@eappto#2{\expandonce\@tempa}%
+ \protected@eappto#3{\expandonce\@tempb}%
+ \fi%
+ \fi%
+% \end{macrocode}
+% Die Erzeugung eines formatierten Indexeintrages ist beendet, das Resultat
+% wird nach der letzten Gruppe definiert.
+% \begin{macrocode}
+ \let\emph\@firstofone%
+ \protected@edef\tud@reserved{%
+ \noexpand\endgroup%
+ \def\noexpand#2{#2}%
+ \def\noexpand#3{#3}%
+ \def\noexpand#4{#4}%
}%
+ \tud@reserved%
+}
% \end{macrocode}
-% Falls es sich nicht um einen Parameter handelt, wird lediglich der Eintrag im
-% speziellen Index vorgenommen und ggf. ein Hyperlink erzeugt.
+% \end{macro}^^A \tud@idx@bdl
+% \end{macro}^^A \tud@idx@val
+% \end{macro}^^A \tud@idx@fmt
+% \end{macro}^^A \tud@idx@key
+% \end{macro}^^A \tud@idx@get
+% \begin{macro}{\Process@Index}
+% \changes{v2.05}{2015/11/15}{neu}^^A
+% \begin{macro}{\Process@@Index}
+% \changes{v2.05}{2015/11/15}{neu}^^A
+% Mit \cs{Process@Index} wird geprüft, ob mit dem im zweiten obligatorischen
+% Argument enthaltenen Markup-Befehl ein Indexeintrag erzeugt werden soll.
+% Ein Indexeintrag kann mit der Sternversion eines Markup-Befehls explizit
+% unterdrückt werden, wobei der boolesche Wert im ersten obligatorischen
+% Argument an \cs{Process@Index} zu Prüfung übergeben wird. Außerdem wird für
+% obsolete Deklarationen ebenso wie bei aktiviertem Schalter \cs{if@tud@index}
+% kein Eintrag erstellt. In allen genannten Fällen passiert beim Aufruf von
+% \cs{Process@Index} nichts, andernfalls wird \cs{Process@@Index} ausgeführt.
+%
+% Die auf die zwei obligatorischen Argumente folgenden optionalen sind in der
+% Nomenklatur identisch zu den bisherigen Erläuterungen, der vollständige
+% Funktionsaufruf lautet:
+% \newline\begingroup\scriptsize
+% \cs{Process@Index}\val{\ignorespaces%
+% \marg{Stern?}\marg{Element}=\meta{Wert}=\oarg{Anmerkung}\ignorespaces%
+% \parg{Bundleelement}\textbar\meta{Indexmarkup}\textbar\ignorespaces%
+% }%
+% \endgroup
% \begin{macrocode}
- }{%
- \ifcsdef{r@#1:#4}{%
- \index[#1]{%
- \hyperidx[#1:#4]{%
- \begingroup\expandonce\@tempa#4\endgroup\expandonce\@tempb%
+\NewDocumentCommand\Process@Index{mmd==od()d||}{%
+ \ifboolexpr{%
+%<class> bool {@tud@index} or bool {@tud@obsolete}%
+%<package> bool {@tud@index}%
+ }{}{%
+ \IfBooleanTF{#1}{%
+ \IfValueT{#6}{%
+ \ClassWarning{tudscrmanual}{%
+ You've used the starred version. No index entry\MessageBreak%
+ for #2 is created. The\MessageBreak%
+ optional argument |#6| will be ignored%
}%
- \expandonce\@tempc%
}%
}{%
- \index[#1]{%
- \begingroup\expandonce\@tempa#4\endgroup%
- \expandonce\@tempb\expandonce\@tempc%
+ \Process@@Index{#2}=#3=[#4](#5)|#6|%
+ }%
+ }%
+}
+% \end{macrocode}
+% Mit \cs{Process@@Index} erfolgt die eigentliche Erzeugung des Indexeintrages.
+% \begin{macrocode}
+\NewDocumentCommand\Process@@Index{mr==r[]r()r||}{%
+% \end{macrocode}
+% Dabei erledigt \cs{tud@idx@get} einen Großteil der Aufgabe. Mit besagtem
+% Makro werden Schlüssel und Format für den gewünschten Indexeintrag erzeugt.
+% Sollte optional ein spezieller \val{=}\meta{Wert}\val{=} für einen Schlüssel
+% gegeben sein, so wird ggf. auch der passende Haupteintrag erstellt.
+% \begin{macrocode}
+%<*class>
+ \if@tud@declare%
+ \tud@idx@get\tud@idx@key\tud@idx@fmt\tud@idx@val{#1}=#2=[#3](#4)|declare|%
+ \else%
+%</class>
+ \tud@idx@get\tud@idx@key\tud@idx@fmt\tud@idx@val{#1}=#2=[#3](#4)|#5|%
+%<*class>
+ \fi%
+%</class>
+% \end{macrocode}
+% Mit der Sternversion \cs{tud@attr@get*} wird der Zielindex für das im
+% ersten Argument übergebene \marg{Element} ermittelt.
+% \begin{macrocode}
+ \tud@attr@get*\tud@lbl@tmp{#1}%
+% \end{macrocode}
+% Markup-Befehle, welche in Deklarationen verwendet wurden, werden für eine
+% höhere Priorisierung in einem speziellen Index angelegt, wobei hier die
+% Formatierung dieses Eintrags fest vorgegeben ist.
+% \begin{macrocode}
+%<*class>
+ \if@tud@declare%
+ \if@openindex%
+ \IfValueT{#5}{%
+ \ClassWarning{tudscrmanual}{%
+ It is not possible to use any indexing format\MessageBreak%
+ like |#5| within the arguments of the\MessageBreak%
+ environments `Declaration' or `Declaration*'%
+ }%
+ }%
+% \end{macrocode}
+% Jetzt folgt~-- abhängig vom Schalter \cs{if@openindex}~-- der öffnende oder
+% schließende Indexeintrag der Deklaration. Für den schließenden ist dabei eine
+% Formatierung des Schlüssels nicht notwendig.
+% \begin{macrocode}
+ \index[\tud@lbl@tmp-declare]{%
+ \tud@idx@val\tud@idx@key{}@\tud@idx@fmt|(declare%
+ }%
+ \else%
+ \index[\tud@lbl@tmp-declare]{\tud@idx@val\tud@idx@key|declare)}%
+ \fi%
+% \end{macrocode}
+% Für Markup-Befehle außerhalb von Deklarationsumgebungen wird ein einfacher
+% Eintrag in den Index erzeugt, wobei auch im Fließtext über das Indexmarkup
+% \val{\textbar{}declare\textbar} eine Quasi-Deklaration verwendet werden kann.
+% Dies wird beispielsweise für \KOMAScript-Optionen genutzt, um diese in der
+% gewünschten Formatierung im Index erscheinen zu lassen.
+% \begin{macrocode}
+ \else%
+%</class>
+ \IfValueT{#5}{%
+%<*class>
+ \ifstr{#5}{declare}{%
+ \appto\tud@lbl@tmp{-declare}%
+ \appto\tud@idx@fmt{|declare}%
+ }{%
+ \appto\tud@idx@fmt{|#5}%
}%
+%</class>
+%<*package>
+ \appto\tud@idx@fmt{|#5}%
+%</package>
+ }%
+ \index[\tud@lbl@tmp]{\tud@idx@val\tud@idx@key{}@\tud@idx@fmt}%
+%<*class>
+ \fi%
+%</class>
+}
+% \end{macrocode}
+% \end{macro}^^A \Process@@Index
+% \end{macro}^^A \Process@Index
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \begin{macro}{\CrossIndex}
+% Der Befehl \cs{CrossIndex} dient zum Eintragen eines Schlagwortes, welches im
+% ersten obligatorischen Argument angegeben wird, in den allgemeinen Index und
+% verweist auf den im zweiten obligatorischen Argument, zum Schlagwort gehörigen
+% Spezialindex. Das ordinäre optionale Argument kann verwendet werden, um ggf.
+% den Eintrag in den allgemeinen Index, der normalerweise mit dem jeweiligen
+% Schlagwort erfolgt, zu überschrieben.
+%
+% Wird die Sternversion von \cs{CrossIndex} genutzt, so wird der Querverweis
+% als Eintrag in der obersten Ebene gesetzt, andernfalls wird ein Untereintrag
+% gesetzt. Mit der normalen Variante können so zu einem Schlagwort weitere
+% Verweise im allgemeinen Index erscheinen. Das zweite obligatorische Argument
+% kann eine kommagetrennte Liste enthalten.
+% \begin{macrocode}
+\NewDocumentCommand\CrossIndex{smom}{%
+ \def\@tempa##1##2##3{%
+ \index{%
+ \IfBooleanTF{#1}{##3@##3}{##3!"|@}%
+ \,\textrightarrow\,%
+ \tudhyperref{idx:##2}{\IfValueTF{##1}{##1}{Index der ##3}}|seeidx{##2}%
}%
}%
+ \forcsvlist{\@tempa{#3}{#4}}{#2}%
+}
+% \end{macrocode}
+% \end{macro}^^A \CrossIndex
+% \begin{macro}{\SeeRef}
+% \changes{v2.05}{2015/11/05}{neu}^^A
+% Mit \cs{SeeRef} wird unter dem im ersten Argument gegebenen Schlagwort ein
+% Indexuntereintrag erzeugt, der wiederum auf einen Indexeintrag des zweiten
+% Argumentes verweist. Dabei kann im zweiten Argument ein normaler Begriff oder
+% ein Markup-Befehl verwendet werden. Normalerweise wird für den Querverweis
+% die Referenzklasse \val{see} verwendet, die Sternversion des Befehls hingegen
+% nutzt \val{seeunverified}, um auf eine Prüfung des verwiesenen Eintrags zu
+% verzichten.
+% \begin{macrocode}
+\NewDocumentCommand\SeeRef{smm}{%
+ \sbox\z@{%
+ \let\tud@idx@fmt\relax%
+ #3%
+% \end{macrocode}
+% Wurde im zweiten Argument ein Markup-Befehl angegeben, so wurde durch das
+% Erstellen der Box das dazugehörige Indexformat in \cs{tud@idx@fmt} für den
+% Eintrag erstellt. Andernfalls wurde die Definiton von \cs{tud@idx@fmt} nicht
+% geändert und das Argument wird nach der Box direkt in den Index eingetragen.
+% \begin{macrocode}
+ \ifx\tud@idx@fmt\relax%
+ \gdef\tud@reserved{#3}%
+ \else%
+ \global\let\tud@reserved\tud@idx@fmt%
+ \fi%
+ }%
+ \IfBooleanTF{#1}{\def\tud@idx@fmt{seeunverified}}{\def\tud@idx@fmt{see}}%
+ \index{#2!#3|\tud@idx@fmt{\tud@reserved}}%
}
% \end{macrocode}
-% \end{macro}^^A \@HyperIndex
+% \end{macro}^^A \SeeRef
%
-% \subsubsection{Deklarationen}
+% \iffalse
+%</class>
+% \fi
%
-% Die Umgebungen \env{Declaration} und \env{Declaration*} werden beide für die
-% Auszeichnung von Optionen, Umgebungen und Befehlen verwendet, die \TUDScript
-% dem Anwender zur Verfügung stellt.
+% \subsubsection{Indexausgabe}
%
-% \begin{environment}{Declaration}
-% \begin{macro}{\printdeclarationlist}
-% \begin{macro}{\@declarationlist}
-% \begin{macro}{\@presetlist}
-% \begin{macro}{\if@presetlist}
-% \begin{macro}{\@additionallist}
-% \begin{macro}{\if@additionallist}
-% \begin{macro}{\@gobbleparameters}
-% \changes{v2.02}{2014/10/09}{neu}^^A
-% \changes{v2.03}{2015/02/02}{Makro \cs{relax} mit \cs{@empty} ersetzt}^^A
-% Es werden einige Hilfsmakros für die Ausgabe einer Deklaration sowie der
-% dazugehörigen Änderungsliste initialisiert.
+% Dies sind alle Befehle, die zur Ausgabe der erzeugten Indexe benötigt werden.
+% \begin{macro}{\PrintIndex}
+% \changes{v2.02}{2014/08/20}{neu}^^A
+% \begin{macro}{\tud@indexprologue}
+% \changes{v2.02}{2014/08/20}{neu}^^A
+% Mit \cs{PrintIndex} erfolgt die Ausgabe aller erstellten Indexe. Dabei wird
+% für bestimmte Spezialindexe das Makro \cs{tud@indexprologue} neu gesetzt, um
+% für diese vor der eigentlichen Ausgabe einige Anmerkungen machen zu können.
+% Mit \cs{tud@indexprologue} kann der einleitende Teil für einen Index gesetzt
+% werden.
% \begin{macrocode}
-\newcommand*\@declarationlist{}
-\let\@declarationlist\relax
-\newcommand*\@presetlist{}
-\let\@presetlist\relax
-\newif\if@presetlist
-\newcommand*\@additionallist{}
-\let\@additionallist\relax
-\newif\if@additionallist
-\newcommand*\@gobbleparameters{%
- \let\PName\@gobble%
- \let\PBoolean\@empty%
- \let\PBName\@gobble%
- \let\PSet\@empty%
- \let\PValue\@gobble%
- \let\Parameter\@gobble%
- \let\OParameter\@gobble%
- \let\LParameter\@empty%
- \let\OLParameter\@gobble%
- \let\PParameter\@gobble%
- \let\POParameter\@gobble%
+%<*class>
+\newcommand*\tud@indexprologue{}
+%</class>
+\newcommand*\PrintIndex{%
+ \begingroup%
+ \providecommand*\lettergroup[1]{%
+ \par\textbf{\textsf{##1}}\par%
+ \nopagebreak%
+ }%
+%<*class>
+ \renewcommand\tud@indexprologue{%
+ Die im Folgenden aufgelisteten Schlagworte sollen f\"ur den Umgang mit
+ \hologo{LaTeXe} im Allgemeinen sowie dem \TUDScript-Bundle im Speziellen
+ sowohl Antworten bei generellen Fragen liefern als auch L\"osungen f\"ur
+ typische Probleme bereitstellen. Falls ein gesuchter Begriff hier nicht
+ auftaucht oder trotz vorhandener Hinweise kein zufriedenstellendes
+ Ergebnis erzielt werden kann, sollte das \Forum* erster Anlaufpunkt sein,
+ um weitere Hilfe bei der Nutzung von \TUDScript zu erhalten.%
+ }%
+%</class>
+%<*package>
+ \begingroup%
+ \let\lettergroup\@gobble%
+ \let\indexspace\relax%
+%</package>
+ \print@index%
+%<*package>
+ \endgroup%
+%</package>
+%<*class>
+ \clearpage%
+ \renewcommand\tud@indexprologue{%
+ Dies ist der Index aller im Handbuch erl\"auterten sowie erw\"ahnten
+ Optionen, wobei bei den meisten auch Untereintr\"age mit Seitenangaben
+ f\"ur spezielle Wertzuweisungen existieren.%
+ }%
+%</class>
+ \print@index[options]%
+%<*class>
+ \renewcommand\tud@indexprologue{%
+ Dies ist die Auflistung aller im Handbuch erl\"auterten sowie erw\"ahnten
+ Befehle und Umgebungen. Bei einigen existieren auch Untereintr\"age f\"ur
+ Schl\"ussel-Wert-Parameter, welche im optionalen Argument der jeweiligen
+ Anweisung verwendet werden k\"onnen. In der dritten Unterebene sind
+ gegebenenfalls Seitenverweise f\"ur explizite Wertzuweisungen an diese
+ Parameter zu finden.%
+ }%
+%</class>
+ \print@index[macros]%
+%<*class>
+ \renewcommand\tud@indexprologue{%
+ Dies sind alle von \TUDScript definierten, sprachabh\"angigen Bezeichner.
+ Informationen zur Verwendung sowie den Anpassungsm\"oglichkeiten sind in
+ \autoref{sec:localization} zu finden.%
+ }%
+ \print@index[terms]%
+ \print@index[elements]%
+%</class>
+%<*package>
+ \begingroup%
+ \let\lettergroup\@gobble%
+ \let\indexspace\relax%
+%</package>
+ \print@index[misc]%
+%<*package>
+ \endgroup%
+%</package>
+ \print@index[files]%
+ \endgroup%
}
% \end{macrocode}
-% Die \env{Declaration}-Umgebung dient zur Deklaration von Optionen, Umgebungen,
-% Befehlen, Parametern, Bezeichnern, Längen, Schriftelementen und Farben. Diese
-% werden mit den entsprechenden Auszeichnungsbefehlen als obligatorisches
-% Argument übergeben. Zuvor kann noch vorher im ersten optionalen Argument eine
-% Beschreibung für die Änderungsliste in der Form \oarg{Verison!Beschreibung}
-% angegeben werden. Danach kann im dritten Argument~-- das zweite optionale~--
-% die Voreinstellung für eine Option oder dergleichen angegeben werden. Das
-% nächste optionale Argument erlaubt die Angabe einer bedingten Voreinstellung,
-% also einer anderen Voreinstellung als der zuerst angegeben unter bestimmten
-% Voraussetzungen. Diese wird in der Form \oarg{Bedingung:Voreinstellung}
-% angegeben. Das letzte Argument ist ebenfalls optional, wird aber in der Form
-% \marg{Zusatz} angegeben und enthält ggf. zusätzliche Informationen.
+% \end{macro}^^A \tud@indexprologue
+% \end{macro}^^A \PrintIndex
+% \begin{macro}{\print@index}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% \begin{macro}{\tud@idx@skip}
+% \changes{v2.02}{2014/09/02}{neu}^^A
+% Mit \cs{@printindex} erfolgt die Ausgabe der einzelnen Indexe. Dabei wird in
+% der Klasse \cls{tudscrmanual} zuvor für jeden Index ein referenzierbares
+% Label erstellt und ggf. der Prolog gesetzt.
%
-% Die Umgebung selbst gibt zu Beginn nichts weiter aus sondern sammelt
-% lediglich alle übergebenen Argumente in jeweiligen Listen. Die eigentliche
-% Ausgabe erfolgt mit dem Befehl \cs{printdeclarationlist}.
+% Aufgrund der Verwendung der \env{multicols}-Umgebung durch das Paket
+% \pkg{imakeidx} werden normalerweise ohne einen Prolog zu große vertikale
+% Abstände gesetzt. Dies wird mit \cs{tud@idx@skip} behoben.
% \begin{macrocode}
-\NewDocumentEnvironment{Declaration}{omoog}{%
- \listadd\@declarationlist{#2}%
+\newcommand*\tud@idx@skip{%
+ \ifnum\imki@columns>\@ne\relax\vspace{-\multicolsep}\fi%
+}
+\newcommand*\print@index[1][]{%
% \end{macrocode}
-% Die optional angegebenen Änderungen werden später mit \cs{ChangedAt@Process}
-% verarbeitet und für die Änderungsliste sowie die Randnotiz mit
-% \cs{@changedatdeclare} in der Liste \cs{@changedatdeclarelist} gesichert.
+% Falls ein Seitenumbruch notwendig ist, sollte dieser vor dem Index und nicht
+% unmittelbar nach dem Beginn erfolgen.
% \begin{macrocode}
- \@changedatdeclare{#1}{#2}%
+ \pagebreak[3]%
+ \@tud@indextrue%
+%<*class>
% \end{macrocode}
-% Hier noch die Listen für Voreinstellungen\dots
+% Das zu erstellende Label wird in \cs{tud@reserved} gespeichert. Dabei wird
+% die Sternversion von \cs{tudhyperdef} genutzt, um das Label auf die Höhe der
+% Überschrift zu setzen.
% \begin{macrocode}
- \IfValueTF{#3}{%
- \@presetlisttrue%
- \IfValueTF{#4}{%
- \def\@tempa[##1:##2]{##1:\,##2}%
- \listeadd\@presetlist{preset:\,#3\,|\,\expandonce{\@tempa[#4]}}%
- }{%
- \listadd\@presetlist{preset:\,#3}%
- }%
+ \ifblank{#1}{%
+ \def\tud@reserved{\tudhyperdef*{idx:main}}%
}{%
- \listadd\@presetlist{\relax}%
+ \def\tud@reserved{\tudhyperdef*{idx:#1}}%
}%
% \end{macrocode}
-% \dots sowie zusätliche Informationen.
+% Ohne Prolog wird der fehlerhafte vertikale Abstand behoben.
% \begin{macrocode}
- \IfValueTF{#5}{%
- \@additionallisttrue%
- \listadd\@additionallist{\hspace*{\tabcolsep}\small(#5)}%
- \in@{\Environment}{#2}%
- \ifin@\listadd\@additionallist{\tabularnewline}\fi%
- }{%
- \listadd\@additionallist{\relax}%
- \in@{\Environment}{#2}%
- \ifin@\listadd\@additionallist{\relax}\listadd\@additionallist{\relax}\fi%
- }%
-}{%
+ \ifx\tud@indexprologue\@empty%
+ \indexprologue[\tud@idx@skip]{\tud@reserved}%
% \end{macrocode}
-% Am Ende der Umgebung wird das übergebenen Hauptargument erneut ausgeführt,
-% was zum Beenden der Indexeinträge für die jeweilige Deklaration führt
-% (\cs{@openindexfalse}, siehe \cs{@ProcessOutput}). Dafür werden die Makros für
-% die Angabe obligatorischer und optionaler Parameter lokal umdefiniert.
+% Mit Prolog wird der fehlerhafte vertikale Abstand nach diesem korrigiert.
% \begin{macrocode}
- \ifx\@declarationlist\relax\else%
- \ClassError{tudscrman}{\string\printdeclarationlist\space is missing}{%
- \string\@declarationlist\space is not empty. Did you forget\MessageBreak%
- to print this list with \string\printdeclarationlist?%
+ \else%
+ \indexprologue{%
+ \tud@reserved%
+ \tud@indexprologue%
+ \tud@idx@skip%
}%
\fi%
- \@gobbleparameters%
- \vskip-\lastskip%
- \@declaretrue\@openindexfalse#2\@declarefalse%
- \pagebreak[0]%
+%</class>
+% \end{macrocode}
+% Fur das Paket \pkg{tudscrtutorial} erfolgt eine einfache Ausgabe der Indexe.
+% \begin{macrocode}
+%<package> \indexprologue[\tud@idx@skip]{}%
+% \end{macrocode}
+% Die Ausgabe des gewünschten Index und des leeren des Prologs.
+% \begin{macrocode}
+ \ifblank{#1}{\printindex}{\printindex[#1]}%
+ \ifnum\imki@columns>\@ne\relax\vspace{-\multicolsep}\fi%
+%<class> \let\tud@indexprologue\@empty%
}
% \end{macrocode}
-% Mit dem Befehl \cs{printdeclarationlist} erfolgt die eingentliche Ausgabe
-% aller Deklarationen. Zweck ist es, mehrere \env{Declaration}-Umgebungen
-% ineinander verschachteln zu können und eine Ausgabe aller auf einmal zu
-% erzeugen. Die durch die ggf. nacheinander folgenden Deklarationen wurden in
-% entsprechenden Listen gesammelt und werden hier jetzt formatiert ausgegben.
+% \end{macro}^^A \tud@idx@skip
+% \end{macro}^^A \print@index
+%
+% \iffalse
+%<*class>
+% \fi
+%
+% \subsection{Änderungsliste}
+%
+% Um dem Anwender einen schnellen Überblick zu Änderungen der aktuellen Version
+% bereitstellen zu können, werden Befehle zur automatisierten Erzeugung einer
+% solchen Liste definiert. Die Änderungsliste ist der Klasse \cls{tudscrmanual}
+% vorbehalten.
+%
+% Änderungsnotizen lassen sich auf zwei unterschieldichen Wegen generieren.
+% Entweder über die Nutzung des Befehls \cs{ChangedAt} oder über das optionale
+% Argument der Deklarationsumgebungen. Dabei sind diese in beiden Fällen in
+% der Form Versionsnummer gefolgt von der eigentlichen Notiz anzugeben, wobei
+% diese zwingend durch einen Doppelpunkt voneinander zu trennen sind. Die Form
+% der Verwendung lautet: \meta{Versionsnummer}\val{:}\meta{Änderungsnotiz}. Die
+% alleinige Angabe der Versionsnummer ohne Änderungsnotiz ist ebenso möglich.
+%
+% Wird die Änderungsnotiz für ein bestimmtes Element wie eine Option oder ein
+% Befehl erstellt, wie es bei den Deklarationsumgebungen implizit oder bei der
+% Verwendung von \cs{ChangedAt} mit optionalem Argument geschieht, gibt es die
+% zusätzliche Möglichkeit, einen Untereintrag zu erstellen. Dabei ist dieser
+% nach Versionsnummer und vor Änderungsnotiz in folgender Form anzugeben:
+% \meta{Versionsnummer}\val{!}\meta{Untereintrag}\val{:}\meta{Änderungsnotiz}.
+% Der Untereintrag ist für die explizite Angabe eines Schlüssel-Wert-Paares
+% gedacht.
+% \begin{macro}{\if@tud@changedat}
+% \begin{macro}{\Process@ChangedAt}
+% \changes{v2.02}{2014/07/25}{erweitert}^^A
+% \changes{v2.02}{2014/10/08}{Sternversion ergänzt}^^A
+% Der Schalter \cs{if@tud@changedat} wird im weiteren Verlauf dazu verwendet,
+% das Standard-Verhalten der einzelnen Markup-Befehle kurzeitig zu ändern und
+% anstelle der Makros \cs{Process@Markup} und \cs{Process@Index} den Befehl
+% \cs{Process@ChangedAt} auszuführen, mit welchem die Formatierung der Einträge
+% der Änderungsliste erfolgt.
+% \begin{macrocode}
+\newif\if@tud@changedat
+% \end{macrocode}
+% Die Formatierung der Änderungseinträge erfolgt dabei wie auch für den Index
+% mit \cs{tud@idx@get}, wobei die Sternversion dabei für die Identifikation als
+% Änderungseintrag fungiert. Aufgerufen wird \cs{Process@ChangedAt} während der
+% Erstellung der Änderungseinträge mit \cs{Changed@At@CreateEntry}. Der Aufruf
+% des Makros erfolgt dabei in der gewohnten Form mit einem obligatorischen
+% gefolgt von drei optionalen Argumenten:
+% \newline\begingroup\scriptsize
+% \cs{Process@ChangedAt}\val{\ignorespaces%
+% \marg{Element}=\meta{Wert}=\oarg{Ausgabesuffix}\parg{Bundleelement}%
+% }%
+% \endgroup
+% \begin{macrocode}
+\NewDocumentCommand\Process@ChangedAt{md==od()}{%
+ \tud@idx@get*\tud@idx@key\tud@idx@fmt\tud@idx@val{#1}=#2=[#3](#4)%
+}
+% \end{macrocode}
+% \end{macro}^^A \Process@ChangedAt
+% \end{macro}^^A \if@tud@changedat
+% \begin{macro}{\ChangedAt}
+% \changes{v2.02}{2014/07/25}{erweitert}^^A
+% \changes{v2.02}{2014/10/15}{Sternversion neu (keine Randnotiz)}^^A
+% \begin{length}{\changedatskip}
+% \changes{v2.04}{2015/06/08}{neu}^^A
+% Der Befehl \cs{ChangedAt} kann im Fließtext für das Erstellen einer freien
+% Änderungsnotiz genutzt werden. Das obligatorische Argument sollt wie kurz
+% zuvor beschrieben verwendet werden.
+%
+% Eine Änderungsnotiz wird für die angegebene Versionsnummer normalerweise im
+% Abschnitt \enquote{Allgemein} aufgeführt. Soll jedoch eine Notiz explizit für
+% eine Option, eine Umgebung, einen Befehlt etc. erstellt werden, kann dieses
+% Element vor dem obligatorischen im optionalen Argument angegeben werden. Der
+% Eintrag erfolgt dann im Abschnitt \enquote{Implementierung} für das gegebene
+% Element. Im obligatorischen Argument können auch mehrere Änderungsnotizen
+% gleichzeitig erzeugt werden. hierfür sind diese mit Semikolon voneinander zu
+% trennen. Das Erzeugen der Liste erfolgt mit \cs{Changed@At@CreateList}.
+%
+% Normalerweise wird bei der Nutzung von \cs{ChangedAt} zusätzlich zum Eintrag
+% in die Änderungsliste eine Randnotiz mit den angegebenen Versionsnummern
+% erzeugt. Mit dem letzten optionalen Argument nach dem obligatorischen kann
+% ein vertikaler Versatz dieser angegeben werden. Die Sternversion des Befehls
+% unterdrückt die Ausgabe der Randnotiz.
% \begin{macrocode}
-\NewDocumentCommand\printdeclarationlist{sod()}{%
- \ifx\@declarationlist\relax\else%
- \ifvmode\else\par\fi%
- \addpenalty{\@beginparpenalty}%
- \addvspace{1.5\baselineskipglue}%
+\newlength\changedatskip
+\NewDocumentCommand\ChangedAt{somO{\changedatskip}}{%
+ \IfValueTF{#2}{%
+ \Changed@At@CreateList[#2]{#3}%
+ }{%
+ \Changed@At@CreateList{#3}%
+ }%
% \end{macrocode}
-% Die Sternversion erzeugt die Ausgabe ohne Deklarationsindexbefehle. Das
-% optionale Argument kann genutzt werden, um das standardmäßige Atrribut für
-% die Änderungsliste, welches in \cs{@changedatdeclaredefault} hinterlegt ist,
-% zu ändern. Dies ist für die normale Version auf \emph{neu} und für die
-% Sternversion auf \emph{entfällt} voreingestellt. Für überholte Einträge in
-% der Änderungsliste wird das Indexattribut \enquote{deprecated} angehängt.
+% Nach dem Erstellen der Liste wird diese abgearbeitet und ggf. die Randnotiz
+% ausgegeben.
% \begin{macrocode}
- \IfBooleanTF{#1}{%
- \global\@deprecatedtrue%
- \renewcommand*\@changedatdeclaredefault{\emph{entf\"allt}|deprecated}%
+ \print@changedatlist{#1}{#4}%
+}
+% \end{macrocode}
+% \end{length}^^A \changedatskip
+% \end{macro}^^A \ChangedAt
+%
+% \subsubsection{Sukzessive Erstellung der Einträge für die Änderungsliste}
+%
+% Das Erstellen von Änderungsnotizen erfolgt in zwei Schritten. Diese werden
+% mit dem Befehl \cs{Changed@At@CreateList} in einer standardisierten Form in
+% der temporären Liste \cs{tud@changedat@list} gespeichert und später mit dem
+% Makro \cs{Changed@At@CreateEntry} verarbeitet. Dieses Vorgehen liegt in den
+% Umgebungen für Deklarationen begründet, welche verschachtelt werden können,
+% jedoch einmalig mit \cs{printdeclarationlist} abgearbeitet werden.
+%
+% \begin{macro}{\tud@changedat@list}
+% \changes{v2.02}{2014/07/25}{neu}^^A
+% \begin{macro}{\forssvlist}
+% \changes{v2.05}{2015/11/17}{neu}^^A
+% Hier werden die Liste \cs{tud@changedat@list} sowie das Makro \cs{forssvlist}
+% für die Aufspaltung der semikolongetrennten Änderungsnotizen definiert.
+% \begin{macrocode}
+\newcommand*\tud@changedat@list{}
+\let\tud@changedat@list\relax
+\DeclareListParser*{\forssvlist}{;}
+% \end{macrocode}
+% \end{macro}^^A \forssvlist
+% \end{macro}^^A \tud@changedat@list
+% \begin{macro}{\Changed@At@CreateList}
+% \changes{v2.02}{2014/09/02}{neu}^^A
+% \begin{macro}{\Changed@At@@CreateList}
+% \changes{v2.02}{2014/10/09}{neu}^^A
+% \begin{macro}{\Changed@At@@@CreateList}
+% \begin{macro}{\Changed@At@@@@CreateList}
+% Mit diesen Befehlen wird eine Liste im Format von \pkg{etoolbox} erzeugt,
+% welche alle notwendigen Angaben für das Erzeugen der Änderungshistorie in
+% Form eines Indexes mit \cs{Changed@At@CreateEntry} enthält.
+%
+% Der Befehl \cs{Changed@At@CreateList} kann vor dem obligatorischen Argument
+% mit einem ordinären optionalen Argument verwendet werden, in welchem ein
+% Makro, eine Umgebung, eine Option etc. angegeben wird. Ist dies der Fall, so
+% wird der Eintrag in die Änderungsliste für dieses Element generiert, sonst
+% wird eine allgemeiner Eintrag erzeugt. Das optionale Argument in runden
+% Klammern wird lediglich verwendet, wenn für eine der beiden Spezialumgebungen
+% \env{Declaration*} bzw. \env{Bundle*} eine Änderungsnotiz erstellt wird, um
+% diese für das jeweilige \TUDScript-Bundle-Element in den entsprechenden
+% Abschnitt der Änderungsliste einzutragen. Das Hauptargument verarbeitet
+% schließlich eine semikolongetrennte Liste und reicht jeden Bestandteil
+% zusammen mit den beiden optionalen Argumenten an \cs{Changed@At@@CreateList}
+% weiter.
+% \begin{macrocode}
+\NewDocumentCommand\Changed@At@CreateList{od()m}{%
+ \IfValueT{#3}{\forssvlist{\Changed@At@@CreateList[#1](#2)}{#3}}%
+}
+% \end{macrocode}
+% Mit \cs{Changed@At@@CreateList} wird lediglich die Versionsnummer von der
+% eigentlichen Änderungsnotiz getrennt.
+% \begin{macrocode}
+\NewDocumentCommand\Changed@At@@CreateList{r[]r()>{\SplitArgument{1}{:}}m}{%
+ \Changed@At@@@CreateList[#1](#2)#3%
+}
+% \end{macrocode}
+% Zuletzt wird durch \cs{Changed@At@@@CreateList} ein möglicher Untereintrag
+% in ein separates Argument abgetrennt und \cs{Changed@At@@@@CreateList} mit
+% allen Argumenten aufgerufen.
+% \begin{macrocode}
+\NewDocumentCommand\Changed@At@@@CreateList{r[]r()>{\SplitArgument{1}{!}}mm}{%
+ \Changed@At@@@@CreateList[#1](#2)#3{#4}%
+}
+% \end{macrocode}
+% Der Befehl \cs{Changed@At@@@@CreateList} übernimmt nun die Erstellung des
+% Eintrags in die Liste \cs{tud@changedat@list}. Wie bereits erwähnt, enthalten
+% die beiden ersten Argumente ggf. Markup-Befehl und \TUDScript-Bundle-Element.
+% Danach folgt die Versionsnummer der Änderungsnotiz, der mögliche Untereintrag
+% für einen Markup-Befehl sowie die Änderungsnotiz selbst.
+%
+% Die oberste Gliederungsebene der Änderungshistorie ist die Versionsnummer.
+% Unter dieser werden für jedes \TUDScript-Bundle-Element die Änderungsnotizen
+% separat ausgegeben, wobei diese nochmal in einen allgemeinen Teil und einen
+% zur Implementierung getrennt werden.
+%
+% Der im Folgenden erzeugte Eintrag für die Liste \cs{tud@changedat@list} wird
+% in zwei unterschiedlichen Varianten generiert. In der Form
+% \newline\begingroup\scriptsize
+% \val{\meta{Versionsnummer}!Allgemein!\meta{Änderungsnotiz}}
+% \endgroup\newline
+% werden allgemeine Änderungsnotizen erstellt, für Einträge bezüglich der
+% Implementierung wird die folgende Form genutzt:
+% \newline\begingroup\scriptsize
+% \val{\meta{Versionsnummer}!Implementierung!\meta{Markup-Befehl}}\ignorespaces
+% \val{!\meta{Untereintrag}!\meta{Änderungsnotiz}}.
+% \endgroup
+% \begin{macrocode}
+\NewDocumentCommand\Changed@At@@@@CreateList{r[]r()mmm}{%
+% \end{macrocode}
+% Die Aufteilung der Änderungsliste in die einzelnen \TUDScript-Bundle-Elemente
+% erfolgt entweder anhand des explizit angegebenen optionalen Argumentes in
+% runden Klammern oder aber implizit über den gegenwärtigen Inhalt des Makros
+% \cs{tud@bdl@curr}. Dafür wird das Makro \cs{@tempa} so definiert, dass es
+% das angegebene Argument in einer Box ausführt und das gesuchte Bundle-Element
+% in \cs{@tempb} gespeichert ist.
+% \begin{macrocode}
+ \def\@tempa##1{%
+ \sbox\z@{%
+ \let\tud@idx@fmt\relax%
+ \@tud@changedattrue%
+ ##1%
+ \@tud@changedatfalse%
+ \ifx\tud@idx@fmt\relax%
+ \gdef\@tempb{##1}%
+ \else%
+ \global\let\@tempb\tud@idx@fmt%
+ \fi%
+ }%
+ }%
+ \let\@tempb\@empty%
+ \IfValueTF{#2}{%
+ \@tempa{#2}%
+ }{%
+ \tud@if@bdl{\@tempa{\tud@bdl@curr}}{}%
+ }%
+% \end{macrocode}
+% Nachdem klar ist, für welches Bundle-Element ggf. der Änderungslisteneintrag
+% erzeugt werden soll, wird nun bestimmt, ob dieser im allgemeinen Teil oder in
+% den zur Implementierung erscheinen soll. Dies wird an der Existenz des ersten
+% Argumentes entschieden. Ist es vorhanden, handelt es sich um einen Eintrag
+% für den Implementierungsteil, welcher in \cs{tud@changedat@list} in der Form
+% \newline\begingroup\scriptsize
+% \meta{Versionsnummer}\val{!Implementierung!}\meta{Markup-Befehl}\ignorespaces
+% \val{!}\meta{Untereintrag}\val{!}\meta{Änderungsnotiz} gespeichert wird,
+% \endgroup
+% wobei der Untereintrag auch leer bleiben kann.
+% \begin{macrocode}
+ \IfValueTF{#1}{%
+ \toks@{#3!Implementierung }%
+% \end{macrocode}
+% Hier erfolgt ggf. der Eintrag des \TUDScript-Bundle-Elements, danach folgt
+% der Markup-Befehl.
+% \begin{macrocode}
+ \eaddto@hook\toks@{\@tempb}%
+ \addto@hook\toks@{!#1!}%
+% \end{macrocode}
+% Wurde ein Untereintrag angegeben, wird dieser hier gefolgt von der
+% eigentlichen Änderungsnotiz eingefügt. Für obsolete Deklarationen für die
+% Änderungsnotiz in jedem Fall ignoriert, da beim späteren Aufruf des Makros
+% \cs{Changed@At@CreateEntry} eine Standardmeldung ausgegeben wird.
+% \begin{macrocode}
+ \IfValueT{#4}{\addto@hook\toks@{#4}}%
+ \addto@hook\toks@{!}%
+ \if@tud@obsolete\else%
+ \IfValueT{#5}{\addto@hook\toks@{#5}}%
+ \fi%
+ }{%
+% \end{macrocode}
+% Handelt es sich um einen allgemeinen Änderungseintrag, wird dieser in der Form
+% \newline\begingroup\scriptsize
+% \meta{Versionsnummer}\val{!Allgemein!}\meta{Änderungsnotiz}%
+% \endgroup
+% in der Liste \cs{tud@changedat@list} gespeichert. Für den allgemeinen Teil
+% wird mit der Angabe eines \TUDScript-Bundle-Elements etwas anders verfahren.
+% Wurde dieses~-- wenn auch nur indirekt über eine der beiden Spezialumgebungen
+% \env{Declaration*} bzw. \env{Bundle*}~-- angegeben, so wird der Eintrag in
+% den allgemeinen Hauptteil als Untereintrag erzeugt. Erfolgte die Verwendung
+% jedoch innerhalb einer \TUDScript-Bundle-Deklaration, so erscheint der
+% Eintrag im allgemeinen Teil für das explizite Bundle-Element.
+% \begin{macrocode}
+ \toks@{#3!Allgemein }%
+ \IfValueTF{#2}{%
+ \addto@hook\toks@{!}%
+ \eaddto@hook\toks@{\@tempb:\space}%
+ \IfValueTF{#5}{%
+ \addto@hook\toks@{#5}%
+ }{%
+ \addto@hook\toks@{\emph{neu}}%
+ }%
}{%
- \global\@deprecatedfalse%
+ \eaddto@hook\toks@{\@tempb}%
+ \addto@hook\toks@{!}%
+ \addto@hook\toks@{#5}%
+ }%
+ \IfValueT{#4}{%
+ \ClassError{tudscrmanual}{Using !#4 isn't allowed for a change notice}{%
+ At least, it has to be implemented!%
+ }%
}%
+ }%
+ \listeadd\tud@changedat@list{\the\toks@}%
+}
% \end{macrocode}
-% Das optionale Argument kann verwendet werden, um allen Deklarationen die
-% gleiche, nebenstehende Zusatzinformation mitzugeben, falls diese bis dahin
-% komplett leer waren.
-% \begin{macrocode}
- \IfValueT{#2}{%
- \if@additionallist%
- \ClassWarning{tudscrman}{%
- It is not possible to use the optional argument\MessageBreak%
- of \string\printdeclarationlist due to the given\MessageBreak%
- additional information as argument of the\MessageBreak%
- environment `Declaration'%
- }%
- \else%
+% \end{macro}^^A \Changed@At@@@@CreateList
+% \end{macro}^^A \Changed@At@@@CreateList
+% \end{macro}^^A \Changed@At@@CreateList
+% \end{macro}^^A \Changed@At@CreateList
+%
+% \subsubsection{Ezeugen der Änderungseinträge}
+%
+% Mit diesen Makros erfolgt das eigentliche Eintragen der Änderungseinträge aus
+% der Liste \cs{listqChangedAt} in den entsprechenden Index \val{changelog}.
+%
+% \begin{macro}{\Changed@At@CreateEntry}
+% \changes{v2.02}{2014/09/02}{neu}^^A
+% \begin{macro}{\Changed@At@@CreateEntry}
+% \changes{v2.02}{2014/09/02}{neu}^^A
+% Der Befehl \cs{Changed@At@CreateEntry} wird durch \cs{@printchangedatlist}
+% aufgerufen und teilt die gegebene Liste am Delimiter Ausrufezeichen \val{!}
+% in fünf Argumente auf und reicht sie an \cs{Changed@At@@CreateEntry} weiter.
+% Sind weniger als vier Ausrufezeichen vorhanden, so werden die ungenutzten
+% Argumente mit dem~-- durch das Paket \pkg{xparse} definierten~-- leeren Wert
+% \val{-NoValue-} an den Befehl \cs{Changed@At@@CreateEntry} übergeben.
+% \begin{macrocode}
+\NewDocumentCommand\Changed@At@CreateEntry{>{\SplitArgument{4}{!}}m}{%
+ \Changed@At@@CreateEntry#1%
+}
+% \end{macrocode}
+% Mit \cs{Changed@At@@CreateEntry} wird der Eintrag in die Änderungshistorie
+% erzeugt, falls denn überhaupt ein Eintrag generiert werden soll. Dies wird
+% daran erkannt, ob das dritte Argument dew Wert \val{-NoValue-} entspricht
+% oder eben nicht. Der zweite Fall tritt auf, wenn lediglich eine Randnotiz
+% gesetzt werden soll. Die in \cs{tud@changedat@list} gespeicherten Einträge
+% haben die Form
+% \newline\begingroup\scriptsize
+% \val{\meta{Versionsnummer}!Allgemein!\meta{Änderungsnotiz}}
+% \endgroup\newline
+% oder
+% \newline\begingroup\scriptsize
+% \val{\meta{Versionsnummer}!Implementierung!\meta{Markup-Befehl}}\ignorespaces
+% \val{!\meta{Untereintrag}!\meta{Änderungsnotiz}}.
+% \endgroup
+% \begin{macrocode}
+\newcommand*\Changed@At@@CreateEntry[5]{%
+ \IfValueT{#3}{%
+% \end{macrocode}
+% Bei der Deklaration von Optionen, Befehlen etc. werden diese automatisch in
+% der Liste der Änderungen im Bereich \enquote{Implementierung} vor der
+% gegebenen Erklärung selbst ausgegeben. Hierfür wird die Existenz des vierten
+% Arguments geprüft. Ist dieses vorhanden\dots
+% \begin{macrocode}
+ \IfValueTF{#4}{%
+% \end{macrocode}
+% \dots befindet sich im dritten Argument der Markup-Befehl für den Eintrag im
+% Implementierungsteil. Mit dem zwischenzeitlichen Aktivieren des Schalters
+% \cs{if@tud@changedat} wird beim nachfolgenden Aufruf des Markup-Befehls das
+% Makro \cs{Process@ChangedAt} ausgeführt und dadurch auch \cs{tud@idx@get*}
+% aufgerufen, wodurch in den Makros \cs{tud@idx@key}, \cs{tud@idx@fmt} und
+% \cs{tud@idx@val} die passend formatierten Indexeinträge enthalten sind.
+% \begin{macrocode}
+ \@tud@changedattrue%
+ #3%
+ \@tud@changedatfalse%
% \end{macrocode}
-% Wurde das optionale Argument angegeben und die Zusatzliste war leer, so wird
-% der Schalter \cs{@additionallisttrue} gesetzt.
+% Das vierte Argument erstellt in der Änderungsliste einen Untereintrag für den
+% im dritten Argument gegebenen Markup-Befehl. Dies wird für Anmerkungen zu
+% expliziten Schlüssel-Wert-Paaren bei Optionen oder Parametern genutzt.
% \begin{macrocode}
- \@additionallisttrue%
- \let\@additionallist\relax%
- \protected@edef\@tempa{#2}%
+ \ifxblank{#4}{}{%
% \end{macrocode}
-% Die Standardformatierung der Zusatzinformationen.
+% Hierfür wird die zuvor erhaltene Formatierung des Markup-Befehls des dritten
+% Argumentes an den Haupteintrag \cs{tud@idx@val} mit der zusätzlichen
+% Anmerkung \enquote{Werte angepasst} angehängt.
% \begin{macrocode}
- \protected@edef\@tempb{\hspace*{\tabcolsep}\protect\small}%
- \def\@tempc##1{%
- \listeadd\@additionallist{\expandonce\@tempb(\expandonce\@tempa)}%
+ \eappto\tud@idx@val{%
+ \expandonce\tud@idx@key: Werte angepasst@%
+ \expandonce\tud@idx@fmt: Werte angepasst!%
}%
- \forlistloop\@tempc{\@declarationlist}%
- \fi%
+% \end{macrocode}
+% Anschließend werden die Formatierungsbefehle des vierten Arguments genutzt,
+% wobei vom Befehl \cs{suffix} nur das Argument selbst benötigt wird. Um den
+% Inhalt von \cs{tud@idx@val} zu schützen, erfolgt das ganze in einer Gruppe.
+% \begin{macrocode}
+ \begingroup%
+ \@tud@changedattrue%
+ #4%
+ \@tud@changedatfalse%
+ \let\suffix\@gobble%
+ \protected@edef\tud@reserved{%
+ \noexpand\endgroup%
+ \def\noexpand\tud@idx@key{\tud@idx@key}%
+ \def\noexpand\tud@idx@fmt{\tud@idx@fmt}%
+ }%
+ \tud@reserved%
+ }%
+% \end{macrocode}
+% Nachdem die Formatierung der Haupt- und Untereinträge soweit zusammengebaut
+% wurden, wird die eigentliche Änderungsnotiz des fünften Arguments angehangen.
+% Dabei wird für den Fall, dass \emph{keine} Erklärung angegeben wurde, in der
+% Änderungsliste vermerkt, ob es sich bei dem Markup-Befehl respektive dessen
+% Untereintrag um eine \emph{neue} bzw. eine \emph{obsolete} Variante handelt.
+% \begin{macrocode}
+ \ifxblank{#5}{%
+ \if@tud@obsolete%
+ \appto\tud@idx@fmt{: \emph{entf\"allt}}%
+ \else%
+ \appto\tud@idx@fmt{: \emph{neu}}%
+ \fi%
+% \end{macrocode}
+% Existiert ein Eintrag, wird dieser für Schlüssel und Format verwendet.
+% \begin{macrocode}
+ }{%
+ \appto\tud@idx@key{: #5}%
+ \appto\tud@idx@fmt{: #5}%
+ }%
+% \end{macrocode}
+% Nachdem alles abgearbeitet wurde, wird der Indexeintrag erstellt.
+% \begin{macrocode}
+ \index[changelog]{#1!#2!\tud@idx@val\tud@idx@key @\tud@idx@fmt}%
+% \end{macrocode}
+% Existiert das vierte Argument nicht, handelt es sich um einen allgemeinen
+% Eintrag in der Änderungshistorie. Dieser wird direkt ausgeführt.
+% \begin{macrocode}
+ }{%
+ \index[changelog]{#1!#2!#3}%
}%
- \@declaretrue\@openindextrue%
- \@afterindentfalse\@afterheading%
+ }%
% \end{macrocode}
-% Die deklarierten Optionen, Umgebungen, Befehle etc. werden umrahmt. Dabe
-% erfolgt die Ausgabe mithilfe einer Box, um die Größe des Deklarationsrahmens
-% zu speichern und die Änderungsmarkierung am Seitenrand auf die richtige Höhe
-% zu platzieren. Da innerhalb von Tabellen der Wert von \cs{baselineskip} auf
-% \makeatletter\the\z@\makeatother~gesetzt wird, muss für einen richtig
-% platzierten Link dieser in \cs{HyperRaiseLinkDefault} gesichert werden.
+% Außerdem wird der Liste \cs{tud@templist} die aktuelle Version einmalig
+% hinzugefügt, um alle Versionsangaben in einer Randnotiz ausgeben zu können.
% \begin{macrocode}
- \def\@tempa##1{\ignorespaces##1\tabularnewline}%
- \edef\HyperRaiseLinkDefault{\the\baselineskip}%
- \setbox0\hbox{%
- \begin{tabular}{|l|}%
- \hline%
- \forlistloop\@tempa{\@declarationlist}%
- \hline%
- \end{tabular}%
- }\usebox0%
- \@declarefalse%
-% \end{macrocode}
-% Danach werden ggf. die Voreinstellungen und Zusatzinformationen gesetzt.
-% \begin{macrocode}
- \ifboolexpr{bool {@presetlist} or bool {@additionallist}}{%
- \if@presetlist%
- \qquad%
- \texttt{%
- \begin{tabular}{l@{}}%
- \forlistloop\@tempa{\@presetlist}%
- \end{tabular}%
+ \ifinlist{#1}{\tud@templist}{}{\listadd\tud@templist{#1}}%
+}
+% \end{macrocode}
+% \end{macro}^^A \Changed@At@@CreateEntry
+% \end{macro}^^A \Changed@At@CreateEntry
+%
+% \subsubsection{Ausgabe der Änderungsliste}
+%
+% Ähnlich wie für den Index wird auch für die Änderungsliste bei der Ausgabe
+% verfahren.
+%
+% \begin{macro}{\PrintChangelog}
+% Mit \cs{PrintChangelog} erfolgt die Ausgabe der Änderungsliste. Dabei ist zu
+% beachten, dass die Einträge im Index bis zur vierten Ebene erfolgen.
+% \begin{macrocode}
+\newcommand*\PrintChangelog{%
+ \begingroup%
+% \end{macrocode}
+% Die oberste Ebene enthält die Versionsnummer mit dem Präfix \val{v}. Diese
+% Ebene soll nicht als Indexeintrag selber sondern vielmehr als Überschrift der
+% Ebene \cs{subsection} genutzt werden. Dafür wird zum einen das durch das
+% Paket \pkg{imakeidx} definierte Makro \cs{lettergroup} \emph{unschädlich}
+% gemacht, zum anderen wird der Befehl \cs{item} so umdefiniert, dass dieser
+% alles bis zum nächsten Zeilenumbruch als Argument einliest. Alle darunter
+% liegenden \cs{item}-Befehle werden eine Ebene nach oben gehoben.
+% \begin{macrocode}
+ \let\lettergroup\@gobble%
+ \apptocmd{\theindex}{%
+ \let\subsubsubitem\subsubitem%
+ \let\subsubitem\subitem%
+ \let\subitem\item%
+ \renewcommand*\item{%
+ \begingroup%
+ \escapechar=`\\%
+ \catcode\endlinechar=\active%
+ \csname\string\item\endcsname%
+ }%
+ \begingroup%
+ \escapechar=`\\%
+ \lccode`\~=\endlinechar%
+ \lowercase{%
+ \expandafter\endgroup%
+ \expandafter\def\csname\string\item\endcsname##1~%
+ }{%
+ \endgroup%
+ \addsec[##1]{\TUDScript \NoCaseChange{##1}}%
+ \tudhyperdef*{idx:changelog:##1}%
+ \def\@tempa{\indexname: \TUDScript \NoCaseChange{##1}}%
+ \@mkboth{\@tempa}{\@tempa}%
+ }%
+ }{}{\tud@patch@wrn{theindex}}%
+% \end{macrocode}
+% Mit der so angepassten \env{theindex}-Umgebung erfolgt die Ausgabe der
+% Änderungshistorie.
+% \begin{macrocode}
+ \clearpage%
+ \def\imki@indexlevel{\addchap}%
+ \print@index[changelog]%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{macro}^^A \PrintChangelog
+% \begin{macro}{\print@changedatlist}
+% \changes{v2.02}{2014/10/09}{neu}^^A
+% Die Einträge in der Liste der Änderungen \cs{tud@changedat@list} werden mit
+% dem Makro \cs{Changed@At@CreateList} abgearbeitet, sortiert und erstellt. Das
+% zweite obligatorische Argument von \cs{@printchangedatlist} steurrt den
+% vertikalen Versatz der Randnotiz. Wird im ersten Argument das boolesche Flag
+% zu \cs{BooleanTrue} gesetzt, wird die Randnotiz unterdrückt.
+% \begin{macrocode}
+\NewDocumentCommand\print@changedatlist{mm}{%
+ \ifx\tud@changedat@list\relax\else%
+ \let\tud@templist\relax%
+ \forlistloop\Changed@At@CreateEntry{\tud@changedat@list}%
+ \global\let\tud@changedat@list\relax%
+% \end{macrocode}
+% Nach der Verarbeitung der Einräge sind in \cs{tud@templist} alle angegebenen
+% Versionsnummern genau einmal enthalten. Mit \cs{tud@list@sort} werden diese
+% in die richtige Reihenfolge sortiert und anschließend als Randnotiz in einer
+% Tabelle ausgegeben, falls nicht die Sternversion verwendet wurde.
+% \begin{macrocode}
+ \IfBooleanF{#1}{%
+ \tud@list@sort\tud@templist%
+ \strut%
+ \marginnote{%
+ \def\@tempa####1{%
+ \ignorespaces%
+ \tudhyperref{idx:changelog:####1}{####1}%
+ \tabularnewline%
}%
- \fi%
- \if@additionallist%
- \begin{tabular}{@{}l@{}}%
- \forlistloop\@tempa{\@additionallist}%
+ \begin{tabular}{|l|}%
+ \hline%
+ \forlistloop\@tempa{\tud@templist}%
+ \hline%
\end{tabular}%
+ }[#2]%
+ \ignorespaces%
+ }%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \print@changedatlist
+%
+% \subsection{Erläuterungen und weiterführende Ergänzungen im Handbuch}
+%
+% Es folgen einige Umgebungen, mit welchen bestimmte Aspekte oder Pakete im
+% Handbuch erläutert werden.
+%
+% Das Paket \pkg{enumitem} erlaubt das Beeinflussen der Standardlisten und die
+% Ableitung neuer Listen aus diesen. Mit \cs{setlist\{noitemsep\}} werden die
+% zusätzlichen Zwischenräume innerhalb der Listen beseitigt.
+% \begin{macrocode}
+\RequirePackage{enumitem}[2011/09/28]
+\setlist{noitemsep}
+% \end{macrocode}
+% Mit den Möglichkeiten des Paketes \pkg{enumitem} werden folgend Listen für
+% das Aufführen von möglichen Werten einer Option sowie der Beschreibung von
+% nützlichen Paketen erstellt. Für beide Lsiten soll dabei die originale
+% Definition von \cs{item} in \cs{stditem} gesichert und anschließend angepasst
+% werden. Die Sicherung und Redefinition von \cs{item} erfolgt dabei über das
+% Makro \cs{tud@before@item} über einen bereitgestellten \emph{hook} zu Beginn
+% der jeweiligen Liste.
+% \begin{macro}{\stditem}
+% \begin{macro}{\tud@before@item}
+% \begin{macrocode}
+\newcommand*\stditem{}
+\newcommand*\tud@before@item[1]{%
+ \ifdefvoid{\stditem}{%
+ \let\stditem\item%
+ \letcs\item{tud@item@#1}%
+% \end{macrocode}
+% Damit Änderungsnotizen in der passenden vertikalen Position erscheinen, wird
+% die Länge \cs{changedatskip} entsprechend angepasst.
+% \begin{macrocode}
+ \setlength\changedatskip{-\baselineskip}%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@before@item
+% \end{macro}^^A \stditem
+% \begin{environment}{values}
+% \begin{environment}{@values}
+% \begin{macro}{\tud@values}
+% Die Liste \env{@values} dient zum Benennen der möglichen Werte für einen
+% bestimmten Schlüssel. Im Handbuch kommt diese Liste vor allem bei Optionen
+% aber ggf. auch bei bestimmten Befehls- und Optionsparametern zum Einsatz.
+% Diese wird in der Umgebung \env{values} eingebettet, damit zum einen ein
+% \emph{obligatorisches} Argument verwendet werden kann und zum anderen
+% \emph{nach} diesem ein optionales für die Liste selbst verwendbar ist. Das
+% obligatorische Argument wird in \cs{tud@values} gesichert und sollte die
+% genauer zu beschreibende Option bzw. das Makro etc. enthalten.
+% \begin{macrocode}
+\newcommand*\tud@values{}
+\NewDocumentEnvironment{values}{mo}{%
+ \def\tud@values{#1}%
+ \IfValueTF{#2}{\@values[#2]}{\@values}%
+}{%
+ \end@values%
+}
+\newlist{@values}{description}{1}
+\setlist[@values]{%
+ topsep=\smallskipamount,labelwidth=\linewidth,labelsep=0pt,%
+ font=\normalfont,parsep=\parskip,listparindent=\parindent,%
+ before=\tud@before@item{values}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@values
+% \end{environment}^^A @values
+% \end{environment}^^A values
+% \begin{macro}{\tud@item@values}
+% \begin{macro}{\forslashlist}
+% Das Makro \cs{tud@item@values} ersetzt in der Umgebung \env{values} die
+% originale Definiton von \cs{item}. Die Sternversion kann dabei verwendet
+% werden, um die Einstellung für den Säumniswert hervorzuheben. Im ersten
+% optionalen Argument können die möglichen Werte einer Option oder eines
+% Parameters angegeben werden. Sind mehrere Werte gleichbedeutende Werte
+% verwendbar, so sind diese durch \val{/} zu trennen. Dabei wird der als
+% erstes angegebene Wert für den Untereintrag in den Index verwendet. Das
+% zweite optionale Argument kann genutzt werden, falls beispielsweise für
+% unterschiedliche Klassen sich der Säumniswert unterscheidet. Das letzte
+% optionale Argument in runden Klammern fügt zum Schluss einen ergänzenden
+% Eintrag hinzu.
+% \begin{macrocode}
+\DeclareListParser*{\forslashlist}{/}
+\NewDocumentCommand\tud@item@values{sood()}{%
+% \end{macrocode}
+% Alle Auszeichnungen kommen nur zum Tragen, wenn ein optionales Argument für
+% die Werte angegeben wurde.
+% \begin{macrocode}
+ \IfValueTF{#2}{%
+% \end{macrocode}
+% Die durch Schrägstrich getrennte Liste im optionalen Argument wird mit
+% \cs{forslashlist} durchlaufen. Der erste Eintrag wird für den Indexeintrag
+% benötigt und in \cs{@tempc} gesichert, alle weiteren Einträge werden in
+% \cs{@tempb} gespeichert und lediglich im Fließtext aufgelistet.
+% \begin{macrocode}
+ \let\@tempc\@empty%
+ \def\tud@reserved##1{%
+ \if@tempswa%
+ \appto\@tempb{/##1}%
+ \else%
+ \@tempswatrue%
+ \let\@tempb\@empty%
+ \def\@tempc{##1}%
\fi%
- }{}%
+ }%
+ \@tempswafalse%
+ \forslashlist\tud@reserved{#2}%
+% \end{macrocode}
+% Jetzt beginnt die Formatierung der Ausgabe. Zuerst wird die zu beschreibende
+% Option in \cs{@tempa} expandiert. Danach wird der erste Wert angehangen,
+% wobei dieser für die Sternversion als Säumniswert mit \cs{emph} hervorgehoben
+% wird. Zuletzt wird dafür Sorge getragen, dass auf den anschließend erzeugten
+% Eintrag selbst kein Hyperlink erzeugt wird und dieser im passenden Index als
+% fettmarkierter Eintrag erscheint.
+% \begin{macrocode}
+ \edef\@tempa{\expandonce\tud@values}%
+ \protected@eappto\@tempa{%
+ =\IfBooleanTF{#1}{\noexpand\emph}{\@firstofone}{\@tempc}=%
+ }%
+ \appto\@tempa{'none'|!|}%
% \end{macrocode}
-% Alle für die Deklaration verwendeten Listen werden nach ihrer Abarbeitung
-% zurückgesetzt.
+% Danach werden alle weiteren möglichen Werte angegeben, wobei auch diese im
+% Zweifelsfall mit \cs{emph} hervorzuheben sind.
% \begin{macrocode}
- \global\let\@declarationlist\relax%
- \global\let\@presetlist\relax%
- \global\@presetlistfalse%
- \global\let\@additionallist\relax%
- \global\@additionallistfalse%
+ \edef\@tempb{%
+ \IfBooleanTF{#1}{\noexpand\emph}{\@firstofone}{%
+ \noexpand\PValue{\@tempb}%
+ }%
+ }%
% \end{macrocode}
-% Die Einträge in der Änderungsliste sowie die dazugehörige Randnotiz werden
-% innerhalb der Deklaration mit \cs{printchangedatlist} erzeugt. Das optionale
-% Argument sorgt für die Verschiebung der Randnotiz auf die richtige Höhe, um
-% den Höhenversatz zwischen Randnotiz und Deklarationsrahmen auszugleichen.
+% Zuletzt erfolgt die Auszeichnung, ob es sich bei den gelisteten Werten um
+% Säumniswerte handelt, gefolgt vom optionael Suffix.
% \begin{macrocode}
- \printchangedatlist*[%
- \dimexpr.5\ht\strutbox+.5\dp\strutbox-.5\ht0-.5\dp0\relax%
- ]%
+ \IfBooleanTF{#1}{%
+ \appto\@tempb{\suffix{S\"aumniswert}}%
+ }{%
+ \IfValueT{#3}{\appto\@tempb{\suffix{S\"aumniswert f\"ur #3}}}%
+ }%
+ \IfValueT{#4}{\appto\@tempb{\suffix{#4}}}%
% \end{macrocode}
-% Zum Schluss wird das optionale Argument (in runden Klammern) neben der
-% Deklarationsbox ausgegeben.
+% Die in \cs{tud@values} gespeicherte, zu beschreibende Option bzw. Makro etc.
+% und der erste im optionalen Argument angegebene Wert werden verwendet, um ein
+% Label zu erstellen.
% \begin{macrocode}
- \IfValueT{#3}{#3}%
- \par\nobreak%
- \vskip 1.5\baselineskipglue%
- \@afterindentfalse\@afterheading%
- \fi%
+ \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:\tud@values}=\@tempc=%
+% \end{macrocode}
+% Abschließend erfolgt wird die Ausgabe des generierten Eintrags mit dem
+% originalen Makro \cs{stditem}.
+% \begin{macrocode}
+ \stditem[\tudhyperdef{\tud@lbl@tmp}\@tempa\@tempb]%
+ }{%
+ \stditem%
+ }%
}
% \end{macrocode}
-% \end{macro}^^A \@gobbleparameters
-% \end{macro}^^A \if@additionallist
-% \end{macro}^^A \@additionallist
-% \end{macro}^^A \if@presetlist
-% \end{macro}^^A \@presetlist
-% \end{macro}^^A \@declarationlist
-% \end{macro}^^A \printdeclarationlist
-% \end{environment}^^A Declaration
-% \begin{environment}{Declaration*}
-% \changes{v2.02}{2014/10/09}{neu}^^A
-% Die Sternversion der Umgebung \env{Declaration*} ist für die vereinfachte
-% Deklaration von Klassen, Paketen etc. gedacht, bei denen keine Ausgabe
-% sondern lediglich Hyperlink, Indexeintrag und Änderungsnotiz erzeugt werden
-% sollen. Dabei sollte diese direkt nach einer Gliederungsüberschrift genutzt
-% werden, in welcher das zu deklarierende ELement (Klasse, Paket etc.) genannt
+% \end{macro}^^A \forslashlist
+% \end{macro}^^A \tud@item@values
+% \begin{macro}{\itemtrue}
+% \begin{macro}{\itemfalse}
+% \begin{macro}{\tud@item@bool}
+% Die folgenden beiden Befehle sind äquivalent zu \cs{tud@item@values} genutzt
+% werden. Diese enthalten allerdings im optionalen Argument zumindest die
+% Standardwerte für positive bzw. negative boolesche Schalter. Diese werden
+% durch den Befehl \cs{item@bool} gesetzt.
+% \begin{macrocode}
+\NewDocumentCommand\itemtrue{sood()}{\item@bool{#1}{true/on/yes}[#2][#3](#4)}
+\NewDocumentCommand\itemfalse{sood()}{\item@bool{#1}{false/off/no}[#2][#3](#4)}
+% \end{macrocode}
+% Der Befehl \cs{item@bool} setzt je nach angegebenen Argumenten über ein
+% token-Register den auszuführenden \cs{item}-Befehl zusammen.
+% \begin{macrocode}
+\NewDocumentCommand\item@bool{mmr[]r[]r()}{%
+ \toks@{\item}%
+ \IfBooleanT{#1}{\addto@hook\toks@{*}}%
+% \end{macrocode}
+% Die optionalen Werte werden im Zweifel den booleschen Standardwerten
+% angehängt und als einziges optionales Argument an \cs{item} übergeben.
+% \begin{macrocode}
+ \protected@edef\@tempa{#2\IfValueT{#3}{/#3}}%
+ \eaddto@hook\toks@{\expandafter[\@tempa]}%
+ \IfValueT{#4}{\addto@hook\toks@{[#4]}}%
+ \IfValueT{#5}{\addto@hook\toks@{(#5)}}%
+ \the\toks@%
+}
+% \end{macrocode}
+% \end{macro}^^A \itemfalse
+% \end{macro}^^A \itemtrue
+% \end{macro}^^A \tud@item@bool
+% \begin{environment}{packages}
+% \begin{macro}{\tud@item@packages}
+% \changes{v2.02}{2014/10/09}{optionales Argument für CTAN-Link}^^A
+% \changes{v2.04}{2015/03/12}{optionales Argument für weitere Pakete}^^A
+% Ähnlich wie für die Auflistung von Werten eines Schlüssels wird auch mit der
+% Charakterisierung von Paketen verfahren. Diese werden in der Auflistung
+% speziell gekennzeichnet.
+% \begin{macrocode}
+\newlist{packages}{description}{2}
+\setlist[packages]{%
+ topsep=\smallskipamount,labelwidth=\linewidth,labelsep=0pt,%
+ font=\normalfont,parsep=\parskip,listparindent=\parindent,%
+ before=\tud@before@item{packages}%
+}
+% \end{macrocode}
+% Hiermit können ein oder mehrere Pakete erläutert werden. Des Weiteren werden
+% Textanker definiert, auf die im Zweifelsfall in der Dokumentation verlinkt
% wird.
% \begin{macrocode}
-\NewDocumentEnvironment{Declaration*}{om}{%
- \@changedatdeclare{#1}{#2}%
- \@stareddeclaretrue%
- \global\@deprecatedfalse%
- \@declaretrue\@openindextrue#2\@declarefalse%
- \@stareddeclarefalse%
-}{%
- \ifx\@changedatdeclarelist\relax\else%
- \ClassError{tudscrman}{\string\printchangedatlist\space is missing}{%
- \string\@changedatdeclarelist\space is not empty. Did you\MessageBreak%
- forget to print this list with \string\printchangedatlist?%
+\NewDocumentCommand\tud@item@packages{od<>d()}{%
+% \end{macrocode}
+% Die kommagetrennte Liste im optionalen Argument wird verwendet, um jedes
+% einzelnen Paket aufzulisten und einen dazugehörigen Textanker zu erzeugen.
+% Das optionale Argument in Guillemets kann genutzt werden, um \emph{alle}
+% gelisteten Pakete auf den gleichen CTAN-Link zielen zu lassen. Dies ist
+% beispielsweise für mehrere Pakete aus dem gleichen Bundle sinnvoll.
+% \begin{macrocode}
+ \def\@tempa##1{%
+ \@tempc%
+ \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:\Package{##1}}%
+ \tudhyperdef{\tud@lbl@tmp}%
+ \begingroup%
+ \Package{##1}<#2>'url'|!|%
+ \endgroup%
+ \def\@tempc{, }%
+ }%
+ \stditem[{%
+ \IfValueT{#1}{%
+ \let\@tempc\relax%
+ \forcsvlist\@tempa{#1}%
+% \end{macrocode}
+% Wird im dritten optionalen Argument in runden Klammern ein Paket angegeben,
+% so wird ebenfalls ein Textanker erzeugt, allerdings auf einen Hyperlink zu
+% CTAN verzichtet.
+% \begin{macrocode}
+ \IfValueT{#3}{%
+ \tud@lbl@get@curr*\tud@lbl@tmp{\tud@bdl@curr:\Package{#3}}%
+ \quad(\tudhyperdef{\tud@lbl@tmp}\Package{#3}'none'|!|)%
+ }%
}%
- \fi%
- \global\@deprecatedfalse%
- \@gobbleparameters%
- \@declaretrue\@openindexfalse#2\@declarefalse%
+ }]%
}
% \end{macrocode}
-% \end{environment}^^A Declaration*
+% \end{macro}^^A \tud@item@packages
+% \end{environment}^^A packages
% \begin{environment}{tabularm}
-% \begin{macro}{\allcolumnpar}
-% \begin{macro}{\@allcolumnpar}
+% \begin{macro}{\tabularm@allcolumnpar}
% \begin{macro}{\tabularm@box}
% \begin{macro}{\tabularm@num}
% \begin{length}{\tabularm@wd}
-% Die Umgebung \env{tabularm} ist eine Erweiterung der \env{tabularm}-Umgebung.
+% \begin{length}{\tempdim}
+% \changes{v2.02}{2014/08/16}{neu}^^A
+% Die Umgebung \env{tabularm} ist eine Erweiterung der \env{tabular}-Umgebung.
% In dieser wird die Breite der zu setzenden Tabelle mit Hilfe der Box
% \cs{tabularm@box} in \cs{tabularm@wd} gespeichert. Anschließend kann mit dem
-% Befehl \cs{allcolumnpar} eine Zeile über alle Spalten der Tabelle
-% ausgegeben werden. Dabei ist das zu übergebende Argument die Anzahl der zu
-% erzeugenden, linksbündigen Spalten.
+% Befehl \cs{allcolumnpar} eine Zeile über alle Spalten der Tabelle ausgegeben
+% werden. Dabei ist das zu übergebende Argument die Anzahl der zu erzeugenden,
+% linksbündigen Spalten.
% \begin{macrocode}
+\newlength\tempdim
\newsavebox\tabularm@box
\newlength\tabularm@wd
\newcommand*\tabularm@num{1}
@@ -2215,132 +4476,67 @@
\end{lrbox}%
\setlength\tabularm@wd{\wd\tabularm@box}%
\def\tabularm@num{#1}%
- \let\allcolumnpar\@allcolumnpar%
+ \let\allcolumnpar\tabularm@allcolumnpar%
\begin{tabular}{*{#1}l}\BODY\end{tabular}%
}
-\newcommand*\@allcolumnpar[1]{%
+\newcommand*\tabularm@allcolumnpar[1]{%
\multicolumn{\tabularm@num}{@{}p{\tabularm@wd}@{}}{#1}%
}
% \end{macrocode}
+% \end{length}^^A \tempdim
% \end{length}^^A \tabularm@wd
% \end{macro}^^A \tabularm@box
% \end{macro}^^A \tabularm@num
-% \end{macro}^^A \@allcolumnpar
-% \end{macro}^^A \allcolumnpar
+% \end{macro}^^A \tabularm@allcolumnpar
% \end{environment}^^A tabularm
-% \begin{environment}{values}
-% \begin{macro}{\before@values}
-% \begin{macro}{\itemvalues}
-% \begin{macro}{\itemtrue}
-% \begin{macro}{\itemfalse}
-% \begin{macro}{\tud@item@val}
-% \begin{macro}{\tud@item@add}
-% \begin{macro}{\tud@item@format}
-% \begin{macro}{\tud@item}
-% \begin{macro}{\tud@@item}
-% \begin{macro}{\tud@@@item}
-% Die Liste \env{values} dient zum Benennen der möglichen Werte für einen
-% bestimmten Schlüssel. Im Handbuch kommt diese Liste vorallem bei Optionen
-% aber auch bei bestimmten Befehls- und Optionsparametern zum Einsatz.
-% \begin{macrocode}
-\newlist{values}{description}{1}
-\setlist[values]{%
- topsep=.5\baselineskipglue,labelwidth=\columnwidth,labelsep=0pt,%
- font=\normalfont\ttfamily,before*=\before@values%
-}
-% \end{macrocode}
-% Zu Beginn der Umgebung wird die Definition des \cs{item}-Befehls gesichert
-% und anschließend geändert.
-% \begin{macrocode}
-\newcommand*\itemvalues{}
-\newcommand*\before@values{%
- \ifdefvoid{\itemvalues}{%
- \let\itemvalues\item%
- \let\item\tud@item%
- \setlength\changedatskip{-\baselineskip}%
- }{}%
-}
-% \end{macrocode}
-% Die folgenden beiden Befehle enthalten die Standardwerte für boolsche
-% Schalter.
+% Mit Hilfe von \pkg{tabularx} können Tabellen bestimmter Breite und
+% automatisch berechneten Spaltenbreiten gesetzt werden.
% \begin{macrocode}
-\newcommand*\itemfalse{\def\tud@item@val{false/off/no}\item}
-\newcommand*\itemtrue{\def\tud@item@val{true/on/yes}\item}
+\RequirePackage{tabularx}[1999/01/07]
% \end{macrocode}
-% Mit der neuen Definition kann der Säumniswert mit \cs{item*} explizit in der
-% Liste hervorgehoben werden.
+% \begin{macro}{\TermTable}
+% \begin{macro}{\Term@Table}
+% \begin{macro}{\Term@@Table}
+% Für sprachabhängige Bezeichner wird zusätzlich der Befehl \cs{TermTable}
+% definiert, dem eine kommaseparierte Liste übergeben werden kann. Anhand
+% dieser Liste werden die enthalten Begriffe für die Sprachen Deutsch und
+% English in einer Tabelle ausgegeben. Die Sternversion dieses Befehls nutzt
+% dafür die \env{tabularx}-Umgebung. Für diese kann ein zweites Argument
+% angegeben werden, welches die gewünschte Breite der Tabelle angibt.
% \begin{macrocode}
-\newcommand*\tud@item@val{}
-\newcommand*\tud@item@add{}
-\newcommand*\tud@item@format{}
-\newcommand*\tud@item{%
- \@ifstar{%
- \def\tud@item@add{(S\"aumniswert)}%
- \let\tud@item@format\emph%
- \tud@@item%
+\NewDocumentCommand\TermTable{smg}{%
+ \let\tud@templist\relax%
+ \forcsvlist{\listadd\tud@templist}{#2}%
+ \ifhmode\par\fi%
+ \vskip\medskipamount%
+ \@afterindentfalse\@afterheading%
+ \IfBooleanTF{#1}{%
+ \IfValueTF{#3}{\setlength\@tempdima{#3}}{\setlength\@tempdima{\linewidth}}%
+ \setlength\@tempdimc{-.7\baselineskip}%
+ \begin{tabularx}{\@tempdima}{lXX}\Term@Table\end{tabularx}%
}{%
- \let\tud@item@add\relax%
- \let\tud@item@format\relax%
- \tud@@item%
+ \setlength\@tempdimc{\z@}%
+ \begin{tabular}{lll}\Term@Table\end{tabular}%
}%
+ \par\addvspace{\medskipamount}%
}
-% \end{macrocode}
-% In der zweiten Instanz wird das optionale Argument von \cs{item} ausgewertet.
-% Dabei wird das Hilfsmakro \cs{tud@item@val} beachtet, welches evtl. mit den
-% Befehlen \cs{itemtrue} oder \cs{itemfalse} gesetzt wurde und vor dem
-% optionalen Argument aufgeführt wird.
-% \begin{macrocode}
-\newcommand*\tud@@item[1][]{%
- \ifblank{#1}%
- {\edef\@tempa{\tud@item@val}}%
- {\ifstr{\tud@item@val}{}%
- {\edef\@tempa{#1}}%
- {\edef\@tempa{\tud@item@val/#1}}%
- }%
- \def\tud@item@val{}%
-% \end{macrocode}
-% Wurde weder \cs{tud@item@val} gesetzt noch ein Wert im optionalen Argument
-% von \cs{item} angegeben, so wird der gesicherte Befehl ausgeführt. Ansonsten
-% folgt die dritte Instanz.
-% \begin{macrocode}
- \ifstr{\@tempa}{}{\itemvalues}{\tud@@@item}%
+\newcommand*\Term@Table{%
+ \toprule%
+ \textbf{Bezeichner} & \textbf{Deutsch} & \textbf{Englisch}\tabularnewline%
+ \midrule%
+ \forlistloop\Term@@Table{\tud@templist}%
+ \bottomrule%
}
-% \end{macrocode}
-% Der gesicherte Befehl wird mit den aufbereiteten Formatierungen genutzt.
-% \begin{macrocode}
-\newcommand*\tud@@@item[1][]{%
- \ifblank{#1}{}{%
- \ifx\tud@item@add\relax%
- \def\tud@item@add{#1}%
- \else%
- \appto\tud@item@add{~#1}%
- \fi%
- }%
- \itemvalues[%
- \tud@item@format{\@tempa:}%
- \ifx\tud@item@add\relax\else%
- {\normalfont\space\footnotesize\tud@item@add}%
- \fi%
- ]%
+\newcommand*\Term@@Table[1]{%
+ \Term{#1} & %
+ \ifstr{\csuse{#1}}{}{\PName{leer}}{\csuse{#1}} & %
+ \selectlanguage{english}\vspace*{\@tempdimc}%
+ \ifstr{\csuse{#1}}{}{\PName{empty}}{\csuse{#1}}\tabularnewline%
}
% \end{macrocode}
-% \end{macro}^^A \tud@@@item
-% \end{macro}^^A \tud@@item
-% \end{macro}^^A \tud@item
-% \end{macro}^^A \tud@item@format
-% \end{macro}^^A \tud@item@add
-% \end{macro}^^A \tud@item@val
-% \end{macro}^^A \itemfalse
-% \end{macro}^^A \itemtrue
-% \end{macro}^^A \itemvalues
-% \end{macro}^^A \before@values
-% \end{environment}^^A values
-%
-% \subsubsection{Erläuterungen und weiterführende Ergänzungen im Handbuch}
-%
-% Es folgen einige Umgebungen, mit welchen bestimmte Aspekte oder Pakete im
-% Handbuch erläutert werden.
-%
+% \end{macro}^^A \Term@@Table
+% \end{macro}^^A \Term@Table
+% \end{macro}^^A \TermTable
% \begin{environment}{Example}
% \begin{environment}{Example*}
% Diese Umgebung wird für die exemplarische Erläuterung von bestimmten Aspekten
@@ -2349,26 +4545,97 @@
% unterdrückt dabei das Zurücksetzen des eigentlich entfernten vertikalen
% Abstandes.
% \begin{macrocode}
-\newenvironment{Example}{\@nameuse{Example*}}{%
- \@nameuse{endExample*}%
+\newenvironment{Example}{\csuse{Example*}}{%
+ \csuse{endExample*}%
\addvspace{-\topsep}%
}
\newenvironment{Example*}{%
- \labeling{{\usekomafont{disposition}Beispiel:\ }}%
- \item[{\usekomafont{disposition}Beispiel:\ }]%
+ \labeling{{\usekomafont{disposition}Beispiel:\nobreakspace}}%
+ \item[{\usekomafont{disposition}Beispiel:\nobreakspace}]%
}{%
\endlabeling%
}
% \end{macrocode}
% \end{environment}^^A Example*
% \end{environment}^^A Example
+%
+% \iffalse
+%</class>
+% \fi
+%
+% \subsection{Lesen und Schreiben von Hilfsdateien}
+%
+% Für den Anwender werden im \TUDScript-Bundle einige Tutorials für die Nutzung
+% von \LaTeXe bereitgestellt. Innerhalb dieser werden Auszüge von Quelltexten
+% verwendet und erläutert. Zum einen soll die Möglichkeit geschaffen werden,
+% diese gesammelt am Ende eines Tutorials für ein Copy"~\&"~Paste"~Beispiel zu
+% verwenden. Andererseits soll auch das sofortige Ausführen des beschriebenen
+% Quelltextauszuges direkt im Tutorial möglich sein. Dafür werden im Folgenden
+% die Umgebungen \env{Preamble}, \env{Trunk} und \env{Hint} sowie daraus
+% abgeleitet Varianten definiert, womit sich die Angabe und Erläuterung der
+% Quelltexte im Tutorial logisch strukturieren lässt und dennoch die notwendige
+% Ordnung dieser für das Copy"~\&"~Paste"~Beispiel aufrechterhalen werden kann.
+% Hierfür zeichnen die beiden Umgebungen \env{Preamble} und \env{Trunk} und
+% deren Derivate verantwortlich. Die Umgebung \env{Hint} steht für zusätzliche
+% Erläuterungen bereit, welche jedoch nicht in das Copy"~\&"~Paste"~Beispiel
+% übernommen werden.
+%
+% \begin{macro}{\tud@write@a}
+% \changes{v2.02}{2014/10/22}{neu}^^A
+% \begin{macro}{\tud@write@b}
+% \changes{v2.02}{2014/11/02}{neu}^^A
+% \begin{macro}{\tud@read}
+% \changes{v2.02}{2014/08/19}{neu}^^A
+% Für die Erstellung der Indexe wird zum Sortieren das Programm \app{texindy}
+% genutzt. Für dieses wird eine eigene Stildatei verwendet, welche zur Laufzeit
+% erzeugt wofür zuerst ein Ausgabestream reserviert wird.
+% \begin{macrocode}
+\newcommand*\tud@write@a{}
+\newwrite\tud@write@a
+% \end{macrocode}
+% Für die Tutorials werden später zusätzlich noch ein weiterer Ausgabe- sowie
+% ein Eingabestream benötigt, die hier gleich mit initialisiert werden.
+% \begin{macrocode}
+%<*package>
+\newcommand*\tud@write@b{}
+\newwrite\tud@write@b
+\newcommand*\tud@read{}
+\newread\tud@read
+%</package>
+% \end{macrocode}
+% \end{macro}^^A \tud@read
+% \end{macro}^^A \tud@write@b
+% \end{macro}^^A \tud@write@a
+%
+% \subsection{Einbinden von Quelltextauszügen}
+%
+% Sowohl im Handbuch als auch in den Tutorials werden Quelltextauszüge für das
+% bessere Verständnis des Anwenders angegeben. Um diese darzustellen wird das
+% Paket \pkg{listings} verwendet.
+% \begin{macrocode}
+\RequirePackage{listings}[2014/03/04]
+\lstdefinestyle{tudscr}{%
+ basicstyle=\ttfamily\ifdef{\setstretch}{\setstretch{1}}{},%
+ keywordstyle=,%
+ columns=fullflexible,keepspaces,%
+ aboveskip=\smallskipamount,%
+ belowskip=\smallskipamount,%
+ language=[LaTeX]TeX,%
+ texcl,%
+}
+% \end{macrocode}
+%
+% \iffalse
+%<*class>
+% \fi
+%
% \begin{environment}{Code}
% \begin{macro}{\tud@currentHref}
% Folgend werden Befehle und Umgebungen für die Darstellung von Quelltexten im
-% Handbuch definiert. Mit dieser Umgebung können kurze Quelltextbeispiele im
-% Handbuch ausgegeben werden. Sicherlich sinnvoll ist, die \env{Code}-Umgebung
-% innerhalb von \env{Example} oder \env{quoting} zu verwenden, um den
-% Quelltext etwas abzuheben.
+% Handbuch definiert. Mit dieser Umgebung können kurze Quelltextbeispiele
+% ausgegeben werden. Sicherlich sinnvoll ist, die \env{Code}-Umgebung innerhalb
+% von \env{Example} oder \env{quoting} zu verwenden, um den Quelltext etwas
+% abzuheben.
% \begin{macrocode}
\lstnewenvironment{Code}[1][]{\lstset{style=tudscr,#1}}{}
% \end{macrocode}
@@ -2382,538 +4649,370 @@
% \end{macrocode}
% \end{macro}^^A \tud@currentHref
% \end{environment}^^A Code
-% \begin{environment}{packages}
-% \begin{macro}{\itempackages}
-% \begin{macro}{\tud@item@pkg}
-% \changes{v2.02}{2014/10/08}{\cs{DeclarePackage} entfernt}^^A
-% \changes{v2.02}{2014/10/09}{optionales Argument für CTAN-Link}^^A
-% \changes{v2.04}{2015/03/12}{optionales Argument für weitere Pakete}^^A
-% \begin{macro}{\before@packages}
-% Ähnlich wie für die Auflistung von Werten eines Schlüssels wird auch mit der
-% Charakterisierung von Paketen verfahren. Diese werden in der Auflistung
-% speziell gekennzeichnet.
-% \begin{macrocode}
-\newlist{packages}{description}{2}
-\setlist[packages]{%
- topsep=\medskipamount,labelwidth=\linewidth,labelsep=0pt,font=\normalfont,%
- parsep=\parskip,listparindent=\parindent,before=\before@packages%
-}
-\newcommand*\itempackages{}
-\newcommand*\before@packages{%
- \ifdefvoid{\itempackages}{%
- \let\itempackages\item%
- \let\item\tud@item@pkg%
- \setlength\changedatskip{-\baselineskip}%
- }{}%
-}
-\NewDocumentCommand\tud@item@pkg{od()od''}{%
- \itempackages[{%
- \IfValueT{#1}{%
- \manualhyperdef{files:#1}%
- \IfValueTF{#2}{%
- \def\@tempa{http://www.ctan.org/pkg/#2}%
- }{%
- \def\@tempa{http://www.ctan.org/pkg/#1}%
- }%
- \href{\@tempa}{\Package{#1}'none'|!|}%
- \IfValueT{#3}{%
- \quad(%
- \let\@tempb\relax%
- \@for\@tempa:=#3\do{%
- \@tempb%
- \manualhyperdef{files:\@tempa}%
- \expandafter\Package\expandafter{\@tempa}'none'|!|%
- \def\@tempb{, }%
- }%
- )%
- }%
- \IfValueT{#4}{%
- \quad(%
- \let\@tempb\relax%
- \@for\@tempa:=#4\do{%
- \@tempb%
- \manualhyperdef{files:\@tempa}%
- \href{http://www.ctan.org/pkg/\@tempa}{%
- \expandafter\Package\expandafter{\@tempa}'none'|!|%
- }%
- \def\@tempb{, }%
- }%
- )%
- }%
- }%
- }]%
-}
-% \end{macrocode}
-% \end{macro}^^A \before@packages
-% \end{macro}^^A \tud@item@pkg
-% \end{macro}^^A \itempackages
-% \end{environment}^^A packages
%
-% \subsubsection{Änderungsliste}
+% \iffalse
+%</class>
+% \fi
%
-% Um dem Anwender einen schnellen Überblick zu Änderungen der aktuellen Verison
-% bereitstellen zu können, werden Befehle zur automatisierten Erzeugung einer
-% solchen Liste definiert.
-% \ToDo{%
-% Der Quelltext ist ein Grauen, das muss ich irgendwann einmal komplett
-% überarbeiten. Insbesondere sollten die Argumente für die Änderungsliste
-% wesentlich strukturierter eingefügt werden, bestenfalls mit zwei oder mehr
-% unterschiedlichen Trennzeichen.
-% }[?]
+% \subsection{Kompilieren von externen Dateien und Querverweise auf diese}
%
-% \begin{macro}{\@changedatdeclare}
-% \changes{v2.02}{2014/10/09}{neu}^^A
-% \begin{macro}{\@changedatdeclaredefault}
-% \changes{v2.02}{2014/10/09}{neu}^^A
-% \begin{macro}{\@changedatdeclarelist}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% \begin{macro}{\ChangedAt@Split}
-% \begin{macro}{\ChangedAt@@Split}
-% Um für Änderungsnotizen die dazugehörige Option, Befehl etc. bei einer
-% Deklaration kenntlich zu machen, wird das deklarierte Element zusammen mit
-% der Notiz in einer Liste gespeichert. Da mehrere kommaseparierte Werte
-% angegeben werden können, muss das optionale Argument der Umgebung
-% \env{Declaration} dahingehend abgearbeitet werden. Wenn keine weitere
-% Erklärung angegeben wurde, wird der entspredchende Eintrag mit dem Attribut
-% versehen, welches in \cs{@changedatdeclaredefault} gespeichert ist. Dabei
-% kann außerdem angegeben werden, ob es sich bei Änderung um eine Umbenennung
-% von Option, Befehl etc. handelt.
-% \begin{macrocode}
-\newcommand*\@changedatdeclarelist{}
-\let\@changedatdeclarelist\relax
-\newcommand*\@changedatdeclaredefault{\emph{neu}}
-\newcommand*\@changedatdeclare[2]{%
- \IfValueT{#1}{%
- \@for\@tempa:=#1\do{%
- \ifx\@tempa\@empty\else%
- \preto{\@tempa}{#2!}%
- \expandafter\ChangedAt@Split\expandafter{\@tempa}%
- \fi%
- }%
+% Das Paket \pkg{filemod} wird genutzt, um externer Dateien nur zu kompilieren,
+% wenn dies aufgrund einer Änderung auch notwendig ist.
+% \begin{macrocode}
+\RequirePackage{filemod}[2011/09/19]
+% \end{macrocode}
+% Um die \cs{write18} sowohl für Windows als auch für unixoide Betriebssysteme
+% nutzen zu können, wird das Paket \pkg{ifplatform} geladen.
+% \begin{macrocode}
+\RequirePackage{ifplatform}[2010/10/22]
+% \end{macrocode}
+% \begin{macro}{\tud@shellescape@wrn}
+% \changes{v2.02}{2014/10/14}{neu}^^A
+% Dieses Makro wird verwendet, wenn eine gesuchte Datei nicht gefunden wurde,
+% weil das Dokument noch nicht mit der Option \opt{--shell-escape} kompiliert
+% wurde.
+% \begin{macrocode}
+\newcommand*\tud@shellescape@wrn[1]{%
+%<*class>
+ \ClassWarning{tudscrmanual}%
+%</class>
+%<*package>
+ \PackageWarning{tudscrtutorial}%
+%</package>
+ {%
+ File `#1' is missing!\MessageBreak%
+ You have to recompile this document with\MessageBreak%
+ activated shell escape option%
}%
}
% \end{macrocode}
-% Die Änderungsnotiz für die Implementierung wird erst an den Ausrufezeichen
-% in einzelne Argumente getrennt\dots
+% \end{macro}^^A \tud@shellescape@wrn
+% \begin{macro}{\Tutorial}
+% \changes{v2.02}{2014/08/22}{neu}^^A
+% \changes{v2.02}{2014/10/22}{Reimplementierung}^^A
+% \begin{macro}{\hypertut}
+% \changes{v2.02}{2014/09/02}{neu}^^A
+% Die gegebenenfalls notwendige Kompilierung und die Referenzierung eines
+% Tutorials aus dem Handbuch erfolgt mit \cs{Tutorial}. Außerdem erfolgt mit
+% \cs{hypertut} ein verlinkter Eintrag in den Index.
% \begin{macrocode}
-\NewDocumentCommand\ChangedAt@Split{>{\SplitArgument{2}{!}}m}{%
- \ChangedAt@@Split#1%
+%<*class>
+\newrobustcmd*\hypertut[2]{%
+ \hyperref{tutorials/#1.pdf}{#1}{tutorials:#1}{\File*{#1.pdf}#2}%
}
+\NewDocumentCommand\Tutorial{smd||}{%
+ \ifnum\pdfshellescape=\@ne\relax%
% \end{macrocode}
-% \dots und anschließend in die Liste \cs{@changedatdeclarelist}~-- in einer
-% etwas kryptischen Form~-- eingetragen. Dies geschieht jedoch nur, wenn im
-% Argument nicht die Sternversion eines Auszeichnungsbefehls genutzt wurde.
-% Diese sollen keinen Eintrag in der Änderungsliste, wohl aber eine Randnotiz
-% erzeugen.
+% Um mit den verschachtelten Aufrufen von \app{pdflatex} umgehen zu können,
+% wird das ganze Prozedere in ein Skript ausgelagert. Somit können die Aufrufe
+% von \app{pdflatex} für die Tutorials aus dem entsprechenden Ordner und mit
+% den notwendigen Optionen erfolgen.
% \begin{macrocode}
-\newcommand*\ChangedAt@@Split[3]{%
- \in@{*}{#1}%
- \ifin@%
- \listadd\@changedatdeclarelist{Allgemein!#2}%
- \else%
- \listadd\@changedatdeclarelist{%
- Implementierung!#2!\IfValueTF{#3}{#3}{\@changedatdeclaredefault}!#1%
- }%
- \fi%
-}
+ \filemodCmp{tutorials/#2.pdf}{tutorials/#2.tex}{}{%
+ \let\@tempa\@empty%
+ \ifdef{\tudfinalflag}{\appto\@tempa{\def\noexpand\tudfinalflag{}}}{}%
+ \ifdef{\tudprintflag}{\appto\@tempa{\def\noexpand\tudprintflag{}}}{}%
+ \appto\@tempa{\noexpand\input{#2.tex}}%
+ \def\@tempb##1{%
+ \immediate\openout\tud@write@a=tutorials.sh\relax%
+ \immediate\write\tud@write@a{cd tutorials^^J##1}%
+ \immediate\closeout\tud@write@a%
% \end{macrocode}
-% \end{macro}^^A \ChangedAt@@Split
-% \end{macro}^^A \ChangedAt@Split
-% \end{macro}^^A \@changedatdeclarelist
-% \end{macro}^^A \@changedatdeclaredefault
-% \end{macro}^^A \@changedatdeclare
-% \begin{macro}{\printchangedatlist}
-% \changes{v2.02}{2014/10/09}{neu}^^A
-% Die Einträge in der Änderungsliste sowie die dazugehörige Randnotiz werden
-% mit dem Makro \cs{ChangedAt@Process} abgearbeitet, sortiert und erstellt. Bei
-% \cs{printchangedatlist} wird mit dem optionalen Argument der Versatz für die
-% Randnotiz gesetzt. Dieser wird wie auch die Liste an \cs{ChangedAt@Process}
-% übergeben, womit diese und die Randnotiz letztendlich erzeugt werden.
+% Hier erfolgt die Unterscheidung der Befehle für die unterschiedlichen OS.
% \begin{macrocode}
-\NewDocumentCommand\printchangedatlist{sO{\z@}}{%
- \ifx\@changedatdeclarelist\relax\else%
- \if@deprecated%
- \ChangedAt@Process[#1]{#2}{\@changedatdeclarelist}%
- \else%
- \ChangedAt@Process{#2}{\@changedatdeclarelist}%
- \fi%
- \global\let\@changedatdeclarelist\relax%
- \IfBooleanF{#1}{%
- \par\nobreak\vskip\dimexpr-\parskip-\baselineskip\relax%
- \@afterindentfalse\@afterheading%
+ \ifwindows%
+ \immediate\write18{rename tutorials.sh tutorials.bat}%
+ \immediate\write18{tutorials.bat}%
+ \immediate\write18{del tutorials.bat}%
+ \else%
+ \immediate\write18{bash tutorials.sh}%
+ \immediate\write18{rm tutorials.sh}%
+ \fi%
+ }%
+ \@tempb{pdflatex -shell-escape "\@tempa"}%
+ \IfFileExists{tutorials/#2.bcf}{\@tempb{biber #2}}{}%
+ \@tempb{%
+ pdflatex "\@tempa"^^J%
+ pdflatex -shell-escape "\@tempa"^^J%
+ pdflatex -shell-escape "\@tempa"%
+ }%
}%
\fi%
-}
% \end{macrocode}
-% \end{macro}^^A \printchangedatlist
-% \begin{macro}{\ChangedAt}
-% \changes{v2.02}{2014/07/25}{erweitert}^^A
-% \changes{v2.02}{2014/10/15}{Sternversion neu (keine Randnotiz)}^^A
-% \begin{length}{\changedatskip}
-% \changes{v2.04}{2015/06/08}{neu}^^A
-% An den Befehl \cs{ChangedAt} kann eine kommagetrente Liste mit verschiedenen
-% Versionsnummern und dazugehörigen Änderungen übergeben werden. Er wird in der
-% Form: \cs{ChangedAt}\verb|{|\meta{Version}\verb|!|\meta{Beschreibung}\verb|}|
-% genutzt. Mit \cs{ChangedAt@Process} wird der Prozess selbst durchgeführt. Es
-% wird zu der angegebenen Versionsnummer ein Eintrag in die Änderungsliste
-% erstellt, wenn mit einem Ausrufezeichen getrennt der gewünschte Inhalt
-% gegeben wurde.
-%
-% Alle übergegebenen Versionsnummern werden als Liste mit einmaligen Einträgen
-% in einer Randnotiz gesetzt. Mit dem optionalen Argument kann ein vertikaler
-% dieser angegeben werden. Die Version mit einem Apostroph verschiebt die
-% Randnotiz um den Grundlinienabstand nach oben, die Sternversion unterdrückt
-% stattdessen die Ausgabe dieser vollständig.
+% Hyperlink und Indexeintrag.
% \begin{macrocode}
-\newlength\changedatskip
-\NewDocumentCommand\ChangedAt{sO{\changedatskip}mO{Allgemein}}{%
- \ChangedAt@Process[#1]{#2}[#4]{#3}%
-}
-% \end{macrocode}
-% \end{length}^^A \changedatskip
-% \end{macro}^^A \ChangedAt
-% \begin{macro}{\ChangedAt@Process}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% \begin{macro}{\ChangedAt@@Process}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% \begin{macro}{\ChangedAt@@@Process}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% \changes{v2.02}{2014/10/16}{Unterteilung Änderungsliste in Bereiche}^^A
-% \begin{macro}{\ChangedAt@Default}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% \begin{macro}{\ChangedAt@Process@Split}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% \begin{macro}{\@changedatlist}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% \begin{macro}{\@changedatversionlist}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% Mit diesen Befehlen wird die Änderungshistorie in Form eines Index erstellt.
-% Der Befehl \cs{ChangedAt@Process} setzt eine kommagetrennte Liste in eine
-% im Format von \pkg{etoolbox} um. Anschließend wird diese für die
-% Änderungsliste mit \cs{ChangedAt@Process@Split} aufgespalten. Die einzelnen
-% Einträge werden mit \cs{ChangedAt@@Process} weiter verarbeitet.
-% \begin{macrocode}
-\newcommand*\@changedatlist{}
-\newcommand*\ChangedAt@Default{}
-\newcommand*\@changedatversionlist{}
-\let\@changedatversionlist\relax
-\NewDocumentCommand\ChangedAt@Process{omom}{%
- \let\@changedatlist\relax%
- \let\@changedatversionlist\relax%
- \@for\@tempa:=#4\do{%
- \ifx\@tempa\@empty\else%
- \IfValueT{#3}{\preto\@tempa{#3!}}%
- \listeadd{\@changedatlist}{\expandonce\@tempa}%
- \fi%
+ \IfFileExists{tutorials/#2.pdf}{%
+ \hypertut{#2}{}%
+ }{%
+ \File*{#2.pdf}%
+ \tud@shellescape@wrn{tutorials/#2.pdf}%
}%
- \forlistloop\ChangedAt@Process@Split{\@changedatlist}%
-% \end{macrocode}
-% Nach der Verarbeitung aller Einräge sind in \cs{@changedatversionlist} alle
-% angegebenen Versionsnummern genau einmal enthalten. Mit \cs{sortlist} werden
-% diese in die richtige Reihenfolge sortiert und anschließend als Randnotiz in
-% einer Tabelle ausgegeben, falls nicht die Sternversion verwendet wurde.
-% \begin{macrocode}
\IfBooleanF{#1}{%
- \sortlist{\@changedatversionlist}%
- \strut%
- \marginnote{%
- \def\@tempa####1{%
- \ignorespaces\manualhyperref{####1}{####1}\tabularnewline%
- }%
- \begin{tabular}{|l|}%
- \hline%
- \forlistloop\@tempa{\@changedatversionlist}%
- \hline%
- \end{tabular}%
- }[#2]%
- \ignorespaces%
+ \index[files]{\hypertut{#2}{\suffix{Tutorial}}\IfValueT{#3}{|#3}}%
}%
}
+%</class>
% \end{macrocode}
-% Der Befehl \cs{ChangedAt@Process@Split} teilt ein gegebenes Argument am
-% Delimiter Ausrufezeichen (\enquote{!}) in drei Argumente auf und reicht diese
-% an \cs{ChangedAt@@Process} weiter. Sollte kein oder nur Ausrufezeichen
-% gefunden werden, so wird das zweite und/oder dritte Argument mit dem~-- vom
-% Paket \pkg{xparse} definierten~-- leeren Wert \texttt{-NoValue-} an den
-% Befehl \cs{ChangedAt@@Process} übergeben.
+% Der Befehl für die Querverweise innerhalb von Tutorials.
% \begin{macrocode}
-\NewDocumentCommand\ChangedAt@Process@Split{>{\SplitArgument{3}{!}}m}{%
- \ChangedAt@@Process#1%
-}
+%<*package>
+\newcommand*\Tutorial[1]{\href{#1.pdf}{\textsbn{#1.pdf}}}
+%</package>
% \end{macrocode}
-% Hiermit wird der Eintrag in die Änderungshistorie erzeugt. Dabei ist zu
-% unterscheiden, ob der Befehl \cs{ChangedAt} direkt genutzt wurde oder aber
-% der Eintrag innerhalb der \env{Declaration}-Umgebung erfolgte. Dies wird
-% anhand des dritten Argumentes erkannt. Für den ersten Fall erfolgt ein
-% Eintrag lediglich, wenn neben der Versionsnummer selbst auch eine Erklärung
-% angegben wurde~-- eine Randnotiz wird aber in jedem Fall gesetzt. Im zweiten
-% Fall wird der Erklärung \emph{immer} \cs{ChangedAt@Default} vorangestellt.
-% Sollte keine Erklärung direkt angegeben worden sein, so wird in der
-% Änderungsliste vermerkt, dass es sich um eine \emph{neue} Option, Befehl etc.
-% handelt. Der eigentliche Eintrag selbst erfolgt mit \cs{ChangedAt@@@Process}.
+% \end{macro}^^A \hypertut
+% \end{macro}^^A \Tutorial
+% \begin{macro}{\IncludeExample}
+% \changes{v2.02}{2014/07/25}{Skalierung der eingefügten Seiten}^^A
+% Mit diesem Befehl wird eine \LaTeX-Datei ggf. übersetzt und anschließend als
+% PDF"~Datei wieder eingebunden. Zuvor wird der dazugehörige Quelltext mittels
+% \cs{lstinputlisting} im Dokument ausgegeben. Dieser Befehl wird lediglich für
+% die Klasse \cls{tudscrmanual} benötigt.
% \begin{macrocode}
-\newcommand*\ChangedAt@@Process[4]{%
- \IfValueTF{#4}{%
+%<*class>
+\newcommand*\IncludeExample[1]{%
+ \lstinputlisting[style=tudscr]{examples/#1}%
% \end{macrocode}
-% Bei der Deklaration von Optionen, Befehlen etc. werden diese automatisch in
-% der Liste der Änderungen im Bereich \enquote{Implementierung} vor der
-% gegebenen Erklärung selbst ausgegeben. Hierfür wird das dritte Argument
-% genutzt. Damit lediglich diese und nicht noch die dazugehörigen Argumente
-% eingetragen werden, werden die relevanten Befehle deaktiviert und das
-% optionale Argument in \cs{ChangedAt@Default} expandiert.
+% Die Beispiele werden nur erneut kompiliert, wenn sich diese geändert haben
+% oder noch gar kein entsprechendes PDF"~Dokument existiert.
% \begin{macrocode}
- \begingroup%
- \@gobbleparameters%
- \xdef\ChangedAt@Default{#4}%
- \endgroup%
- \ChangedAt@@@Process{#2}{#1}{\ChangedAt@Default: #3}%
- }{%
+ \ifnum\pdfshellescape=\@ne\relax%
+ \filemodCmp{examples/#1.pdf}{examples/#1.tex}{}{%
+ \immediate\write18{%
+ pdflatex -output-directory examples examples/#1.tex^^J%
+ pdflatex -output-directory examples examples/#1.tex%
+ }%
+ }%
+ \fi%
% \end{macrocode}
-% Wurde \cs{ChangedAt} direkt und nicht über das optionale Argument der
-% Umgebungen \env{Declaration} genutzt, erscheint der gewünschte Eintrag im
-% Bereich \enquote{Allgemein}.
+% Ist die gesuchte Datei vorhanden, wird diese auch eingebunden. Andernfalls
+% wird eine Warnung mit dem Hinweis auf die notwendige Verwednung von
+% \val{pdflatex} mit der Option \opt{--shell-escape} erzeugt.
% \begin{macrocode}
- \IfValueT{#3}{\ChangedAt@@@Process{#2}{#1}{#3}}%
+ \IfFileExists{examples/#1.pdf}{%
+ \includepdf[%
+ pages=-,noautoscale,frame,keepaspectratio,pagecommand={},%
+ height=\textheight,width=\textwidth, offset=5mm 0mm%
+ ]{examples/#1.pdf}%
+ }{%
+ \tud@shellescape@wrn{examples/#1.pdf}%
}%
-% \end{macrocode}
-% Außerdem wird der Liste \cs{changedatversionlist} die aktuelle Version
-% einmalig hinzugefügt, um alle in einer Randnotiz ausgeben zu können.
-% \begin{macrocode}
- \xifinlist{#2}{\@changedatversionlist}{}{\listeadd\@changedatversionlist{#2}}%
}
+%</class>
% \end{macrocode}
-% Mit \cs{ChangedAt@@@Process} Erfolgen die Einträge in die Änderungsliste.
+% \end{macro}^^A \IncludeExample
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \begin{macro}{\tud@tut@temp}
+% \changes{v2.05}{2016/05/01}{neu}^^A
+% \begin{macro}{\tud@tut@readtostream}
+% \changes{v2.02}{2014/12/16}{neu}^^A
+% \begin{macro}{\tud@tut@append}
+% \changes{v2.02}{2014/08/19}{neu}^^A
+% Bei den Tutorials soll zum Schluss ein komplett kompilierbares Beispiel für
+% Copy~\&~Paste gegeben werden. Um dieses zusammenzubauen, werden alle im
+% Dokument innerhalb der Varianten der \env{Trunk}-Umgebungen gegebenen
+% Codefragmente zusammengesetzt. Um die Quelltexte einlesen und verarbeiten zu
+% können, werden zwei Eingabe- sowie ein Ausgabestream benötigt, welche bereits
+% zuvor initialisiert wurden.
+%
+% Mit \cs{tud@tut@readtostream} wird der Inhalt der Datei im ersten Argument
+% in den Ausgabestream des zweiten Argumentes geschrieben. Dies wird durch
+% \cs{tud@tut@append} genutzt.
% \begin{macrocode}
-\newcommand*\ChangedAt@@@Process[3]{%
+\newcommand*\tud@tut@temp{}
+\edef\tud@tut@temp{\@currname-temp}
+\newcommand*\tud@tut@readtostream[2]{%
\begingroup%
+ \endlinechar=-1\relax%
+ \openin\tud@read=#1%
% \end{macrocode}
-% Für geänderte Parameter wird als Haupteintrag das dazugehörige Makro bzw. die
-% entsprechende Umgebung verwendet. Der geänderte Parameter folgt danach.
-% Zuerst muss ggf. das Makro \cs{ChangedAt@Default} expandiert werden.
-% \begin{macrocode}
- \def\@tempa{#3}%
- \in@{\ChangedAt@Default}{#3}%
- \ifin@%
- \expandafter\def\expandafter\@tempa\expandafter{\ChangedAt@Default}%
- \fi%
-% \end{macrocode}
-% Danach wird geprüft, ob das Makro \cs{Key} übergeben wurde. Außerdem wird ein
-% Anker in der Änderungsliste für die Referenzierung auf die einzelnen Bereiche
-% (\enquote{Allgemein}, \enquote{Implementierung} und \enquote{Ersetzungen})
-% gesetzt.
-% \begin{macrocode}
- \expandafter\in@\expandafter\Key\expandafter{\@tempa}%
- \ifin@%
- \begingroup%
- \RenewDocumentCommand\Key{sommo}{\xdef\@TempKey{##3:}}%
- \setbox0\hbox{#3}%
- \endgroup%
- \index[changelog]{%
- #1\manualhyperdef*{#1}!\manualhyperdef*{#1:#2}#2!\@TempKey\ #3%
- }%
- \else%
- \index[changelog]{%
- #1\manualhyperdef*{#1}!\manualhyperdef*{#1:#2}#2!#3%
- }%
- \fi%
- \endgroup%
-}
-% \end{macrocode}
-% \end{macro}^^A \@changedatversionlist
-% \end{macro}^^A \@changedatlist
-% \end{macro}^^A \ChangedAt@Process@Split
-% \end{macro}^^A \ChangedAt@Default
-% \end{macro}^^A \ChangedAt@@@Process
-% \end{macro}^^A \ChangedAt@@Process
-% \end{macro}^^A \ChangedAt@Process
-% \begin{macro}{\Replace}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% \changes{v2.03}{2015/02/02}{auf mehrere Einträge erweitert}^^A
-% Der Befehl \cs{Replace} erzeugt einen Eintrag in der Änderungshistorie sowie
-% einen Eintrag im gewünschten Index mit einem Verweis auf den neuen Befehl.
+% Der Schalter \cs{if@tempswa} wird verwendet, um unnötige Leerzeilen in der
+% Ausgabedatei zu entfernen. Wurde eine nicht leere Zeile gefunden, wird diese
+% auf jeden Fall geschrieben, indem \cs{@tempswatrue} gesetzt wird. Eine leere
+% Zeile wird~-- bis auf den Sonderfall, dass es sich um die letzte Zeile in der
+% Datei handelt~-- zunächst nicht weiter beachtet. Im Zweifelsfall wird diese
+% (erste) Leerzeile geschrieben.
% \begin{macrocode}
-\NewDocumentCommand\Replace{ommm}{%
+ \@tempswafalse%
+ \loop\unless\ifeof\tud@read%
+ \readline\tud@read to\tud@reserved%
+ \ifx\tud@reserved\@empty%
+ \ifeof\tud@read\@tempswafalse\fi%
+ \else%
+ \@tempswatrue%
+ \fi%
% \end{macrocode}
-% Die alten Befehle in der Liste erhalten einen Eintrag in der Änderungsnotiz.
-% Das Komma vor dem Argument in der Schleife ist notwendig, weil ansonsten das
-% Argument sofort expandiert wird.
+% Hier erfolgt das eigentliche Schreiben im selektierten Stream.
% \begin{macrocode}
- \@for\@tempa:={,#4}\do{%
- \ifx\@tempa\@empty\else%
- \protected@edef\@tempb{%
- Implementierung!#2!\emph{entf\"allt}|see{#3}!\@tempa%
- }%
- \expandafter\listadd\expandafter\@changedatdeclarelist\expandafter{%
- \@tempb%
- }%
+ \if@tempswa%
+ \immediate\write#2{\expandonce\tud@reserved}%
+ \fi%
% \end{macrocode}
-% Und ggf. der Eintrag im Index.
+% Im Nachgang wird überprüft, ob die aktuell geschriebene Zeile leer war. Ist
+% dies der Fall, so wird \cs{@tempswafalse} gesetzt, um eine etwaig folgende
+% Leerzeile nicht in die Ausgabedatei zu schrieben.
% \begin{macrocode}
- \IfValueT{#1}{\index[#1]{\@tempa|see{#3}}}%
- \fi%
- }%
+ \ifx\tud@reserved\@empty\@tempswafalse\fi%
+ \repeat%
+ \closein\tud@read%
+ \endgroup%
}
% \end{macrocode}
-% \end{macro}^^A \Replace
-% \begin{macro}{\@ProcessChangedAt}
-% \changes{v2.02}{2014/07/25}{erweitert}^^A
-% \changes{v2.02}{2014/10/08}{Sternversion ergänzt}^^A
-% Die Änderungsliste erhält ebenfalls einen Hyperlink zur Deklaration. Für
-% Umgebungs- und Befehlsparameter wird mit dem zweiten optionalen Argument ein
-% Untereintrag für die dazugehörige Umgebung beziehungsweise den dazugehörigen
-% Befehl erzeugt.
+% Der innerhalb der Umgebungen \env{Preamble} und \env{Trunk}~-- sowie deren
+% Derivaten~-- angegeben Inhalt wird beim Beenden dieser in die Hilfsdatei
+% \cs{tud@tut@temp.tex} zwischengespeichert. Mit dem Befehl \cs{tud@tut@append}
+% wird der Inhalt dieser Datei ausgelesen und den zusätzlichen Hilfsdateien
+% \cs{tud@tut@temp-preamble.tex} beziehungsweise \cs{tud@tut@temp-trunk.tex}
+% angehangen und damit gesichert, um Quelltextauszüge aus dem Tutorial für die
+% Präambel sowie den Dokumentteil trennen beziehungsweise sortieren zu können.
% \begin{macrocode}
-\NewDocumentCommand\@ProcessChangedAt{mmd()mmm}{%
- \begingroup%
- \let\texttt\@firstofone%
- \let\textsbn\@firstofone%
- \let\textsbs\@firstofone%
- \let\Environment\@firstofone%
- \let\Macro\@firstofone%
- \IfValueTF{#3}{\xdef\@tempa{#2:#3:#5}}{\xdef\@tempa{#2:#5}}%
- \endgroup%
- \IfBooleanTF{#1}{%
- \def\@tempb{\begingroup#4#5\endgroup}%
+\newcommand*\tud@tut@append[1]{%
+ \ifstr{#1}{preamble}{%
+ \tud@tut@readtostream{\tud@tut@temp.tex}{\tud@write@a}%
}{%
- \def\@tempb{\begingroup#4#5\endgroup~{\idxfont(#6)}}%
+ \ifstr{#1}{trunk}{%
+ \tud@tut@readtostream{\tud@tut@temp.tex}{\tud@write@b}%
+ }{%
+ \tud@tut@readtostream{\tud@tut@temp.tex}{#1}%
+ }%
}%
- \ifcsdef{r@\@tempa}{\hyperidx[\@tempa]{\@tempb}}{\@tempb}%
}
% \end{macrocode}
-% \end{macro}^^A \@ProcessChangedAt
-% \begin{macro}{\sortlist}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% \begin{macro}{\@sortlist}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% \begin{macro}{\@sortedlist}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% \begin{macro}{\if@listsorted}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% Der Befehl \cs{sortlist} erwartet eine \pkg{etoolbox}-Liste und sortiert diese
-% mit \cs{@sortlist} in alphabetischer Reihenfolge in eine kommagetrennte
-% Auflistung. Diese wird anschließend wieder in eine \pkg{etoolbox}-Liste
-% umgewandelt.
+% \end{macro}^^A \tud@tut@append
+% \end{macro}^^A \tud@tut@readtostream
+% \end{macro}^^A \tud@tut@temp
+% \begin{macro}{\StartTutorial}
+% \changes{v2.02}{2014/08/21}{neu}^^A
+% \begin{macro}{\FinishTutorial}
+% \changes{v2.02}{2014/08/21}{neu}^^A
+% Mit \cs{StartTutorial} wird ein Hyperlink für den Querverweis aus dem
+% Handbuch definiert. Außerdem wird gleich der Titel und ein einleitender Satz
+% gesetzt.
% \begin{macrocode}
-\newif\if@listsorted
-\newcommand*\@sortedlist{}
-\newcommand*\sortlist[1]{%
- \let\@sortedlist\relax%
- \forlistloop\@sortlist{#1}%
- \let#1\relax%
- \@for\@tempa:=\@sortedlist\do{\listeadd{#1}{\@tempa}}%
+\TUDoptions{headingsvskip=-10ex}
+\newcommand\StartTutorial[1][%
+ Bevor das eigentliche Tutorial beginnt, werden sowohl eine Dokumentklasse
+ als auch die f\"ur jedes \hologo{pdfLaTeX}-Dokument meiner Meinung nach
+ sinnvollen Pakete geladen.%
+]{%
+ \Hy@raisedlink{\hyperdef{\jobname}{tutorials:\jobname}{}}%
+ \faculty{}%
+ \maketitle\noindent#1%
+ \immediate\openout\tud@write@a=\tud@tut@temp-preamble.tex\relax%
+ \immediate\openout\tud@write@b=\tud@tut@temp-trunk.tex\relax%
+ \immediate\write\tud@write@b{^^J\string\begin{document}^^J}
}
% \end{macrocode}
-% Hier erfolgt die eigentliche Sortierung der Liste.
-% \begin{macrocode}
-\newcommand*\@sortlist[1]{%
-% \end{macrocode}
-% Der erste Eintrag wird direkt der Liste hinzugefügt.
-% \begin{macrocode}
- \ifx\@sortedlist\relax%
- \def\@sortedlist{#1}%
-% \end{macrocode}
-% Weitere Einräge werden mit \cs{pdfstrcmp} an der richtigen Stelle eingefügt.
-% Dabei wird die kommagetrennte Liste \cs{@sortedlist} mit \cs{@for} durchlaufen
-% und \cs{@tempb} als Hilfsmakro verwendet, in welches die aktuelle Liste
-% innerhalb der \cs{@for}-Schelife stückweise expandiert wird. Der Schalter
-% \cs{if@listsorted} wird gesetzt, wenn das aktuelle Element an der richtigen
-% Stelle eingesetzt wurde.
-% \begin{macrocode}
- \else%
- \@listsortedfalse%
- \let\@tempb\@empty%
- \@for\@tempa:=\@sortedlist\do{%
-% \end{macrocode}
-% Ist der Eintrag bereits erfolgt, wird der verbliebene Teil der Liste
-% angehängt.
+% Der Befehl \cs{FinishTutorial} schleißt den noch offenen Ausgabestream und
+% gibt den vorgestellten Quelltext vollständig aus.
% \begin{macrocode}
- \if@listsorted%
- \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
- \else%
+\newcommand\FinishTutorial[1][]{%
+ \immediate\write\tud@write@b{^^J\string\end{document}^^J}
+ \immediate\closeout\tud@write@b%
+ \immediate\closeout\tud@write@a%
+ \immediate\openout\tud@write@a\jobname-example.tex\relax%
+ \tud@tut@readtostream{\tud@tut@temp-preamble.tex}{\tud@write@a}%
+ \tud@tut@readtostream{\tud@tut@temp-trunk.tex}{\tud@write@a}%
+ \immediate\closeout\tud@write@a%
+ \clearpage%
+ \addsec{Copy\nobreakspace\&\nobreakspace{}Paste}%
+ \pagestyle{empty}%
+ Zum Ende des Dokumentes wird das vorgestellte Tutorial als \"ubersetzbarer
+ Quelltext ausgegeben, um dieses via Copy~\&~Paste verwenden und alle Punkte
+ nachvollziehen zu k\"onnen. Bitte beachten Sie, dass~-- abh\"angig vom
+ genutzten PDF-Betrachter~-- beim Kopieren die dargestellten Einz\"uge und
+ Abs\"atze m\"oglicherweise verloren gehen k\"onnen. Dies kann insbesondere
+ aufgrund fehlender Leerzeilen zu einem unvorteilhaften Ausgabeergebnis
+ f\"uhren. Alternativ finden Sie den folgenden \hologo{LaTeX}-Quelltext auch
+ im Pfad \Path{\PName{texmf}/source/latex/tudscr/doc/examples/} als Datei
+ \File{\jobname-example.tex}. \par #1%
+ %
+ \begin{quoting}[rightmargin=0pt]%
+ \lstinputlisting[style=tudscr]{\jobname-example.tex}%
+ \end{quoting}%
+ %
% \end{macrocode}
-% Liegt der Eintrag in alphabetischer Reihenfolge vor dem aktuellen der
-% durchlaufenenen Liste, so wird dieser davor eingefügt. Dabei muss der Fall,
-% dass das Element der erste Eintrag in der temporären Liste \cs{@tempb} ist,
-% eine Sonderbehandlung erfolgen. Anschließend wird \cs{@listsortedtrue}
-% gesetzt.
+% Falls es möglich ist, werden nach dem Durchlauf alle nicht mehr benötigten
+% Hilfsdateien gelöscht.
% \begin{macrocode}
- \expandafter\ifnum\pdfstrcmp{#1}{\@tempa}<\z@\relax%
- \ifx\@tempb\@empty%
- \expandafter\edef\expandafter\@tempb\expandafter{%
- #1,\@tempa%
- }%
- \else%
- \expandafter\edef\expandafter\@tempb\expandafter{%
- \@tempb,#1,\@tempa%
- }%
- \fi%
- \@listsortedtrue%
- \else%
+ \ifnum\pdfshellescape=\@ne\relax%
+ \ifwindows%
+ \def\@tempa{del}%
+ \else%
+ \def\@tempa{rm}%
+ \fi%
+ \immediate\write18{\@tempa\space\tud@tut@temp*.*}%
+ \fi%
+}
% \end{macrocode}
-% Ist Eintrag in alphabetischer Reihenfolge nach dem aktuellen der geprüften
-% Liste, so wird dieser (noch) nicht eingefügt. Der Sonderfall des ersten
-% Elementes wird abgedeckt.
+% \end{macro}^^A \FinishTutorial
+% \end{macro}^^A \StartTutorial
+% \begin{macro}{\CodePreamble}
+% \changes{v2.02}{2014/08/20}{neu}^^A
+% \begin{macro}{\Code@Preamble}
+% \changes{v2.02}{2014/10/22}{neu}^^A
+% \begin{macro}{\CodeHook}
+% \changes{v2.02}{2014/10/11}{neu}^^A
+% \begin{macro}{\Code@Hook}
+% \changes{v2.02}{2014/10/11}{neu}^^A
+% Bereitstellung von Hilfsmakros für die formatierte Ausgabe von Quelltexten.
% \begin{macrocode}
- \ifx\@tempb\@empty%
- \expandafter\edef\expandafter\@tempb\expandafter{\@tempa}%
- \else%
- \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
- \fi%
- \fi%
- \fi%
- }%
+\newcommand\Code@Preamble{}
+\let\Code@Preamble\relax
+\newcommand\CodePreamble[1]{\long\gdef\Code@Preamble{#1}}
+\newcommand*\Code@Hook{}
+\let\Code@Hook\relax
+\newcommand*\CodeHook[1]{\gdef\Code@Hook{#1}}
% \end{macrocode}
-% Wurde der Eintrag nach dem Durchlaufen der Liste nicht eingefügt, so erfolgt
-% dies hier am Ende der Liste.
+% \end{macro}^^A \Code@Hook
+% \end{macro}^^A \CodeHook
+% \end{macro}^^A \Code@Preamble
+% \end{macro}^^A \CodePreamble
+% \begin{macro}{\StandaloneFile}
+% \changes{v2.02}{2014/08/19}{neu}^^A
+% \begin{macro}{\StandaloneDate}
+% \changes{v2.05}{2015/11/18}{neu}^^A
+% Die Umgebungen \env{Trunk!} und \env{Hint!} erzeugen nach der Ausgabe des
+% Quelltextes mit dem Makro \cs{tud@tut@pdf} eine PDF-Datei, welche mit
+% \cs{IncludeStandalone} in das Tutorial eingebunden werden kann.
% \begin{macrocode}
- \if@listsorted\else%
- \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,#1}%
- \fi%
+\newcommand*\StandaloneFile{}
+\let\StandaloneFile\relax
+\newcommand*\StandaloneDate{}
% \end{macrocode}
-% Die temporäre Liste \cs{@tempb} wird auf \cs{@sortedlist} überschrieben.
+% \end{macro}^^A \StandaloneDate
+% \end{macro}^^A \StandaloneFile
+% \begin{macro}{\tud@tut@pre}
+% \changes{v2.02}{2014/08/19}{neu}^^A
+% \begin{macro}{\tud@tut@post}
+% \changes{v2.02}{2014/08/19}{neu}^^A
+% Dies sind die Hilfsmakros, welche zu Beginn und Ende der Quelltextumgebungen
+% \env{Preamble}, \env{Trunk} und \env{Hint} für das Sichern der Inhalte in
+% eine Hilfsdatei verantwortlich sind, wofür die \env{filecontents}-Umgebung
+% genutzt wird.
% \begin{macrocode}
- \let\@sortedlist\@tempb%
- \fi%
+\newcommand*\tud@tut@pre{%
+ \ActivateWarningFilters[Tutorial]%
+ \csuse{filecontents*}{\tud@tut@temp.tex}%
+}
+\newcommand*\tud@tut@post{%
+ \csuse{endfilecontents*}%
+ \DeactivateWarningFilters[Tutorial]%
}
% \end{macrocode}
-% \end{macro}^^A \if@listsorted
-% \end{macro}^^A \@sortedlist
-% \end{macro}^^A \@sortlist
-% \end{macro}^^A \sortlist
-%
-% \iffalse
-%</class>
-%<*package>
-% \fi
-%
-% \subsection{Befehle und Umgebungen für das Paket}
-%
-% Hier taucht alles auf, was lediglich für das Paket \pkg{tudscrman} und nicht
-% für die Klasse benötigt wird.
-%
-% Für den Anwender werden im \TUDScript-Bundle einige Tutorials für die Nutzung
-% von \LaTeXe bereitgestellt. Innerhalb dieser werden Auszüge von Quelltexten
-% verwendet und erläutert. Zum einen soll die Möglichkeit geschaffen werden,
-% diese gesammelt am Ende eines Tutorials für ein Copy"~\&"~Paste"~Beispiel zu
-% verwenden. Andererseits soll auch das sofortige Ausführen des beschriebenen
-% Quelltextauszuges direkt im Tutorial möglich sein. Dafür werden im Folgenden
-% die Umgebungen \env{Preamble}, \env{Trunk} und \env{Hint} sowie daraus
-% abgeleitet Varianten definiert, womit sich die Angabe und Erläuterung der
-% Quelltexte im Tutorial logisch strukturieren lässt und dennoch die notwendige
-% Ordnung dieser für das Copy"~\&"~Paste"~Beispiel aufrechterhalen werden kann.
-% Hierfür zeichnen die beiden Umgebungen \env{Preamble} und \env{Trunk} und
-% deren Derivate verantwortlich. Die Umgebung \env{Hint} steht für zusätzliche
-% Erläuterungen bereit, welche jedoch nicht in das Copy"~\&"~Paste"~Beispiel
-% übernommen werden.
-%
-% Damit die Umgebungen nicht doppelt implementiert werden müssen, werden die
-% Hilfsmakros \cs{tud@tut@pre} und \cs{tud@tut@post} definiert. Diese nutzen
-% die \env{filecontents}"=Umgebung, welche den Inhalt in die temporäre Datei
-% \val{\string\jobname-temp.tex} schreibt. Zusätzlich wird dieser Inhalt mit
-% \cs{tud@tut@append} der Datei \val{\string\jobname-preamble-temp.tex} oder
-% \val{\string\jobname-trunk-temp.tex}~-- abhängig vom gegebenen Argument~--
-% hinzugefügt. So werden die im Dokumentes gesetzten Quelltextauszüge für ein
-% Copy"~\&"~Paste"~Beispiel gesammelt und mit \cs{FinishTutorial} ausgegeben.
+% \end{macro}^^A \tud@tut@post
+% \end{macro}^^A \tud@tut@pre
+% Die nachfolgenden Umgebungen nutzen die beiden Hilfsmakros \cs{tud@tut@pre}
+% und \cs{tud@tut@post}, welche den gegebenen Inhalt in die temporäre Datei
+% \file{\string\tud@tut@temp.tex} schreiben. Mit \cs{tud@tut@append} werden
+% zusätzlich~-- abhängig vom gegebenen Argument~-- die im Dokument gesetzten
+% Quelltextauszüge der Datei \file{\string\tud@tut@temp-preamble.tex} oder
+% \file{\string\tud@tut@temp-trunk.tex} hinzugefügt. Damit werden die
+% gewünschten Inhalte für ein Copy"~\&"~Paste"~Beispiel gesammelt und mit
+% \cs{FinishTutorial} ausgegeben.
% \begin{environment}{Preamble}
% \changes{v2.02}{2014/11/02}{neu}^^A
% \begin{environment}{Preamble*}
@@ -2930,28 +5029,28 @@
% \begin{macrocode}
\newenvironment{Preamble}{\tud@tut@pre}{%
\tud@tut@post%
- \tud@tut@append{\tud@write@i}%
+ \tud@tut@append{preamble}%
\gdef\@tempa{%
\tud@tut@lst%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
\newenvironment{Preamble*}{\tud@tut@pre}{%
\tud@tut@post%
- \tud@tut@append{\tud@write@i}%
+ \tud@tut@append{preamble}%
\gdef\@tempa{%
\tud@tut@lst%
\tud@tut@input%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
\newenvironment{Preamble+}{\tud@tut@pre}{%
\tud@tut@post%
- \tud@tut@append{\tud@write@i}%
+ \tud@tut@append{preamble}%
\gdef\@tempa{%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
@@ -2983,41 +5082,41 @@
% \begin{macrocode}
\newenvironment{Trunk}{\tud@tut@pre}{%
\tud@tut@post%
- \tud@tut@append{\tud@write@ii}%
+ \tud@tut@append{trunk}%
\gdef\@tempa{%
\tud@tut@lst%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
\newenvironment{Trunk*}{\tud@tut@pre}{%
\tud@tut@post%
- \tud@tut@append{\tud@write@ii}%
+ \tud@tut@append{trunk}%
\gdef\@tempa{%
\tud@tut@lst%
\tud@tut@input%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
\newenvironment{Trunk+}{\tud@tut@pre}{%
\tud@tut@post%
- \tud@tut@append{\tud@write@ii}%
+ \tud@tut@append{trunk}%
\gdef\@tempa{%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
\newenvironment{Trunk!}[1]{%
- \gdef\@StandaloneFile{#1}%
+ \gdef\StandaloneFile{#1}%
\tud@tut@pre%
}{%
\tud@tut@post%
- \tud@tut@append{\tud@write@ii}%
+ \tud@tut@append{trunk}%
\gdef\@tempa{%
\tud@tut@lst%
\tud@tut@pdf%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
@@ -3032,7 +5131,7 @@
% \changes{v2.02}{2014/10/13}{neu}^^A
% \begin{environment}{Hint?}
% \changes{v2.02}{2014/12/09}{neu}^^A
-% \begin{environment}{Hint!}
+% \begin{environment}{Hint{!}}
% \changes{v2.02}{2014/11/13}{neu}^^A
% Um Quelltextausschnitte zur weiterführenden Information anzugeben, wird die
% Umgebung \env{Hint} definiert. Der Inhalt wird ausgegben und~-- falls die
@@ -3046,7 +5145,7 @@
\tud@tut@post%
\gdef\@tempa{%
\tud@tut@lst%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
@@ -3055,7 +5154,7 @@
\gdef\@tempa{%
\tud@tut@lst%
\tud@tut@input%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
@@ -3064,19 +5163,19 @@
\gdef\@tempa{%
\InputCode%
\tud@tut@lst%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
\newenvironment{Hint!}[1]{%
- \gdef\@StandaloneFile{#1}%
+ \gdef\StandaloneFile{#1}%
\tud@tut@pre%
}{%
\tud@tut@post%
\gdef\@tempa{%
\tud@tut@lst%
\tud@tut@pdf%
- \global\let\@CodePreamble\relax%
+ \global\let\Code@Preamble\relax%
}%
\aftergroup\@tempa%
}
@@ -3085,65 +5184,19 @@
% \end{environment}^^A Hint?
% \end{environment}^^A Hint*
% \end{environment}^^A Hint
-% \begin{macro}{\@StandaloneFile}
-% \changes{v2.02}{2014/08/19}{neu}^^A
-% Die Umgebungen \env{Trunk!} und \env{Hint!} erzeugen nach der Ausgabe des
-% Quelltextes mit dem Makro \cs{tud@tut@pdf} eine PDF-Datei, welche mit
-% \cs{IncludeStandalone} in das Tutorial eingebunden werden kann.
-% \begin{macrocode}
-\newcommand*\@StandaloneFile{}
-\let\@StandaloneFile\relax
-% \end{macrocode}
-% \end{macro}^^A \@StandaloneFile
-% \begin{macro}{\tud@tut@pre}
-% \changes{v2.02}{2014/08/19}{neu}^^A
-% \begin{macro}{\tud@tut@post}
-% \changes{v2.02}{2014/08/19}{neu}^^A
-% Dies sind die Hilfsmakros, welche zu Beginn und Ende der Quelltextumgebungen
-% \env{Preamble}, \env{Trunk} und \env{Hint} für das Sichern der Inhalte in
-% eine Hilfsdatei verantwortlich zeichnen.
-% \begin{macrocode}
-\newcommand*\tud@tut@pre{%
- \ActivateWarningFilters[Tutorial]%
- \@nameuse{filecontents*}{\jobname-temp.tex}%
-}
-\newcommand*\tud@tut@post{%
- \@nameuse{endfilecontents*}%
- \DeactivateWarningFilters[Tutorial]%
-}
-% \end{macrocode}
-% \end{macro}^^A \tud@tut@post
-% \end{macro}^^A \tud@tut@pre
% \begin{macro}{\tud@tut@lst}
% \changes{v2.02}{2014/10/07}{neu}^^A
% Damit wird der Quelltext eingezogen ausgegeben.
% \begin{macrocode}
\newcommand*\tud@tut@lst{%
\begin{quoting}[rightmargin=0pt]%
- \lstinputlisting[style=tudscr]{\jobname-temp.tex}%
+ \lstinputlisting[style=tudscr]{\tud@tut@temp.tex}%
\end{quoting}%
}
% \end{macrocode}
% \end{macro}^^A \tud@tut@lst
% \begin{macro}{\tud@tut@input}
% \changes{v2.02}{2014/10/13}{neu}^^A
-% \begin{macro}{\CodePreamble}
-% \changes{v2.02}{2014/08/20}{neu}^^A
-% \begin{macro}{\@CodePreamble}
-% \changes{v2.02}{2014/10/22}{neu}^^A
-% \begin{macro}{\CodeHook}
-% \changes{v2.02}{2014/10/11}{neu}^^A
-% \begin{macro}{\@CodeHook}
-% \changes{v2.02}{2014/10/11}{neu}^^A
-% Bereitstellung von Hilfsmakros für die formatierte Ausgabe von Quelltexten.
-% \begin{macrocode}
-\newcommand\@CodePreamble{}
-\let\@CodePreamble\relax
-\newcommand\CodePreamble[1]{\long\gdef\@CodePreamble{#1}}
-\newcommand*\@CodeHook{}
-\let\@CodeHook\relax
-\newcommand*\CodeHook[1]{\gdef\@CodeHook{#1}}%
-% \end{macrocode}
% Für die Ausgabe des Quelltextergebnisses erfolgt ein linker Einzug. Außerdem
% werden unter anderem abhängig von der Verwendung eines erklärenden Textes die
% eingefügten vertikalen Abstände angepasst.
@@ -3167,64 +5220,61 @@
\setbox\@tempboxa\box\voidb@x%
\ifdim\@tempdima>\z@\relax%
\endgraf%
- \vspace{\baselineskipglue}%
+ \vspace{\medskipamount}%
\noindent\ignorespaces%
\fi%
\endgroup%
}%
% \end{macrocode}
-% Da aufgrund der Verwendung der \env{filecontents}"=Umgebung ein optionales
+% Da aufgrund der Verwendung der \env{filecontents}-Umgebung ein optionales
% Argument für alle Abwandlungen der Quelltextumgebungen nicht möglich ist,
% wird \cs{CodePreamble} bereitgestellt, womit der Ausgabe ein erläuternder
% Text vorangestellt werden kann.
% \begin{macrocode}
- \@tempa{\@CodePreamble}{}%
+ \@tempa{\Code@Preamble}{}%
\setlength\@tempdimc{\leftskip}%
\setlength\leftskip{\leftmargin}%
% \end{macrocode}
-% Durch die zweimalige Verwendung von \val{\string\jobname-temp.tex}~-- einmal
-% dirket und einmal innerhalb einer Box~-- können darin verwendete Befehle wie
+% Durch die zweimalige Verwendung von \file{\string\tud@tut@temp.tex}~-- einmal
+% direkt und einmal innerhalb einer Box~-- können darin verwendete Befehle wie
% \cs{newcommand} zu Fehler führen. Mit dem Makro \cs{CodeHook} lassen sich
-% diese Konflikte durch eine lokale Redefinition ebensoclher Befehle auflösen
+% diese Konflikte durch eine lokale Redefinition ebensolcher Befehle auflösen
% (bspw. \cs{let}\cs{newcommand}\cs{renewcommand}).
% \begin{macrocode}
\ActivateWarningFilters[Tutorial]%
- \@tempa{\input{\jobname-temp.tex}}{\@CodeHook}%
+ \@tempa{\input{\tud@tut@temp.tex}}{\Code@Hook}%
\DeactivateWarningFilters[Tutorial]%
- \global\let\@CodeHook\relax%
+ \global\let\Code@Hook\relax%
\setlength\leftskip{\@tempdimc}%
\noindent\ignorespaces%
}
% \end{macrocode}
-% \end{macro}^^A \@CodeHook
-% \end{macro}^^A \CodeHook
-% \end{macro}^^A \@CodePreamble
-% \end{macro}^^A \CodePreamble
% \end{macro}^^A \tud@tut@input
% \begin{macro}{\InputCode}
% \changes{v2.02}{2014/10/21}{neu}^^A
-% Mit \cs{InputCode} kann der Inhalt der letzen \env{Trunk}"=Umgebung
+% Mit \cs{InputCode} kann der Inhalt der letzen \env{Trunk}-Umgebung
% direkt ausgeführt werden, ohne diesen zuvor mit \cs{tud@tut@input} zu prüfen
% und zu formatieren.
% \begin{macrocode}
-\newcommand*\InputCode{\input{\jobname-temp.tex}}
+\newcommand*\InputCode{\input{\tud@tut@temp.tex}}
% \end{macrocode}
% \end{macro}^^A \InputCode
% \begin{macro}{\tud@tut@pdf}
% \changes{v2.02}{2014/10/22}{neu}^^A
-% Die Umgebung \env{Trunk!} verwendet nach der Ausgabe des Quelltextes diesen
-% abermals, um daraus eine PDF-Datei zu erzeugen. Dafür wird mithilfe einer
-% \env{filecontents}"=Umgebung eine temporäre \LaTeX-Datei erzeugt. Diese
-% bindet die mit \env{Trunk!} erzeugte Datei ein und wird anschließende via
-% \cs{write18} kompiliert. Dabei sollte man sich nicht von der doppelten
-% Verwendung von \cs{jobname} verwirren lassen. Der Dateiname der temporär
-% erzeugten \LaTeX-Datei ist abhängig vom gesetzten Tutorial. Beim Aufruf
-% dieser wird über die Optionen von pdf\LaTeX{} der verwendete \cs{jobname}
-% angepasst (siehe \cs{tud@tut@pdf}).
-% \begin{macrocode}
-\ifnum\pdfshellescape=\@ne\relax%
+% Die Umgebungen \env{Trunk!} und \env{hint!} verwenden nach der Ausgabe des
+% Quelltextes diesen abermals, um daraus eine PDF-Datei zu erzeugen. Dafür wird
+% mithilfe einer \env{filecontents}-Umgebung eine temporäre \LaTeX-Datei
+% erzeugt. Diese bindet die mit \env{Trunk!} erzeugte Datei ein und wird
+% anschließend via \cs{write18} kompiliert. Dabei sollte man sich nicht von der
+% doppelten Verwendung von \cs{jobname} verwirren lassen. Der Dateiname der
+% temporär erzeugten \LaTeX-Datei ist abhängig vom gesetzten Tutorial. Beim
+% Aufruf dieser wird über die Optionen von \app{pdflatex} der verwendete
+% \cs{jobname} angepasst (siehe \cs{tud@tut@pdf}).
+% \begin{macrocode}
+\IfFileExists{\tud@tut@temp-standalone.tex}{\@tempswafalse}{\@tempswatrue}
+\if@tempswa%
\ActivateWarningFilters[Tutorial]%
-\begin{filecontents*}{tutorial-temp.tex}
+\begin{filecontents*}{\tud@tut@temp-standalone.tex}
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
\documentclass[english,ngerman]{tudscrreprt}
\usepackage[utf8]{inputenc}
@@ -3235,36 +5285,56 @@
\usepackage{enumitem}
\setlist{noitemsep}
\begin{document}
-\input{\jobname.tex}
+\ifdefvoid{\StandaloneDate}{}{\date{\StandaloneDate}}%
+\input{\jobname.tex}%
\end{document}
\end{filecontents*}
\DeactivateWarningFilters[Tutorial]%
\fi
% \end{macrocode}
-% Der Quelltext aus der \env{Trunk!}"=Umgebung wird~-- wie bei allen anderen
-% Derivaten der Umgebungen \env{Trunk}~-- in \val{\string\jobname-temp.tex}
-% gesichert. Beim Aufruf von pdf\LaTeX{} wird durch die Verwendung der Option
-% \opt{-jobname=\string\jobname-temp} die eigentliche Definition des Makros
-% \cs{jobname} in der aufgerufenen Datei \val{tutorial-temp.tex} überschrieben
-% und der Inhalt von \val{\string\jobname-temp.tex} wie gewünscht eingebunden
-% und kompiliert. Damit die so erstellte PDF-Datei mit \cs{IncludeStandalone}
+% Der Quelltext aus den Umgebungen \env{Trunk!} und \env{Hint!} wird~-- wie bei
+% allen anderen \env{Trunk}-Derivaten~-- in \file{\string\tud@tut@temp.tex}
+% gesichert. Beim Aufruf von \app{pdflatex} wird durch die Nutzung der Option
+% \opt{-jobname=\string\tud@tut@temp} die Definition von \cs{jobname} in der
+% aufgerufenen Datei \file{\string\tud@tut@temp-standalone.tex} überschrieben
+% und der Inhalt von \file{\string\tud@tut@temp.tex} wie gewünscht eingebunden
+% und kompiliert. Damit die so erstellte PDF-Datei mit \cs{IncludeStandalone}
% im weiteren Verlauf in das Tutorial eingebunden werden kann, wird diese noch
-% in \cs{\meta{Argument}-temp.pdf} umbenannt.
+% in \cs{\meta{Argument}-temp.pdf} umbenannt. Das Makro \cs{StandaloneDate}
+% wird auf das Datum der Master-Datei gesetzt, damit das voreingestellte Datum
+% der erzeugten Datei angepasst werden kann.
% \begin{macrocode}
\newcommand*\tud@tut@pdf{%
\ifnum\pdfshellescape=\@ne\relax%
- \immediate\write18{%
- pdflatex -jobname=\jobname-temp tutorial-temp.tex
- pdflatex -jobname=\jobname-temp tutorial-temp.tex
- pdflatex -jobname=\jobname-temp tutorial-temp.tex
+ \filemodCmp{\jobname-standalone-\StandaloneFile.pdf}{\jobname.tex}{}{%
+ \begingroup%
+ \let\printdate\@firstofone%
+ \edef\@tempa{\expandonce\@date}%
+ \def\@tempb{\today}%
+ \ifx\@tempa\@tempb\relax%
+ \def\@tempb{}%
+ \else%
+ \edef\@tempb{\etex@unexpanded{\def\StandaloneDate}{\@date}}%
+ \fi%
+ \edef\@tempa{%
+ pdflatex -jobname=\tud@tut@temp\space%
+ "\noexpand\unexpanded{\expandonce\@tempb\noexpand\input}%
+ {\tud@tut@temp-standalone.tex}"%
+ }%
+ \immediate\write18{\@tempa^^J\@tempa^^J\@tempa}%
+ \ifwindows%
+ \def\@tempa{rename}%
+ \else%
+ \def\@tempa{mv}%
+ \fi%
+ \immediate\write18{%
+ \@tempa\space\tud@tut@temp.pdf\space%
+ \jobname-standalone-\StandaloneFile.pdf%
+ }%
+ \endgroup%
}%
- \ifwindows%
- \immediate\write18{rename \jobname-temp.pdf \@StandaloneFile-temp.pdf}%
- \else%
- \immediate\write18{mv \jobname-temp.pdf \@StandaloneFile-temp.pdf}%
- \fi%
\fi%
- \global\let\@StandaloneFile\relax%
+ \global\let\StandaloneFile\relax%
}
% \end{macrocode}
% \end{macro}^^A \tud@tut@pdf
@@ -3276,7 +5346,7 @@
% Breite skaliert werden.
% \begin{macrocode}
\NewDocumentCommand\IncludeStandalone{omO{1}}{%
- \IfFileExists{#2-temp.pdf}{%
+ \IfFileExists{\jobname-standalone-#2.pdf}{%
\@tempcnta\z@%
\@for\@tempa:=#3\do{\advance\@tempcnta\@ne}%
\ifnum\@tempcnta>\z@\relax%
@@ -3290,410 +5360,508 @@
\edef\@tempb{%
keepaspectratio,page=\@tempa,width=\the\@tempdima,%
\IfValueT{#1}{#1}%
- }
- \fbox{\expandafter\includegraphics\expandafter[\@tempb]{#2-temp.pdf}}%
+ }%
+ \fbox{%
+ \expandafter\includegraphics\expandafter[\@tempb]{%
+ \jobname-standalone-#2.pdf%
+ }%
+ }%
\ifnum\@tempcnta>\z@\relax\hfill\fi%
}%
\fi%
}{%
- \tud@shellescape@wrn%
+ \tud@shellescape@wrn{\jobname-standalone-#2.pdf}%
}%
}
% \end{macrocode}
% \end{macro}^^A \IncludeStandalone
-% \begin{macro}{\StartTutorial}
-% \changes{v2.02}{2014/08/21}{neu}^^A
-% \begin{macro}{\FinishTutorial}
-% \changes{v2.02}{2014/08/21}{neu}^^A
-% Mit \cs{StartTutorial} wird ein Hyperlink für den Querverweis aus dem
-% Handbuch definiert. Außerdem wird gleich der Titel und ein einleitender Satz
-% gesetzt.
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \subsection{Automatische Erstellung von \pkg{pstricks}-Grafiken}
+%
+% Falls innerhalb eines Tutorials das Paket \pkg{pstricks} verwendet wird, muss
+% dafür Sorge getragen werden, dass die automatische Kompilierung reibungslos
+% mit \pkg{auto-pst-pdf} funktioniert.
% \begin{macrocode}
-\newcommand\StartTutorial[1][%
- Bevor das eigentliche Tutorial beginnt, werden sowohl eine Dokumentklasse
- als auch die f\"ur jedes \hologo{pdfLaTeX}-Dokument meiner Meinung nach
- sinnvollen Pakete geladen.
-]{%
- \Hy@raisedlink{\hyperdef{\jobname}{tutorials:\jobname}{}}%
- \faculty{}%
- \setlength\headingsvskip{-15mm}%
- \maketitle\noindent#1%
- \immediate\openout\tud@write@i=\jobname-preamble-temp.tex\relax
- \immediate\openout\tud@write@ii=\jobname-trunk-temp.tex\relax
- \immediate\write\tud@write@ii{^^J\string\begin{document}^^J}
-}
+%<*package>
+\AfterPackage*{pstricks}{%
+ \ifnum\pdfshellescape=\@ne\relax%
+ \filemodCmp{\jobname-pics.pdf}{\jobname.tex}{%
+ \PassOptionsToPackage{off}{auto-pst-pdf}%
+ }{}%
+ \else%
+ \PassOptionsToPackage{off}{auto-pst-pdf}%
+ \fi%
+ \RequirePackage{auto-pst-pdf}[2009/04/26]%
% \end{macrocode}
-% Der Befehl \cs{FinishTutorial} schleißt den noch offenen Ausgabestream und
-% gibt den vorgestellten Quelltext vollständig aus.
+% Nach dem Paket \pkg{auto-pst-pdf} seine Arbeit verrichtet hat, werden alle
+% etwaigen temporär erzeugten Dateien radikal gelöscht.
% \begin{macrocode}
-\newcommand\FinishTutorial[1][]{%
- \immediate\write\tud@write@ii{^^J\string\end{document}^^J}
- \immediate\closeout\tud@write@ii%
- \immediate\closeout\tud@write@i%
- \tud@tut@collect%
- \clearpage%
- \addsec{Copy~\&~Paste}%
- \pagestyle{empty}%
- Zum Ende des Dokumentes wird das vorgestellte Tutorial als \"ubersetzbarer
- Quelltext ausgegeben, um dieses via Copy~\&~Paste verwenden und alle Punkte
- nachvollziehen zu k\"onnen. Bitte beachten Sie, dass~-- abh\"angig vom
- genutzten PDF-Betrachter~-- beim Kopieren die dargestellten Einz\"uge und
- Abs\"atze m\"oglicherweise verloren gehen k\"onnen. Dies kann insbesondere
- aufgrund fehlender Leerzeilen zu einem unvorteilhaften Ausgabeergebnis
- f\"uhren. Alternativ finden Sie den folgenden \hologo{LaTeX}-Quelltext auch
- im Pfad \Path{texmf/source/latex/tudscr/doc/examples/} als Datei
- \File{\jobname-example.tex}. \par #1
- \begin{quoting}[rightmargin=0pt]%
- \lstinputlisting[style=tudscr]{\jobname-example-temp.tex}%
- \end{quoting}%
+ \ifnum\pdfshellescape=\@ne\relax%
+ \edef\@tempa{\app@exe{\app@rm "*\app@suffix*"}}%
+ \@tempa%
+ \fi%
}
+%</package>
% \end{macrocode}
-% \end{macro}^^A \FinishTutorial
-% \end{macro}^^A \StartTutorial
-% \begin{macro}{\tud@tut@readtostream}
-% \changes{v2.02}{2014/12/16}{neu}^^A
-% \begin{macro}{\tud@tut@line}
-% \changes{v2.02}{2014/08/19}{neu}^^A
-% \begin{macro}{\tud@tut@append}
-% \changes{v2.02}{2014/08/19}{neu}^^A
-% \begin{macro}{\tud@tut@collect}
-% \changes{v2.02}{2014/12/16}{neu}^^A
-% Bei den Tutorials soll zum Schluss ein komplett kompilierbares Beispiel für
-% Copy~\&~Paste gegeben werden. Um dieses zusammenzubauen, werden alle im
-% Dokument innerhalb der Varianten der \env{Trunk}"=Umgebungen gegebenen
-% Codefragmente zusammengesetzt. Um die Quelltexte einlesen und verarbeiten zu
-% können, werden zwei Eingabe- sowie ein Ausgabestream benötigt, welche bereits
-% zuvor initilaisiert wurden.
%
-% Mit \cs{tud@tut@readtostream} wird der Inhalt der Datei im ersten Argument
-% in den Ausgabestream des zweiten Argumentes geschrieben. Dies wird durch die
-% Makros \cs{tud@tut@append} und \cs{tud@tut@collect} genutzt.
-% \begin{macrocode}
-\newcommand*\tud@tut@line{}
-\newcommand*\tud@tut@readtostream[2]{%
- \begingroup%
- \endlinechar=-1\relax%
- \openin\tud@read=#1%
-% \end{macrocode}
-% Der Schalter \cs{if@tempswa} wird verwendet, um unnötige Leerzeilen in der
-% Ausgabedatei zu entfernen. Wurde eine nicht leere Zeile gefunden, wird diese
-% auf jeden Fall geschrieben, indem \cs{@tempswatrue} gesetzt wird. Eine leere
-% Zeile wird~-- bis auf den Sonderfall, dass es sich um die letzte Zeile in der
-% Datei handelt~-- zunächst nicht weiter beachtet. Im Zweifelsfall wird diese
-% (erste) Leerzeile geschrieben.
-% \begin{macrocode}
- \@tempswafalse%
- \loop\unless\ifeof\tud@read%
- \readline\tud@read to\tud@tut@line%
- \ifx\tud@tut@line\@empty%
- \ifeof\tud@read\@tempswafalse\fi%
- \else%
- \@tempswatrue%
- \fi%
-% \end{macrocode}
-% Hier erfolgt das eigentliche Schreiben im selektierten Stream.
+% \subsection{ToDo-Liste}
+%
+% Für Klasse und Paket besteht die Möglichkeit, Änderungsnotizen zu nutzen,
+% wofür das Paket \pkg{todonotes} geladen wird.
% \begin{macrocode}
- \if@tempswa%
- \immediate\write#2{\unexpanded\expandafter{\tud@tut@line}}%
- \fi%
+\PassOptionsToPackage{obeyFinal}{todonotes}
% \end{macrocode}
-% Im Nachgang wird überprüft, ob die aktuell geschriebene Zeile leer war. Ist
-% dies der Fall, so wird \cs{@tempswafalse} gesetzt, um eine etwaig folgende
-% Leerzeile nicht in die Ausgabedatei zu schrieben.
+% Für den Druck wird die farbige Ausgabe der ToDo-Notizen deaktiviert.
% \begin{macrocode}
- \ifx\tud@tut@line\@empty\@tempswafalse\fi%
- \repeat%
- \closein\tud@read%
- \endgroup%
+\ifdef{\tudprintflag}{%
+ \PassOptionsToPackage{color=white}{todonotes}%
+}{%
+ \PassOptionsToPackage{colorinlistoftodos,color=HKS92!10}{todonotes}%
}
+\RequirePackage{todonotes}[2012/07/25]
% \end{macrocode}
-% Der innerhalb der Umgebungen \env{Preamble} und \env{Trunk}~-- sowie deren
-% Derivaten~-- angegeben Inhalt wird beim Beenden dieser in die Hilfsdatei
-% \cs{jobname-temp.tex} zwischengespeichert. Mit dem Befehl \cs{tud@tut@append}
-% wird der Inhalt dieser Datei ausgelesen und den zusätzlichen Hilfsdateien
-% \cs{jobname-preamble-temp.tex} beziehungsweise \cs{jobname-trunk-temp.tex}
-% angehangen und damit gesichert, um Quelltextauszüge aus dem Tutorial für die
-% Präambel sowie den Dokumentteil trennen beziehungsweise sortieren zu können.
+%
+% \iffalse
+%</body>
+%<*option>
+% \fi
+%
+% \begin{option}{ToDo}
+% \changes{v2.02}{2014/07/10}{neu}^^A
+% \changes{v2.05}{2015/10/27}{Nutzung von Positiv- und Negativ-Liste}^^A
+% \begin{macro}{\if@tud@todo}
+% \changes{v2.02}{2014/07/10}{neu}^^A
+% \begin{macro}{\tud@todo@type@pos}
+% \changes{v2.05}{2015/10/27}{neu}^^A
+% \begin{macro}{\tud@todo@type@neg}
+% \changes{v2.05}{2015/10/27}{neu}^^A
+% Diese Option ist verantwortlich für den Schalter \cs{if@tud@todo}. Über
+% diesen wird gesteuert, ob ToDo-Notizen ausgegeben werden sollen.
% \begin{macrocode}
-\newcommand*\tud@tut@append[1]{\tud@tut@readtostream{\jobname-temp.tex}{#1}}
+\newif\if@tud@todo
+\newcommand*\tud@todo@type@pos{}
+\let\tud@todo@type@pos\relax
+\newcommand*\tud@todo@type@neg{}
+\let\tud@todo@type@neg\relax
+\TUD@key{ToDo}[true]{%
+ \TUD@set@ifkey{ToDo}{@tud@todo}{#1}%
% \end{macrocode}
-% Das Makro \cs{tud@tut@collect} fügt alle Quelltexte des Tutorials, welche
-% nach Präambel und Dokumentteil sortiert wurden, in einer Datei zusammen.
-% Diese wird zum einen am Ende des Tutorials mit \cs{FinishTutorial} ausgeben,
-% zum anderen wird diese als Beispiel in den Ordner für Beispiele beim Erzeugen
-% eines Release kopiert.
+% Wird der Option ein boolescher Wert übergeben, sind sowohl die Positiv- als
+% auch die Negativ-Liste hinfällig.
% \begin{macrocode}
-\newcommand*\tud@tut@collect{%
- \immediate\openout\tud@write@ii\jobname-example-temp.tex\relax%
- \tud@tut@readtostream{\jobname-preamble-temp.tex}{\tud@write@ii}%
- \tud@tut@readtostream{\jobname-trunk-temp.tex}{\tud@write@ii}%
- \immediate\closeout\tud@write@ii
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed%
+ \let\tud@todo@type@pos\relax%
+ \let\tud@todo@type@neg\relax%
+ \else%
+% \end{macrocode}
+% Wird die Option nicht mit einem booleschen Wert verwendet, so kann über diese
+% gezielt der Typ einer (nicht) auszugebenden ToDo-Notiz angegeben werden. So
+% können bestimmte Typen von Notizen entweder ausschließlich ausgegeben oder
+% aber unterdrückt werden, wobei für letztere Variante das Suffix \val{not}
+% vor dem eigentlichen Typen verwendet werden muss.
+% \begin{macrocode}
+ \def\@tempa not##1##2##3##4\@nil{%
+ \ifstr{##1##2##3}{not}{%
+ \if\relax##4\relax\else%
+ \listeadd\tud@todo@type@neg{##4}%
+ \@tud@todotrue%
+ \FamilyKeyStateProcessed%
+ \fi%
+ }{%
+ \if\relax##1\relax\else%
+ \listeadd\tud@todo@type@pos{##1##2##3##4}%
+ \@tud@todotrue%
+ \FamilyKeyStateProcessed%
+ \fi%
+ }%
+ }%
+ \edef\@tempb{not\trim@spaces{#1}}%
+ \expandafter\@tempa\@tempb\@empty\@empty\@empty\@nil%
+ \fi%
}
% \end{macrocode}
-% \end{macro}^^A \tud@tut@collect
-% \end{macro}^^A \tud@tut@append
-% \end{macro}^^A \tud@tut@line
-% \end{macro}^^A \tud@tut@readtostream
+% \end{macro}^^A \tud@todo@type@neg
+% \end{macro}^^A \tud@todo@type@pos
+% \end{macro}^^A \if@tud@todo
+% \end{option}^^A ToDo
%
% \iffalse
-%</package>
+%</option>
+%<*body>
% \fi
%
-% \subsection{Ausgabe von Index und Änderungsliste}
-%
-% Ein Index kann sowhol mit dem Paket als auch mit der Klasse erzeugt werden,
-% die Änderungsliste ist der Klasse vorbehalten.
-% \begin{macro}{\idxfont}
-% Für zusätzliche Informationen im Index nach dem eigentlichen Eintrag wird
-% eine etwas kleinere Schrift verwendet.
+% \begin{macro}{\ToDo}
+% \changes{v2.02}{2014/07/10}{Verwendung von \pkg{todonotes}}^^A
+% \changes{v2.03}{2015/01/25}{Ausgabe auf bestimmten Typ beschränkbar}^^A
+% \changes{v2.05}{2015/11/02}{Farbkodierung durch optionale Versionsnummer}^^A
+% \begin{macro}{\tud@todo@type@color}
+% \changes{v2.05}{2015/11/02}{neu}^^A
+% \begin{macro}{\tud@todo@marginnote}
+% \changes{v2.05}{2016/05/31}{neu}^^A
+% \begin{macro}{\ListOfToDo}
+% \changes{v2.02}{2014/07/10}{neu}^^A
+% Mit dem Befehl \cs{ToDo}\oarg{Option}\marg{ToDo-Notiz}\oarg{Versionsnummer}
+% kann bei aktivierter Option \opt{ToDo} eine Notiz mit einer offenen Aufgabe
+% erstellt werden. Das vorangestellte Argument kann Optionen beinhalten, welche
+% durch \pkg{todonotes} unterstützt werden. Außerdem werden die fünf booleschen
+% Schlüssel \val{doc}, \val{man}, \val{imp}, \val{urg} und \val{nxt} definiert,
+% welche eine farbliche Kodierung erzeugen, um die Aufgaben tu kategorisieren.
+% \begin{macrocode}
+\AfterPackage*{todonotes}{%
+ \newcommand*\tud@todo@type@color[2]{%
+ \define@boolkey{todonotes}{#1}[true]{%
+ \ifdef{\tudprintflag}{}{%
+ \ifbool{KV@todonotes@#1}{\setkeys{todonotes}{color=#2}}{}%
+ }%
+ }%
+ }%
+ \tud@todo@type@color{doc}{HKS41!30}%
+ \tud@todo@type@color{rls}{HKS44!30}%
+ \tud@todo@type@color{imp}{HKS57!50}%
+ \tud@todo@type@color{urg}{HKS07!50}%
+ \tud@todo@type@color{nxt}{HKS92!30}%
+ \undef\tud@todo@type@color%
+ \newcommand*\tud@todo@marginnote{}%
+% \end{macrocode}
+% Nun folgt die Definition des eigentlichen Befehls. Dabei wird zu Beginn
+% \cs{@currentHref} gesichert und am Ende wiederhergestellt.
+% \begin{macrocode}
+ \NewDocumentCommand\ToDo{somo}{%
+ \ifbool{@tud@todo}{%
+ \global\let\tud@currentHref\@currentHref%
+ \begingroup%
+% \end{macrocode}
+% In \cs{@tempa} wird das optionale Argument für den \cs{todo}-Befehl aus dem
+% Paket \pkg{todonotes} erstellt.
% \begin{macrocode}
-\newcommand*\idxfont{}
-\let\idxfont\footnotesize
-\robustify{\idxfont}
+ \let\@tempa\@empty%
% \end{macrocode}
-% \end{macro}^^A \idxfont
-% \begin{macro}{\PrintIndex}
-% \begin{macro}{\PrintIndexPrologue}
-% \changes{v2.02}{2014/08/20}{neu}^^A
-% \begin{macro}{\@printindexprologue}
-% \changes{v2.02}{2014/08/20}{neu}^^A
-% \begin{macro}{\@printindexskip}
-% \changes{v2.02}{2014/09/02}{neu}^^A
-% \begin{macro}{\Index}
-% \begin{macro}{\seeidx}
-% \begin{macro}{\@printindex}
-% \changes{v2.02}{2014/07/25}{neu}^^A
-% Der Befehl \cs{PrintIndex} ist die Zusammenfassung für die Ausgabe aller
-% Indexe.
+% Das angestellte optionale Argument erzeugt zusätzlich eine Notiz am Rand, in
+% welcher vorzugsweise die angedachte Version eingetragen werden kann. Sollte
+% dieser angegeben sein, wird auf eine gültige Versionsnummer geprüft. Dabei
+% wird ein möglicherweise vorangestelltes \val{v} entfernt.
% \begin{macrocode}
-\newcommand*\PrintIndex{%
- \begingroup%
-%<*class>
- \@printindex%
-%</class>
- \@printindex[options]%
- \@printindex[macros]%
-%<*class>
- \@printindex[keys]%
- \@printindex[terms]%
- \@printindex[fonts]%
- \begingroup%
- \let\lettergroup\@gobble%
- \let\indexspace\par%
- \@printindex[colors]%
- \endgroup%
-%</class>
- \@printindex[files]%
- \endgroup%
-}
+ \def\tud@todo@marginnote{ToDo}%
+ \IfValueT{#4}{%
+ \def\tud@todo@marginnote{#4}%
+ \tud@v@get\@tempc{#4}%
+% \end{macrocode}
+% Exisitiert die angegebene Versionsnummer, so wird geprüft, ob die des
+% optionalen Argumentes bereits veraltet ist. Ist dies der Fall, wird die
+% ToDo-Notiz als dringlich (\val{urg}) gekennzeichnet.
+% \begin{macrocode}
+ \ifcsdef{tud@v@\@tempc}{%
+ \ifstr{\@tempc}{\TUDScriptVersionNumber}{}{\def\@tempa{urg}}%
+ \edef\tud@todo@marginnote{v\@tempc}%
+% \end{macrocode}
+% Exisitiert die angegebene Versionsnummer nicht, so wird geprüft, ob es sich
+% überhaupt um eine Versionsnummer handelt. Ist dies der Fall, wird die
+% ToDo-Notiz als Aufgabe für eine spätere Version (\val{nxt}) gekennzeichnet.
+% \begin{macrocode}
+ }{%
+ \def\@tempa##1.##2##3##4\@nil{##1##2##3}%
+ \edef\@tempb{\expandafter\@tempa\@tempc.000\@nil}%
+ \ifxnumber{\@tempb}{%
+ \def\@tempa{nxt}%
+ \edef\tud@todo@marginnote{v\@tempc}%
+ }{\let\@tempa\@empty}%
+ }%
+ }%
% \end{macrocode}
-% Hiermit kann der einleitende Teil für den allgemeinen Index gesetzt werden.
+% Anschließend wird das eigentliche optionale Argument vorangestellt, wobei in
+% diesem ggf. auch der Kategorisierungstyp enthalten ist.
+% \begin{macrocode}
+ \IfValueT{#2}{\preto\@tempa{#2,}}%
+% \end{macrocode}
+% Die Ausgabe erfolgt entweder für alle ToDo-Notizen oder nur für die per
+% Option festgelegten Typen. Dabei wird in einer Schleife geprüft, ob der in
+% der aktuellen Notiz angegebene Kategorisierungstyp entweder in der Positv-
+% oder aber in der Negativ-Liste enthalten ist. Soll der aktuelle Typ
+% ausgegeben werden, wird der Schalter \cs{@tempswa} gesetzt.
+% \begin{macrocode}
+ \@tempswafalse%
+ \ifx\tud@todo@type@pos\relax\@tempswatrue\fi%
+ \toks@{\forcsvlist\@tempb}%
+ \eaddto@hook\toks@{\expandafter{\@tempa}}%
+ \let\@tempa\@empty%
+ \def\@tempb##1{%
+ \eappto\@tempa{##1,}%
+ \ifinlist{##1}{\tud@todo@type@pos}{\@tempswatrue}{}%
+ \ifinlist{##1}{\tud@todo@type@neg}{\@tempswafalse}{}%
+ }%
+ \the\toks@%
+% \end{macrocode}
+% Vor der Ausgabe wird ein kleiner vertikaler Abstand eingefügt.
% \begin{macrocode}
-%<*class>
-\newcommand*\PrintIndexPrologue[1]{\long\gdef\@printindexprologue{#1}}
-\newcommand*\@printindexprologue{}
-%</class>
+ \if@tempswa%
+ \ifhmode\par\fi%
+ \let\par\relax%
+ \vskip\medskipamount%
+ \noindent%
% \end{macrocode}
-% Durch die Verwendung der \env{multicols}"=Umgebung werden zu große vertikale
-% Abstände gesetzt. Dies wird mit diesem Befehl rückgängig gemacht.
+% Dann erfolgt die Ausgabe der eigentlichen ToDo-Notiz im Textbereich. Die
+% Sternversion von \cs{ToDo} unterdrückt dabei die Aufnahme in die ToDo-Liste.
% \begin{macrocode}
-\newcommand*\@printindexskip{%
- \ifnum\imki@columns>\@ne\relax\vspace{-\multicolsep}\fi%
-}
+ \toks@\expandafter{\@tempa inline}%
+ \IfBooleanT{#1}{\addto@hook\toks@{,nolist}}%
+ \sbox\z@{%
+ \expandafter\todo\expandafter[\the\toks@]{\trim@spaces{#3}\strut}%
+ }\usebox\z@%
% \end{macrocode}
-% Der Befehl \cs{@printindex} setzt vor jedem Unterindex ein referenzierbares
-% Label und gibt diesen danach aus.
+% Es folgt die dazugehörige Randnotiz. Damit diese nicht verrutscht, wird
+% \cs{marginnote} anstelle von \cs{marginpar} verwendet. Wurde das angestellte
+% optionale Argument verwendet, wird dieses für die Randnotiz genutzt.
+% Andernfalls erscheint im Rand die Anmerkung \emph{ToDo}.
% \begin{macrocode}
-\newcommand*\@printindex[1][]{%
- \pagebreak[3]%
-%<*class>
- \ifblank{#1}{%
- \ifx\@printindexprologue\@empty%
- \indexprologue[\@printindexskip]{\manualhyperdef'{idx:main}}%
- \else%
- \indexprologue{%
- \manualhyperdef'{idx:main}%
- \@printindexprologue%
- }%
- \fi%
- \printindex\@printindexskip%
- \let\@printindexprologue\@empty%
- }{%
- \indexprologue[\@printindexskip]{\manualhyperdef'{idx:#1}}%
- \printindex[#1]\@printindexskip%
+ \renewcommand*\marginpar[2][]{%
+ \marginnote[##1]{##2}[\dimexpr-\ht\z@+1.6ex+1.75pt\relax]%
+ }%
+ \toks@\expandafter{\@tempa noline,nolist}%
+ \settowidth\marginparwidth{\tud@todo@marginnote}%
+ \addtolength\marginparwidth{\dimexpr1.6ex+1pt\relax}%
+ \expandafter\todo\expandafter[\the\toks@]{\tud@todo@marginnote\strut}%
+ \aftergroup\par\aftergroup\noindent%
+ \fi%
+ \endgroup%
+ \global\let\@currentHref\tud@currentHref%
+ }{}%
+ \ignorespaces%
}%
-%</class>
-%<*package>
- \indexprologue[\@printindexskip]{}%
- \printindex[#1]\@printindexskip%
-%</package>
+% \end{macrocode}
+% Zum Schluss wird der Befehl \cs{ListOfToDo} definiert, der die Liste der noch
+% zu erledigenden Punkte ausgibt.
+% \begin{macrocode}
+ \newcommand*\ListOfToDo{\if@tud@todo\clearpage\listoftodos\fi}%
}
% \end{macrocode}
-% Der Befehl \cs{Index} dient zum Eintragen eines Schlagwortes im allgemeinen
-% Index und verweist auf den speziellen, zum Schlagwort gehörigen Index. Das
-% optionale Argument kann verwendet werden, um ggf. den Eintrag in den
-% allgemeinen Index anders zu benennen, als den Verweis.
+% Sollte das Paket \pkg{todonotes} nicht geladen werden, erfolgt ein Definition
+% der beiden notwendigen Befehle als Dummy.
% \begin{macrocode}
-%<*class>
-\newcommand*\seeidx[2]{\pageref{idx:#1}}
-\NewDocumentCommand\Index{mom}{%
- \index{%
- #1!\textrightarrow{}\space%
- \manualhyperref{idx:#3}{Index der \IfValueTF{#2}{#2}{#1}}|seeidx{#3}%
- }%
+\TUD@UnwindPackage{todonotes}{%
+ \NewDocumentCommand\ToDo{somo}{}%
+ \newcommand*\ListOfToDo{}%
}
-%</class>
% \end{macrocode}
-% \end{macro}^^A \@printindex
-% \end{macro}^^A \seeidx
-% \end{macro}^^A \Index
-% \end{macro}^^A \@printindexskip
-% \end{macro}^^A \@printindexprologue
-% \end{macro}^^A \PrintIndexPrologue
-% \end{macro}^^A \PrintIndex
+% \end{macro}^^A \ListOfToDo
+% \end{macro}^^A \tud@todo@marginnote
+% \end{macro}^^A \tud@todo@type@color
+% \end{macro}^^A \ToDo
+%
+% \section{Verschiedenes für die Dokumentationsklassen und -pakete}
+%
+% Sowohl für die Klasse \cls{tudscrmanual} als auch \cls{tudscrdoc} werden ein
+% paar Befehle zur komfortablen verwendung im Fließtext definiert. Außerdem
+% erfolgen mittels einiger Pakete verschiedene Formateinstellungen.
+%
+% Für den Fließtext werden Pfeile u.\,ä. durch \pkg{textcomp} bereitgestellt.
+% \begin{macrocode}
+\RequirePackage{textcomp}[2005/09/27]
+% \end{macrocode}
+% Vergrößerung des Durchschusses.
+% \begin{macrocode}
+\RequirePackage{setspace}[2011/12/19]
+\setstretch{1.1}
+% \end{macrocode}
+% Sprachabhängiges Setzen von Anführungszeichen. Das Laden des Paketes darf
+% erst nach \pkg{inputenc} erfolgen.
+% \begin{macrocode}
+\AfterPackage*{inputenc}{\RequirePackage{csquotes}[2011/10/22]}
+\TUD@UnwindPackage{inputenc}{\RequirePackage{csquotes}[2011/10/22]}
+% \end{macrocode}
+% Verbesserte Zitate.
+% \begin{macrocode}
+\PassOptionsToPackage{vskip=\smallskipamount}{quoting}
+\RequirePackage{quoting}[2014/01/28]
+% \end{macrocode}
+% Automatisierte Datumsformatierung.
+% \begin{macrocode}
+\RequirePackage{isodate}[2010/01/03]
+% \end{macrocode}
+% Verschiedenste Symbole aus dem \LaTeX-Universum.
+% \begin{macrocode}
+\RequirePackage{hologo}[2012/04/26]
+% \end{macrocode}
%
% \iffalse
%<*class>
% \fi
%
-% \begin{macro}{\PrintChangelog}
-% \begin{macro}{\if@changelog}
-% \begin{macro}{\Changelog}
-% \changes{v2.02}{2014/08/20}{neu}^^A
-% \begin{macro}{\deprecatedhyperpage}
-% \changes{v2.03}{2015/02/05}{neu}^^A
-% Ähnlich wie für den Index wird auch für die Änderungsliste verfahren. Mit dem
-% Makro \cs{deprecatedhyperpage} wird die Ausgabe der Seitenzahlen unterdrückt,
-% wenn zusätzlich ein mit \cs{see} gesetzter Querverweis existiert.
-% \begin{macrocode}
-\newcommand*\deprecatedhyperpage{}
-\newif\if@changelog
-\newcommand*\PrintChangelog{%
- \begingroup%
- \let\lettergroup\@gobble%
- \@changelogtrue%
- \let\deprecatedhyperpage\hyperpage%
- \preto\item{\let\deprecatedhyperpage\hyperpage}%
- \preto\subitem{\let\deprecatedhyperpage\hyperpage}%
- \preto\subsubitem{\let\deprecatedhyperpage\hyperpage}%
- \@printindex[changelog]%
- \endgroup%
-}
-\NewDocumentCommand\Changelog{m}{%
- \index{%
- #1!\textrightarrow{}\space%
- \manualhyperref{idx:changelog}{\"Anderungsliste}|seeidx{changelog}%
- }%
+% Mit dem Paket \pkg{ragged2e} wird~-- falls benötigt~-- die Silbentrennung im
+% Flattersatz aktiviert.
+% \begin{macrocode}
+\RequirePackage{ragged2e}[2009/05/21]
+% \end{macrocode}
+% Die Fußnoten werden nicht mit jedem Kapitel zurückgesetzt.
+% \begin{macrocode}
+\RequirePackage{chngcntr}[2009/09/02]
+\counterwithout{footnote}{chapter}
+\addtokomafont{footnote}{\tud@RaggedRight}
+% \end{macrocode}
+% Das Paket wird für die Erstellung von Tabellen verwendet.
+% \begin{macrocode}
+\RequirePackage{booktabs}[2005/04/14]
+% \end{macrocode}
+% Die Formatierung von Gleitobjekten.
+% \begin{macrocode}
+\RequirePackage{caption}[2015/09/17]
+\RequirePackage{floatrow}[2008/08/02]
+\DeclareCaptionSubType[alph]{figure}
+\DeclareCaptionSubType[alph]{table}
+\captionsetup{font=sf,labelfont=bf,labelsep=space}
+\captionsetup{singlelinecheck=off,format=hang,justification=raggedright}
+\captionsetup[subfloat]{labelformat=brace,list=off}
+\KOMAoption{captions}{tableheading,figuresignature}
+\floatsetup[table]{style=plaintop}
+% \end{macrocode}
+% Erstellen von Grafiken.
+% \begin{macrocode}
+\RequirePackage{tikz}[2013/12/13]
+% \end{macrocode}
+% Einbinden von ganzseitigen PDF"~Dokumenten als Beispiel im Handbuch.
+% \begin{macrocode}
+\RequirePackage{pdfpages}[2013/08/25]
+% \end{macrocode}
+% Typographisch saubere Einheiten.
+% \begin{macrocode}
+\RequirePackage{units}[1998/08/04]
+% \end{macrocode}
+% Das Paket \pkg{ellipsis} sorgt für korrekte Auslassungpunkte.
+% \begin{macrocode}
+\AtEndPreamble{%
+ \RequirePackage{ellipsis}[2004/9/28]%
+ \let\ellipsispunctuation\relax%
}
% \end{macrocode}
-% \end{macro}^^A \deprecatedhyperpage
-% \end{macro}^^A \Changelog
-% \end{macro}^^A \if@changelog
-% \end{macro}^^A \PrintChangelog
%
% \iffalse
%</class>
+%</body>
+%</!doc>
+%<*body>
% \fi
%
-% \begin{macro}{\see}
-% \changes{v2.03}{2015/02/06}{neu}^^A
-% \begin{macro}{\seealso}
-% \changes{v2.03}{2015/02/06}{neu}^^A
-% Diese Befehle werden zum einen so definiert, dass zwischen \cs{seename} und
-% dem Argument ein geschütztes Leerzeichen verwendet wird. Die Sternversion
-% benötigt kein zweites, leeres Argument.
-% \begin{macrocode}
-\renewrobustcmd*\see[2]{%
- \ifstr{#1}{*}{\emph{\seename}~#2}{\emph{\seename}~#1}%
-% \end{macrocode}
-% Innerhalb der Klasse dient er außerdem zum etwaigen Unterdrücken von
-% Seitenzahlen in der Änderungsliste veralteter Optionen, Befehle etc.
-% \begin{macrocode}
+% \begin{macro}{\Attention}
+% \changes{v2.02}{2014/08/16}{neu}^^A
+% \begin{macro}{\Forum}
+% \begin{macro}{\CTAN}
+% \changes{v2.05}{2015/11/22}{neu}^^A
+% \begin{macro}{\GitHubRepo}
+% \changes{v2.02}{2014/08/16}{neu}^^A
+% \begin{macro}{\notudscrartcl}
+% \begin{macro}{\scrguide}
+% \changes{v2.02}{2014/09/04}{neu}^^A
+% \changes{v2.05}{2015/07/23}{Hyperlinktext über optionales Argument}^^A
+% Für die Anwenderdokumentation werden weitere Auszeichnungsbefehle definiert.
+% \begin{macrocode}
+\newcommand*\Attention[2][\z@]{%
+ \marginnote{%
+ \setlength\fboxsep{0.25em}
+ \fbox{Achtung!}%
+ }[#1]%
+ \emph{\trim@spaces{#2}}%
+}
+\NewDocumentCommand\Forum{st'}{%
+ \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}%
+ \IfBooleanT{#2}{\toks@{\url}}%
+ \addto@hook\toks@{{http://latex.wcms-file3.tu-dresden.de/phpBB3/}}%
+ \IfBooleanF{#2}{\addto@hook\toks@{{TUD-\LaTeX-Forum}}}%
+ \the\toks@\xspace%
+}
+\NewDocumentCommand\CTAN{sog}{%
+ \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}%
+ \addto@hook\toks@{{http://www.ctan.org/\IfValueT{#2}{#2}}}%
+ \addto@hook\toks@{%
+ {\tud@english{Comprehensive TeX Archive Network (CTAN\IfValueT{#3}{~#3})}}%
+ }%
+ \the\toks@\xspace%
+}
%<*class>
- \if@changelog\let\deprecatedhyperpage\@gobble\fi%
-%</class>
+\NewDocumentCommand\GitHubRepo{s}{%
+ \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}%
+ \addto@hook\toks@{{https://github.com/tud-cd/tudscr/releases}}%
+ \addto@hook\toks@{{\tud@english{GitHub-Repository~\Distribution*{tudscr}}}}%
+ \the\toks@\xspace%
+}
+\newcommand*\notudscrartcl{%
+ F\"ur die Klassen \Class{tudscrartcl} sowie \Class{tudscrposter} ist diese
+ Option nicht verf\"ugbar.%
}
-\renewrobustcmd*\seealso[2]{%
- \ifstr{#1}{*}{\emph{\alsoname}~#2}{\emph{\alsoname}~#1}%
+%</class>
+\NewDocumentCommand\scrguide{sO{\KOMAScript-Handbuch}}{%
+ \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}%
+ \addto@hook\toks@{%
+ {http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguide.pdf}%
+ }%
+ \addto@hook\toks@{{#2}}%
+ \the\toks@\xspace%
}
% \end{macrocode}
-% \end{macro}^^A \seealso
-% \end{macro}^^A \see
+% \end{macro}^^A \scrguide
+% \end{macro}^^A \notudscrartcl
+% \end{macro}^^A \GitHubRepo
+% \end{macro}^^A \CTAN
+% \end{macro}^^A \Forum
+% \end{macro}^^A \Attention
%
% \iffalse
%</body>
-%</!doc>
%<*body|doc>
% \fi
%
-% \section{Verschiedenes für die Dokumentationklassen}
-%
-% \begin{macro}{\vTUDScript}
-% \begin{macro}{\vKOMAScript}
% \begin{macro}{\CD}
% \begin{macro}{\CDs}
% \begin{macro}{\TUD}
% \begin{macro}{\TnUD}
+% \begin{macro}{\TUDCD}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\TUDCDs}
+% \changes{v2.05}{2015/11/01}{neu}^^A
% \begin{macro}{\DDC}
% Diese Befehle stellen regelmäßig in der Quelltextdokumentatuion und im
% Handbuch genutzte Textbausteine bereit. Dazu wird der Befehl \cs{xspace} aus
% dem \pkg{xspace}-Paket genutzt.
% \begin{macrocode}
-\RequirePackage{xspace}[2009/10/20]
-\xspaceaddexceptions{"=}
-% \end{macrocode}
-% Der Befehl \cs{vTUDScript} enthält die aktuelle \TUDScript"=Versionsnummer.
-% \begin{macrocode}
-\newcommand*\vTUDScript{}
-\AtBeginDocument{%
- \def\@tempb#1 #2 #3\relax#4\relax{\def\vTUDScript{#2}}%
- \edef\@tempa{\TUDVersion}%
- \expandafter\@tempb\@tempa\relax? ? \relax\relax%
-}
-\newcommand*\vKOMAScript{v3.17\xspace}
-% \end{macrocode}
-% Ganz zum Schluss noch Bugfixes für unterschiedliche Pakete.
-% \begin{macrocode}
-\RequirePackage{scrhack}[2014/02/27]
-% \end{macrocode}
-% \dots und der Rest.
-% \begin{macrocode}
-\newcommand*\CD{Corporate Design\xspace}
-\newcommand*\CDs{Corporate Designs\xspace}
+\newcommand*\CD{\tud@english{Corporate Design}\xspace}
+\newcommand*\CDs{\tud@english{Corporate Designs}\xspace}
\newcommand*\TUD{Technische Universit\"at Dresden\xspace}
\newcommand*\TnUD{Technischen Universit\"at Dresden\xspace}
-\newcommand*\DDC{%
- \mbox{D\kern.05em R\kern.05em E\kern.05em S\kern.05em D\kern.05em E\kern.05em
- N\kern.1em-\kern.1em concept}\xspace%
-}
-\AfterPackage*{babel}{%
- \@expandtwoargs\in@{,english,}{,\bbl@loaded,}%
- \ifin@%
- \renewcommand*\CD{\foreignlanguage{english}{Corporate Design}\xspace}
- \renewcommand*\CDs{\foreignlanguage{english}{Corporate Designs}\xspace}
- \fi
+\newcommand*\TUDCD{\CD der \TnUD}
+\newcommand*\TUDCDs{\CDs der \TnUD}
+%<doc>\AtBeginDocument{%
+\newrobustcmd*\DDC{%
+ \mbox{%
+ D\kern.05em R\kern.05em E\kern.05em S\kern.05em %
+ D\kern.05em E\kern.05em N\kern.1em-\kern.1em concept%
+ }\xspace%
}
+%<doc>}
% \end{macrocode}
% \end{macro}^^A \DDC
+% \end{macro}^^A \TUDCDs
+% \end{macro}^^A \TUDCD
% \end{macro}^^A \TnUD
% \end{macro}^^A \TUD
% \end{macro}^^A \CDs
% \end{macro}^^A \CD
-% \end{macro}^^A \vKOMAScript
-% \end{macro}^^A \vTUDScript
+% \begin{macro}{\Univers}
+% \begin{macro}{\DIN}
+% Für die Nennung der Schriften spezielle Markos bereitgestellt.
+% \begin{macrocode}
+\newcommand*\Univers{\texorpdfstring{\textubn{Univers}}{Univers}\xspace}
+\newcommand*\DIN{\texorpdfstring{\textdbn{DIN~BOLD}}{DIN BOLD}\xspace}
+% \end{macrocode}
+% \end{macro}^^A \DIN
+% \end{macro}^^A \Univers
%
% \iffalse
%</body|doc>
%<*body>
% \fi
%
-% \begin{macro}{\Univers}
-% \begin{macro}{\DIN}
-% \begin{macro}{\Attention}
-% \changes{v2.02}{2014/08/16}{neu}^^A
-% \begin{macro}{\Forum}
-% \begin{macro}{\GitHubRepo}
-% \changes{v2.02}{2014/08/16}{neu}^^A
% \begin{macro}{\textsbn}
% \changes{v2.02}{2014/08/16}{neu}^^A
% \begin{macro}{\sbnfont}
@@ -3702,76 +5870,19 @@
% \changes{v2.02}{2014/08/16}{neu}^^A
% \begin{macro}{\sbsfont}
% \changes{v2.02}{2014/08/16}{neu}^^A
-% \begin{macro}{\notudscrartcl}
-% \begin{length}{\tempdim}
-% \changes{v2.02}{2014/08/16}{neu}^^A
-% \begin{macro}{\hrfn}
-% \changes{v2.02}{2014/08/16}{neu}^^A
-% \changes{v2.04}{2015/02/18}{Schriftgröße mit \cs{scalebox}}^^A
-% \begin{macro}{\scrguide}
-% \changes{v2.02}{2014/09/04}{neu}^^A
-% Für die Anwenderdokumentation werden mehr Auszeichnungsbefehle vorgehalten.
+% Für die Anwenderdokumentation werden weitere Auszeichnungsbefehle definiert.
% \begin{macrocode}
-\newcommand*\Univers{\textubn{Univers}\xspace}
-\newcommand*\DIN{\textdbn{DIN~BOLD}\xspace}
\newcommand*\textsbn{}
-\newcommand*\sbnfont{\sffamily\bfseries\upshape}
-\DeclareTextFontCommand\textsbn{\sffamily\bfseries\upshape}
+\newrobustcmd*\sbnfont{\sffamily\bfseries\upshape}
+\DeclareTextFontCommand\textsbn{\sbnfont}
\newcommand*\textsbs{}
-\newcommand*\sbsfont{\sffamily\bfseries\slshape}
-\DeclareTextFontCommand\textsbs{\sffamily\bfseries\slshape}
-\newcommand*\Attention[1]{\marginnote{\fbox{Achtung!}}\emph{#1}}
-\NewDocumentCommand\Forum{s}{%
- \IfBooleanTF{#1}{%
- \url{http://latex.wcms-file3.tu-dresden.de/phpBB3/}%
- }{%
- \hrfn{http://latex.wcms-file3.tu-dresden.de/phpBB3/}{TUD-\LaTeX-Forum}%
- }%
- \xspace%
-}
-%<*class>
-\NewDocumentCommand\GitHubRepo{s}{%
- \def\@tempc{%
- https://github.com/tud-cd/tudscr/releases%
- }%
- \IfBooleanTF{#1}{%
- \href{\@tempc}{GitHub-Repository~\File*{tudscr}}%
- }{%
- \hrfn{\@tempc}{GitHub-Repository~\File*{tudscr}}%
- }%
- \xspace%
-}
-\newcommand*\notudscrartcl{%
- F\"ur die Klasse \Class{tudscrartcl} ist diese Einstellung nicht verf\"ugbar.
-}
-\newlength\tempdim
-%</class>
-\newcommand*\hrfn[2]{\href{#1}{#2}\footnote{\scalebox{0.97}{\url{#1}}}}
-\NewDocumentCommand\scrguide{s}{%
- \def\@tempc{%
- http://mirrors.ctan.org/macros/latex/contrib/koma-script/doc/scrguide.pdf%
- }%
- \IfBooleanTF{#1}{%
- \href{\@tempc}{\File{scrguide.pdf}}%
- }{%
- \hrfn{\@tempc}{\File{scrguide.pdf}}%
- }%
- \xspace%
-}
+\newrobustcmd*\sbsfont{\sffamily\bfseries\slshape}
+\DeclareTextFontCommand\textsbs{\sbsfont}
% \end{macrocode}
-% \end{macro}^^A \scrguide
-% \end{macro}^^A \hrfn
-% \end{length}^^A \tempdim
-% \end{macro}^^A \notudscrartcl
% \end{macro}^^A \sbsfont
% \end{macro}^^A \textsbs
% \end{macro}^^A \sbnfont
% \end{macro}^^A \textsbn
-% \end{macro}^^A \GitHubRepo
-% \end{macro}^^A \Forum
-% \end{macro}^^A \Attention
-% \end{macro}^^A \DIN
-% \end{macro}^^A \Univers
%
% \iffalse
%</body>