summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx')
-rw-r--r--Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx920
1 files changed, 687 insertions, 233 deletions
diff --git a/Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx b/Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx
index 5b2a03e7a8c..541de34d925 100644
--- a/Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx
+++ b/Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{480}
+% \CheckSum{769}
% \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,24 +51,25 @@
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\ProvidesFile{tudscr-base.dtx}[%
- 2015/06/15 v2.04 TUD-KOMA-Script\space%
+ 2016/07/26 v2.05 TUD-KOMA-Script\space%
%</driver>
-%<package>\NeedsTeXFormat{LaTeX2e}
-%<package>\ProvidesPackage{tudscrbase}[%
-%<*driver|package>
-%!TUDVersion
+%<package&base>\ProvidesPackage{tudscrbase}[%
+%<*driver|package&base>
+%!TUD@Version
%<package> package
(basics for the bundle)%
]
-%</driver|package>
+%</driver|package&base>
%<*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-base.dtx}
@@ -81,35 +82,93 @@
%
% \selectlanguage{ngerman}
%
-% \changes{v2.02}{2014/06/23}{Unterstützung für \pkg{titlepage} entfernt}^^A
+% \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A
%
% \section{Grundlegende Befehle und Pakete}
%
% Für die Erstellung der Wrapper-Klassen werden die dafür benötigten Pakete
% eingebunden und Steuerungsbefehle definiert.
+% \ToDo{%
+% Schnittstelle ähnlich zu \cs{KOMA@kav@\dots}? Falls ja, dann Löschen von
+% Elemente aus \pkg{etoolbox}-Listen ermöglichen \cs{list(cs)(g/e/x)}rem%
+% }[v2.07]
+% \ToDo{alle benötigten Pakete zur Not mit UnwindqPackage abfangen}[v2.06]
%
-% \StopEventually{\PrintIndex\PrintChanges}
+% \StopEventually{\PrintIndex\PrintChanges\PrintToDos}
%
% \iffalse
+%<*load>
+% \fi
+%
+% \subsection{Laden des Paketes}
+% Die Klassen sowie einige Pakete benötigen das Paket und laden dieses auch.
+% \begin{macrocode}
+\RequirePackage{tudscrbase}[\TUD@Version]
+% \end{macrocode}
+%
+% \iffalse
+%</load>
%<*package>
% \fi
%
% \subsection{Das Paket \pkg{tudscrbase}}
%
-% Das Paket \pkg{scrbase} wird zur Optionsdefinition benötigt.
+% Das Paket \pkg{scrbase} wird zur Optionsdefinition benötigt, \pkg{scrlfile}
+% für verschiedene Hooks vor sowie nach Klassen und Paketen.
+% \ToDo{Patch für \pkg{scrbase} raus}[v3.21]
% \begin{macrocode}
+%<*base>
\RequirePackage{scrbase}[2013/12/19]
+\@ifpackagelater{scrbase}{2016/05/11}{}{%
+ \renewcommand*\test@@ifdimunt[1]{%
+ \@tempswafalse
+ \ifstr{#1}{pt}{\@tempswatrue}{%
+ \ifstr{#1}{pc}{\@tempswatrue}{%
+ \ifstr{#1}{in}{\@tempswatrue}{%
+ \ifstr{#1}{bp}{\@tempswatrue}{%
+ \ifstr{#1}{cm}{\@tempswatrue}{%
+ \ifstr{#1}{mm}{\@tempswatrue}{%
+ \ifstr{#1}{dd}{\@tempswatrue}{%
+ \ifstr{#1}{cc}{\@tempswatrue}{%
+ \ifstr{#1}{sp}{\@tempswatrue}{%
+ \ifstr{#1}{ex}{\@tempswatrue}{%
+ \ifstr{#1}{em}{\@tempswatrue}{%
+ \scr@ifpdfoutput{%
+ \ifstr{#1}{px}{\@tempswatrue}{}%
+ }{}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+%</base>
+%<fontsfix>\RequirePackage{scrlfile}[2013/12/19]
% \end{macrocode}
+% Das Paket \pkg{etoolbox} wird für die Manipulation bereits definierter
+% Makros sowie zur erweiterten Auswertung boolescher Ausdrücke benötigt.
+% \begin{macrocode}
+%<base|fontsfix>\RequirePackage{etoolbox}[2011/01/03]
+% \end{macrocode}
+%
+% \iffalse
+%</package>
+%<*package&base>
+% \fi
+%
% Das Paket \pkg{kvsetkeys} erweitert \pkg{keyval} um die Möglichkeit, das
% Verhalten bei der Angabe eines nicht definierten Schlüssels festzulegen.
% \begin{macrocode}
+\RequirePackage{etexcmds}[2011/02/16]
\RequirePackage{kvsetkeys}[2012/04/25]
% \end{macrocode}
-% Das Paket \pkg{etoolbox} wird für die Manipulation bereits definierter
-% Makros sowie zur erweiterten Auswertung boolescher Ausdrücke benötigt.
-% \begin{macrocode}
-\RequirePackage{etoolbox}[2011/01/03]
-% \end{macrocode}
%
% \subsubsection{Robuster Test auf leeres Argument}
%
@@ -118,7 +177,7 @@
% Leerzeichen). In seiner Syntax ist er identisch zu \cs{ifblank}, allerdings
% expandiert er im Gegensatz zu diesem das gegebene Argument.
% \begin{macrocode}
-\newcommand*\ifxblank{\expandafter\ifblank\expandafter}
+\newcommand*\ifxblank{\ifstr{}}
% \end{macrocode}
% \end{macro}^^A \ifxblank
%
@@ -167,6 +226,58 @@
% \end{macrocode}
% \end{macro}^^A \ifstrbool
%
+% \subsubsection{Test auf Angabe einer Länge}
+%
+% \begin{macro}{\ifxlen}
+% \changes{v2.05}{2016/06/16}{neu}^^A
+% Hiermit kann getestet werden, ob das gegebene Argument einer Länge entspricht.
+% \begin{macrocode}
+\newcommand*\ifxlen[1]{%
+ \begingroup%
+ \protected@edef\@tempa{#1}%
+ \@tempswafalse%
+ \expandafter\ifisdimen\expandafter{\@tempa}{\@tempswatrue}{}%
+ \expandafter\ifisskip\expandafter{\@tempa}{\@tempswatrue}{}%
+ \expandafter\ifisdimexpr\expandafter{\@tempa}{\@tempswatrue}{}%
+ \if@tempswa\edef\@tempa{\the\@tempa}\fi%
+ \expandafter\ifdimen\expandafter{\@tempa}{%
+ \aftergroup\@firstoftwo%
+ }{%
+ \aftergroup\@secondoftwo%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}^^A \iflanguageloaded
+%
+% \subsubsection{Test auf eine verwendbare Sprache}
+%
+% \begin{macro}{\iflanguageloaded}
+% \changes{v2.05}{2015/11/23}{neu}^^A
+% Hiermit kann getestet werden, ob das Argument als Sprache nutzbar ist.
+% \begin{macrocode}
+\newcommand*\iflanguageloaded[1]{%
+ \PackageWarning{tudscrbase}{%
+ Whether package `babel' nor package `polyglossia' has been loaded%
+ }%
+ \expandafter\@secondoftwo%
+}
+\AfterPackage*{babel}{%
+ \renewcommand*\iflanguageloaded[1]{%
+ \@expandtwoargs\in@{,#1,}{,\bbl@loaded,}%
+ \ifin@%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ }%
+}
+\AfterPackage*{polyglossia}{%
+ \renewcommand*\iflanguageloaded[1]{\ifcsdef{#1@loaded}}%
+}
+% \end{macrocode}
+% \end{macro}^^A \iflanguageloaded
+%
% \subsubsection{Expansion geschützter Makros}
%
% Im \LaTeX-Kernel wird der Befehl \cs{@expandtwoargs} definiert, welcher zwei
@@ -191,7 +302,6 @@
% Zahl liefert. Dem wird hier Abhilfe geleistet.
% \begin{macro}{\tud@divide}
% \changes{v2.04}{2015/04/09}{neu}^^A
-% \changes{v2.04}{2015/05/27}{Ausführung in Gruppe}^^A
% Der Befehl erwartet im ersten Argument das Makro, in welches das Ergebnis
% der Division expandiert werden soll, danach folgen Dividend und Divisor. Die
% Berechnung erfolgt in einer Gruppe, damit die benötigten Längenregister nach
@@ -261,16 +371,124 @@
% \end{macrocode}
% \end{macro}^^A \tud@lowerstring
%
+% \subsubsection{Makros zur internen Verwendung}
+%
+% Hier werden Makros definiert, die allein für die interne temporäre Nutzung
+% gedacht sind.
+% \begin{macro}{\tud@reserved}
+% \changes{v2.05}{2015/10/27}{neu}^^A
+% Ein Makro zur temporären Verwendung.
+% \begin{macrocode}
+\newcommand*\tud@reserved{}
+% \end{macrocode}
+% \end{macro}^^A \tud@reserved
+% \begin{macro}{\tud@toks@}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% \begin{macro}{\eaddto@hook}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Es wird ein token-Regsiter reserviert, welches im weiteren Verlauf an allen
+% möglichen Punkten verwendet wird. Mit \cs{eaddto@hook} wird~-- in Ergänzung
+% zu \cs{addto@hook}~-- ein Makro zum Anfügen des expandierten Arguments an ein
+% token-Register bereitgestellt.
+% \begin{macrocode}
+\newtoks\tud@toks@
+\newcommand*\eaddto@hook[2]{%
+ \expandafter\addto@hook\expandafter#1\expandafter{#2}%
+}
+% \end{macrocode}
+% \end{macro}^^A \eaddto@hook
+% \end{macro}^^A \tud@toks@
+%
+% \subsubsection{Ersetzen von Inhalten}
+%
+% \begin{macro}{\tud@replace}
+% \changes{v2.05}{2015/11/01}{neu}^^A
+% Mit diesem Befehl kann in einem gegebenen Makro ein bestimmtes Zeichen durch
+% ein anderes ersetzt werden. Dies wird verwendet, um für Indexbefehle oder
+% Labels die möglicherweise enthaltenen \val{@}-Zeichen zu ersetzen.
+% \begin{macrocode}
+\newcommand*\tud@replace[3]{%
+ \begingroup%
+% \end{macrocode}
+% Zunächst wird \cs{@tempa} als ein durch \cs{@nil} abgegrenztes Makro mit
+% zwei Argumenten definiert, wobei diese durch das im zweiten Argument gegebene
+% \meta{Zeichen} voneinander abgegrenzt werden. Mit diese beiden Argumente wird
+% das Makro \cs{@tempb} aufgerufen.
+% \begin{macrocode}
+ \toks@{\def\@tempa##1}%
+ \eaddto@hook\toks@{\detokenize{#2}}%
+ \addto@hook\toks@{##2\@nil{\@tempb{##1}{##2}}}%
+% \end{macrocode}
+% Der Inhalt von \cs{toks@} ist
+% \cs{def}\cs{@tempa\#1\meta{Zeichen}\#2}\cs{@nil\{\cs{@tempb\{\#1\}\{\#2\}}\}}
+% und definiert \cs{@tempa}.
+% \begin{macrocode}
+ \the\toks@%
+% \end{macrocode}
+% Nun wird \cs{@tempb} definiert. Dieses Makro fügt dem Zielmakro das erste
+% Argumente gefolgt von \meta{Ersatzzeichen} hinzu. Mit dem zweiten Argument
+% wird anschließend \cs{@tempa\#\#2}\cs{@nil} so lange rekursiv aufgerufen, bis
+% es wirklich leer ist, wodurch das zweite Argument \meta{Zeichen} sukzessive
+% durch das dritte Argument \meta{Ersatzzeichen} ersetzt wird.
+% \begin{macrocode}
+ \def\@tempb##1##2{%
+ \IfArgIsEmpty{##2}{%
+ \appto#1{##1}%
+ \let\@tempc\relax%
+ }{%
+ \appto#1{##1#3}%
+ \def\@tempc{\@tempa##2\@nil}%
+ }%
+ \@tempc%
+ }%
+% \end{macrocode}
+% Nachdem die beiden notwendigen Makros definiert wurden, erfolgt jetzt die
+% eigentliche Ersetzung. Dafür wird der Inhalt des Zielmakros als Argument für
+% \cs{@tempa} verwendet. Diesem wird das zu ersetzende Zeichen gefolgt von
+% \cs{@nil} hinzugefügt, um das Argument abschließend zu begrenzen.
+% \begin{macrocode}
+ \toks@{\@tempa}%
+ \edef\@tempc{\expandafter\detokenize\expandafter{#1}}%
+ \eaddto@hook\toks@{\@tempc}%
+ \eaddto@hook\toks@{\detokenize{#2}\@nil}%
+% \end{macrocode}
+% Der Inhalt von \cs{toks@} hat die Form \cs{@tempa\#1\meta{Zeichen}}\cs{@nil},
+% wobei der Inhalt von \meta{\#1} expandiert wird.
+% \begin{macrocode}
+ \def#1{}%
+ \the\toks@%
+ \edef\tud@reserved{%
+ \noexpand\endgroup%
+ \def\noexpand#1{#1}%
+ }%
+ \tud@reserved%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@replace
+%
% \subsubsection{Schlüssel und Parameter für \TUDScript}
%
+% In Anlehnung an \KOMAScript{} werden hier Befehle zur Definition und
+% Ausführung unterschiedlicher Klassenoptionen mithilfe der Funktionen aus
+% dem \pkg{scrbase}-Paket erstellt.
+%
% \begin{macro}{\TUDProcessOptions}
% \begin{macro}{\TUDExecuteOptions}
% \begin{macro}{\TUDoptions}
% \begin{macro}{\TUDoption}
-% \begin{macro}{\TUD@noworlater}
+% Zuerst ein paar Makros zur einfacheren Verwendung.
+% \begin{macrocode}
+\DefineFamily{TUD}
+\newcommand*\TUDProcessOptions{\FamilyProcessOptions{TUD}}
+\newcommand*\TUDExecuteOptions{\FamilyExecuteOptions{TUD}}
+\newcommand*\TUDoptions{\FamilyOptions{TUD}}
+\newcommand*\TUDoption{\FamilyOption{TUD}}
+% \end{macrocode}
+% \end{macro}^^A \TUDoption
+% \end{macro}^^A \TUDoptions
+% \end{macro}^^A \TUDExecuteOptions
+% \end{macro}^^A \TUDProcessOptions
% \begin{macro}{\TUD@key}
-% \begin{macro}{\TUD@@key}
-% \begin{macro}{\TUD@@@key}
% \begin{macro}{\TUD@ifkey}
% \begin{macro}{\TUD@set@ifkey}
% \begin{macro}{\TUD@numkey}
@@ -281,38 +499,18 @@
% \begin{macro}{\TUD@lengthkey}
% \changes{v2.03}{2015/01/09}{neu}^^A
% \begin{macro}{\TUD@set@lengthkey}
+% \begin{macro}{\TUD@set@dimenkey}
+% \changes{v2.05}{2016/06/15}{neu}^^A
% \begin{macro}{\TUD@unknown@keyval}
-% In Anlehnung an \KOMAScript{} werden hier Befehle zur Definition und
-% Ausführung unterschiedlicher Klassenoptionen mithilfe der Funktionen aus
-% dem \pkg{scrbase}-Paket erstellt. Klassenoptionen können entweder als
-% Schalter (\cs{TUD@ifkey}) oder aber mit mehreren möglichen Werten
-% (\cs{TUD@numkey}) definiert werden.
+% Dies sind die Befehle zur Definition der Optionen. Klassenoptionen können
+% entweder als Schalter (\cs{TUD@ifkey}) oder aber mit mehreren möglichen
+% Werten (\cs{TUD@numkey}) definiert werden. Prinzipiell ist auch eine freie
+% Definition mit anschließender Abarbeitung ohne die zuvor genannten Befehle
+% möglich.
% \begin{macrocode}
-\DefineFamily{TUD}
-\newcommand*\TUDProcessOptions{\FamilyProcessOptions{TUD}}
-\newcommand*\TUDExecuteOptions{\FamilyExecuteOptions{TUD}}
-\newcommand*\TUDoptions{\FamilyOptions{TUD}}
-\newcommand*\TUDoption{\FamilyOption{TUD}}
-% \end{macrocode}
-% Hiermit wird die Abarbeitung der Optionen an das Ende der Klasse verzögert.
-% \begin{macrocode}
-\newcommand*\TUD@noworlater{\AtEndOfClass}
-\AtEndOfClass{\let\TUD@noworlater\@firstofone}
-% \end{macrocode}
-% Dies sind die Befehle zur Definition einer Standardoption.
-% \begin{macrocode}
-\newcommand*\TUD@key[2][.\@currname.\@currext]{%
+\newcommand*\TUD@key[1][.\@currname.\@currext]{%
\DefineFamilyMember{TUD}%
- \kernel@ifnextchar[%]
- {\TUD@@key[#1]{#2}}{\TUD@@@key[#1]{#2}}%
-}
-\newcommand*\TUD@@key{}
-\def\TUD@@key[#1]#2[#3]#4{%
- \DefineFamilyKey[#1]{TUD}{#2}[{#3}]{\TUD@noworlater{#4}}%
-}
-\newcommand*\TUD@@@key{}
-\def\TUD@@@key[#1]#2#3{%
- \DefineFamilyKey[#1]{TUD}{#2}{\TUD@noworlater{#3}}%
+ \DefineFamilyKey[#1]{TUD}%
}
% \end{macrocode}
% Dies sind die Befehle zur Definition einer booleschen Option.
@@ -346,12 +544,26 @@
}
\newcommand*\TUD@set@lengthkey{\FamilySetLength{TUD}}
% \end{macrocode}
-% Dieser Befehl wird lediglich pro forma definiert. Derzeit wird er durch
-% \KOMAScript nicht abgearbeitet.
+% Mit \cs{TUD@set@dimenkey} wird der übergebene Längenwert im spezifiezierten
+% Makro gespeichert.
+% \begin{macrocode}
+\newcommand*\TUD@set@dimenkey[3]{%
+ \ifxlen{#3}{%
+ \def#2{#3}%
+ \FamilyKeyStateProcessed%
+ }{%
+ \TUD@unknown@keyval{#1}{#3}{dimens}%
+ }%
+}
+% \end{macrocode}
+% Dieser Befehl wird lediglich pro forma definiert. An diesen kann eine Liste
+% möglicher Wertzuweisungen übergeben werden, welche durch \KOMAScript derzeit
+% jedoch nicht abgearbeitet und ausgegeben wird.
% \begin{macrocode}
\newcommand*\TUD@unknown@keyval{\FamilyUnknownKeyValue{TUD}}
% \end{macrocode}
% \end{macro}^^A \TUD@unknown@keyval
+% \end{macro}^^A \TUD@set@dimenkey
% \end{macro}^^A \TUD@set@lengthkey
% \end{macro}^^A \TUD@lengthkey
% \end{macro}^^A \TUD@set@numkey
@@ -359,14 +571,7 @@
% \end{macro}^^A \TUD@numkey
% \end{macro}^^A \TUD@set@ifkey
% \end{macro}^^A \TUD@ifkey
-% \end{macro}^^A \TUD@@@key
-% \end{macro}^^A \TUD@@key
% \end{macro}^^A \TUD@key
-% \end{macro}^^A \TUD@noworlater
-% \end{macro}^^A \TUDoption
-% \end{macro}^^A \TUDoptions
-% \end{macro}^^A \TUDExecuteOptions
-% \end{macro}^^A \TUDProcessOptions
% \begin{macro}{\TUD@key@lock}
% \begin{macro}{\TUD@std@ifkey@lock}
% \begin{macro}{\TUD@std@numkey@lock}
@@ -402,9 +607,9 @@
% der Option mit \cs{TUDoption} zu einer Sperrung kommt, muss diese folgend
% wieder rückgängig gemacht werden.
% \begin{macrocode}
-\newcommand*\TUD@std@ifkey@lock[2]{%
+\newcommand*\TUD@std@ifkey@lock[3]{%
\ifbool{@tud@#1@locked}{}{%
- \TUDoption{#1}{#2}%
+ \TUD@set@ifkey{#1}{#2}{#3}%
\boolfalse{@tud@#1@locked}%
}%
}
@@ -451,31 +656,54 @@
% \end{macro}^^A \cs@set@lock
% \end{macro}^^A \cs@std@lock
% \end{macro}^^A \cs@lock
+% \begin{macro}{\tud@setbool}
+% \changes{v2.05}{2015/07/03}{neu}^^A
% \begin{macro}{\bool@lock}
% \begin{macro}{\bool@std@lock}
% \begin{macro}{\bool@set@lock}
% Diese Makros dienen in Anlehnung an die vorherigen zum Definieren und Setzen
-% von sperrbaren booleschen Schaltern.
+% von sperrbaren booleschen Schaltern. Dabei wird \cs{tud@setbool} definiert,
+% um nicht nur \val{true} und \val{false} sondern auch alle anderen bekannten
+% booleschen Zuweisungen (\val{yes} und \val{on} sowie \val{no} und \val{off})
+% mit diesen Befehlen verwenden zu können.
% \begin{macrocode}
+\newcommand*\tud@setbool[2]{%
+ \ifstrbool{#2}{\booltrue{#1}}{\boolfalse{#1}}{%
+ \PackageError{tudscrbase}{%
+ `#2' is not a valid boolean expression%
+ }{%
+ You tried to set the boolean switch `\@backslashchar if#1'\MessageBreak%
+ to value `#2' but only `true' `on' and `yes' as well as \MessageBreak%
+ `false' `no' and `off' are valid values.%
+ }%
+ }%
+}
\newcommand*\bool@lock[2][false]{%
\newbool{#2}%
\newbool{#2@locked}%
- \setbool{#2}{#1}%
+ \tud@setbool{#2}{#1}%
}
\newcommand*\bool@std@lock[2]{%
\ifbool{#1@locked}{}{%
- \setbool{#1}{#2}%
+ \tud@setbool{#1}{#2}%
\boolfalse{#1@locked}%
}%
}
\newcommand*\bool@set@lock[2]{%
- \setbool{#1}{#2}%
+ \tud@setbool{#1}{#2}%
\booltrue{#1@locked}%
}
% \end{macrocode}
% \end{macro}^^A \bool@set@lock
% \end{macro}^^A \bool@std@lock
% \end{macro}^^A \bool@lock
+% \end{macro}^^A \tud@setbool
+%
+% \iffalse
+%</package&base>
+%<*package&(base|fontsfix)>
+% \fi
+%
% \begin{macro}{\tud@cmd@store}
% \begin{macro}{\tud@cmd@restore}
% \begin{macro}{\tud@cmd@reset}
@@ -504,6 +732,7 @@
\tud@cmd@check{#1}%
\ifcsdef{@@tud@#1}{}{\csletcs{@@tud@#1}{#1}}%
}
+%<*base>
\newcommand*\tud@cmd@restore[1]{%
\tud@cmd@check{#1}%
\ifcsdef{@@tud@#1}{%
@@ -522,11 +751,12 @@
\newcommand*\tud@cmd@use[1]{%
\tud@cmd@check{#1}%
\ifcsdef{@@tud@#1}{%
- \@nameuse{@@tud@#1}%
+ \csuse{@@tud@#1}%
}{%
- \@nameuse{#1}%
+ \csuse{#1}%
}%
}
+%</base>
% \end{macrocode}
% Dieses Makro dient zum Überprüfen, ob der zu sichernde beziehungsweise
% wiederherzustellende Befehl überhaupt definiert ist. Sollte das nicht der
@@ -534,59 +764,100 @@
% \begin{macrocode}
\newcommand*\tud@cmd@check[1]{%
\ifcsdef{#1}{}{%
- \PackageError{tudscrbase}{%
- `\@backslashchar#1' is not defined%
- }{%
- The command `\@backslashchar#1' was never defined.\MessageBreak%
+ \PackageError{%
+%<base> tudscrbase%
+%<fontsfix> fix-tudscrfonts%
+ }{`\@backslashchar#1' is not defined}{%
+ The command `\@backslashchar#1' was never defined\MessageBreak%
Please contact the TUD-KOMA-Script maintainer\MessageBreak%
via \tudscrmail. A bugfix is urgently required.%
}%
}%
}
% \end{macrocode}
+% Die Befehle \cs{tud@cmd@store} und \cs{tud@cmd@check} werden für das Paket
+% \pkg{fix-tudscrfonts} bereits außerhalb von \pkg{tudscrbase} definiert. Damit
+% deshalb keine Probleme entstehen, werden diese kurzerhand vor dem Laden von
+% \pkg{tudscrbase} undefiniert gesetzt.
+% \begin{macrocode}
+%<*fontsfix>
+\BeforePackage{tudscrbase}{%
+ \undef\tud@cmd@store%
+ \undef\tud@cmd@check%
+}
+%</fontsfix>
+% \end{macrocode}
% \end{macro}^^A \tud@cmd@check
% \end{macro}^^A \tud@cmd@use
% \end{macro}^^A \tud@cmd@update
% \end{macro}^^A \tud@cmd@reset
% \end{macro}^^A \tud@cmd@restore
% \end{macro}^^A \tud@cmd@store
+%
+% \iffalse
+%</package&(base|fontsfix)>
+%<*package&base>
+% \fi
+%
% \begin{macro}{\tud@skip@store}
% \changes{v2.04}{2015/03/02}{neu}^^A
+% \changes{v2.05}{2016/07/13}{Verwendung von \cs{tud@skip@check}}^^A
% \begin{macro}{\tud@skip@restore}
% \changes{v2.04}{2015/03/02}{neu}^^A
+% \changes{v2.05}{2016/07/13}{Verwendung von \cs{tud@skip@check}}^^A
+% \begin{macro}{\tud@skip@reset}
+% \changes{v2.05}{2016/07/13}{neu}^^A
% \begin{macro}{\tud@skip@set}
% \changes{v2.04}{2015/05/05}{neu}^^A
+% \changes{v2.05}{2016/07/13}{Verwendung von \cs{tud@skip@check}}^^A
+% \begin{macro}{\tud@skip@check}
+% \changes{v2.05}{2016/07/13}{neu}^^A
% Hiermit können~-- äquivalent zum Sichern und Wiederherstellen von Befehlen~--
% Längenregister abgespeichert werden.
% \begin{macrocode}
\newcommand*\tud@skip@store[1]{%
- \ifcsdef{@@tud@skip@#1}{}{%
- \@tempswafalse%
- \ifisskip{\csname #1\endcsname}{\@tempswatrue}{}%
- \ifisdimen{\csname #1\endcsname}{\@tempswatrue}{}%
- \if@tempswa%
+ \tud@skip@check{#1}{%
+ \ifcsdef{@@tud@skip@#1}{}{%
\csedef{@@tud@skip@#1}{\expandafter\the\csname #1\endcsname}%
- \fi%
+ }%
}%
}
\newcommand*\tud@skip@restore[1]{%
- \ifcsdef{@@tud@skip@#1}{%
- \csname #1\endcsname=\csname @@tud@skip@#1\endcsname%
- \csundef{@@tud@skip@#1}%
- }{}%
+ \tud@skip@check{#1}{%
+ \ifcsdef{@@tud@skip@#1}{%
+ \csname #1\endcsname=\csname @@tud@skip@#1\endcsname%
+ \csundef{@@tud@skip@#1}%
+ }{}%
+ }%
+}
+\newcommand*\tud@skip@reset[1]{%
+ \tud@skip@check{#1}{%
+ \ifcsdef{@@tud@skip@#1}{%
+ \csname#1\endcsname=\csname @@tud@skip@#1\endcsname%
+ }{}%
+ }%
}
\newcommand*\tud@skip@set[2]{%
- \ifdef{#1}{%
+ \tud@skip@check{#1}{%
+ \expandafter\setlength\csname #1\endcsname{#2}%
+ }%
+}
+\newcommand*\tud@skip@check[1]{%
+ \begingroup%
\@tempswafalse%
- \ifisskip{#1}{\@tempswatrue}{}%
- \ifisdimen{#1}{\@tempswatrue}{}%
+ \expandafter\ifisskip\expandafter{\csname#1\endcsname}{\@tempswatrue}{}%
+ \expandafter\ifisdimen\expandafter{\csname#1\endcsname}{\@tempswatrue}{}%
\if@tempswa%
- \setlength#1{#2}%
+ \aftergroup\@firstofone%
+ \else%
+ \aftergroup\@gobble%
\fi%
- }{}%
+ \endgroup%
}
% \end{macrocode}
+% \end{macro}^^A \tud@skip@check
% \end{macro}^^A \tud@skip@set
+% \end{macro}^^A \tud@skip@reset
% \end{macro}^^A \tud@skip@restore
% \end{macro}^^A \tud@skip@store
% \begin{macro}{\tud@patch@wrn}
@@ -596,7 +867,7 @@
% \begin{macrocode}
\newcommand*\tud@patch@wrn[1]{%
\PackageWarning{tudscrbase}{%
- It wasn't possible to patch `\@backslashchar#1'.\MessageBreak%
+ It wasn't possible to patch `\@backslashchar#1'\MessageBreak%
Please contact the TUD-KOMA-Script maintainer\MessageBreak%
via \tudscrmail. Without a bugfix an\MessageBreak%
erroneous output may occur%
@@ -604,114 +875,212 @@
}
% \end{macrocode}
% \end{macro}^^A \tud@patch@wrn
-% \begin{macro}{\TUD@parameter}
% \begin{macro}{\TUD@parameter@family}
+% \begin{macro}{\TUD@parameter@@family}
% \begin{macro}{\TUD@parameter@checkfamily}
-% Mit \cs{TUD@parameter}\marg{Familienname}\marg{Definitionen} können
+% Mit \cs{TUD@parameter@family}\marg{Familienname}\marg{Definitionen} können
% Schlüssel"=Wert"=Parameter für die optionalen Argumente von Befehle definiert
% werden. Das erste Argument definiert den Familiennamen für den jeweiligen
% Befehl, welcher eindeutig gewählt werden sollte. Dieser wird im Hilfsmakro
-% \cs{TUD@parameter@family} gesichert. Dies soll im Zusammenspiel mit dem
+% \cs{TUD@parameter@@family} gesichert. Dies soll im Zusammenspiel mit dem
% Makro \cs{TUD@parameter@checkfamily} dafür sorgen, dass die im Folgenden
-% bereitgestellten Befehle \cs{TUD@parameter@define}, \cs{TUD@parameter@let},
-% und \cs{TUD@parameter@sethandler}~-- welche die eigentliche Definition der
-% Parameter für den Benutzer bewerkstelligen~-- ohne die Angabe der Familie nur
-% innerhalb des zweiten Argumentes von \cs{TUD@parameter} verwendet werden
-% können.
-% \begin{macrocode}
-\newcommand*\TUD@parameter@family{}%
-\newcommand*\TUD@parameter[2]{%
- \ifxblank{#1}{}{\xdef\TUD@parameter@family{#1}}%
+% bereitgestellten Befehle \cs{TUD@parameter@def}, \cs{TUD@parameter@let} und
+% \cs{TUD@parameter@handler@macro}~-- welche die eigentliche Definition der
+% Parameter für den Benutzer bewerkstelligen~-- ohne die Angabe der Familie
+% nur innerhalb des zweiten Argumentes von \cs{TUD@parameter@family} verwendet
+% werden können.
+% \begin{macrocode}
+\newcommand*\TUD@parameter@@family{}
+\newcommand*\TUD@parameter@family[2]{%
+ \xdef\TUD@parameter@@family{#1}%
#2%
- \global\let\TUD@parameter@family\relax%
+ \gdef\TUD@parameter@@family{}%
}
-\let\TUD@parameter@family\relax%
% \end{macrocode}
% Dieser Befehl prüft, ob eine Familie für den Paramter definiert wurde.
% \begin{macrocode}
-\newcommand*\TUD@parameter@checkfamily[1]{%
- \ifx\TUD@parameter@family\relax%
+\newcommand*\TUD@parameter@checkfamily[2]{%
+ \ifxblank{#1}{%
\PackageError{tudscrbase}{%
- No family for keys given%
+ No family for \@backslashchar#2 defined%
}{%
- You have to use \string#1\space within the\MessageBreak%
- second argument of \string\TUD@parameter. The first \MessageBreak%
- argument of \string\TUD@parameter\space has to be a unique family name.%
+ You have to use \@backslashchar#2\space within the\MessageBreak%
+ second argument of \string\TUD@parameter@family. The first\MessageBreak%
+ argument of \string\TUD@parameter@family\space has to be\MessageBreak%
+ a unique family name. Alternatively, you can specify\MessageBreak%
+ the family name within the optional argument of\MessageBreak%
+ \@backslashchar#2.
}%
- \fi%
+ }{}%
}
% \end{macrocode}
% \end{macro}^^A \TUD@parameter@checkfamily
+% \end{macro}^^A \TUD@parameter@@family
% \end{macro}^^A \TUD@parameter@family
-% \end{macro}^^A \TUD@parameter
-% \begin{macro}{\TUD@parameter@define}
+% \begin{macro}{\TUD@parameter@def}
% \begin{macro}{\TUD@parameter@let}
% \changes{v2.02}{2014/07/25}{Beachtung der gegebenen Standardwerte}^^A
-% \begin{macro}{\TUD@parameter@sethandler}
-% \cs{TUD@parameter@define}\marg{Name}\oarg{Säumniswert}\marg{Verarbeitung}
-% nutzt \cs{define@key} aus dem \pkg{keyval}"=Paket, um einen Schlüssel und
-% dessen Verarbeitung zu definieren, wobei auf den zugewiesenen Wert innerhalb
-% des zweiten obligatorischen Argumentes mit \texttt{\#1} zugegriffen werden
-% kann.
-% \begin{macrocode}
-\newcommand*\TUD@parameter@define[1][]{%
- \ifxblank{#1}{%
- \TUD@parameter@checkfamily{\TUD@parameter@define}%
- \expandafter\define@key\expandafter{\TUD@parameter@family}%
- }{%
- \expandafter\define@key\expandafter{#1}%
- }%
+% \cs{TUD@parameter@def}\marg{Name}\oarg{Säumniswert}\marg{Verarbeitung} nutzt
+% \cs{define@key} aus dem \pkg{keyval}-Paket, um einen Schlüssel und dessen
+% Verarbeitung zu definieren, wobei auf den zugewiesenen Wert innerhalb des
+% zweiten obligatorischen Argumentes mit \val{\#1} zugegriffen werden kann.
+% \begin{macrocode}
+\newcommand*\TUD@parameter@def[1][\TUD@parameter@@family]{%
+ \TUD@parameter@checkfamily{#1}{TUD@parameter@def}%
+ \expandafter\define@key\expandafter{#1}%
}
% \end{macrocode}
% Mit \cs{TUD@parameter@let}\marg{Name}\marg{Name} kann äquivalent zur
% \mbox{\TeX-Primitive \cs{let}} die Definition der Verarbeitung eines
% Parameters auf einen weiteren übertragen werden.
% \begin{macrocode}
-\newcommand*\TUD@parameter@let[3][]{%
- \ifxblank{#1}{%
- \TUD@parameter@checkfamily{\TUD@parameter@let}%
- \@expandtwoargs{\csletcs}{%
- KV@\TUD@parameter@family @#2%
- }{%
- KV@\TUD@parameter@family @#3%
- }%
- \@expandtwoargs{\csletcs}{%
- KV@\TUD@parameter@family @#2@default%
- }{%
- KV@\TUD@parameter@family @#3@default%
- }%
- }{%
- \@expandtwoargs{\csletcs}{KV@#1@#2}{KV@#1@#3}%
- \@expandtwoargs{\csletcs}{KV@#1@#2@default}{KV@#1@#3@default}%
- }%
-}
-% \end{macrocode}
-% Außerdem kann durch \cs{TUD@parameter@sethandler}\marg{Verarbeitung} definiert
-% werden, wie verfahren werden soll, wenn ein optionales Argument im klasischen
-% \LaTeX-Stil und nicht in der Schlüssel"=Wert"=Syntax angegeben wird. Auf das
-% optionale Argument wird ganz normal mit \texttt{\#1} zugegriffen.
-% \begin{macrocode}
-\newcommand*\TUD@parameter@sethandler[1][]{%
- \ifxblank{#1}{%
- \TUD@parameter@checkfamily{\TUD@parameter@sethandler}%
- \expandafter\kv@set@family@handler\expandafter{\TUD@parameter@family}%
- }{%
- \expandafter\kv@set@family@handler\expandafter{#1}%
- }%
+\newcommand*\TUD@parameter@let[3][\TUD@parameter@@family]{%
+ \TUD@parameter@checkfamily{#1}{TUD@parameter@let}%
+ \@expandtwoargs{\csletcs}{KV@#1@#2}{KV@#1@#3}%
+ \@expandtwoargs{\csletcs}{KV@#1@#2@default}{KV@#1@#3@default}%
}
% \end{macrocode}
-% \end{macro}^^A \TUD@parameter@sethandler
% \end{macro}^^A \TUD@parameter@let
-% \end{macro}^^A \TUD@parameter@define
+% \end{macro}^^A \TUD@parameter@def
% \begin{macro}{\TUD@parameter@set}
+% \changes{v2.05}{2016/05/26}{robustere Verarbeitung von Default-Argumenten}^^A
+% \begin{macro}{\TUD@parameter@nokey}
+% \changes{v2.05}{2016/05/26}{neu}^^A
% Mit \cs{TUD@parameter@set}\marg{Familienname}\marg{Parameterliste} wird die
% Verarbeitung aller gegebenen Parameter veranlasst. Normalerweise wird dieser
-% Befehl \emph{nicht} innerhalb des zweiten Argumentes von \cs{TUD@parameter}
+% Befehl \emph{nicht} innerhalb des Argumentes von \cs{TUD@parameter@family}
% verwendet. In jedem Fall muss die zu verwendende Familie angegeben werden.
% \begin{macrocode}
-\newcommand*\TUD@parameter@set[2]{\@expandtwoargs\kvsetkeys{#1}{#2}}
+\newcommand*\TUD@parameter@nokey{@nokey@}
+\newcommand*\TUD@parameter@set[2]{%
+% \end{macrocode}
+% Hierfür wird die angegebene Parameterliste sukzessive abgearbeitet. Elemente,
+% welche in Schlüssel"=Wert"=Syntax angegeben wurden, bleiben unverändert\dots
+% \begin{macrocode}
+ \def\@tempb{}%
+ \def\@tempa##1{%
+ \@expandtwoargs\in@{=}{##1}%
+ \ifin@%
+ \appto\@tempb{##1,}%
+ \else%
% \end{macrocode}
+% \dots ebenso wie Schlüssel ohne Wert, falls diese definiert wurden. Zu
+% beachten ist, dass es mit \cs{TUD@parameter@handler@value} respektive
+% \cs{TUD@parameter@handler@default} auch möglich ist, für einen mit einem der
+% beiden Makros gewählten Schlüssel, lediglich den passenden Wert anzugeben.
+% Dies wird genutzt, um optionale Argumente direkt für den Hauptparameter eines
+% Makros oder einer Umgebung~-- wie beispielsweise für eine Überschrift~--
+% nutzen zu können, aber zusätzlich die Möglichkeit zu bieten, auch eine
+% Parameterliste zu verwenden. Hierfür werden Umlaute sowie das \glq ß\grq{}
+% unschädlich gemacht.
+% \begin{macrocode}
+ \begingroup
+ \let\IeC\@firstofone%
+ \def\"####1{####1e}%
+ \def\ss{ss}%
+ \protected@edef\tud@reserved{%
+ \endgroup%
+ \noexpand\protected@edef\noexpand\@tempc{KV@#1@##1}%
+ }%
+ \tud@reserved%
+ \ifcsdef{\@tempc}{%
+ \appto\@tempb{##1,}%
+ }{%
+ \protected@eappto\@tempb{\TUD@parameter@nokey=##1,}%
+ }%
+ \fi%
+ }%
+ \forcsvlist\@tempa{#2}%
+ \@expandtwoargs\kvsetkeys{#1}{\@tempb}%
+}
+% Ursprünglich entwickelte sich dieser Ansatz aus der Situation, dass das Makro
+% \cs{maketitle} in seiner Standarddefinition ein optionales Argument für eine
+% Seitenzahl bereithält, bei den \TUDScript-Klassen jedoch auch die Möglichkeit
+% besteht, verschiedene zusätzliche Parameter für diesen Befehl zu verwenden.
+% Um allerdings für den Anwender das gewohnte Vorgehen beibehalten zu können,
+% wurde diese Sonderbehandlung implementiert.
+% \end{macrocode}
+% \end{macro}^^A \TUD@parameter@nokey
% \end{macro}^^A \TUD@parameter@set
+% \begin{macro}{\TUD@parameter@handler@macro}
+% \changes{v2.05}{2016/05/26}{robustere Verarbeitung von Default-Argumenten}^^A
+% Durch \cs{TUD@parameter@handler@macro} kann definiert werden, wie mit einem
+% zuvor nicht mit \cs{TUD@parameter@def} definiertem Parameter beziehungsweise
+% gewöhnlichem optionalen Argument umzugehen ist. Dabei wird unterschieden, ob
+% es sich bei dem unbekannten Parameter um ein normales optionales Argument
+% oder um eine Angabe in Schlüssel-Wert-Syntax handelt. Dabei wurden einfache
+% optionale Argumente zuvor durch \cs{TUD@parameter@set} dem Schlüssel
+% \cs{TUD@parameter@nokey} als Wert zugewiesen, um Umlaute etc. ohne Bedenken
+% verwenden zu können.
+%
+% Das erste obligatorische Argument von \cs{TUD@parameter@handler@macro} wird
+% für die Verarbeitung unbekannter Schlüssel-Wert-Paare genutzt, das zweite für
+% einfache optionale Argumente.
+% \begin{macrocode}
+\newcommand*\TUD@parameter@handler@macro[3][\TUD@parameter@@family]{%
+ \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@macro}%
+ \expandafter\kv@set@family@handler\expandafter{#1}{%
+ \ifstr{\kv@key}{\TUD@parameter@nokey}{#3}{#2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \TUD@parameter@handler@macro
+% \begin{macro}{\TUD@parameter@handler@value}
+% \changes{v2.05}{2016/05/26}{neu}^^A
+% Mit diesem Makro wird einem optionalen Argument, welches ohne Schlüssel
+% angegeben wurde, ein expliziter Parameter zugewiesen, welcher damit gesetzt
+% wird. Unbekannte Schlüssel-Wert-Argumente werden durch \cs{kv@handled@false}
+% immer als Fehler zurückgemeldet.
+% \begin{macrocode}
+\newcommand*\TUD@parameter@handler@value[2][\TUD@parameter@@family]{%
+ \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@value}%
+ \protected@edef\@tempa{%
+ \noexpand\TUD@parameter@set{#1}{#2=\noexpand\kv@value}%
+ }%
+ \def\@tempb{\TUD@parameter@handler@macro[#1]{\kv@handled@false}}%
+ \expandafter\@tempb\expandafter{\@tempa}%
+}
+% \end{macrocode}
+% \end{macro}^^A \TUD@parameter@handler@value
+% \begin{macro}{\TUD@parameter@handler@default}
+% Hiermit kann sowohl die zu verwendende Sprache als auch die Anzahl der
+% gewünschten Spalten für bestimmte Umgebungen ohne die explizite Angabe eines
+% Schlüssels festgelegt werden. Momentan betrifft das die beiden Umgebungen
+% \env{abstract} und \env{tudpage} sowie Befehle und Umgebungen, welche auf
+% letzterer basieren. Unbekannte Argumente in Schlüssel-Wert-Syntax werden
+% nicht unterstützt.
+% \begin{macrocode}
+\newcommand*\TUD@parameter@handler@default[2][\TUD@parameter@@family]{%
+ \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@default}%
+ \ifxblank{#2}{%
+ \def\@tempa{\let\tud@reserved\relax}%
+ }{%
+ \def\@tempa{\def\tud@reserved{#2=\kv@value}}%
+ }%
+ \appto\@tempa{%
+ \ifstr{\kv@value}{twocolumn}{\def\kv@value{2}}{}%
+ \ifxnumber{\kv@value}{\def\tud@reserved{columns=\kv@value}}{}%
+ \iflanguageloaded{\kv@value}{\def\tud@reserved{language=\kv@value}}{}%
+ \ifx\tud@reserved\relax%
+ \PackageError{tudscrbase}{%
+ Unknown default value `\kv@value'%
+ }{%
+ If `\kv@value' is a language, you haven't loaded it.\MessageBreak%
+ Otherwise, there's no handler for the given value.\MessageBreak%
+ You should specify a certian key (<key>=\kv@value).
+ }%
+ \fi%
+ }%
+ \protected@eappto\@tempa{%
+ \noexpand\ifx\noexpand\tud@reserved\noexpand\relax\noexpand\else%
+ \noexpand\TUD@parameter@set{#1}{\noexpand\tud@reserved}%
+ \noexpand\fi%
+ }%
+ \def\@tempb{\TUD@parameter@handler@macro[#1]{\kv@handled@false}}%
+ \expandafter\@tempb\expandafter{\@tempa}%
+}
+% \end{macrocode}
+% \end{macro}^^A \TUD@parameter@handler@default
% \begin{macro}{\TUD@parameter@error}
% Das Makro \cs{TUD@parameter@wrn}\marg{Parameter}\marg{Werteliste} gibt für
% den Fall einer ungültigen Wertzuweisung an einen bestimmten \meta{Parameter}
@@ -728,19 +1097,31 @@
%
% \subsubsection{Ausführung von paketspezifischem Quellcode}
%
-% Ab und an ist es notwendig, bestimmten Quelltext erst gezielt nach einem
-% Paket auszuführen.
-% \begin{macro}{\TUD@AfterPackage@Set}
+% Ab und an ist es notwendig, bestimmten Quelltext gezielt in Abhängigkeit vom
+% Ladezustand eines Paketes auszuführen.
+% \begin{macro}{\TUD@UnwindPackage}
+% \changes{v2.05}{2015/10/28}{neu}^^A
+% Dieser Befehl dient zur Ausführung von Quelltext, falls ein Paket bis zum
+% Ende der Dokumentpräambel nicht geladen wurde. Im ersten obligatorischen
+% Argument wird das Paket angegeben, im zweiten der Quellcode.
+% \begin{macrocode}
+\newcommand*\TUD@UnwindPackage[2]{\AtEndPreamble{\@ifpackageloaded{#1}{}{#2}}}
+% \end{macrocode}
+% \end{macro}^^A \TUD@UnwindPackage
+% \begin{macro}{\TUD@AfterPackage@set}
% \changes{v2.04}{2015/03/09}{neu}^^A
-% \begin{macro}{\TUD@AfterPackage}
+% \begin{macro}{\TUD@AfterPackage@do}
% \changes{v2.03}{2015/02/15}{neu}^^A
-% Im ersten Argument wird das Paket angegeben, im zweiten der Quellcode.
+% Mit diesen beiden Befehlen wird die Ausführung von Quellcode erst nach dem
+% Laden des gewünschten Paketes oder~-- falls das Paket geladen wurde~--
+% direkt im Dokument ausgeführt. Im ersten Argument wird das Paket angegeben,
+% im zweiten der Quellcode.
% \begin{macrocode}
-\newcommand*\TUD@AfterPackage@Set[1]{%
+\newcommand*\TUD@AfterPackage@set[1]{%
\newbool{@tud@#1@loaded}%
- \AfterPackage!{#1}{\booltrue{@tud@#1@loaded}}
+ \AfterPackage!{#1}{\booltrue{@tud@#1@loaded}}%
}
-\newcommand*\TUD@AfterPackage[2]{%
+\newcommand*\TUD@AfterPackage@do[2]{%
\ifcsdef{if@tud@#1@loaded}{%
\if@atdocument%
\ifbool{@tud@#1@loaded}{#2}{}%
@@ -748,37 +1129,70 @@
\AfterPackage!{#1}{#2}%
\fi%
}{%
- \PackageError{tudscrbase}{\string\TUD@AfterPackage@Set{#1} missing}{%
- You have to set \string\TUD@AfterPackage@Set{#1} before\MessageBreak%
- the usage of \string\TUD@AfterPackage{#1}{<code>} is\MessageBreak%
+ \PackageError{tudscrbase}{\string\TUD@AfterPackage@set{#1} missing}{%
+ You have to set \string\TUD@AfterPackage@set{#1} before\MessageBreak%
+ the usage of \string\TUD@AfterPackage@do{#1}{<code>} is\MessageBreak%
possible.%
}%
}%
}
% \end{macrocode}
-% \end{macro}^^A \TUD@AfterPackage
-% \end{macro}^^A \TUD@AfterPackage@Set
+% \end{macro}^^A \TUD@AfterPackage@do
+% \end{macro}^^A \TUD@AfterPackage@set
%
% \iffalse
-%</package>
-%<*load>
+%</package&base>
% \fi
%
-% \subsection{Laden des Paketes}
-% Die Klassen benötigen das Paket und laden dieses auch.
+% \begin{macro}{\TUD@KOMAoptions}
+% \changes{v2.05}{2015/07/17}{neu}^^A
+% Dieses Makro wird verwendet, um innerhalb der \TUDScript-Klassen zu
+% unterschieden, wie eine \KOMAScript-Option auszuführen ist. Wurde bereits
+% das Paket \pkg{scrextend} oder eine \KOMAScript-Klasse geladen, erfolgt die
+% Ausführung des Arguments direkt über \cs{KOMAoptions}. Andernfalls wird das
+% angegebene Argument an die zuladende Klasse durchgereicht.
% \begin{macrocode}
-\RequirePackage{tudscrbase}[\TUDVersion]
+%<*package&base>
+\newcommand*\TUD@KOMAoptions[1]{}
+\ifdef{\KOMAClassName}{%
+ \let\TUD@KOMAoptions\KOMAoptions
+}{%
+ \renewcommand*\TUD@KOMAoptions[1]{%
+ \PackageWarning{tudscrbase}{%
+ You should load package `scrextend' right after the\MessageBreak%
+ documentclass. Option \string\TUD@KOMAoptions{`#1'} is gobbled%
+ }%
+ }%
+ \AfterPackage*{scrextend}{\let\TUD@KOMAoptions\KOMAoptions}
+}
+%</package&base>
% \end{macrocode}
+% Nach dem Laden einer \TUDScript-Klasse wird der Befehl so angepasst, dass
+% dieser vor dem Laden der dazugehörigen \KOMAScript-Elternklasse die Optionen
+% einfach durchreicht. Nach dem Laden der Klasse steht dann \cs{KOMAoptions}
+% zur Verfügung.
+% \begin{macrocode}
+%<*load&class>
+%<*!inherit>
+\renewcommand*\TUD@KOMAoptions[1]{\PassOptionsToClass{#1}{\TUD@Class@KOMA}}
+\AfterClass{\TUD@Class@KOMA}{\let\TUD@KOMAoptions\KOMAoptions}
+%</!inherit>
+%<*inherit>
+\renewcommand*\TUD@KOMAoptions[1]{\PassOptionsToClass{#1}{\TUD@Class@Parent}}
+\AfterClass{\TUD@Class@Parent}{\let\TUD@KOMAoptions\KOMAoptions}
+%</inherit>
+%</load&class>
+% \end{macrocode}
+% \end{macro}^^A \TUD@KOMAoptions
%
% \iffalse
-%</load>
%<*class&body>
% \fi
%
% \subsection{Externe Pakete}
%
% \changes{v2.01}{2014/04/24}{Versionsanforderungen bei benötigten Paketen}^^A
-% \changes{v2.02}{2014/07/08}{\pkg{graphics} Warnung bei Verwendung}^^A
+% \changes{v2.02}{2014/07/08}{Warnung bei Verwendung von \pkg{graphics}}^^A
%
% Für die Verwendung der hier erstellten \KOMAScript-Wrapper-Klassen werden
% einige wenige Pakete eingebunden. Dabei wurde versucht, die Anzahl der
@@ -804,9 +1218,9 @@
% \begin{macrocode}
\@ifpackageloaded{graphicx}{}{%
\@ifpackageloaded{graphics}{%
- \ClassWarningNoLine{\TUDClassName}{%
- The package `graphics' was superseded by `graphicx',\MessageBreak%
- which is automatically loaded%
+ \ClassWarningNoLine{\TUD@Class@Name}{%
+ Package `graphics' was superseded by `graphicx',\MessageBreak%
+ which now will be loaded automatically%
}%
}{}%
}%
@@ -815,62 +1229,40 @@
% Mit dem Paket \pkg{tudscrcolor} werden die Befehle für die Auswahl der Farben
% des \CDs definiert, welches wiederum \pkg{xcolor} lädt.
% \begin{macrocode}
- \RequirePackage{tudscrcolor}[\TUDVersion]%
+ \RequirePackage{tudscrcolor}[\TUD@Version]%
}
% \end{macrocode}
%
-% \subsection{Parameter für Umgebungen und mehrspaltige Texte}
+% \subsection{Parameter für mehrspaltige Texte}
%
-% Diese Befehle dienen dazu, bei Umgebungen die Sprache über einen Parameter
-% anzugeben sowie das Paket \pkg{multicol} verwenden zu können.
-% \begin{macro}{\TUD@parameter@defaulthandler}
-% Hiermit kann sowohl die zu verwendende Sprache als auch die Anzahl der
-% gewünschten Spalten für bestimmte Umgebungen ohne die explizite Angabe eines
-% Schlüssels festgelegt werden. Momentan betrifft das die beiden Umgebungen
-% \env{abstract} und \env{tudpage}.
-% \begin{macrocode}
-\newcommand*\TUD@parameter@defaulthandler[2]{%
- \def\@tempa{#2}%
- \@for\@tempb:=\@tempa\do{%
- \ifx\@tempb\@empty\else%
- \ifstr{\@tempb}{twocolumn}{\def\@tempb{2}}{}%
- \ifxnumber{\@tempb}{%
- \TUD@parameter@set{#1}{columns=\@tempb}%
- }{%
- \TUD@parameter@set{#1}{language=\@tempb}%
- }%
- \fi%
- }%
-}
-% \end{macrocode}
-% \end{macro}^^A \TUD@parameter@defaulthandler
-% \begin{macro}{\tud@multicols}
-% \begin{macro}{\tud@multicols@check}
-% Im Makro \cs{tud@multicols} wird die Anzahl der gewünschten Spalten in einer
-% Umgebung für die Verwendung des \pkg{multicol}"=Paketes gespeichert.
+% Diese Befehle dienen dazu, bei Umgebungen oder Befehlen über einen Parameter
+% das Paket \pkg{multicol} verwenden zu können.
+% \begin{macro}{\tud@x@multicol@num}
+% \begin{macro}{\tud@x@multicol@check}
+% Im Makro \cs{tud@x@multicol@num} wird die Anzahl der gewünschten Spalten in
+% einer Umgebung für die Verwendung des \pkg{multicol}-Paketes gespeichert.
% \begin{macrocode}
-\cs@lock{tud@multicols}{1}
+\cs@lock{tud@x@multicol@num}{1}
% \end{macrocode}
-% Der Befehl \cs{tud@multicols@check} prüft, ob das Paket \pkg{multicol}
+% Der Befehl \cs{tud@x@multicol@check} prüft, ob das Paket \pkg{multicol}
% geladen wurde. Falls dies nicht der Fall ist, wird eine Warnung ausgegeben
% und die Änderung des Wertes über einen Parameter der Umgebungen \env{tudpage}
-% repsektive \env{abstract} sowie \env{declarations} über \cs{set@set@lock}
+% respektive \env{abstract} sowie \env{declarations} über \cs{set@set@lock}
% verhindert.
% \begin{macrocode}
-\newcommand*\tud@multicols@check{%
- \ifdef{\multicols}{}{%
- \ifnum\tud@multicols>\@ne\relax%
- \ClassWarning{\TUDClassName}{%
- The option `columns=\tud@multicols' is only supported,\MessageBreak%
- when package `multicol' is loaded%
- }%
- \cs@set@lock{tud@multicols}{1}%
- \fi%
- }%
+\newcommand*\tud@x@multicol@check{%
+ \ifnum\tud@x@multicol@num>\@ne\relax%
+ \ClassWarning{\TUD@Class@Name}{%
+ The option `columns=\tud@x@multicol@num' is only\MessageBreak%
+ supported, when package `multicol' is loaded%
+ }%
+ \cs@set@lock{tud@x@multicol@num}{1}%
+ \fi%
}
+\AfterPackage{multicol}{\renewcommand*\tud@x@multicol@check{\relax}}
% \end{macrocode}
-% \end{macro}^^A \tud@multicols@check
-% \end{macro}^^A \tud@multicols
+% \end{macro}^^A \tud@x@multicol@check
+% \end{macro}^^A \tud@x@multicol@num
%
% \iffalse
%</class&body>
@@ -879,3 +1271,65 @@
% \Finale
%
\endinput
+%
+%
+% \iffalse
+%</package&base>
+% \fi
+%
+% \begin{macro}{\TUD@noworlater}
+% \changes{v2.05}{2015/07/03}{neu implementiert}^^A
+% \begin{macro}{\TUD@noworlater@simple}
+% \changes{v2.05}{2015/07/03}{neu}^^A
+% Hiermit kann die Abarbeitung der Optionen an das Ende der verwendeten
+% Klasse bzw. des Paketes verzögert werden. Aufgrund der Besonderheiten der
+% Befehle \cs{AtEndOfClass} und \cs{AtEndOfPackage} können diese nicht
+% innerhalb von \pkg{tudscrbase} sondern erst außerhalb nach dem Laden
+% definiert werden. Damit keine Probleme dabei auftreten, falls das Paket
+% geladen wird ohne daran anschließend die notwendigen Redefinitionen
+% durchzuführen, werden die beiden Varianten des Befehls \cs{TUD@noworlater}
+% im Paket definiert.
+%
+% Im ersten Argument von \cs{TUD@noworlater} wird einer der wertzuweisenden
+% Befehle für Optionen (\cs{TUD@set@\dots}) erwartet. Dieser wird immer
+% ausgeführt, um ungültige Wertzuweisungen einer Option, welche als globale
+% Klassenoption angegeben wurde, über die \LaTeX-Standardroutine als Warnung
+% auszugeben. Bei der eigentlichen~-- sprich verzögerten~-- Ausführung der
+% Option wird die Wertzuweisung abermals ausgeführt, gefolgt von der im
+% zweiten Argument definierten Abarbeitung dieser.
+% \begin{macrocode}
+%<*package&base>
+\newcommand*\TUD@noworlater[2]{}
+\newcommand*\TUD@noworlater@simple[2]{%
+ \PackageWarning{tudscrbase}{%
+ The content of \string\TUD@noworlater will be executed immediately%
+ }%
+ #1#2%
+}
+\let\TUD@noworlater\TUD@noworlater@simple
+%</package&base>
+% \end{macrocode}
+% Nach dem Laden des Paketes wird geprüft, ob die ursprüngliche Definition
+% des Befehls aus dem Paket noch besteht. Ist dies der Fall, wird der Befehl
+% zur Verzögerung an das Ende der Klasse bzw. des Paketes umdefiniert.
+% \begin{macrocode}
+%<*load>
+\ifx\TUD@noworlater\TUD@noworlater@simple
+%<*class>
+ \renewcommand*\TUD@noworlater[2]{#1\AtEndOfClass{#1#2}}%
+ \AtEndOfClass{\renewcommand*\TUD@noworlater[2]{#1#2}}%
+%</class>
+%<*package>
+ \renewcommand*\TUD@noworlater[2]{#1\AtEndOfPackage{#1#2}}%
+ \AtEndOfPackage{\renewcommand*\TUD@noworlater[2]{#1#2}}%
+%</package>
+\fi
+%</load>
+% \end{macrocode}
+% \end{macro}^^A \TUD@noworlater@simple
+% \end{macro}^^A \TUD@noworlater
+%
+% \iffalse
+%<*package&base>
+% \fi
+% \ No newline at end of file