From 4832d732052d6e2b43b5e3ff45aa31bfbc0cbdc2 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sat, 6 Dec 2014 23:18:10 +0000
Subject: koma-script (6dec14)

git-svn-id: svn://tug.org/texlive/trunk@35754 c570f23f-e606-0410-a88d-b1316a301751
---
 .../source/latex/koma-script/scrkernel-basics.dtx  | 232 +++++++++++++--------
 1 file changed, 146 insertions(+), 86 deletions(-)

(limited to 'Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx')

diff --git a/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx b/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
index 8faf8096b23..a5d08f11a3e 100644
--- a/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
+++ b/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
@@ -1,8 +1,8 @@
-% \CheckSum{2390}
+% \CheckSum{2461}
 % \iffalse meta-comment
 % ======================================================================
 % scrkernel-basics.dtx
-% Copyright (c) Markus Kohm, 2002-2013
+% Copyright (c) Markus Kohm, 2002-2014
 %
 % This file is part of the LaTeX2e KOMA-Script bundle.
 %
@@ -20,7 +20,7 @@
 % This work consists of all files listed in manifest.txt.
 % ----------------------------------------------------------------------
 % scrkernel-basics.dtx
-% Copyright (c) Markus Kohm, 2002-2013
+% Copyright (c) Markus Kohm, 2002-2014
 %
 % Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
 % Version 1.3c, verteilt und/oder veraendert werden.
@@ -55,11 +55,17 @@
 %   Right brace   \}     Tilde         \~}
 %
 % \iffalse
-%%% From File: $Id: scrkernel-basics.dtx 1502 2013-11-06 11:00:12Z mjk $
+%%% From File: $Id: scrkernel-basics.dtx 1809 2014-10-17 08:02:00Z kohm $
 %<package&option>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
 %<*driver>
 \ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
