summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-03-07 18:05:27 +0000
committerKarl Berry <karl@freefriends.org>2007-03-07 18:05:27 +0000
commit1c15eb0bc227a081215bf372a3756aadc4d19d09 (patch)
tree512213f86181e4a6b05eab611fd4a84f334fc27a /Master/texmf-dist/source/latex/koma-script/scrkbase.dtx
parentf20e65ef1cfe5fc288f66e7af8abc8477511b36a (diff)
koma-script update (5mar07)
git-svn-id: svn://tug.org/texlive/trunk@4009 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.dtx577
1 files changed, 252 insertions, 325 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx b/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx
index 894dea90cd6..7affc521318 100644
--- a/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx
+++ b/Master/texmf-dist/source/latex/koma-script/scrkbase.dtx
@@ -1,8 +1,8 @@
-% \CheckSum{819}
+% \CheckSum{710}
% \iffalse meta-comment
% ======================================================================
% scrkbase.dtx
-% Copyright (c) Markus Kohm, 2002-2006
+% Copyright (c) Markus Kohm, 2002-2007
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
@@ -20,7 +20,7 @@
% This work consists of all files listed in manifest.txt.
% ----------------------------------------------------------------------
% scrkbase.dtx
-% Copyright (c) Markus Kohm, 2002-2006
+% Copyright (c) Markus Kohm, 2002-2007
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3b, verteilt und/oder veraendert werden.
@@ -58,7 +58,7 @@
%%% From File: scrkbase.dtx
%<*driver>
% \fi
-\ProvidesFile{scrkbase.dtx}[2006/03/29 v1.0 KOMA-Script (basics)]
+\ProvidesFile{scrkbase.dtx}[2006/08/20 v2.96 KOMA-Script (basics)]
% \iffalse
%</driver>
%<package&option>\ProvidesPackage{scrkbase}[%
@@ -109,14 +109,6 @@
% \StopEventually{\PrintIndex\PrintChanges}
%
% \iffalse
-%<*option>
-% \fi
-%
-% \subsection{Optionen}
-% Derzeit gibt es keine Optionen in diesem Bereich.
-%
-% \iffalse
-%</option>
%<*load>
% \fi
%
@@ -129,142 +121,154 @@
%
% \iffalse
%</load>
-%<*body>
+%<*option>
% \fi
%
% \subsection{Laden von \textsf{keyval}}
%
-% Die Überschrift ist reine Tiefstapelei. Hier wird nicht nur das
-% Paket geladen, was ruckzuck mit:
+% Hier wird nicht nur das Paket geladen, was ruckzuck mit:
% \begin{macrocode}
\RequirePackage{keyval}
% \end{macrocode}
% erledigt ist.
%
-% Im Anschluss an das Laden des Pakets werden auch noch diverse
-% Makros des Pakets umdefiniert. Diese Umdefinitionen wurden von mir
-% für das Paket vorgeschlagen, sind bisher\footnote{2002-07-06} aber
-% nicht realisiert (siehe dazu die \LaTeX{} Bugreport Database).
%
-% Um Probleme zu vermeiden, wird jeweils getestet, dass die
-% Originaldefinition nicht inzwischen geändert wurde. Das bläht zwar
-% den Code auf, ist aber besser so.
+% \subsection{Anweisungen zur Abarbeitung von Optionen}
%
-% \begin{macro}{\KV@split}
-% Dieses Makro nimmt die Aufteilung in Schlüsselname und Argument
-% vor. Außerdem ruft es dann die Schlüsseldefinition auf oder gibt bei
-% fehlendem Schlüssel einen Fehler aus. Zunächst wird die Definition
-% getestet. Das geht aufgrund des Aufbaus nicht direkt mit
-% \cs{CheckCommand}. Aber es geht mit einem internen Makro, das auch
-% von \cs{CheckCommand} verwendet wird.
-% \begin{macrocode}
-\begingroup
- \def\@tempa#1=#2=#3\relax{%
- \KV@@sp@def\@tempa{#1}%
- \ifx\@tempa\@empty\else
- \expandafter\let\expandafter\@tempc
- \csname\KV@prefix\@tempa\endcsname
- \ifx\@tempc\relax
- \KV@errx
- {\@tempa\space undefined}%
- \else
- \ifx\@empty#3\@empty
- \KV@default
- \else
- \KV@@sp@def\@tempb{#2}%
- \expandafter\@tempc\expandafter{\@tempb}\relax
- \fi
- \fi
- \fi}
- \@check@eq\KV@split\@tempa
-\endgroup
-% \end{macrocode}
-% Dann wird es umdefiniert, wobei erstmal alles wie zuvor bleibt:
-% \begin{macrocode}
-\def\KV@split#1=#2=#3\relax{%
- \KV@@sp@def\@tempa{#1}%
- \ifx\@tempa\@empty\else
- \expandafter\let\expandafter\@tempc
- \csname\KV@prefix\@tempa\endcsname
- \ifx\@tempc\relax
-% \end{macrocode}
-% Bis wir zum Fehlerfall kommen. Hier erlauben wir jedem Paket seine
-% eigenen Fehlermeldungen:
-% \begin{macrocode}
- \scr@KV@errx{\@tempa}%
-% \end{macrocode}
-% Danach wieder wie gehabt:
+% \begin{macro}{\scr@ifundefined}
+% \changes{v2.95c}{2006/08/12}{neu (intern)}
+% 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
- \ifx\@empty#3\@empty
- \KV@default
- \else
- \KV@@sp@def\@tempb{#2}%
- \expandafter\@tempc\expandafter{\@tempb}\relax
- \fi
+ \expandafter\@firstoftwo
+ \fi
+ }
+\else
+ \newcommand{\scr@ifundefined}[1]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname #1\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
\fi
- \fi}
+ }
+\fi
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\KV@default}
-% Dieses Makro ruft den Default-Wert ab oder gibt einen Fehler
-% aus. Zunächst wieder der Test. Diesmal aber direkt mit
-% \cs{CheckCommand}:
+% \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}
-\CheckCommand*{\KV@default}{%
- \expandafter\let\expandafter\@tempb
- \csname\KV@prefix\@tempa @default\endcsname
- \ifx\@tempb\relax
- \KV@err{No value specified for \@tempa}%
- \else
- \@tempb\relax
- \fi}
+\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}
-% Danach wird wieder umdefiniert, wobei wieder nur die
-% Fehlergeschichte geändert wird:
+% \end{macro}
+%
+%
+% \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Basis)}
+%
+% Üblicherweise verwendet \KOMAScript{} für alle
+% \textsf{keyval}-Schlüssel die gleiche Bereichskennung
+% "`\texttt{KOMA}"'. Dadurch ist es möglich, dass Pakete die Schlüssel
+% der Klassen umdefinieren und dass jeder Teil von \KOMAScript{} die
+% 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{macrocode}
-\renewcommand*{\KV@default}{%
- \expandafter\let\expandafter\@tempb
- \csname\KV@prefix\@tempa @default\endcsname
- \ifx\@tempb\relax
- \scr@KV@err{\@tempa}%
- \else
- \@tempb\relax
- \fi}
+\newcommand*{\KOMA@key}{\define@key{KOMA}}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\scr@KV@errx}
-% \begin{macro}{\scr@KV@err}
-% Jetzt brauchen wir natürlich die Makros zur Fehlerausgabe. Dabei
-% kann für jeden Schlüsselkennung jeweils eine eigene Fehlermeldung für
-% fehlende Schlüssel und fehlenden Defaultwert definiert
-% werden. Fehlende Schlüssel werden mit \cs{KV@\meta{Kennung}@nokey}
-% gemeldet, fehlende Defaultwerte mit \cs{KV@\meta{Kennung}@noval}.
-% Sind entsprechende Makros nicht definiert, erfolgt die Meldung auf
-% herkömmlichem Weg.
+% \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*{\scr@KV@errx}[1]{%
- \expandafter\ifx\csname\KV@prefix nokey\endcsname\relax
- \KV@errx{#1\space undefined}%
- \else
- \csname\KV@prefix nokey\endcsname{#1}%
- \fi
-}
-\newcommand*{\scr@KV@err}[1]{%
- \expandafter\ifx\csname\KV@prefix noval\endcsname\relax
- \KV@err{No value specified for #1}%
- \else
- \csname\KV@prefix noval\endcsname{#1}%
- \fi
+\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
}
+\DeclareKeyValOption{KOMA}
% \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{macro}
+% \end{option}
%
-% Das waren alle Änderungen.
+% \changes{v2.96}{2006/08/20}{Optionen werden abgearbeitet}
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
%
+% \begin{macro}{\@globaloptionslist}
+% \changes{v2.96}{2006/11/26}{new}
+% \changes{v2.96}{2006/11/26}{Klassenoptionen durchsuchen}
+% Die Lister der globalen Optionen wird teilweise benötigt. Weil
+% \textsl{xkeyval} dämlicherweise glaubt, es müsse alle Optionen mit
+% Gleichheitszeichen aus der Liste der Klassenoptionen entfernen
+% (seltsamerweise aber nicht die (x)keyval-Optionen, die ohne Wert aufgerufen
+% werden, weil ihr Defaultwert verwendet werden soll), wird hier ein eigenes
+% Makro definiert.
+% \begin{macrocode}
+\newcommand*{\@globaloptionslist}{}
+\scr@ifundefined{XKV@classooptionslist}{%
+ \let\@globaloptionslist\@classoptionslist
+}{%
+ \let\@globaloptionslist\XKV@classoptionslist
+}
+\@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
+ }%
+ \expandafter\@for\expandafter\@tempa\expandafter:\expandafter=%
+ \@globaloptionslist\do{%
+ \expandafter\@do@internalonly\@tempa\@nil
+ }%
+ \global\let\@unusedoptionlist\@unusedoptionlist
+ \endgroup
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</option>
+%<*body>
+% \fi
%
% \subsection{Häufig benötigte Befehle}
%
@@ -286,35 +290,106 @@
% \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}
+% 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
+% dokumentierten Makros wird als Parameter übergeben. Dies wird gleich
+% benötigt.
+% \begin{macrocode}
+\newcommand*{\let@as@internal@defined}[1]{%
+ \begingroup
+ \@expandtwoargs\in@{/#1/}\dont@let@as@internal@defined
+ \expandafter\endgroup
+ \ifin@
+ \PackageInfo{%
+ scrkbase%
+ }{%
+ \expandafter\string\csname #1\endcsname\space excluded from being
+ defined%
+ }%
+ \else
+ \@ifundefined{#1}{%
+ \begingroup
+ \expandafter\def\expandafter\@tempa
+ \expandafter{\csname scr@#1\endcsname}
+ \expandafter\def\expandafter\@tempb
+ \expandafter{\csname #1\endcsname}
+ \expandafter\expandafter\expandafter\endgroup
+ \expandafter\expandafter\expandafter\let\expandafter\@tempb\@tempa
+ \if@atdocument\else
+ \g@addto@macro\document{%
+ \expandafter\ifx\csname #1\expandafter\endcsname
+ \csname scr@#1\endcsname
+ \else
+ \PackageWarning{scrkbase}{%
+ \expandafter\string\csname #1\endcsname\space was
+ redefined\MessageBreak
+ at the document preamble.\MessageBreak
+ If you did not redefine it by yourself, have a\MessageBreak
+ a look at the description of this command at\MessageBreak
+ the manual of every package you are using\@gobble
+ }%
+ \fi
+ }%
+ \fi
+ }{%
+ \PackageInfo{%
+ scrkbase%
+ }{%
+ \expandafter\string\csname #1\endcsname\space already
+ defined.\MessageBreak
+ If \expandafter\string\csname #1\endcsname\space does not behave
+ like\MessageBreak
+ it was described at the KOMA-Script manual, try to\MessageBreak
+ load `scrkbase.sty' earlier or find out at which\MessageBreak
+ package or class \expandafter\string\csname #1\endcsname\space
+ was defined before\@gobble
+ }%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\ifundefined}
% \changes{v2.95}{2002/08/21}{neu}
+% \changes{v2.95c}{2006/08/12}{über interne Anweisung definiert}
% Dieses Makro arbeitet wie \cs{@ifundefined}, definiert dabei aber
% ein undefiniertes Makro nicht als \cs{relax}.
% \begin{macrocode}
-\newcommand{\ifundefined}[1]{%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname #1\endcsname\relax
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi
-}
+\let@as@internal@defined{ifundefined}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ifnotundefined}
% \changes{v2.95}{2002/08/21}{neu}
+% \changes{v2.95c}{2006/08/12}{nutzt \eTeX{} wenn möglich}
% Dieses Makro arbeitet genau umgekehrt zu \cs{ifundefined}. Manchmal
% 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}
-\newcommand{\ifnotundefined}[1]{%
- \begingroup\expandafter\expandafter\expandafter\endgroup
- \expandafter\ifx\csname #1\endcsname\relax
- \expandafter\@secondoftwo
- \else
- \expandafter\@firstoftwo
- \fi
+\scr@ifundefined{ifcsname}{%
+ \newcommand{\ifnotundefined}[1]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname #1\endcsname\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+}{%
+ \newcommand{\ifnotundefined}[1]{%
+ \ifcsname #1\endcsname
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }%
}
% \end{macrocode}
% \end{macro}
@@ -486,40 +561,6 @@
% \end{macro}
%
%
-% \begin{macro}{\let@as@internal@defined}
-% \changes{v2.95}{2002/08/19}{neu (intern)}
-% Dieses Makro wird intern verwendet, um dokumentierte Makros mit der
-% Definition von internen Makros zu versehen, falls sie nicht bereits
-% definiert sind. Der Name des dokumentierten Makros wird als
-% Parameter übergeben. Dies wird gleich benötigt.
-% \begin{macrocode}
-\newcommand*{\let@as@internal@defined}[1]{
- \@ifundefined{#1}{%
- \begingroup
- \expandafter\def\expandafter\@tempa
- \expandafter{\csname scr@#1\endcsname}
- \expandafter\def\expandafter\@tempb
- \expandafter{\csname #1\endcsname}
- \expandafter\expandafter\expandafter\endgroup
- \expandafter\expandafter\expandafter\let\expandafter\@tempb\@tempa
- }{%
- \PackageInfo{%
- scrkbase%
- }{%
- \expandafter\string\csname #1\endcsname\space already
- defined.\MessageBreak
- If \expandafter\string\csname #1\endcsname\space does not behave
- like\MessageBreak
- it was described at the KOMA-Script manual, try to\MessageBreak
- load `scrkbase.sty' earlier or find out at which\MessageBreak
- package or class \expandafter\string\csname #1\endcsname\space
- was defined before\@gobble
- }%
- }%
-}
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}{\ifpdftex}
% \changes{v2.95}{2002/08/19}{neu}
% \begin{macro}{\scr@ifpdftex}
@@ -562,8 +603,8 @@
% für die Deklaration der Option \texttt{pagesize} benötigt.
% \begin{macrocode}
\newcommand{\scr@ifpdfoutput}{%
- \ifundefined{pdfoutput}{%
- \ifundefined{OpMode}{%
+ \scr@ifundefined{pdfoutput}{%
+ \scr@ifundefined{OpMode}{%
\expandafter\@secondoftwo%
}{%
\ifnum\OpMode=1
@@ -626,8 +667,8 @@
% ausgegeben wird oder nicht, Befehle auszuführen.
% \begin{macrocode}
\newcommand*{\scr@ifdvioutput}{%
- \ifundefined{pdfoutput}{%
- \ifundefined{OpMode}{%
+ \scr@ifundefined{pdfoutput}{%
+ \scr@ifundefined{OpMode}{%
\expandafter\@firstoftwo
}{%
\ifnum\OpMode=0
@@ -650,167 +691,41 @@
% \end{macro}
%
%
-% \subsection{Abarbeitung von Optionen}
-%
-% \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*{
- \expandafter\let\expandafter\@KV@saved@nokey
- \csname KV@#2@nokey\endcsname
- \@namedef{KV@#2@nokey}{#1\@gobble}%
- \@expandtwoargs\setkeys{#2}\CurrentOption
- \expandafter\let\csname KV@#2@nokey\endcsname\@KV@saved@nokey
- }%
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ProcessKeyValOptions}
-% Alternativ dazu, alle bisher definierten Schlüssel eines Bereichs
-% (1. Argument) als Option zu deklarieren, können auch die Schlüssel eines
-% Bereichs als Option interpretiert werden. Dies scheint nur oberflächlich
-% dieselbe Funktionalität zu sein. Es spielt jedoch bezüglich der
-% Verarbeitungsreihenfolge eine Rolle. Außerdem hat dieses alternative
-% Vorgehen keinen Einfluss auf \cs{DeclareOption*}.
-%
-% \begin{macro}{\Pr@cessL@calKeyValOptions}
-% Zunächst ein Hilfsmakro um alle lokalen Optionen abzuarbeiten.
-% \begin{macrocode}
-\newcommand*{\Pr@cessL@calKeyValOptions}[1]{%
- \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
- \ifx\@curroptions\@empty\else
- \expandafter\let\expandafter\@KV@saved@nokey\csname KV@#1@nokey\endcsname
- \@namedef{KV@#1@nokey}{\in@false\@gobble}%
- \@for\CurrentOption:=\@curroptions\do{%
- \ifx\CurrentOption\@empty\else
- \in@true\@expandtwoargs\setkeys{#1}\CurrentOption
- \ifin@
-% \end{macrocode}
-% Bei Aufruf aus einer Klasse, ist diese Option ggf. aus der Liste der
-% unbenutzten globalen Option zu löschen. Bei Paketen hingegen aus der Liste
-% der Paketoptionen
-% \begin{macrocode}
- \ifx\@currext\@clsextension
- \@expandtwoargs\@removeelement\CurrentOption
- \@unusedoptionlist\@unusedoptionlist
- \else
- \@expandtwoargs\@removeelement\CurrentOption
- \@curroptions\@curroptions
- \fi
- \fi
- \fi
- }%
- \let\CurrentOption\@empty
-% \end{macrocode}
-% Bei Paketen muss die Liste der Paketoptionen noch neu gesetzt werden.
-% \begin{macrocode}
- \ifx\@currext\@clsextension\else
- \expandafter\let\csname opt@\@currname.\@currext\endcsname\@curroptions
- \fi
- \expandafter\let\csname KV@#1@nokey\endcsname\@KV@saved@nokey
- \fi
-}
-% \end{macrocode}
-% \end{macro}
+% \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Hauptteil)}
%
-% \begin{macro}{\Pr@cessGl@balKeyValOptions}
-% Wenn diese Hilfsmakro von einem Paket aufgerufen wird, versucht es alle
-% Klassenoptionen als Schlüssel eines Bereichs (Argument 1)
-% auszuwerten. Diese Anweisung darf mehrfach verwendet werden.
+% \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}
+% Es werden Schlüssel verwendet und ggf. danach noch Dinge ausgeführt.
% \begin{macrocode}
-\newcommand*{\Pr@cessGl@balKeyValOptions}[1]{%
- \ifx\@currext\@clsextension\else
- \expandafter\let\expandafter\@KV@saved@nokey
- \csname KV@#1@nokey\endcsname
- \@namedef{KV@#1@nokey}{\in@false\@gobble}%
- \@for\CurrentOption:=\@classoptionslist\do{%
- \ifx\CurrentOption\@empty\else
- \in@true\@expandtwoargs\setkeys{#1}\CurrentOption
- \ifin@
- \@expandtwoargs\@removeelement\CurrentOption
- \@unusedoptionlist\@unusedoptionlist
- \fi
- \fi
+\newcommand*{\KOMAoptions}[1]{%
+ \let\post@kopt@hook\@empty
+ \setkeys{KOMA}{#1}%
+ \post@kopt@hook\let\post@kopt@hook\relax
+}
+\newcommand*{\post@kopt@hook}{}
+\let\post@kopt@hook\relax
+\newcommand*{\AfterKOMAoptions}{%
+ \ifx\post@kopt@hook\relax
+ \PackageWarning{scrkbase}{%
+ \string\AfterKOMAoptions\space can only be used inside a\MessageBreak
+ KOMA-Script option that is called using \space\KOMAoptions.\MessageBreak
+ Because if this, command will be ignored%
}%
- \let\CurrentOption\@empty
- \expandafter\let\csname KV@#1@nokey\endcsname\@KV@saved@nokey
+ \expandafter\@gobbletwo
+ \else
+ \expandafter\l@addto@macro
\fi
-}
-% \end{macrocode}
-% \end{macro}
-%
-% Insgesamt werden zunächst die globalen und dann die lokalen Optionen
-% bearbeitet.
-% \begin{macrocode}
-\newcommand*{\ProcessKeyValOptions}[1]{%
- \Pr@cessGl@balKeyValOptions{#1}%
- \Pr@cessL@calKeyValOptions{#1}%
-}
-% \end{macrocode}
-% Es wird empfohlen \cs{ProcessKeyValOptions} \emph{vor}
-% \cs{ProcessOptions} oder \cs{ProcessOptions*} aufzurufen.
-% \end{macro}
-%
-% \begin{macro}{\ProcessAllOptions}
-% \begin{macro}{\@Pr@cessAll@pti@ns}
-% \begin{macro}{\Pr@cessAll@pti@ns}
-% Da der Anwender bekanntlich faul ist hier ein Makro, das sowohl für normale
-% Optionen als auch Schlüsseloptionen arbeitet. Dabei werden Schlüsseloptionen
-% zuerst abgearbeitet. Die Sternvariante verwendet die Sternvariante von
-% \cs{ProcessOptions}. Im Gegensatz zu \cs{ProcessOptions} wird hier kein
-% abschließendes \cs{relax} benötigt, weil ein zwingendes Argument vorhanden
-% ist (der Bereich).
-% \begin{macrocode}
-\newcommand*{\ProcessAllOptions}{%
- \@ifstar\@Pr@cessAll@pti@ns\Pr@cessAll@pti@ns
-}
-\newcommand*{\@Pr@cessAll@pti@ns}[1]{%
- \ProcessKeyValOptions{#1}\ProcessOptions*
-}
-\newcommand*{\Pr@cessAll@pti@ns}[1]{%
- \ProcessKeyValOptions{#1}\ProcessOptions\relax
+ \post@kopt@hook
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
-%
-% \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln}
-%
-% Üblicherweise verwendet \KOMAScript{} für alle
-% \textsf{keyval}-Schlüssel die gleiche Bereichskennung
-% "`\texttt{KOMA}"'. Dadurch ist es möglich, dass Pakete die Schlüssel
-% der Klassen umdefinieren und dass jeder Teil von \KOMAScript{} die
-% 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{macrocode}
-\newcommand*{\KOMA@key}{\define@key{KOMA}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{KOMAoptions}
-% Es werden Schlüssel verwendet. Auch dies ist nur ein abkürzendes Makro:
-% \begin{macrocode}
-\newcommand*{\KOMAoptions}[1]{%
- \setkeys{KOMA}{#1}%
-}
-% \end{macrocode}
-% \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
@@ -987,17 +902,29 @@
% \end{macro}
%
% \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}{\KOMA@UseObsolete{option}{#1}{#2}{#3}}%
+ \DeclareOption{#2}{%
+ \let\scr@sr@co\CurrentOption
+ \KOMA@UseObsolete{option}{#1}{#2}{#3}%
+ \let\CurrentOption\scr@sr@co
+ }%
}
% \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