% \CheckSum{291} % \iffalse meta-comment % % ============================================================================ % % TUD-KOMA-Script % Copyright (c) Falk Hanisch , 2012-2015 % % ============================================================================ % % This work may be distributed and/or modified under the conditions of the % LaTeX Project Public License, version 1.3c of the license. The latest % version of this license is in http://www.latex-project.org/lppl.txt and % version 1.3c or later is part of all distributions of LaTeX 2005/12/01 % or later and of this work. This work has the LPPL maintenance status % "author-maintained". The current maintainer and author of this work % is Falk Hanisch. % % ---------------------------------------------------------------------------- % % Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz % in der Version 1.3c, verteilt und/oder 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. % % ============================================================================ % % \fi % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \iffalse %%% From File: tudscr-base.dtx %<*driver> \ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi \ProvidesFile{tudscr-base.dtx}[% 2015/02/12 v2.03 TUD-KOMA-Script\space% % %\NeedsTeXFormat{LaTeX2e}[2011/06/27] %\ProvidesPackage{tudscrbase}[% %<*driver|package> %!TUDVersion % package (basics for the bundle)% ] % %<*driver> \RequirePackage[ngerman=ngerman-x-latest]{hyphsubst} \documentclass[english,ngerman]{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-} \CodelineIndex \RecordChanges \GetFileInfo{tudscr-base.dtx} \begin{document} \maketitle \DocInput{\filename} \end{document} % % \fi % % \selectlanguage{ngerman} % % \changes{v2.02}{2014/06/23}{Unterstützung für \pkg{titlepage} entfernt}%^^A % % \section{Grundlegende Befehle und Pakete} % % Für die Erstellung der Wrapper-Klassen werden die dafür benötigten Pakete % eingebunden und Steuerungsbefehle definiert. % % \StopEventually{\PrintIndex\PrintChanges} % % \iffalse %<*package> % \fi % % \subsection{Das Paket \pkg{tudscrbase}} % % Das Paket \pkg{scrbase} wird zur Optionsdefinition benötigt. % \begin{macrocode} \RequirePackage{scrbase}[2013/12/19] % \end{macrocode} % 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{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} % % \begin{macro}{\ifxblank} % Hiermit kann ein Argument geprüft werden, ob dieses blank ist (leer oder % 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} % \end{macrocode} % \end{macro}^^A \ifxblank % % \subsubsection{Robuster Test auf numerischen Ausdruck} % % \begin{macro}{\ifxnumber} % Dieser Befehl dient zum Testen, ob ein gegebenes Argument eine Zahl ist. % Die Syntax lautet: \cs{ifxnumber}\marg{Argument}\marg{Wahr}\marg{Falsch} % \begin{macrocode} \newcommand*\ifxnumber[1]{% \if\relax\detokenize\expandafter{\romannumeral-0#1}\relax% \expandafter\@firstoftwo% \else% \expandafter\@secondoftwo% \fi% } % \end{macrocode} % \end{macro}^^A \ifxnumber % % \subsubsection{Test auf booleschen Ausdruck in Form eines Strings} % % \begin{macro}{\ifstrbool} % \changes{v2.03}{2015/01/09}{neu}%^^A % Dieser Befehl dient zum Testen, ob ein gegebener String als boolescher % Ausdruck interpretiert werden kann. Ist der String als \enquote{wahr} % interpretierbar, wird das zweite Argument ausgeführt. Kann der String als % \enquote{falsch} angesehen werden, dementsprechen das dritte. Ist der String % kein logischer Wert, kommt das letzte Argument zum Tragen. Die Syntax lautet: % \cs{ifstrbool}\marg{Argument}\marg{Wahr}\marg{Falsch}\marg{Andernfalls} % \begin{macrocode} \newcommand*\ifstrbool[4]{% \ifstr{#1}{true}{#2}{% \ifstr{#1}{on}{#2}{% \ifstr{#1}{yes}{#2}{% \ifstr{#1}{false}{#3}{% \ifstr{#1}{no}{#3}{% \ifstr{#1}{off}{#3}{% #4% }% }% }% }% }% }% } % \end{macrocode} % \end{macro}^^A \ifstrbool % % \subsubsection{Schlüssel und Parameter für die Wrapper-Klassen} % % \begin{macro}{\TUDProcessOptions} % \begin{macro}{\TUDExecuteOptions} % \begin{macro}{\TUDoptions} % \begin{macro}{\TUDoption} % \begin{macro}{\TUD@noworlater} % \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} % \begin{macro}{\TUD@numkey@bool} % \changes{v2.03}{2015/01/09}{neu}%^^A % \begin{macro}{\TUD@set@numkey} % \changes{v2.02}{2014/11/05}{neu}%^^A % \begin{macro}{\TUD@lengthkey} % \changes{v2.03}{2015/01/09}{neu}%^^A % \begin{macro}{\TUD@set@lengthkey} % \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. % \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]{% \DefineFamilyMember{TUD}% \kernel@ifnextchar[%] {\TUD@@key[#1]{#2}}{\TUD@@@key[#1]{#2}}% } \def\TUD@@key[#1]#2[#3]#4{% \DefineFamilyKey[#1]{TUD}{#2}[{#3}]{\TUD@noworlater{#4}}% } \def\TUD@@@key[#1]#2#3{% \DefineFamilyKey[#1]{TUD}{#2}{\TUD@noworlater{#3}}% } % \end{macrocode} % Dies sind die Befehle zur Definition einer booleschen Option. % \begin{macrocode} \newcommand*\TUD@ifkey[1][.\@currname.\@currext]{% \DefineFamilyMember{TUD}% \FamilyBoolKey[#1]{TUD}% } \newcommand*\TUD@set@ifkey{\FamilySetBool{TUD}} % \end{macrocode} % Dies sind die Befehle zur Definition einer Option mit definierten Werten. % \begin{macrocode} \newcommand*\TUD@numkey[1][.\@currname.\@currext]{% \DefineFamilyMember{TUD}% \FamilyNumericalKey[#1]{TUD}% } % \end{macrocode} % Um Dopplungen im Code zu vermeiden, werden für die numerische Schlüssel die % booleschen Standardwertzuweisungen in einem Makro gespeichert. % \begin{macrocode} \newcommand*\TUD@numkey@bool{% {false}{0},{off}{0},{no}{0},{true}{1},{on}{1},{yes}{1}% } \newcommand*\TUD@set@numkey{\FamilySetNumerical{TUD}} % \end{macrocode} % Dies sind die Befehle zur Definition einer Option zur Festlegung einer Länge. % \begin{macrocode} \newcommand*\TUD@lengthkey[1][.\@currname.\@currext]{% \DefineFamilyMember{TUD}% \FamilyLengthKey[#1]{TUD}% } \newcommand*\TUD@set@lengthkey{\FamilySetLength{TUD}} % \end{macrocode} % Dieser Befehl wird lediglich pro forma definiert. Derzeit wird er durch % \KOMAScript nicht abgearbeitet. % \begin{macrocode} \newcommand*\TUD@unknown@keyval{\FamilyUnknownKeyValue{TUD}} % \end{macrocode} % \end{macro}^^A \TUD@unknown@keyval % \end{macro}^^A \TUD@set@lengthkey % \end{macro}^^A \TUD@lengthkey % \end{macro}^^A \TUD@set@numkey % \end{macro}^^A \TUD@numkey@bool % \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} % \begin{macro}{\TUD@set@ifkey@lock} % \begin{macro}{\TUD@set@numkey@lock} % Da sich die Klassenoptionen teilweise selbst gegenseitig beeinflussen oder % aber in bestimmten Fällen eine Option in Abhängigkeit von einer anderen % unterschiedliche Standardwerte annehmen soll, wird dafür eine Möglichkeit % geschaffen. Dabei kann der Nutzer jederzeit einen von einer Option abhängigen % Standardwert einer Klassenoption überschreiben. Die Klassenoptionen selber % werden intern mit dem Befehl \cs{TUD@key@lock} definiert und die Standardwerte % sowie deren Manipulation innerhalb der Optionen mit \cs{TUD@std@ifkey@lock} % bzw. \cs{TUD@std@numkey@lock} gesetzt. Mit \cs{TUD@set@ifkey@lock} und % \cs{TUD@set@numkey@lock} werden bei der expliziten Anwendung einer Option % durch den Nutzer die entsprechenden Werte geändert und gegen ein internes % Überschreiben gesperrt. % \begin{macrocode} \newcommand*\TUD@key@lock[2][.\@currname.\@currext]{% % \end{macrocode} % Basierend auf dem Namen des Schalters wird die notwendige, boolesche Variable % erzeugt (\cs{if@tud@\meta{Schaltername}@lock}), welche im Falle des direkten % Aufrufs des Schlüssels durch den Anwender, ein internes Überschreiben % verhindert. % \begin{macrocode} \newbool{@tud@#2@locked}% \TUD@key[{#1}]{#2}% } % \end{macrocode} % Es kann intern über \cs{if\meta{Schaltername}@lock} geprüft werden, ob einem % mit Schlüssel, der mit \cs{TUD@key@lock} definiert wurde, durch den Anwender % ein explizites Verhalten zugewiesen wurde. Sollte dies nicht der Fall sein, % kann dieser hiermit intern beliebig angepasst werden. Da es durch das Setzen % 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]{% \ifbool{@tud@#1@locked}{}{% \TUDoption{#1}{#2}% \boolfalse{@tud@#1@locked}% }% } \newcommand*\TUD@set@ifkey@lock[1]{% \booltrue{@tud@#1@locked}% \TUD@set@ifkey{#1}% } \let\TUD@std@numkey@lock\TUD@std@ifkey@lock \newcommand*\TUD@set@numkey@lock[1]{% \booltrue{@tud@#1@locked}% \TUD@set@numkey{#1}% } % \end{macrocode} % \end{macro}^^A \TUD@set@numkey@lock % \end{macro}^^A \TUD@set@ifkey@lock % \end{macro}^^A \TUD@std@numkey@lock % \end{macro}^^A \TUD@std@ifkey@lock % \end{macro}^^A \TUD@key@lock % \begin{macro}{\cs@lock} % \begin{macro}{\cs@std@lock} % \begin{macro}{\cs@set@lock} % Mit \cs{cs@lock}\marg{Name}\marg{Definition} kann ein Befehl definiert % werden, welcher intern nur mit \cs{cs@std@lock}\marg{Name}\marg{Definition} % geschrieben wird, wenn nicht über eine entsprechende Option ein explizites % Verhalten mit \cs{cs@set@lock}\marg{Name}\marg{Definition} zugewiesen wurde. % Dies ist äquivalent zu \cs{TUD@std@ifkey@lock} und \cs{TUD@set@ifkey@lock} % bzw. \cs{TUD@std@numkey@lock} und \cs{TUD@set@numkey@lock} % \begin{macrocode} \newcommand*\cs@lock[2]{% \csdef{#1}{#2}% \newbool{#1@locked}% } \newcommand*\cs@std@lock[2]{% \ifbool{#1@locked}{}{% \csdef{#1}{#2}% \boolfalse{#1@locked}% }% } \newcommand*\cs@set@lock[2]{% \csdef{#1}{#2}% \booltrue{#1@locked}% } % \end{macrocode} % \end{macro}^^A \cs@set@lock % \end{macro}^^A \cs@std@lock % \end{macro}^^A \cs@lock % \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. % \begin{macrocode} \newcommand*\bool@lock[2][false]{% \newbool{#2}% \newbool{#2@locked}% \setbool{#2}{#1}% } \newcommand*\bool@std@lock[2]{% \ifbool{#1@locked}{}{% \setbool{#1}{#2}% \boolfalse{#1@locked}% }% } \newcommand*\bool@set@lock[2]{% \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 % \begin{macro}{\tud@cmd@store} % \begin{macro}{\tud@cmd@reset} % \begin{macro}{\tud@cmd@use} % \begin{macro}{\tud@cmd@restore} % \begin{macro}{\tud@cmd@check} % \changes{v2.03}{2015/01/09}{neu}%^^A % Mit diesen Befehlen wird es möglich, Originalbefehle sichern, nutzen und % wiederherstellen zu können. Dies wird benötigt, um zwischen den einzelnen % Layouts über Optionseinstellungen zu wechseln und dabei von einem definierten % Anfangszustand auszugehen. % % Mit dem Aufruf \cs{tud@cmd@store}\marg{Befehlsname} wird der angegebene % Befehl in einem neuen Makro \cs{@@tud@\meta{Befehlsname}} gespeichert. Dieser % kann danach beliebig angepasst werden. Soll der Befehl zu einem späteren % Zeitpunkt auf den Orginalzustand zurücksetzen, kann hierfür jederzeit der % Befehl \cs{tud@cmd@reset}\marg{Befehlsname} verwendet werden. Durch das Makro % \cs{tud@cmd@restore}\marg{Befehlsname} wird das mit \cs{tud@cmd@store} % erstellte Hilfsmakro zusätzlich noch gelöscht. Der Originalbefehl kann als % solcher mit \cs{tud@cmd@use}\marg{Befehlsname} weiterhin genutzt werden. % \begin{macrocode} \newcommand*\tud@cmd@store[1]{% \ifcsdef{@@tud@#1}{}{% \tud@cmd@check{#1}% \csletcs{@@tud@#1}{#1}% }% } \newcommand*\tud@cmd@reset[1]{% \ifcsdef{@@tud@#1}{% \tud@cmd@check{#1}% \csletcs{#1}{@@tud@#1}% }{}% } \newcommand*\tud@cmd@restore[1]{% \ifcsdef{@@tud@#1}{% \tud@cmd@check{#1}% \csletcs{#1}{@@tud@#1}% \csundef{@@tud@#1}% }{}% } \newcommand*\tud@cmd@use[1]{% \ifcsdef{@@tud@#1}{% \@nameuse{@@tud@#1}% }{% \tud@cmd@check{#1}% \@nameuse{#1}% }% } % \end{macrocode} % Dieses Makro dient zum Überprüfen, ob der zu sichernde beziehungsweise % wiederherzustellende Befehl überhaupt definiert ist. Sollte das nicht der % Fall sein, wird ein Fehler ausgegeben. % \begin{macrocode} \newcommand*\tud@cmd@check[1]{% \ifcsdef{#1}{}{% \PackageError{tudscrbase}{% `\@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} % \end{macro}^^A \tud@cmd@check % \end{macro}^^A \tud@cmd@restore % \end{macro}^^A \tud@cmd@use % \end{macro}^^A \tud@cmd@reset % \end{macro}^^A \tud@cmd@store % \begin{macro}{\tud@patch@wrn} % Dieses Makro wird verwendet, wenn mit den Mitteln von \pkg{etoolbox} bereits % vorhandene Befehle angepasst werden sollen (\cs{apptocmd}, \cs{pretocmd}, % \cs{patchcmd}) und dies nicht gelingt. % \begin{macrocode} \newcommand*\tud@patch@wrn[1]{% \PackageWarning{tudscrbase}{% 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% }% } % \end{macrocode} % \end{macro}^^A \tud@patch@wrn % \begin{macro}{\TUD@parameter} % \begin{macro}{\TUD@parameter@family} % \begin{macro}{\TUD@parameter@checkfamily} % Mit \cs{TUD@parameter}\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 % 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}}% #2% \global\let\TUD@parameter@family\relax% } \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% \PackageError{tudscrbase}{% No family for keys given. }{% 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. }% \fi% } % \end{macrocode} % \end{macro}^^A \TUD@parameter@checkfamily % \end{macro}^^A \TUD@parameter@family % \end{macro}^^A \TUD@parameter % \begin{macro}{\TUD@parameter@define} % \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}% }% } % \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}% }% } % \end{macrocode} % \end{macro}^^A \TUD@parameter@sethandler % \end{macro}^^A \TUD@parameter@let % \end{macro}^^A \TUD@parameter@define % \begin{macro}{\TUD@parameter@set} % 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} % verwendet. In jedem Fall muss die zu verwendende Familie angegeben werden. % \begin{macrocode} \newcommand*\TUD@parameter@set[2]{\@expandtwoargs\kvsetkeys{#1}{#2}} % \end{macrocode} % \end{macro}^^A \TUD@parameter@set % \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} % eine Warnung mit einem entsprechenden Hinweis auf gültige Werte innerhalb von % \meta{Werteliste} aus. % \begin{macrocode} \newcommand*\TUD@parameter@error[2]{% \PackageError{tudscrbase}{Unsupported value for parameter `#1'}{% `#1' can only be used with values:\MessageBreak#2% }% } % \end{macrocode} % \end{macro}^^A \TUD@parameter@error % % \iffalse % %<*load> % \fi % % \subsection{Laden des Paketes} % Die Klassen benötigen das Paket und laden dieses auch. % \begin{macrocode} \RequirePackage{tudscrbase}[\TUDVersion] % \end{macrocode} % % \iffalse % %<*execute> % \fi % % \subsection{Durchreichen von Optionen und Standardoptionen} % % Durchreichen aller Klassenoptionen an die \KOMAScript-Klasse bzw. an die % genutzte \TUDScript-Elternklasse. % \begin{macrocode} %<*!inherit> \DeclareOption*{\PassOptionsToClass{\CurrentOption}{\scrcls@name}} % %<*inherit> \DeclareOption*{\PassOptionsToClass{\CurrentOption}{\tudinh@name}} % % \end{macrocode} % Es werden die Standardoptionen ausgeführt. Die Ausführung selbst wird durch % den Befehl \cs{TUD@noworlater} innerhalb von \cs{TUD@key} auf das Ende der % \KOMAScript-Klasse verzögert. % \begin{macrocode} %<*!inherit> \TUDExecuteOptions{cd,cdfont,tudbookmarks} % \TUDProcessOptions\relax % \end{macrocode} % Die korrespindierende \KOMAScript-Klasse bzw. \TUDScript-Elternklasse wird % geladen. % \begin{macrocode} %<*!inherit> \LoadClass{\scrcls@name}[2013/12/19] % %<*inherit> \LoadClass{\tudinh@name} % % \end{macrocode} % % \iffalse %<*!inherit> % \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 % % Für die Verwendung der hier erstellten \KOMAScript-Wrapper-Klassen werden % einige wenige Pakete eingebunden. Dabei wurde versucht, die Anzahl der % Pakete möglichst gering zu halten und nur die wirklich notwendigen zu % verwenden. % % Die \env{abstract}-Umgebung wird im Vergleich zu den \KOMAScript-Klassen % stark erweitert. Für diese sowie für die Umgebungen \env{declarations} und % \env{tudpage} wird das Paket \pkg{environ} für die Umgebungsdefinition % benötigt. % \begin{macrocode} \RequirePackage{environ}[2013/04/01] % \end{macrocode} % Es folgen die Pakete, welche bei Bedarf am Ende der Präambel geladen werden. % \begin{macrocode} \AtEndPreamble{% % \end{macrocode} % Mit \pkg{graphicx} werden die Logos der TU~Dresden sowie von Dresden Concept % mit dem Befehl \cs{includegraphics} u.\,a. auf der Titelseite eingebunden. % Sollte lediglich das \pkg{graphics}-Paket geladen worden sein, so wird der % Nutzer mit einer Warnung informiert, dass das \pkg{graphicx}-Paket zusätzlich % geladen wird. % \begin{macrocode} \@ifpackageloaded{graphicx}{}{% \@ifpackageloaded{graphics}{% \ClassWarningNoLine{\tudcls@name}{% The package `graphics' was superseded by `graphicx'% }% }{}% }% \RequirePackage{graphicx}[1999/02/16]% % \end{macrocode} % 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]% } % \end{macrocode} % % \iffalse % % % \fi % % \Finale % \endinput