summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-10-11 23:46:49 +0000
committerKarl Berry <karl@freefriends.org>2007-10-11 23:46:49 +0000
commit82dc50c595ce8268fd46c4af7ce77bf20af120d0 (patch)
tree6c051b86aedada971bc69a4cd18495683df13e8b /Master/texmf-dist/source/latex/koma-script/scrkbase.dtx
parentbc91a8ed9ae14ad4f0805df6c244b55063d69414 (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.dtx582
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