diff options
author | Karl Berry <karl@freefriends.org> | 2007-10-11 23:46:49 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-10-11 23:46:49 +0000 |
commit | 82dc50c595ce8268fd46c4af7ce77bf20af120d0 (patch) | |
tree | 6c051b86aedada971bc69a4cd18495683df13e8b /Master/texmf-dist/source/latex/koma-script/scrkbase.dtx | |
parent | bc91a8ed9ae14ad4f0805df6c244b55063d69414 (diff) |
koma-script 2.97c (10oct07)
git-svn-id: svn://tug.org/texlive/trunk@5160 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrkbase.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/koma-script/scrkbase.dtx | 582 |
1 files changed, 399 insertions, 183 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx b/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx index 7affc521318..16c56b0e857 100644 --- a/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx +++ b/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx @@ -1,4 +1,4 @@ -% \CheckSum{710} +% \CheckSum{985} % \iffalse meta-comment % ====================================================================== % scrkbase.dtx @@ -58,7 +58,7 @@ %%% From File: scrkbase.dtx %<*driver> % \fi -\ProvidesFile{scrkbase.dtx}[2006/08/20 v2.96 KOMA-Script (basics)] +\ProvidesFile{scrkbase.dtx}[2007/09/17 v2.97c KOMA-Script (basics)] % \iffalse %</driver> %<package&option>\ProvidesPackage{scrkbase}[% @@ -135,23 +135,18 @@ % % \subsection{Anweisungen zur Abarbeitung von Optionen} % -% \begin{macro}{\scr@ifundefined} +% \begin{macro}{\scr@ifundefinedorrelax} % \changes{v2.95c}{2006/08/12}{neu (intern)} +% \changes{v2.97b}{2007/03/08}{vermurkste Logik korrigiert} +% \changes{v2.97c}{2007/04/18}{vermurkste Funktion korrigiert} +% \changes{v2.97c}{2007/04/18}{von \cs{scr@ifundefined} umbenannt} % Dieses Makro arbeitet wie \cs{@ifundefined}, definiert dabei aber % ein undefiniertes Makro nicht als \cs{relax}. Es muss bereits hier definiert % werden, weil es gleich verwendet wird. % \begin{macrocode} \begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname ifcsname\endcsname - \newcommand{\scr@ifundefined}[1]{% - \ifcsname #1\endcsname - \expandafter\@secondoftwo - \else - \expandafter\@firstoftwo - \fi - } -\else - \newcommand{\scr@ifundefined}[1]{% +\expandafter\ifx\csname ifcsname\endcsname\relax + \newcommand{\scr@ifundefinedorrelax}[1]{% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname #1\endcsname\relax \expandafter\@firstoftwo @@ -159,33 +154,22 @@ \expandafter\@secondoftwo \fi } +\else + \newcommand{\scr@ifundefinedorrelax}[1]{% + \ifcsname #1\endcsname + \expandafter\ifx\csname #1\endcsname\relax + \expandafter\expandafter\expandafter\@firstoftwo + \else + \expandafter\expandafter\expandafter\@secondoftwo + \fi + \else + \expandafter\@firstoftwo + \fi + } \fi % \end{macrocode} % \end{macro} % -% \begin{macro}{\DeclareKeyValOption} -% Dieses Makro deklariert alle bisher definierten Schlüssel eines -% Bereichs (erste Argument) als Optionen. Das optionale Argument -% erlaubt außerdem die Deklaration einer -% \cs{DeclareOption*}-Auswertung. \cs{DeclareOption*} darf nicht -% zusammen mit dieser Anweisung verwendet werden. Diese Anweisung darf -% je Paket oder Klasse nur einmal verwendet werden. -% \begin{macrocode} -\newcommand*{\DeclareKeyValOption}[2][% - \ifx\@currext\@clsextension\OptionNotUsed\else\@unkownoptionerror\fi -]{% - \DeclareOption*{% - \def\@tempa##1=##2=##3\@nil{% - \scr@ifundefined{KV@#2@##1}{#1}{% - \@expandtwoargs\setkeys{#2}\CurrentOption - }% - }% - \expandafter\@tempa\CurrentOption==\@nil - }% -} -% \end{macrocode} -% \end{macro} -% % % \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Basis)} % @@ -196,39 +180,31 @@ % Schlüssel jedes anderen Teils ausführen kann -- sobald sie definiert % sind. % -% \begin{macro}{\KOMA@key} -% Einzig, um etwas Tipparbeit zu sparen, wird ein abkürzendes Makro -% definiert: +% \begin{macro}{\KOMA@key} +% \changes{v2.97c}{2007/04/19}{neues optionales Argument} +% \begin{macro}{\KOMA@key@familylist} +% \textsf{keyval}-Schlüssel für \KOMAScript{} werden mit \cs{KOMAkey} +% definiert, damit auch die Familie korrekt gesetzt und ggf. der Liste der +% Familien (\cs{KOMA@key@familylist}) hinzugefügt wird. % \begin{macrocode} -\newcommand*{\KOMA@key}{\define@key{KOMA}} -% \end{macrocode} -% \end{macro} -% -% \subsection{Optionen} -% -% \begin{option}{internalonly} -% \changes{v2.96}{2006/11/26}{neu} -% \begin{macro}{\dont@let@as@internal@defined} -% \changes{2.96}{2006/11/26}{neu (intern)} -% Anweisungen, die mit einem internen und einem Anwendername vorhanden sind, -% können vor dem Anwender optional verborgen werden. -% \begin{macrocode} -\newcommand*{\dont@let@as@internal@defined}{/} -\KOMA@key{internalonly}{% - \begingroup - \@expandtwoargs\in@{#1}\dont@let@as@internal@defined - \expandafter\endgroup - \ifin@\else\g@addto@macro\dont@let@as@internal@defined{#1/}\fi +\newcommand*{\KOMA@key}[1][.\@currname.\@currext]{% + \edef\reserved@a{\noexpand\in@{KOMA#1,}{\KOMA@key@familylist}}\reserved@a + \ifin@\else\xdef\KOMA@key@familylist{\KOMA@key@familylist KOMA#1,}\fi + \define@key{KOMA#1}% } -\DeclareKeyValOption{KOMA} +\newcommand*{\KOMA@key@familylist}{} % \end{macrocode} % \end{macro} -% \end{option} +% \end{macro} % -% \changes{v2.96}{2006/08/20}{Optionen werden abgearbeitet} -% \begin{macrocode} -\ProcessOptions\relax -% \end{macrocode} +% \subsection{Optionen} +% +% Ab Version 2.97c sollen sowohl globale KOMA-Optionen als auch die +% KOMA-Optionen der jeweiligen Datei als auch die normalen Optionen in der +% Reihenfolge ausgeführt werden, in der sie angegeben wurden -- zuerst die +% globalen Optionen, dann die lokalen. Dabei werden nur die Optionen +% verwendet, die auch für das jeweilige Paket bzw. die jeweilige Klasse +% definiert wurden. % % \begin{macro}{\@globaloptionslist} % \changes{v2.96}{2006/11/26}{new} @@ -241,30 +217,145 @@ % Makro definiert. % \begin{macrocode} \newcommand*{\@globaloptionslist}{} -\scr@ifundefined{XKV@classooptionslist}{% - \let\@globaloptionslist\@classoptionslist -}{% - \let\@globaloptionslist\XKV@classoptionslist +\let\@globaloptionslist\@classoptionslist +\scr@ifundefinedorrelax{XKV@classoptionslist}{}{% + \ifx\XKV@classoptionslist\@empty\else + \let\@globaloptionslist\XKV@classoptionslist + \fi } -\@expandtwoargs\in@{,internalonly=}{,\@globaloptionslist} -\ifin@ - \begingroup - \catcode`\=12\catcode`\:=12 - \def\@do@internalonly #1internalonly=#2\@nil{% - \ifx\relax#1\relax\setkeys{KOMA}{internalonly=#2}\fi - \@expandtwoargs\@removeelement{internalonly=#2}\@unusedoptionlist - \@unusedoptionlist +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\KOMAProcessOptions} +% \changes{v2.97c}{2007/04/18}{neu} +% Diese Anweisung führt alle Optionen, sowohl normal deklarierte als auch +% keyval-Optionen eines Pakets bzw. einer Klasse in der Reihenfolge, in der +% sie verwendet wurden aus -- zuerst gloable Optionen, dann lokale +% Optionen. Das entspricht der Verwendung von \cs{ProcessOptions*} mit dem +% Unterschied, dass eben auch die keyval-Optionen abgearbeitet +% werden. keyval-Optionen, die keiner einzelnen Klasse und keinem einzelnen +% Paket zugeordnet werden, werden dabei vor gleichnamigen eigenen +% keyval-Optionen ausgeführt. +% \begin{macrocode} +\newcommand*{\KOMAProcessOptions}[1][KOMA]{% + \let\ds@\@empty + \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \ifx\@currext\@clsextension\else + \@for\CurrentOption:=\@globaloptionslist\do{% + \ifx\CurrentOption\@empty\else + \@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}% + \ifin@ + \@use@ption + \expandafter\let\csname ds@\CurrentOption\endcsname\@empty + \else + \KOMA@optiontest{#1}\CurrentOption{}{% + \@use@ption + \@expandtwoargs\setkeys{#1}% + \CurrentOption + }% + \KOMA@optiontest{#1.\@currname.\@currext}\CurrentOption{}{% + \@use@ption + \@expandtwoargs\setkeys{#1.\@currname.\@currext}% + \CurrentOption + }% + \fi + \fi }% - \expandafter\@for\expandafter\@tempa\expandafter:\expandafter=% - \@globaloptionslist\do{% - \expandafter\@do@internalonly\@tempa\@nil + \fi + \@for\CurrentOption:=\@curroptions\do{% + \@use@ption + \scr@ifundefinedorrelax{ds@\CurrentOption}{% + \KOMA@optiontest{#1}\CurrentOption{% + \KOMA@optiontest{#1.\@currname.\@currext}\CurrentOption{% + \default@ds + }{% + \let\scr@sr@co\CurrentOption + \@expandtwoargs\setkeys{#1.\@currname.\@currext}% + \CurrentOption + \let\CurrentOption\scr@sr@co + }% + }{% + \@expandtwoargs\setkeys{#1}% + \CurrentOption + \KOMA@optiontest{#1.\@currname.\@currext}\CurrentOption{}{% + \@expandtwoargs\setkeys{#1.\@currname.\@currext}% + \CurrentOption + }% + }% + }{% }% - \global\let\@unusedoptionlist\@unusedoptionlist - \endgroup -\fi + }% + \@for\CurrentOption:=\@declaredoptions\do{% + \expandafter\let\csname ds@\CurrentOption\endcsname\relax}% + \let\CurrentOption\@empty + \let\@fileswith@pti@ns\@@fileswith@pti@ns + \AtEndOfPackage{\let\@unprocessedoptions\relax}% +} +\@onlypreamble\KOMA@process@options +\@onlypreamble\KOMAProcessOptions % \end{macrocode} +% \begin{macro}{\KOMA@optiontest} +% \changes{v2.97c}{2007/04/18}{neu (intern)} +% \begin{macro}{\KOMA@pti@ntest} +% \changes{v2.97c}{2007/04/18}{neu (intern)} +% Es werden zwei interne Makros benötigt, um zu testen, ob eine entsprechende +% keyval-Option definiert ist. Grund der Übung ist, dass sowohl das +% Familienargument als auch die Options selbst expandiert werden muss. +% \begin{macrocode} +\newcommand*{\KOMA@optiontest}[2]{% + \edef\reserved@a{\noexpand\KOMA@pti@ntest{#1}#2=\noexpand\@nil}% + \reserved@a +} +\newcommand*{\KOMA@pti@ntest}{} +\def\KOMA@pti@ntest#1#2=#3\@nil{\scr@ifundefinedorrelax{KV@#1@#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\scr@sr@co} +% \changes{v2.96}{2006/08/20}{neu (intern)} +% Da das \texttt{xkeyval}-Paket leider \cs{CurrentOption} vernichtet, das aber +% innerhalb von \cs{ProcessOptions} und \cs{KOMAProcessOptions} nach dem +% Ausführen der Option noch benötigt wird, muss die Anweisung gesichert +% werden. Dafür wird ein Hilfsmakro benötigt. +% \begin{macrocode} +\newcommand*{\scr@sr@co}{} +% \end{macrocode} +% \end{macro} % \end{macro} % +% \begin{option}{internalonly} +% \changes{v2.96}{2006/11/26}{neu} +% \changes{v2.97c}{2007/06/20}{geht auch ohne Argument} +% \begin{macro}{\dont@let@as@internal@defined} +% \changes{2.96}{2006/11/26}{neu (intern)} +% Anweisungen, die mit einem internen und einem Anwendername vorhanden sind, +% können vor dem Anwender optional verborgen werden. Wird kein Argument +% angegeben, so werden alle Anweisungen verborgen. +% \begin{macrocode} +\newcommand*{\dont@let@as@internal@defined}{/} +\newif\if@let@as@internalonly@defined\@let@as@internalonly@definedfalse +\KOMA@key{internalonly}[\relax]{% + \ifx\relax#1\relax + \@let@as@internalonly@definedtrue + \else + \@let@as@internalonly@definedfalse + \begingroup + \@expandtwoargs\in@{#1}\dont@let@as@internal@defined + \expandafter\endgroup + \ifin@\else\g@addto@macro\dont@let@as@internal@defined{#1/}\fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{option} +% +% \changes{v2.96}{2006/08/20}{Optionen werden abgearbeitet} +% \changes{v2.97c}{2007/04/18}{Optionen werden mit \cs{KOMAProcessOptions} +% abgearbeitet} +% \begin{macrocode} +\KOMAProcessOptions\relax +% \end{macrocode} +% % \iffalse %</option> %<*body> @@ -290,11 +381,13 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\let@as@internal@defined} -% \changes{v2.95}{2002/08/19}{neu (intern)} -% \changes{v2.95c}{2006/08/12}{Warnung bei Umdefinierung} -% \changes{v2.96}{2006/11/26}{Herausreichen von internen Makros als -% Benutzermakros kann verhindert werden} +% \begin{macro}{\let@as@internal@defined} +% \changes{v2.95}{2002/08/19}{neu (intern)} +% \changes{v2.95c}{2006/08/12}{Warnung bei Umdefinierung} +% \changes{v2.96}{2006/11/26}{Herausreichen von internen Makros als +% Benutzermakros kann verhindert werden} +% \changes{v2.97c}{2007/06/20}{Herausreichen von internen Makros kann +% generell verhindert werden} % Dieses Makro wird intern verwendet, um dokumentierte Makros mit der % Definition von internen Makros zu versehen, falls sie nicht bereits % definiert oder als nicht zu definieren markiert sind. Der Name des @@ -303,7 +396,11 @@ % \begin{macrocode} \newcommand*{\let@as@internal@defined}[1]{% \begingroup - \@expandtwoargs\in@{/#1/}\dont@let@as@internal@defined + \if@let@as@internalonly@defined + \in@true + \else + \@expandtwoargs\in@{/#1/}\dont@let@as@internal@defined + \fi \expandafter\endgroup \ifin@ \PackageInfo{% @@ -356,13 +453,14 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\ifundefined} +% \begin{macro}{\ifundefinedorrelax} % \changes{v2.95}{2002/08/21}{neu} % \changes{v2.95c}{2006/08/12}{über interne Anweisung definiert} +% \changes{v2.97c}{2007/06/20}{umbenannt von \cs{ifundefined}} % Dieses Makro arbeitet wie \cs{@ifundefined}, definiert dabei aber % ein undefiniertes Makro nicht als \cs{relax}. % \begin{macrocode} -\let@as@internal@defined{ifundefined} +\let@as@internal@defined{ifundefinedorrelax} % \end{macrocode} % \end{macro} % @@ -373,7 +471,7 @@ % ist es ganz nützlich, auch das zu haben. Dieses Makro heißt nicht % \cs{ifdefined}, weil \eTeX\ bereits ein solches Primitiv bietet. % \begin{macrocode} -\scr@ifundefined{ifcsname}{% +\scr@ifundefinedorrelax{ifcsname}{% \newcommand{\ifnotundefined}[1]{% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname #1\endcsname\relax @@ -574,15 +672,17 @@ % \end{macrocode} % \end{macro} % \end{macro} -% -% \begin{macro}{\ifvtex} -% \changes{v2.95}{2002/08/19}{neu} -% \begin{macro}{\scr@ifvtex} -% \changes{v2.95}{2002/08/19}{neu} +% +% \begin{macro}{\ifVTeX} +% \changes{v2.95}{2002/08/19}{neu} +% \changes{v2.97c}{2007/06/20}{umdefiniert von \cs{ifvtex}} +% \begin{macro}{\scr@ifVTeX} +% \changes{v2.95}{2002/08/19}{neu} +% \changes{v2.97c}{2007/06/20}{umdefiniert von \cs{scr@ifvtex}} % If-then-else-Konstrukt, um zu testen, ob V\TeX{} verwendet wird. % \begin{macrocode} -\newcommand{\scr@ifvtex}{\ifnotundefined{VTeXversion}} -\let@as@internal@defined{ifvtex} +\newcommand{\scr@ifVTeX}{\ifnotundefined{VTeXversion}} +\let@as@internal@defined{ifVTeX} % \end{macrocode} % \end{macro} % \end{macro} @@ -603,8 +703,8 @@ % für die Deklaration der Option \texttt{pagesize} benötigt. % \begin{macrocode} \newcommand{\scr@ifpdfoutput}{% - \scr@ifundefined{pdfoutput}{% - \scr@ifundefined{OpMode}{% + \scr@ifundefinedorrelax{pdfoutput}{% + \scr@ifundefinedorrelax{OpMode}{% \expandafter\@secondoftwo% }{% \ifnum\OpMode=1 @@ -667,8 +767,8 @@ % ausgegeben wird oder nicht, Befehle auszuführen. % \begin{macrocode} \newcommand*{\scr@ifdvioutput}{% - \scr@ifundefined{pdfoutput}{% - \scr@ifundefined{OpMode}{% + \scr@ifundefinedorrelax{pdfoutput}{% + \scr@ifundefinedorrelax{OpMode}{% \expandafter\@firstoftwo }{% \ifnum\OpMode=0 @@ -690,22 +790,145 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\scr@smashdp} +% \changes{v2.97c}{2007/09/17}{neu (intern)} +% Gibt Material aus, erzeugt dabei aber nur Höhe und Breite, jedoch keine +% Tiefe. +% \begin{macrocode} +\newcommand*{\scr@smashdp}[1]{% + \begingroup + \def\finsm@sh{\dp\z@\z@\box\z@}% + \smash{#1}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% % % \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Hauptteil)} % -% \begin{macro}{\KOMAoptions} -% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen} -% \begin{macro}{\post@kopt@hook} -% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen} -% \begin{macro}{\AfterKOMAoptions} -% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen} +% \begin{macro}{\KOMAExecuteOptions} +% \changes{v2.97c}{2007/04/19}{neu (nur für Klassen- und Paketautoren)} +% Liste von Optionen ausführen +% \begin{macrocode} +\newcommand*{\KOMAExecuteOptions}[2][KOMA]{% + \def\reserved@a##1\@nil{% + \@for\KOMA@key@atlist:=#2\do{% + \expandafter\KOMA@key@split@name@value\KOMA@key@atlist==\@nil + \scr@ifundefinedorrelax{KV@#1@\KOMA@key@name}{}{% + \edef\reserved@a{\noexpand\setkeys{#1}{\KOMA@key@atlist}% + }% + \reserved@a + }% + \scr@ifundefinedorrelax{KV@#1.\@currname.\@currext @\KOMA@key@name}{}{% + \edef\reserved@a{% + \noexpand\setkeys{#1.\@currname.\@currext}{\KOMA@key@atlist}% + }% + \reserved@a + }% + \let\CurrentOption\KOMA@key@atlist + \csname ds@\CurrentOption\endcsname + }% + \edef\CurrentOption{##1}% + }% + \expandafter\reserved@a\CurrentOption\@nil +} +\@onlypreamble\KOMAExecuteOptions +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\KOMAoptions} +% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen} +% \changes{v2.97c}{2007/04/19}{Optionen aller KOMA-Familien abarbeiten} +% \begin{macro}{\post@kopt@hook} +% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen} +% \begin{macro}{\AfterKOMAoptions} +% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen} % Es werden Schlüssel verwendet und ggf. danach noch Dinge ausgeführt. % \begin{macrocode} \newcommand*{\KOMAoptions}[1]{% \let\post@kopt@hook\@empty - \setkeys{KOMA}{#1}% + \KOMA@options{#1}{% +% Wenn der Schlüssel für keine der bekannten Familien definiert ist, wird ein +% Fehler ausgegeben. +% \begin{macrocode} + \PackageError{scrkbase}{% + unknown KOMA option `\KOMA@key@name'% + }{% + You have used \string\KOMAoptions\space to set + `\KOMA@key@atlist',\MessageBreak + but KOMA-Script does not know any option named + `\KOMA@key@name'.\MessageBreak + See the KOMA-Script manual for more informations about options + and\MessageBreak + their values.% + }% + }% \post@kopt@hook\let\post@kopt@hook\relax } +% \end{macrocode} +% \begin{macro}{\KOMA@options} +% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)} +% Das interne Macro \cs{KOMA@options} macht die eigentliche Arbeit. Das erste +% Argument ist dabei die Liste der Optionen, das zweite Code, der im +% Fehlerfall ausgeführt werden soll. Dabei sind die Makros +% \cs{KOMA@key@atlist}, \cs{KOMA@key@name} und \cs{KOMA@key@value} gültig und +% können verwendet werden. +% +% Anmerkung: Es wird nicht auf \textsf{ykeyval} und den dortigen Befehl +% \cs{setkeys+} gesetzt, weil dieser die Optionen nicht in der Reihenfolge der +% Optionen, sondern in der Reihenfolge der Familien ausführt. Das passt mir +% aber hier gar nicht. +% +% In einer Schleife über alle Optionen werden die Optionen zunächst in Option +% und Wert aufgespaltet. +% \begin{macrocode} +\newcommand*{\KOMA@options}[2]{% + \@for\KOMA@key@atlist:=#1\do{% + \expandafter\KOMA@key@split@name@value\KOMA@key@atlist==\@nil +% \end{macrocode} +% Dann wird in einer Schleife über alle Familien festgestellt, ob die Option +% in einer Familie bekannt ist und ggf. ausgeführt. +% \begin{macrocode} + \KOMA@key@found@false + \@for\@tempa:=\KOMA@key@familylist\do{% + \scr@ifundefinedorrelax{KV@\@tempa @\KOMA@key@name}{}{% + \KOMA@key@found@true + \edef\reserved@a{\noexpand\setkeys{\@tempa}{\KOMA@key@atlist}% + \noexpand\edef\noexpand\@tempa{\@tempa}% + \noexpand\edef\noexpand\KOMA@key@atlist{\KOMA@key@atlist}% + \noexpand\edef\noexpand\KOMA@key@name{\KOMA@key@name}% + \noexpand\edef\noexpand\KOMA@key@value{\KOMA@key@value}% + }% + \reserved@a + }% + }% + \ifKOMA@key@found@\else#2\fi + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifKOMA@key@found@} +% \changes{v2.97c}{2007/04/19}{Neuer Schalter (intern)} +% \begin{macro}{\KOMA@key@atlist} +% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)} +% \begin{macro}{\KOMA@key@name} +% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)} +% \begin{macro}{\KOMA@key@value} +% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)} +% \begin{macro}{\KOMA@key@split@name@value} +% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)} +% \begin{macrocode} +\newif\ifKOMA@key@found@ +\newcommand*{\KOMA@key@atlist}{} +\newcommand*{\KOMA@key@name}{} +\newcommand*{\KOMA@key@value}{} +\newcommand*{\KOMA@key@split@name@value}{} +\def\KOMA@key@split@name@value#1=#2=#3\@nil{% + \def\KOMA@key@name{#1}% + \def\KOMA@key@value{#2}% +} \newcommand*{\post@kopt@hook}{} \let\post@kopt@hook\relax \newcommand*{\AfterKOMAoptions}{% @@ -722,53 +945,38 @@ \post@kopt@hook } % \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{option}{nokey} -% Dies ist in Wirklichkeit kein Schlüssel, sondern eine Fehlermeldung -% für nicht definierte Schlüssel. Er kann jedoch wie ein Schlüssel -% definiert und auch so verwendet werden. +% \begin{macro}{\l@addto@macro} +% \changes{v2.8p}{2001/09/22}{neu (intern)} +% Damit \cs{AfterKOMAoptions} lokal möglich ist, wird eine lokal arbeitende +% Variante von \cs{g@addto@macro} benötigt, wie sie hier vorgestellt wird. +% \changes{v2.95}{2006/06/02}{korrigiert, damit es sich bezüglich +% Erweiterung um Makrodefinitonen mit Argumenten wie \cs{g@addto@macro} +% verhält} % \begin{macrocode} -\KOMA@key{nokey}{% - \PackageError{% - scrkeyval% - }{% - unknown KOMA option `#1'% - }{% - You've tried to use the KOMA option `#1'.\MessageBreak - But there is no KOMA option with that name.\MessageBreak - See the manual of KOMA-Script for information about known KOMA - options.% +\scr@ifundefinedorrelax{unexpanded}{% + \newcommand*{\g@addto@macro@temp}{}% + \newcommand{\l@addto@macro}[2]{% + \begingroup% + \toks@\expandafter{#1#2}% + \xdef\g@addto@macro@temp{\the\toks@}% + \endgroup + \let#1\g@addto@macro@temp }% -}% -% \end{macrocode} -% \end{option} -% -% \begin{option}{noval} -% Dies ist in Wirklichkeit kein Schlüssel, sondern eine Fehlermeldung -% für das Fehlen eines Wertes bei der Verwendung eines Schlüssels ohne -% Defaultwert. Er kann jedoch wie ein Schlüssel definiert und auch so -% verwendet werden. -% \begin{macrocode} -\KOMA@key{noval}{% - \PackageError{% - scrkbase% - }{% - KOMA option `#1' needs a value% - }{% - You've tried to use the KOMA option `#1' without a - value.\MessageBreak - But this option has no default value, so you have to set a - value.\MessageBreak - See the manual of KOMA-Script for information about the option and - all known\MessageBreak - values.% +}{% + \newcommand{\l@addto@macro}[2]{% + \edef#1{\unexpanded\expandafter{#1#2}}% }% -}% +} % \end{macrocode} -% \end{option} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}{\KOMA@unknown@keyval} % Dieses Makro berichtet über Fehler wegen unbekannter Wertübergabe an @@ -901,50 +1109,41 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\KOMA@DeclareObsoleteOption} -% \changes{v2.96}{2006/08/20}{\cs{CurrentOption wir geschützt}} +% \begin{macro}{\KOMA@DeclareObsoleteOption} +% \changes{v2.96}{2006/08/20}{\cs{CurrentOption wir geschützt}} % Mit Hilfe dieses Makros kann eine Option definiert werden, die % eigentlich obsolete ist. Statt dieser Option wird dann ein Schlüssel % verwendet. Das erste Argument ist optional und muss dann entweder % \cs{PackageInfo}, \cs{PackageInfoNoLine}, \cs{PackageWarning} oder % \cs{PackageWarningNoLine} sein. Das zweite Argument ist der Name der % Option. Das dritte Argument ist das Setzen des gewünschten Schlüssels. -% \begin{macro}{\scr@sr@co} -% \changes{v2.96}{2006/08/20}{neu (intern)} -% Da das \texttt{xkeyval}-Paket leider \cs{CurrentOption} vernichtet, das aber -% innerhalb von \cs{ProcessOptions} nach dem Ausführen der Option noch -% benötigt wird, muss die Anweisung gesichert werden. % \begin{macrocode} -\newcommand*{\scr@sr@co}{} \newcommand*{\KOMA@DeclareObsoleteOption}[3][\@gobbletwo]{% - \DeclareOption{#2}{% - \let\scr@sr@co\CurrentOption - \KOMA@UseObsolete{option}{#1}{#2}{#3}% - \let\CurrentOption\scr@sr@co - }% + \DeclareOption{#2}{\KOMA@UseObsoleteOption{#1}{#2}{#3}}% } % \end{macrocode} -% \end{macro} -% \begin{macro}{\KOMA@UseObsolete} -% Die eigentliche Arbeit wird von diesem Makro erledigt. Ob es sich um -% eine Option oder eine Anweisung handelt wird in Argument 1 -% übergeben. Alle anderen Argumente schließen sich daran an. +% \begin{macro}{\KOMA@UseObsoleteOption} +% \changes{v2.97c}{2007/04/19}{neu (intern)} +% Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind +% dieselben. % \begin{macrocode} -\newcommand*{\KOMA@UseObsolete}[4]{% - #2{% - scrkbase% - }{% - You've used the obsolete #1 `#3'.\MessageBreak - \protect\KOMAoptions{#4} will be used instead.\MessageBreak - You should do this change too% +\newcommand*{\KOMA@UseObsoleteOption}[3]{% + \let\scr@sr@co\CurrentOption + #1{scrkbase}{% + You've used obsolete option `#2'.\MessageBreak + \protect\KOMAExecuteOptions{#3} will be\MessageBreak + used instead.\MessageBreak + You may simply replace `#2'\MessageBreak + by `#3'% }% - \KOMAoptions{#4}% + \KOMAExecuteOptions{#3}% + \let\CurrentOption\scr@sr@co } % \end{macrocode} -% \end{macro} -% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\KOMA@newobsoletecommand} +% \begin{macro}{\KOMA@newobsoletecommand} % Mit Hilfe dieses Makros kann ein Makro definiert werden, das % eigentlich obsolete ist. Das Makro verwendet dann schlicht einen % Schlüssel. Das erste Argument ist optional und muss dann entweder @@ -955,10 +1154,27 @@ % \cs{long} und versteht auch keine Argumente. % \begin{macrocode} \newcommand*{\KOMA@newobsoletecommand}[3][\@gobbletwo]{% - \newcommand*{#2}{\KOMA@UseObsolete{command}{#1}{\string#2}{#3}}% + \newcommand*{#2}{\KOMA@UseObsoleteCommand{#1}{\string#2}{#3}}% } % \end{macrocode} -% \end{macro} +% \begin{macro}{\KOMA@UseObsoleteCommand} +% \changes{v2.97c}{2007/04/19}{neu (intern)} +% Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind +% dieselben. +% \begin{macrocode} +\newcommand*{\KOMA@UseObsoleteCommand}[3]{% + #1{% + scrkbase% + }{% + You've used the obsolete command `#2'.\MessageBreak + \protect\KOMAoptions{#3} will be used instead.\MessageBreak + You should also replace `#2' by `\protect\KOMAoptions{#3}'% + }% + \KOMAoptions{#3}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} % % % \iffalse |