diff options
author | Karl Berry <karl@freefriends.org> | 2007-03-07 18:05:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-03-07 18:05:27 +0000 |
commit | 1c15eb0bc227a081215bf372a3756aadc4d19d09 (patch) | |
tree | 512213f86181e4a6b05eab611fd4a84f334fc27a /Master/texmf-dist/source/latex/koma-script/scrkbase.dtx | |
parent | f20e65ef1cfe5fc288f66e7af8abc8477511b36a (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.dtx | 577 |
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 |