diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/tudscr/tudscr-base.dtx | 920 |
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 |