-\ProvidesFile{scrkernel-basics.dtx}[%
+\begingroup
+  \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
+  \filedate$Date: 2014-10-17 10:02:00 +0200 (Fri, 17 Oct 2014) $
+  \def\filerevision$#1: #2 ${\gdef\filerevision{#2}}
+  \filerevision$Revision: 1638 $
+\endgroup
+\ProvidesFile{scrkernel-basics.dtx}[\filedate\space\filerevision\space
 %</driver>
 %<*driver|(package&option)>
 %<package>\ProvidesPackage{%
@@ -103,7 +109,7 @@
 \RecordChanges
 \GetFileInfo{scrkernel-basics.dtx}
 \title{\KOMAScript{} \partname\ \texttt{\filename}%
-  \footnote{Dies ist Version \fileversion\ von Datei
+  \footnote{Dies ist Revision \fileversion\ von Datei
     \texttt{\filename}.}}
 \date{\filedate}
 \author{Markus Kohm}
@@ -337,8 +343,8 @@
     \expandafter{\reserved@a}{#2}{#3}%
   }%
 }
-\newcommand*{\scr@define@family@key}{}
-\def\scr@define@family@key#1#2#3[#4]#5{%
+\newcommand{\scr@define@family@key}{}
+\long\def\scr@define@family@key#1#2#3[#4]#5{%
   \scr@if@familymember{#1}{#2}{define a key}{%
     \define@key{#2#1}{#3}[{#4}]{%
       \def\FamilyOfKey{#2}\def\FamilyMemberOfKey{#1}%
@@ -348,7 +354,7 @@
     }%
   }%
 }
-\newcommand*{\scr@define@family@key@nodefault}[4]{%
+\newcommand{\scr@define@family@key@nodefault}[4]{%
   \scr@if@familymember{#1}{#2}{define a key}{%
     \define@key{#2#1}{#3}{%
       \def\FamilyOfKey{#2}\def\FamilyMemberOfKey{#1}%
@@ -608,6 +614,8 @@
 % \end{macro}^^A \scr@AtEndOfFamilyOptions
 % \end{macro}^^A \AtEndOfFamilyOptions
 % \begin{macro}{\scr@ifprocess@curroption}
+%   \changes{v3.13}{2014/01/04}{\cs{CurrentOption} innerhalb von \cs{setkeys}
+%     in Klammern gesetzt}
 % Dieses Makro führt eine aktuelle \textsf{keyval}-Option für das angegebene
 % Mitglied (\#1) der angegebenen Familie (\#2) aus. Falls die Option keinen
 % entsprechenden Wert hat, wird das vierte Argument ausgeführt, anderenfalls
@@ -622,7 +630,7 @@
     \scr@ifundefinedorrelax{KV@#2#1@\reserved@a}{%
       \let\FamilyKeyState\OptionNotUsed
     }{%
-      \protected@edef\reserved@b{\noexpand\setkeys{#2#1}{\CurrentOption}%
+      \protected@edef\reserved@b{\noexpand\setkeys{#2#1}{{\CurrentOption}}%
         \noexpand\def\noexpand\CurrentOption{\CurrentOption}}%
       \reserved@b
       \ifx\FamilyKeyState\FamilyKeyStateUnknown
@@ -639,7 +647,7 @@
       \let\FamilyKeyState\OptionNotUsed
     }%
   }{%
-    \proteced@edef\reserved@b{\noexpand\setkeys{#2}{\CurrentOption}%
+    \proteced@edef\reserved@b{\noexpand\setkeys{#2}{{\CurrentOption}}%
       \noexpand\def\noexpand\CurrentOption{\CurrentOption}}%
     \reserved@b
     \ifx\FamilyKeyState\FamilyKeyStateUnknown
@@ -655,7 +663,7 @@
     \def\reserved@a##1=##2\@nil{\def\reserved@a{##1}}%
     \expandafter\reserved@a\CurrentOption=\@nil
     \scr@ifundefinedorrelax{KV@#2#1@\reserved@a}{}{%
-      \protected@edef\reserved@b{\noexpand\setkeys{#2#1}{\CurrentOption}%
+      \protected@edef\reserved@b{\noexpand\setkeys{#2#1}{{\CurrentOption}}%
         \noexpand\def\noexpand\CurrentOption{\CurrentOption}}%
       \ifx\FamilyKeyState\FamiliyKeyStateProcessed
         \reserved@b
@@ -805,7 +813,9 @@
 %   \changes{v2.97c}{2007/06/20}{Herausreichen von internen Makros kann
 %     generell verhindert werden}
 %   \changes{v3.10}{2010/10/26}{\cs{ignorespaces} beim \cs{document}-Patch
-%     ergänzt} 
+%     ergänzt}
+%   \changes{v3.13a}{2014/08/13}{potentielle Leerzeichen durch Zeilenumbruch
+%     beseitigt}%^^A
 % 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
@@ -832,9 +842,9 @@
     \@ifundefined{#1}{%
       \begingroup
         \expandafter\def\expandafter\reserved@a
-          \expandafter{\csname scr@#1\endcsname}
+          \expandafter{\csname scr@#1\endcsname}%
         \expandafter\def\expandafter\reserved@b
-          \expandafter{\csname #1\endcsname}
+          \expandafter{\csname #1\endcsname}%
       \expandafter\expandafter\expandafter\endgroup
       \expandafter\expandafter\expandafter\let\expandafter\reserved@b\reserved@a
       \if@atdocument\else
@@ -1184,7 +1194,8 @@
 % \end{macro}
 %
 % \begin{macro}{\ifisinteger}
-%   \changes{v3.12}{2013/11/05}{neu}
+%   \changes{v3.12}{2013/11/05}{neu}%^^A
+%   \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}%^^A
 % Falls die Expansion des ersten Arguments eine (positive oder negative) ganze
 % Zahl ist, wird das zweite Argument ausgeführt, sonst das dritte.
 %    \begin{macrocode}
@@ -1193,7 +1204,7 @@
   \begingroup
     \edef\reserved@a{#1}\expandafter
     \scr@ifintegerplusminus\reserved@a\@nil{\aftergroup\@firstoftwo}%
-                                             {\aftergroup\@secondoftwo}
+                                           {\aftergroup\@secondoftwo}%
   \endgroup
 }
 %    \end{macrocode}
@@ -1225,7 +1236,8 @@
 % \end{macro}
 %
 % \begin{macro}{\ifisdimension}
-%   \changes{v3.12}{2013/11/05}{neu}
+%   \changes{v3.12}{2013/11/05}{neu}%^^A
+%   \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}%^^A
 % Falls die Expansion des ersten Arguments eine (positive oder negative)
 % Länge ist, wird das zweite Argument ausgeführt, sonst das dritte. Es sei
 % darauf hingewiesen, dass derzeit ungültige oder fehlende Einheiten eine
@@ -1236,7 +1248,7 @@
   \begingroup
     \edef\reserved@a{#1\relax}\expandafter
     \scr@ifdimensionplusminus\reserved@a\@nil{\aftergroup\@firstoftwo}%
-                                             {\aftergroup\@secondoftwo}
+                                             {\aftergroup\@secondoftwo}%
   \endgroup
 }
 %    \end{macrocode}
@@ -1270,7 +1282,8 @@
 % \end{macro}
 %
 % \begin{macro}{\ifisglue}
-%   \changes{v3.12}{2013/11/05}{neu}
+%   \changes{v3.12}{2013/11/05}{neu}%^^A
+%   \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}%^^A
 % Falls die Expansion des ersten Arguments eine (positive oder negative)
 % Ausdehnung ist, wird das zweite Argument ausgeführt, sonst das dritte. Es sei
 % darauf hingewiesen, dass derzeit ungültige oder fehlende Einheiten eine
@@ -1281,7 +1294,7 @@
   \begingroup
     \edef\reserved@a{#1\relax}\expandafter
     \scr@ifglueplusminus\reserved@a\@nil{\aftergroup\@firstoftwo}%
-                                             {\aftergroup\@secondoftwo}
+                                        {\aftergroup\@secondoftwo}%
   \endgroup
 }
 %    \end{macrocode}
@@ -1318,6 +1331,7 @@
 % \begin{macro}{\ifnumber}
 %   \changes{v3.12}{2013/10/30}{using \cs{aftergroup} instead of
 %     \cs{endgroup}\cs{expandafter}}%^^A
+%   \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}%^^A
 % Dieses Makro testet, ob ein übergebener Parameter eine positive,
 % ganze Zahl ist. Ist dies der Fall, wird der zweite Parameter
 % ausgeführt, sonst der dritte.
@@ -1339,7 +1353,7 @@
 % gescannt und beurteilt.
 %    \begin{macrocode}
 \newcommand*{\test@number}[1]{%
-  \ifx \scr@next#1
+  \ifx \scr@next#1%
     \let\scr@next\relax
   \else
 %    \end{macrocode}
@@ -1704,19 +1718,26 @@
 % \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Hauptteil)}
 %
 % \begin{macro}{\FamilyExecuteOptions}
-%   \changes{v3.00}{2008/04/30}{Neue Anweisung}
-%   \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}
-%   \changes{v3.04b}{2010/02/02}{\cs{scr@key@atlist} und \cs{scr@key@name}
-%     vor Überschreiben in \cs{serkeys} geschützt}
-%   \changes{v3.12}{2013/03/04}{neue Implementierung}
+%   \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
+%   \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}^^A
+%   \changes{v3.04b}{2010/02/02}{\cs{scr@key@atlist} und \cs{scr@key@name}^^A
+%     vor Überschreiben in \cs{serkeys} geschützt}^^A
+%   \changes{v3.12}{2013/03/04}{neue Implementierung}^^A
 %   \changes{v3.12}{2013/03/04}{darf auch noch nach der Präambel verwendet
-%     werden}
+%     werden}^^A
+%   \changes{v3.14}{2014/10/17}{das dritte Argument wird \cs{long}
+%   verarbeitet}^^A
+% \begin{macro}{\@FamilyExecuteOptions}
+%   \changes{v3.14}{2014/10/17}{Neue streng interne Anweisung}^^A
 % Entspriche \cs{ExecuteOptions} jedoch \textsf{keyval}-Optionen. Insbesondere
 % ist die Anweisung reentrant! Es ist jedoch zu beachten, dass der hook lokal
 % zum jeweiligen Aufruf ist.
 %    \begin{macrocode}
 %<*base>
-\newcommand*{\FamilyExecuteOptions}[3][.\@currname.\@currext]{%
+\newcommand*{\FamilyExecuteOptions}[2][.\@currname.\@currext]{%
+  \@FamilyExecuteOptions[{#1}]{#2}%
+}
+\newcommand{\@FamilyExecuteOptions}[3][.\@currname.\@currext]{%
   \@namedef{scr@after@options@#1@hook}{\@namedef{scr@after@options@#1@hook}{}}%
   \@for\scr@key@atlist:=#3\do{%
     \expandafter\scr@key@split@name@value\scr@key@atlist==\@nil
@@ -1804,6 +1825,7 @@
 %</base>
 %    \end{macrocode}
 % \end{macro}^^A \scr@show@key@state@error
+% \end{macro}^^A \@FamilyExecuteOptions
 % \end{macro}^^A \FamilyExecuteOptions
 %
 % \begin{macro}{\KOMAExecuteOptions}
@@ -1822,12 +1844,15 @@
 % \end{macro}
 %
 % \begin{macro}{\FamilyOptions}
-%   \changes{v3.00}{2008/04/30}{Neue Anweisung}
-%   \changes{v3.12}{2013/03/02}{Neue Implementierung}
-%   \changes{v3.12}{2013/03/02}{\cs{scr@after@options@\#1@hook}}
+%   \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
+%   \changes{v3.12}{2013/03/02}{Neue Implementierung}^^A
+%   \changes{v3.12}{2013/03/02}{\cs{scr@after@options@\#1@hook}}^^A
+%   \changes{v3.14}{2014/10/17}{zweites Argument wird \cs{long} behandelt}^^A
+% \begin{macro}{\@FamilyOptions}
+%   \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}^^A
 % \begin{macro}{\Family@Options}
-%   \changes{v3.00}{2008/04/30}{Neues Makro (intern)}%
-%   \changes{v3.12}{2013/03/04}{entfernt}
+%   \changes{v3.00}{2008/04/30}{Neues Makro (intern)}%^^A
+%   \changes{v3.12}{2013/03/04}{entfernt}^^A
 % \end{macro}^^A \FamilyOptions
 % Es werden Schlüssel einer Familie verwendet. Existiert ein Schlüssel nicht,
 % oder ist der Wert für alle Schlüssel unbekannt, so wird ein Fehler
@@ -1836,7 +1861,8 @@
 % erwähnt, dass der hook dabei nur die jeweilige Anweisung umfasst.
 %    \begin{macrocode}
 %<*base>
-\newcommand*{\FamilyOptions}[2]{%
+\newcommand{\FamilyOptions}[1]{\@FamilyOptions{#1}}
+\newcommand{\@FamilyOptions}[2]{%
   \@namedef{scr@after@options@#1@hook}{\@namedef{scr@after@options@#1@hook}{}}%
 %    \end{macrocode}
 % \begin{description}
@@ -1962,7 +1988,11 @@
 }
 %    \end{macrocode}
 % \begin{macro}{\scr@execute@option}
-%   \changes{v3.12}{2013/03/04}{Neue Anweisung (intern)}%
+%   \changes{v3.12}{2013/03/04}{Neue Anweisung (intern)}%^^A
+%   \changes{v3.13}{2014/06/30}{fehlendes \cs{expandafter} in \cs{PackageInfo}
+%     ergänzt}%^^A
+%   \changes{v3.13a}{2014/08/13}{Leerzeichen durch fehlendes Prozentzeichen
+%     beseitigt}%^^A
 % Es wird die bereits gesplittete Option ausgeführt, ohne dass die dabei
 % wesentlichen Macros (aber nicht \cs{reserved@a}!)  verändert werden. Das
 % erste Argument ist bereits der Besitzer in \textsf{keyval}-Syntax.
@@ -1977,25 +2007,31 @@
     \noexpand\def\noexpand\scr@key@name{%
       \unexpanded\expandafter{\scr@key@name}}%
     \noexpand\def\noexpand\scr@key@value{%
-      \unexpanded\expandafter{\scr@key@value}}
+      \unexpanded\expandafter{\scr@key@value}}%
     \ifx\scr@key@run@errors\relax
       \noexpand\let\noexpand\scr@key@run@errors\relax
     \else
       \noexpand\def\noexpand\scr@key@run@errors{%
         \unexpanded\expandafter{\scr@key@run@errors}}%
     \fi
-    \noexpand\def\expandafter\noexpand
-    \csname scr@after@options@#1@hook\endcsname{%
-      \expandafter\unexpanded\expandafter\expandafter\expandafter{%
-        \csname scr@after@options@#1@hook\endcsname
-      }}%
+    \expandafter\ifx\csname scr@after@options@#1@hook\endcsname\relax
+      \noexpand\expandafter\noexpand\let\noexpand\csname
+      scr@after@options@#1@hook\endcsname\relax
+    \else
+      \noexpand\def\expandafter\noexpand
+      \csname scr@after@options@#1@hook\endcsname{%
+        \expandafter\unexpanded\expandafter\expandafter\expandafter{%
+          \csname scr@after@options@#1@hook\endcsname
+        }}%
+    \fi
   }%
   \let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions
   \reserved@a
   \let\AtEndOfFamilyOptions\@firstofone
   \ifx\FamilyKeyState\FamilyKeyStateUnknown
     \PackageInfo{scrbase}{Unknown processing state.\MessageBreak
-      Processing option `\scr@key@atlist'\MessageBreak
+      Processing option 
+      `\expandafter\detokenize\expandafter{\scr@key@atlist}'\MessageBreak
       \ifx\FamilyMemberOfKey\@empty\else
         of member `\FamilyMemberOfKey'\MessageBreak
       \fi
@@ -2008,6 +2044,15 @@
   \fi
 }
 %    \end{macrocode}
+% \begin{macro}{\scr@KV@err}
+%   \changes{v3.12a}{2013/03/04}{missing internal command added}
+% We just have to signal, that the option needs a value, that is missing.
+%    \begin{macrocode}
+\newcommand*{\scr@KV@err}[1]{%
+  \FamilyKeyStateNeedValue
+}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\scr@key@run@errors}
 %   \changes{v3.12}{2013/03/04}{Neue Anweisung (intern)}
 % Wird innerhalb von \cs{FamilyOptions} benötigt, um die Fehlermeldungen
@@ -2036,13 +2081,14 @@
 %   \changes{v2.97e}{2007/11/10}{verwendet \cs{KV@@sp@def} zur Entsorgung von
 %     Leerzeichen}
 %   \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@split@name@value}}
+%   \changes{v3.13}{2014/10/17}{\cs{long}}
 %    \begin{macrocode}
 \newif\ifscr@key@found@
 \newcommand*{\scr@key@atlist}{}
 \newcommand*{\scr@key@name}{}
 \newcommand*{\scr@key@value}{}
 \newcommand*{\scr@key@split@name@value}{}
-\def\scr@key@split@name@value#1=#2=#3\@nil{%
+\long\def\scr@key@split@name@value#1=#2=#3\@nil{%
   \KV@@sp@def\scr@key@name{#1}%
   \KV@@sp@def\scr@key@value{#2}%
 }
@@ -2052,13 +2098,16 @@
 % \end{macro}^^A \scr@key@value
 % \end{macro}^^A \scr@key@name
 % \end{macro}^^A \scr@key@atlist
+% \end{macro}^^A \@FamilyOptions
 % \end{macro}^^A \FamilyOptions
 %
 % \begin{macro}{\FamilyOption}
-%   \changes{v3.00}{2008/04/30}{Neue Anweisung}
+%   \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
+% \begin{macro}{\@FamilyOptions}
+%   \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}^^A
 % \begin{macro}{\Family@Option}
-%   \changes{v3.00}{2008/04/30}{Neu (intern)}
-%   \changes{v3.12}{2013/03/04}{entfernt}
+%   \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
+%   \changes{v3.12}{2013/03/04}{entfernt}^^A
 % \end{macro}
 %   \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}
 % Im Gegensatz zu \cs{FamilyOptions} kann man mit dieser Anweisung nur eine
@@ -2068,7 +2117,8 @@
 % dritte, obligatorische Argument ist die Liste der Werte für diese Option.
 %    \begin{macrocode}
 %<*base>
-\newcommand*{\FamilyOption}[3]{%
+\newcommand*{\FamilyOption}[2]{\@FamilyOption{#1}{#2}}
+\newcommand{\@FamilyOption}[3]{%
   \expandafter\KV@@sp@def\expandafter\scr@key@name\expandafter{#2}%
 %    \end{macrocode}
 % Der einfachste Weg ist nun schlicht, die Liste der Werte durchzugehen und so
@@ -2099,6 +2149,7 @@
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\KOMAoptions}
 %   \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen}
@@ -2189,12 +2240,13 @@
 %   \changes{v3.10}{2011/09/12}{no error while processing global options}%^^A
 %   \changes{v3.11a}{2012/05/28}{prevent remove from list of unused global
 %     options globally}%^^A
+%   \changes{v3.14}{2014/10/17}{\cs{long}}^^A
 % Dieses Makro berichtet über Fehler wegen unbekannter Wertübergabe an einen
 % Schlüssel. Das erste Argument ist die Familie, das zweite der Schlüssel,
 % das dritte der Wert und das vierte die Liste der möglichen Werte.
 %    \begin{macrocode}
 %<*base>
-\newcommand*{\FamilyUnknownKeyValue}[4]{%
+\newcommand{\FamilyUnknownKeyValue}[4]{%
   \FamilyKeyStateUnknownValue
   \ifx\FamilyElseValues\@empty\else
     \PackageWarning{scrbase}{non empty \string\FamilyElseValue
@@ -2656,31 +2708,41 @@
 }
 %    \end{macrocode}
 % \begin{macro}{\KOMA@UseDeprecatedOption}
-%   \changes{v3.01a}{2008/11/20}{neu (intern)}%
-%   \changes{v3.12}{2013/03/04}{Test für \texttt{version!=first}}%
+%   \changes{v3.01a}{2008/11/20}{neu (intern)}%^^A
+%   \changes{v3.12}{2013/03/04}{Test für \texttt{version!=first}}%^^A
+%   \changes{v3.12a}{2014/01/22}{vertauschte Logic für \texttt{version!=first}
+%     korrigiert}%^^A
 % Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind
 % 1. Meldungsbefehl, 2. obsolete Option, 3. Setzen des Schlüssels.
 %    \begin{macrocode}
 \newcommand*{\KOMA@UseDeprecatedOption}[3]{%
-  \let\scr@sr@co\CurrentOption
   \begingroup
-    #1{%
-      You've used obsolete option `#2'.\MessageBreak
-      Usage of this option indicates an old document and\MessageBreak
-      \scr@ifundefinedorrelax{KV@KOMA.\@currname.\@currext @version}{%
-        changes compatibility level using\MessageBreak
-        `#3,version=first'.\MessageBreak
-        If you don't want this, y%
-      }{%
-        is deprecated.\MessageBreak
-        Y%
+    \scr@ifundefinedorrelax{KV@KOMA.\@currname.\@currext @version}{%
+      \edef\reserved@a{\noexpand\endgroup
+        \noexpand#1{%
+          You've used obsolete option `#2'.\noexpand\MessageBreak
+          Usage of this option is deprecated.\noexpand\MessageBreak
+          You should simply replace `#2'\noexpand\MessageBreak
+          by `#3'%
+        }%
+        \noexpand\KOMAExecuteOptions{#3}%
+        \noexpand\def\noexpand\CurrentOption{\CurrentOption}%
+      }%
+    }{%
+      \edef\reserved@a{\noexpand\endgroup
+        \noexpand#1{%
+          You've used obsolete option `#2'.\noexpand\MessageBreak
+          Usage of this option indicates an old document\noexpand\MessageBreak
+          and changes compatibility level using\noexpand\MessageBreak
+          `#3,version=first'.\noexpand\MessageBreak
+          If you don't want this, you should simply\noexpand\MessageBreak
+          replace option `#2' by `#3'%
+        }%
+        \noexpand\KOMAExecuteOptions{#3,version=first}%
+        \noexpand\def\noexpand\CurrentOption{\CurrentOption}%
       }%
-      ou should simply replace\MessageBreak
-      usage of option `#2' by `#3'%
     }%
-  \endgroup
-  \KOMAExecuteOptions{#3,version=first}%
-  \let\CurrentOption\scr@sr@co
+  \reserved@a
 }
 %</koma>
 %    \end{macrocode}
@@ -2722,29 +2784,27 @@
 % 1. Meldungsbefehl, 2. obsolete Option, 3. Setzen des Schlüssels.
 %    \begin{macrocode}
 \newcommand*{\KOMA@UseStandardOption}[3]{%
-  \let\scr@sr@co\CurrentOption
-  #1{%
-    You've used standard option `#2'.\MessageBreak
-    This is correct!\MessageBreak
-    Internally I'm using `#3'.\MessageBreak
-    If you'd like to set the option with \string\KOMAoptions,\MessageBreak
-    you'd have to use `#3' there\MessageBreak
-    instead of `#2', too%
-  }%
-  \KOMAExecuteOptions{#3}%
-  \let\CurrentOption\scr@sr@co
+  \begingroup
+    \edef\reserved@a{\noexpand\endgroup
+      \noexpand#1{%
+        You've used standard option `#2'.\noexpand\MessageBreak
+        This is correct!\noexpand\MessageBreak
+        Internally I'm using `#3'.\noexpand\MessageBreak
+        If you'd like to set the option with \string\KOMAoptions,%
+        \noexpand\MessageBreak
+        you'd have to use `#3' there\noexpand\MessageBreak
+        instead of `#2', too%
+      }%
+      \noexpand\KOMAExecuteOptions{#3}%
+      \noexpand\def\noexpand\CurrentOption{\CurrentOption}%
+    }%
+  \reserved@a
 }
+%</koma>
 %    \end{macrocode}
 % \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}{}
-%</koma>
-%    \end{macrocode}
+%   \changes{v3.12a}{2014/01/22}{beseitigt}
 % \end{macro}^^A \scr@sr@co
 % \end{macro}^^A \KOMA@UseStandardOption
 % \end{macro}^^A \KOMA@@@DeclareStandardOption
-- 
cgit v1.2.3

