summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/koma-script/source/scrkernel-basics.dtx')
-rw-r--r--macros/latex/contrib/koma-script/source/scrkernel-basics.dtx2241
1 files changed, 1307 insertions, 934 deletions
diff --git a/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx b/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx
index c347177f85..b1bf79fe8a 100644
--- a/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx
+++ b/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{3893}
+% \CheckSum{4201}
% \iffalse meta-comment
% ======================================================================
% scrkernel-basics.dtx
@@ -55,7 +55,7 @@
% Right brace \} Tilde \~}
%
% \iffalse
-%%% From File: $Id: scrkernel-basics.dtx 3063 2019-02-01 07:39:11Z kohm $
+%%% From File: $Id: scrkernel-basics.dtx 3262 2019-10-10 08:25:29Z kohm $
%<prepare>%%% (run: prepare)
%<option>%%% (run: option)
%<body>%%% (run: body)
@@ -65,7 +65,7 @@
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\begingroup
\def\filedate$#1: #2-#3-#4 #5${\def\filedate{#2/#3/#4}}
- \filedate$Date: 2019-02-01 08:39:11 +0100 (Fri, 01 Feb 2019) $
+ \filedate$Date: 2019-10-10 10:25:29 +0200 (Thu, 10 Oct 2019) $
\def\filerevision$#1: #2 ${\def\filerevision{r#2}}
\filerevision$Revision: 1638 $
\xdef\fileinfo{\filedate\space\filerevision\space}
@@ -116,7 +116,6 @@
\endbatchfile
\documentclass{scrdoc}
\usepackage[english,ngerman]{babel}
-\usepackage[latin1]{inputenc}
\CodelineIndex
\RecordChanges
\GetFileInfo{scrkernel-basics.dtx}
@@ -136,7 +135,7 @@
%
% \selectlanguage{ngerman}
%
-% \changes{v1.0}{2002/07/06}{Beginn der ersten Version}^^A
+% \changes{v1.0}{2002/07/06}{Beginn der ersten Version}%^^A
% \changes{v3.12}{203/03/05}{Verwendung von \cs{@tempa}, \cs{@tempb},
% \cs{@tempc} eliminiert}
%
@@ -145,18 +144,18 @@
% Neue Versionen von \KOMAScript{} machen zunehmend Gebrauch vom
% \textsf{keyval}-Paket. Das \textsf{keyval}-Paket ist Bestandteil des
% \textsf{graphics}-Pakets und muss als solches auf allen
-% \TeX-Systemen mit \LaTeX{} enthalten sein. Es genügt jedoch in
+% \TeX-Systemen mit \LaTeX{} enthalten sein. Es genügt jedoch in
% einigen Punkten nicht den Anforderungen von \KOMAScript{}. Deshalb
% werden hier Erweiterungen vorgenommen, die von \KOMAScript-Klassen
-% und \KOMAScript-Paketen verwendet werden können.
+% und \KOMAScript-Paketen verwendet werden können.
%
-% Darüber hinaus werden immer mehr Teile von \KOMAScript{} von mehr als einem
+% Darüber hinaus werden immer mehr Teile von \KOMAScript{} von mehr als einem
% Paket oder von Paketen und Klassen verwendet. Diese grundlegenden Dinge
-% wurden daher in zwei Pakete, \textsf{scrbase} (für Dinge, die auch von
-% anderen Klassen und Paketen genutzt werden können) und \textsf{scrkbase}
-% (für Dinge, die \KOMAScript vorbehalten bleiben), ausgegliedert. Dadurch
-% werden die Pakete und Klassen selbst kleiner und die können trotzdem
-% unabhängig voneinander verwendet werden. Selbstverständlich kann man dieses
+% wurden daher in zwei Pakete, \textsf{scrbase} (für Dinge, die auch von
+% anderen Klassen und Paketen genutzt werden können) und \textsf{scrkbase}
+% (für Dinge, die \KOMAScript vorbehalten bleiben), ausgegliedert. Dadurch
+% werden die Pakete und Klassen selbst kleiner und die können trotzdem
+% unabhängig voneinander verwendet werden. Selbstverständlich kann man dieses
% Paket auch ohne den Rest von \KOMAScript{} zum Einsatz bringen.
%
% \StopEventually{\PrintIndex\PrintChanges}
@@ -166,7 +165,7 @@
% \fi
%
% \subsection{Laden des Pakets}
-% Wer das Paket lädt, tut das allerdings in der Regel sogar bereits
+% Wer das Paket lädt, tut das allerdings in der Regel sogar bereits
% vor der Definition der Optionen mit:
% \begin{macrocode}
\RequirePackage{scrkbase}[\KOMAScriptVersion]
@@ -211,7 +210,7 @@
% \end{macrocode}
%
%
-% \subsection{Der abhängige Teil lädt den unabhängigen Teil}
+% \subsection{Der abhängige Teil lädt den unabhängigen Teil}
%
% \begin{macrocode}
%<koma>\RequirePackage{scrbase}[\KOMAScriptVersion]
@@ -229,30 +228,30 @@
% \LaTeX-Kern-Anweisungen durch
% andere Pakete}
% Einige Pakete wie \textsf{amsgen} definieren \LaTeX-Kern-Anweisungen so um,
-% dass sie nicht mehr korrekt funktionieren. Ich muss dann leider dafür
+% dass sie nicht mehr korrekt funktionieren. Ich muss dann leider dafür
% sorgen, dass \KOMAScript{} damit keine Probleme hat. Die Klassen sind dabei
-% in der günstigen Situation, dass sie ggf. einfach die vorhandene Definition
-% testen und übernehmen können. Die Pakete müssen hingegen dummer Weise selbst
-% dafür sorgen, dass es irgendwie funktioniert.
+% in der günstigen Situation, dass sie ggf. einfach die vorhandene Definition
+% testen und übernehmen können. Die Pakete müssen hingegen dummer Weise selbst
+% dafür sorgen, dass es irgendwie funktioniert.
%
% \begin{macro}{\kernel@ifstar}
-% \changes{v3.20}{2016/04/12}{neu (intern)}
-% Ich hoffe ja, dass der \LaTeX-Kern zukünftig diese Anweisung definiert und
-% das dann auch funktioniert. Damit es aber auch mit älteren \LaTeX-Versionen
+% \changes{v3.20}{2016/04/12}{neu (intern)}
+% Ich hoffe ja, dass der \LaTeX-Kern zukünftig diese Anweisung definiert und
+% das dann auch funktioniert. Damit es aber auch mit älteren \LaTeX-Versionen
% geht, sorge ich hier vor.
% \begin{macrocode}
%<base>\providecommand*\kernel@ifstar[1]{\kernel@ifnextchar*{\@firstoftwo{#1}}}
% \end{macrocode}
-% \end{macro}^^A \kernel@ifstar
+% \end{macro}%^^A \kernel@ifstar
%
% \subsection{Test von Anweisungen}
%
% \begin{macro}{\scr@ifundefinedorrelax}
-% \changes{v2.95c}{2006/08/12}{neu (intern)}^^A
-% \changes{v2.97b}{2007/03/08}{vermurkste Logik korrigiert}^^A
-% \changes{v2.97c}{2007/04/18}{vermurkste Funktion korrigiert}^^A
-% \changes{v2.97c}{2007/04/18}{von \cs{scr@ifundefined} umbenannt}
-% \changes{v3.02c}{2009/02/19}{Sonderbehandlung für nicht \eTeX entfernt}^^A
+% \changes{v2.95c}{2006/08/12}{neu (intern)}%^^A
+% \changes{v2.97b}{2007/03/08}{vermurkste Logik korrigiert}%^^A
+% \changes{v2.97c}{2007/04/18}{vermurkste Funktion korrigiert}%^^A
+% \changes{v2.97c}{2007/04/18}{von \cs{scr@ifundefined} umbenannt}
+% \changes{v3.02c}{2009/02/19}{Sonderbehandlung für nicht \eTeX entfernt}%^^A
% 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.
@@ -271,15 +270,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@ifundefinedorrelax
+% \end{macro}%^^A \scr@ifundefinedorrelax
%
%
% \subsection{Erweiterung von Meldungen}
%
% \begin{macro}{\PackageErrorNoLine}
-% \changes{v3.12}{2013/09/19}{neu}^^A
-% Dieses Makro wird zwar bereits seit langem für einige wenige Fehlermeldungen
-% verwendet, existierte bisher aber nicht. Es wird für Fehlermeldungen
+% \changes{v3.12}{2013/09/19}{neu}%^^A
+% Dieses Makro wird zwar bereits seit langem für einige wenige Fehlermeldungen
+% verwendet, existierte bisher aber nicht. Es wird für Fehlermeldungen
% verwendet, denen keine eindeutige Zeilennummer zugeordnet werden kann. In
% der Regel ist dies zu vermeiden und besser \cs{PackageError} zu verwenden.
% \begin{macrocode}
@@ -292,34 +291,35 @@
% \end{macro}
%
%
-% \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Basis)}
+% \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
+% Ü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
+% Schlüssel jedes anderen Teils ausführen kann -- sobald sie definiert
% sind.
%
% \begin{macro}{\DefineFamily}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}%^^A
% \begin{macro}{\DefineFamilyMember}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
% \begin{macro}{\DefineFamilyKey}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
-% \changes{v3.12}{2013/03/04}{Setzen von \cs{FamilyKeyState}}
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
+% \changes{v3.12}{2013/03/04}{Setzen von \cs{FamilyKeyState}}
% \begin{macro}{\scr@if@family}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
+% \changes{v3.00}{2008/04/30}{Neu (intern)}%^^A
% \begin{macro}{\scr@if@familymember}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
+% \changes{v3.00}{2008/04/30}{Neu (intern)}%^^A
+% \changes{v3.27}{2019/07/19}{das leere Mitglied existiert immer}%^^A
% \begin{macro}{\scr@define@family@key}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
+% \changes{v3.00}{2008/04/30}{Neu (intern)}%^^A
% \begin{macro}{\scr@define@family@key@nodefault}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
-% \changes{v3.18a}{2015/07/03}{fehlendes \% ergänzt}^^A
-% Familie, Familienmitglied und \textsf{keyval}-Schlüssel für ein
+% \changes{v3.00}{2008/04/30}{Neu (intern)}%^^A
+% \changes{v3.18a}{2015/07/03}{fehlendes \% ergänzt}%^^A
+% Familie, Familienmitglied und \textsf{keyval}-Schlüssel für ein
% Familienmitglied definieren. Dabei wird als Familienmitglied per Default der
% (Datei-)Name des aktuellen Pakets bzw. der aktuellen Klasse verwendet.
% \begin{macrocode}
@@ -353,21 +353,25 @@
}
\newcommand*{\scr@if@familymember}[3]{%
\scr@if@family{#2}{#3}{%
- \edef\reserved@a{%
- \noexpand\in@{#2#1,}{\csname #2@key@familylist\endcsname}}%
- \reserved@a
- \ifin@
- \expandafter\@firstofone
- \else
- \PackageError{scrbase}{%
- unknown member `#1' at family `#2'%
- }{%
- You've tried to #3 for member `#1' of family `#2'.\MessageBreak
- This my be done only for previous defined family members.\MessageBreak
- You should call `\string\DefineFamilyMember[{#1}]{#2}' first.%
- }%
- \expandafter\@gobble
- \fi
+ \IfArgIsEmpty{#1}{%
+ \@firstofone
+ }{%
+ \edef\reserved@a{%
+ \noexpand\in@{#2#1,}{\csname #2@key@familylist\endcsname}}%
+ \reserved@a
+ \ifin@
+ \expandafter\@firstofone
+ \else
+ \PackageError{scrbase}{%
+ unknown member `#1' at family `#2'%
+ }{%
+ You've tried to #3 for member `#1' of family `#2'.\MessageBreak
+ This my be done only for previous defined family members.\MessageBreak
+ You should call `\string\DefineFamilyMember[{#1}]{#2}' first.%
+ }%
+ \expandafter\@gobble
+ \fi
+ }%
}%
}
\newcommand*{\DefineFamilyKey}[3][.\@currname.\@currext]{%
@@ -409,18 +413,18 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@define@family@key@nodefault
-% \end{macro}^^A \scr@define@family@key
-% \end{macro}^^A \scr@if@familymember
-% \end{macro}^^A \scr@if@family
-% \end{macro}^^A \DefineFamilyKey
-% \end{macro}^^A \DefineFamilyMember
-% \end{macro}^^A \DefineFamily
+% \end{macro}%^^A \scr@define@family@key@nodefault
+% \end{macro}%^^A \scr@define@family@key
+% \end{macro}%^^A \scr@if@familymember
+% \end{macro}%^^A \scr@if@family
+% \end{macro}%^^A \DefineFamilyKey
+% \end{macro}%^^A \DefineFamilyMember
+% \end{macro}%^^A \DefineFamily
%
% \begin{macro}{\RelaxFamilyKey}
-% \changes{v3.15}{2014/12/03}{neue Anweisung}^^A
-% Undefiniert einen Schlüssel. Irgendwelche Hilfsmakros werden dabei nicht
-% angetastet. Stattdessen wird nur der Schlüssel selbst und ggf. ein
+% \changes{v3.15}{2014/12/03}{neue Anweisung}%^^A
+% Undefiniert einen Schlüssel. Irgendwelche Hilfsmakros werden dabei nicht
+% angetastet. Stattdessen wird nur der Schlüssel selbst und ggf. ein
% Defaultwert als \cs{relax} definiert, so dass er nicht mehr verwendet werden
% kann.
% \begin{macrocode}
@@ -438,25 +442,25 @@
% \end{macro}
%
% \begin{macro}{\FamilyKeyState}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}^^A
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%^^A
% \begin{macro}{\FamilyKeyStateProcessed}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}^^A
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%^^A
% \begin{macro}{\FamilyKeyStateUnknown}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}%
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%
% \begin{macro}{\FamilyKeyStateUnknownValue}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}%
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%
% \begin{macro}{\FamilyKeyStateNeedValue}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}%
-% \cs{FamilyKeyState} gibt den Status der Verarbeitung eines Schlüssels
-% an. In der Voreinstellung wird der Status beim Aufruf des Schlüssels auf
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%
+% \cs{FamilyKeyState} gibt den Status der Verarbeitung eines Schlüssels
+% an. In der Voreinstellung wird der Status beim Aufruf des Schlüssels auf
% \cs{FamilyKeyStateUnknown} gesetzt, was anzeigt, dass der Zustand
-% unbekannnt ist, der Schlüssel aber möglicherweise verarbeitet
+% unbekannnt ist, der Schlüssel aber möglicherweise verarbeitet
% wurde. Daneben gibt es den Zustand \cs{FamilyKeyStateProcessed}, der
-% anzeigt, dass der Schlüssel komplett verarbeitet wurde. Alternativ kann
+% anzeigt, dass der Schlüssel komplett verarbeitet wurde. Alternativ kann
% das Makro einen Text enthalten, der ggf. Teil einer Fehlermeldung, einer
-% Warnung oder einer Information über Probleme bei der Verarbeitung wird. Es
+% Warnung oder einer Information über Probleme bei der Verarbeitung wird. Es
% ist zu beachten, dass \cs{FamilyKeyState} nur unmittelbar nach der
-% Verarbeitung gültig ist.
+% Verarbeitung gültig ist.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyKeyState}{}
@@ -475,35 +479,35 @@
\let\FamilyKeyState\FamilyKeyStateUnknown
%</base>
% \end{macrocode}
-% \end{macro}^^A \FamilyKeyStateNeedValue
-% \end{macro}^^A \FamilyKeyStateUnknownValue
-% \end{macro}^^A \FamilyKeyStateUnknown
-% \end{macro}^^A \FamilyKeyStateProcessed
-% \end{macro}^^A \FamilyKeyState
+% \end{macro}%^^A \FamilyKeyStateNeedValue
+% \end{macro}%^^A \FamilyKeyStateUnknownValue
+% \end{macro}%^^A \FamilyKeyStateUnknown
+% \end{macro}%^^A \FamilyKeyStateProcessed
+% \end{macro}%^^A \FamilyKeyState
%
% \begin{macro}{\FamilyOfKey}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}^^A
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%^^A
% \begin{macro}{\FamilyMemberOfKey}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}^^A
-% Geben innerhalb der Verarbeitung eines Schlüssels dessen Familie bzw. das
-% zugehörige Familienmitglied an.
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%^^A
+% Geben innerhalb der Verarbeitung eines Schlüssels dessen Familie bzw. das
+% zugehörige Familienmitglied an.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyOfKey}{}
\newcommand*{\FamilyMemberOfKey}{}
%</base>
% \end{macrocode}
-% \end{macro}^^A \FamilyMemberOfKey
-% \end{macro}^^A \FamilyOfKey
+% \end{macro}%^^A \FamilyMemberOfKey
+% \end{macro}%^^A \FamilyOfKey
%
% \begin{macro}{\KOMA@key}
-% \changes{v2.97c}{2007/04/19}{neues optionales Argument}^^A
-% \changes{v3.17}{2015/02/24}{rudimentäre Funktionalität zur Speicherung von
-% Optionen}^^A
+% \changes{v2.97c}{2007/04/19}{neues optionales Argument}%^^A
+% \changes{v3.17}{2015/02/24}{rudimentäre Funktionalität zur Speicherung von
+% Optionen}%^^A
% \begin{macro}{\KOMA@key@familylist}
-% \textsf{keyval}-Schlüssel für \KOMAScript{} werden mit \cs{KOMAkey}
+% \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.
+% Familien (\cs{KOMA@key@familylist}) hinzugefügt wird.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@key}[1][.\@currname.\@currext]{%
@@ -517,9 +521,9 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@add}
-% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}^^A
+% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}%^^A
% Dieses Makro speichert ein \texttt{key=value}-Paar in der internen Liste.
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@add}[3]{%
@@ -534,10 +538,10 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@xadd}
-% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}^^A
+% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}%^^A
% Dieses Makro speichert ein zuvor expandiertes \texttt{key=value}-Paar in der
% internen Liste.
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@xadd}[3]{%
@@ -554,10 +558,10 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@remove}
-% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}^^A
+% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}%^^A
% Dieses Makro entfernt ein ganz bestimmtes \texttt{key=value}-Paar aus der
% internen Liste.
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@remove}[3]{%
@@ -586,10 +590,10 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@removekey}
-% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}^^A
+% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}%^^A
% Dieses Makro entfernt alle \texttt{key=value}-Paar mit einem gegebenen
% \texttt{key} aus der internen Liste.
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@removekey}[2]{%
@@ -620,12 +624,12 @@
%
% \begin{macro}{\KOMA@kav@replacevalue}
% \begin{macro}{\KOMA@kav@xreplacevalue}
-% \changes{v3.17}{2015/02/25}{neu (\KOMAScript intern)}^^A
-% Diese Makros dienen dazu, den Wert Schlüssels in der internen Liste
+% \changes{v3.17}{2015/02/25}{neu (\KOMAScript intern)}%^^A
+% Diese Makros dienen dazu, den Wert Schlüssels in der internen Liste
% auszutauschen. Das erste (optionale) Argument ist das Mitglied, das zweite
-% ist der Name des Schlüssels, das dritte der neue Wert. Es setzt den Status
+% ist der Name des Schlüssels, das dritte der neue Wert. Es setzt den Status
% \cs{FamilyKeyStateProcessed} voraus. Anderenfalls tut es nichts!
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@replacevalue}[3]{%
@@ -654,12 +658,12 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@replacebool}
-% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}^^A
-% Dieses Makro dient dazu, den Wert eines if-Schlüssels in der internen Liste
+% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}%^^A
+% Dieses Makro dient dazu, den Wert eines if-Schlüssels in der internen Liste
% auszutauschen. Das erste (optionale) Argument ist das Mitglied, das zweite
-% ist der Name des Schlüssels, das dritte der Name des Schalters. Es setzt den
+% ist der Name des Schlüssels, das dritte der Name des Schalters. Es setzt den
% Status \cs{FamilyKeyStateProcessed} voraus. Anderenfalls tut es nichts!
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@replacebool}[3]{%
@@ -683,11 +687,11 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@defall}
-% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}^^A
+% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}%^^A
% Dieses Makro liefert eine \texttt{key=value}-Liste aller gespeicherten Paare.
% Das erste Argument ist die zu definierende Anweisung, das zweite ist das
% Mitglied.
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@defall}[2]{%
@@ -716,13 +720,13 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@defone}
-% \changes{v3.17}{2015/02/25}{neu (\KOMAScript intern)}^^A
-% Dieses Makro liefert alle aktuellen Werte eine Schlüssels aus der
+% \changes{v3.17}{2015/02/25}{neu (\KOMAScript intern)}%^^A
+% Dieses Makro liefert alle aktuellen Werte eine Schlüssels aus der
% \texttt{key=value}-Liste aller gespeicherten Paare. Falls es mehr als einen
-% Wert gibt, so werden diese \cs{KOMAoption}-tauglich verknüpft. Das erste
+% Wert gibt, so werden diese \cs{KOMAoption}-tauglich verknüpft. Das erste
% Argument ist die zu definierende Anweisung, das zweite ist das Mitglied
-% und das dritte der Schlüssel.
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% und das dritte der Schlüssel.
+% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@defone}[3]{%
@@ -753,8 +757,8 @@
% \end{macro}
%
% \begin{macro}{\KOMA@internal@error}
-% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}^^A
-% Einfach nur eine Meldung über einen internen Fehler mit der Bitte um einen
+% \changes{v3.17}{2015/02/24}{neu (\KOMAScript intern)}%^^A
+% Einfach nur eine Meldung über einen internen Fehler mit der Bitte um einen
% entsprechenden Bug-Report.
% \begin{macrocode}
%<*koma>
@@ -778,25 +782,25 @@
%
% 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
+% 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
+% verwendet, die auch für das jeweilige Paket bzw. die jeweilige Klasse
% definiert wurden.
%
% \begin{macro}{\@globaloptionslist}
-% \changes{v2.96}{2006/11/26}{new}^^A
-% \changes{v2.96}{2006/11/26}{Klassenoptionen durchsuchen}^^A
-% \changes{v3.20}{2016/02/06}{Entscheidung später treffen}^^A
-% Die Liste der globalen Optionen wird teilweise benötigt. Weil
-% \textsl{xkeyval} dämlicherweise glaubt, es müsse alle Optionen mit
+% \changes{v2.96}{2006/11/26}{new}%^^A
+% \changes{v2.96}{2006/11/26}{Klassenoptionen durchsuchen}%^^A
+% \changes{v3.20}{2016/02/06}{Entscheidung später treffen}%^^A
+% Die Liste 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. Bis \KOMAScript{} 3.19a wurde auch genau hier die Zuweisung
-% durchgeführt. Wenn aber \textsf{scrbase} noch vor \cs{documentclass} geladen
-% wird, dann ist \cs{@classoptionslist} natürlich noch nicht gültig. Deshalb
+% durchgeführt. Wenn aber \textsf{scrbase} noch vor \cs{documentclass} geladen
+% wird, dann ist \cs{@classoptionslist} natürlich noch nicht gültig. Deshalb
% wird die Zuweisung, seit \KOMAScript{} 3.20 in \cs{FamilyProcessOptions}
-% durchgeführt.
+% durchgeführt.
% \begin{macrocode}
%<*base>
\newcommand*{\@globaloptionslist}{}
@@ -805,30 +809,30 @@
% \end{macro}
%
% \begin{macro}{\FamilyProcessOptions}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}%
-% \changes{v3.11a}{2012/06/11}{Klassen melden falsche Werte nicht
-% selbst als Fehler, sondern informieren nur darüber}^^A
-% \changes{v3.12}{2013/03/04}{Fehlerbehandlung}^^A
-% Es ist zu beachten, dass falsche Werte für Optionen grundsätzlich nicht in
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%
+% \changes{v3.11a}{2012/06/11}{Klassen melden falsche Werte nicht
+% selbst als Fehler, sondern informieren nur darüber}%^^A
+% \changes{v3.12}{2013/03/04}{Fehlerbehandlung}%^^A
+% Es ist zu beachten, dass falsche Werte für Optionen grundsätzlich nicht in
% der Verarbeitung der Optionen per Info, Warnung oder Fehler gemeldet werden
-% sollten, sondern über setzen von \cs{FamilyKeyState}. Erst, wenn auch andere
-% Familienmitglieder den Wert nicht verarbeiten können, ergibt sich daraus
+% sollten, sondern über setzen von \cs{FamilyKeyState}. Erst, wenn auch andere
+% Familienmitglieder den Wert nicht verarbeiten können, ergibt sich daraus
% ggf. eine Meldung, die dann von der Verarbeitung hier erzeugt wird.
% Es wird darauf hingewiesen, dass diese Anweisung nicht reentrant ist. Das
-% bedeutet, dass man es innerhalb der eigenen Ausführung nicht erneut aufrufen
+% bedeutet, dass man es innerhalb der eigenen Ausführung nicht erneut aufrufen
% darf.
% \begin{macro}{\scr@removeunused}
-% \changes{v3.10}{2011/09/12}{neu (intern)}%
-% \changes{v3.12}{2013/03/04}{entfernt}^^A
-% \end{macro}^^A \scr@removeunused
+% \changes{v3.10}{2011/09/12}{neu (intern)}%
+% \changes{v3.12}{2013/03/04}{entfernt}%^^A
+% \end{macro}%^^A \scr@removeunused
% \begin{macro}{\scr@optiontest}
-% \changes{v2.97c}{2007/04/18}{neu (intern)}%
-% \changes{v3.12}{2013/03/04}{entfernt}%
+% \changes{v2.97c}{2007/04/18}{neu (intern)}%
+% \changes{v3.12}{2013/03/04}{entfernt}%
% \begin{macro}{\scr@pti@ntest}
-% \changes{v2.97c}{2007/04/18}{neu (intern)}%
-% \changes{v3.12}{2013/03/04}{entfernt}%
-% \end{macro}^^A \scr@pti@ntest
-% \end{macro}^^A \scr@optiontest
+% \changes{v2.97c}{2007/04/18}{neu (intern)}%
+% \changes{v3.12}{2013/03/04}{entfernt}%
+% \end{macro}%^^A \scr@pti@ntest
+% \end{macro}%^^A \scr@optiontest
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyProcessOptions}[2][.\@currname.\@currext]{%
@@ -844,10 +848,10 @@
}%
\fi
% \end{macrocode}
-% \changes{v3.18}{2015/06/17}{new hooks before processing the options}^^A
-% Ab Version~3.18 werden hier außerdem zwei Haken ausgeführt. Der erste gilt
-% dabei für alle Klassen und Pakete einer Familie und löscht sich nicht
-% selbst. Der zweite dagegen gilt nur ein einziges Mal für dieses eine
+% \changes{v3.18}{2015/06/17}{new hooks before processing the options}%^^A
+% Ab Version~3.18 werden hier außerdem zwei Haken ausgeführt. Der erste gilt
+% dabei für alle Klassen und Pakete einer Familie und löscht sich nicht
+% selbst. Der zweite dagegen gilt nur ein einziges Mal für dieses eine
% Mitglied.
% \begin{macrocode}
\scr@ifundefinedorrelax{scr@before@process@options@#2@hook}{}{%
@@ -859,14 +863,14 @@
\relax
}%
% \end{macrocode}
-% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
-% statt des Mitglieds}^^A
+% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
+% statt des Mitglieds}%^^A
% Jetzt \cs{AtEndOfFamilyOptions} samt Haken initialisieren.
% \begin{macrocode}
\scr@ifundefinedorrelax{scr@after@options@#2@hook}{%
\@namedef{scr@after@options@#2@hook}{%
% \end{macrocode}
-% Die erste Aktion im Haken wird sein, den Haken selbst zu löschen.
+% Die erste Aktion im Haken wird sein, den Haken selbst zu löschen.
% \begin{macrocode}
\@namedef{scr@after@options@#2@hook}{}%
}%
@@ -883,34 +887,34 @@
}%
}%
% \end{macrocode}
-% \changes{v3.23}{2017/02/16}{neuer Haken für \cs{AtEndOfFamilyOptions*}}^^A
+% \changes{v3.23}{2017/02/16}{neuer Haken für \cs{AtEndOfFamilyOptions*}}%^^A
% Seit Version 3.23 wird hier auch der neuen Haken vor
-% \cs{AtEndOfFamilyOptions*} initialisiert und ausgeführt. Erkannt wird die
+% \cs{AtEndOfFamilyOptions*} initialisiert und ausgeführt. Erkannt wird die
% oberste Ebene hier einfach an der Definition von \cs{AtEndOfFamilyOptions},
-% weil das schneller geht als die Erkennung über die Definition des Hakens
+% weil das schneller geht als die Erkennung über die Definition des Hakens
% selbst (wie sie in \cs{FamilyOptions} verwendet werden muss).
% \begin{macrocode}
\ifx\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate
\@namedef{scr@after@options@#2@hook@topmost}{%
% \end{macrocode}
-% Auch dieser Haken wird so definiert, dass er sich bei seiner Ausführung als
-% erstes selbst löscht. Das ist auch für rekursive Aufrufe wichtig, um tiefere
-% Ebenen eindeutig von der höchsten Ebene unterscheiden zu können.
+% Auch dieser Haken wird so definiert, dass er sich bei seiner Ausführung als
+% erstes selbst löscht. Das ist auch für rekursive Aufrufe wichtig, um tiefere
+% Ebenen eindeutig von der höchsten Ebene unterscheiden zu können.
% \begin{macrocode}
\@namedef{scr@after@options@#2@hook@topmost}{}%
}%
% \end{macrocode}
-% Der Top-Haken wird außerdem zusammen mit dem Zurücksetzen der Definition von
+% Der Top-Haken wird außerdem zusammen mit dem Zurücksetzen der Definition von
% \cs{AtEndOfFamilyOptions} in den Haken der (obersten) Ebene
-% eingefügt.
+% eingefügt.
% \begin{macrocode}
\expandafter\l@addto@macro\csname scr@after@options@#2@hook\endcsname{%
\let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate
\@nameuse{scr@after@options@#2@hook@topmost}%
}%
% \end{macrocode}
-% Natürlich darf nicht vergessen werden, den Befehl für das Befüllen der
-% beiden Haken nun von der direkten Ausführung eben auf das Befüllen der Haken
+% Natürlich darf nicht vergessen werden, den Befehl für das Befüllen der
+% beiden Haken nun von der direkten Ausführung eben auf das Befüllen der Haken
% umzustellen.
% \begin{macrocode}
\let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions
@@ -923,12 +927,12 @@
\ifx\@currext\@clsextension\else
% \end{macrocode}
% Bei Klassen ist die aktuelle Optionenliste gleichzeitig die globale
-% Optionenliste. Daher dürften Klassen nicht auch noch die globale Optionliste
+% Optionenliste. Daher dürften Klassen nicht auch noch die globale Optionliste
% verarbeiten. Paket verarbeiten jedoch auch die globale Optionenliste, geben
% dazu jedoch keine Fehler oder Warnungen aus.
-% \changes{v3.18}{2015/06/17}{Behandlung von undefiniertem
-% \cs{@globaloptionslist}}^^A
-% \changes{v3.20}{2016/02/06}{\cs{@globaloptionslist} immer neu zuweisen}^^A
+% \changes{v3.18}{2015/06/17}{Behandlung von undefiniertem
+% \cs{@globaloptionslist}}%^^A
+% \changes{v3.20}{2016/02/06}{\cs{@globaloptionslist} immer neu zuweisen}%^^A
% \begin{macrocode}
\let\@globaloptionslist\@classoptionslist
\scr@ifundefinedorrelax{XKV@classoptionslist}{%
@@ -957,10 +961,10 @@
\else
% \end{macrocode}
% Wenn die Option keine \LaTeX-Option ist, kann sie noch immer eine
-% \textsf{keyval}-Option sein. In diesem Fall wird geprüft, ob das
+% \textsf{keyval}-Option sein. In diesem Fall wird geprüft, ob das
% Mitglied (\#1) eine Option in der Familie (\#2) hat. Wenn das der Fall ist,
-% wird die Option unmittelbar ausgeführt und zwar einmal ohne Mitglied (also
-% Optionen, die global der Familie gehören) und dann mit Mitglied. Im Fall
+% wird die Option unmittelbar ausgeführt und zwar einmal ohne Mitglied (also
+% Optionen, die global der Familie gehören) und dann mit Mitglied. Im Fall
% einer unbekannnten Option oder eines unbekannten Wertes, geschieht hier gar
% nichts.
% \begin{macrocode}
@@ -974,22 +978,22 @@
}%
\fi
% \end{macrocode}
-% Sowohl für Klassen als auch für Pakete werden nun die aktuellen Optionen
+% Sowohl für Klassen als auch für Pakete werden nun die aktuellen Optionen
% abgearbeitet. In diesem Fall ist zu beachten, dass nicht definierte Optionen
-% oder unbekannte Werte für Optionen unmittelbar zu einem Fehler führen, wenn
+% oder unbekannte Werte für Optionen unmittelbar zu einem Fehler führen, wenn
% es sich um ein Paket handelt. Bei Klassen landet die Option hingegen in der
% Liste der nicht benutzten globalen Optionen.
% \begin{macrocode}
\@for\CurrentOption:=\@curroptions\do{%
% \end{macrocode}
-% \changes{v3.26}{2018/10/22}{Optionen werden für Tests etc. nicht mehr
-% vollständig expandiert}^^A
-% \changes{v3.26}{2018/10/22}{\cs{@use@ption} wird für key-value-Optionen
-% nicht mehr aufgerufen}^^A
-% Ab \KOMAScript~3.26 wird für den Test, ob eine Option als normale Option
+% \changes{v3.26}{2018/10/22}{Optionen werden für Tests etc. nicht mehr
+% vollständig expandiert}%^^A
+% \changes{v3.26}{2018/10/22}{\cs{@use@ption} wird für key-value-Optionen
+% nicht mehr aufgerufen}%^^A
+% Ab \KOMAScript~3.26 wird für den Test, ob eine Option als normale Option
% existiert, die Option nicht mehr komplett expandiert. Da die wirklich
% notwendige Expansion bereits erfolgt ist, verhindert das Fehler wegen
-% angeblich fehlendem \cs{endcsname}. Gleichzeitig wird für key-value-Optionen
+% angeblich fehlendem \cs{endcsname}. Gleichzeitig wird für key-value-Optionen
% \cs{@use@ption} nicht mehr aufgerufen, da das darin enthaltene
% |\csname ds@\CurrentOption\endcsname| dasselbe Problem hat. Stattdessen wird
% die Option nur noch aus der Liste der nicht verwendeten Optionen entfernt.
@@ -1002,8 +1006,8 @@
}\@use@ption
}%
% \end{macrocode}
-% Fast zum Schluss wird wir im \LaTeX-Kern der Optionencode für alle
-% deklarierten \LaTeX-Optionen gelöscht und dafür gesorgt, dass nach dem Paket
+% Fast zum Schluss wird wir im \LaTeX-Kern der Optionencode für alle
+% deklarierten \LaTeX-Optionen gelöscht und dafür gesorgt, dass nach dem Paket
% keine unverarbeiteten Optionen mehr vorhanden sind.
% \begin{macrocode}
\@for\CurrentOption:=\@declaredoptions\do{%
@@ -1012,20 +1016,20 @@
\let\@fileswith@pti@ns\@@fileswith@pti@ns
\AtEndOfPackage{\let\@unprocessedoptions\relax}%
% \end{macrocode}
-% Jetzt muss noch der Hook ausgeführt und wieder gelöscht werden.
-% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
-% statt des Mitglieds}^^A
+% Jetzt muss noch der Hook ausgeführt und wieder gelöscht werden.
+% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
+% statt des Mitglieds}%^^A
% \begin{macrocode}
\@nameuse{scr@after@options@#2@hook}%
}
\@onlypreamble\FamilyProcessOptions
% \end{macrocode}
% \begin{macro}{\BeforeFamilyProcessOptions}
-% \changes{v3.18}{2015/06/17}{neu}
-% Über diese Anweisung kann man Code unmittelbar vor Ausführung von
-% \cs{FamilyProcessOptions} ausgeführt werden. Dabei muss zur Verwendung
+% \changes{v3.18}{2015/06/17}{neu}
+% Über diese Anweisung kann man Code unmittelbar vor Ausführung von
+% \cs{FamilyProcessOptions} ausgeführt werden. Dabei muss zur Verwendung
% des Hakens weder das Mitglied noch die Familie existieren. Man kann dies
-% also beispielsweise auch verwenden, um unmittelbar vor der Ausführung der
+% also beispielsweise auch verwenden, um unmittelbar vor der Ausführung der
% Optionen eines Pakets oder einer Klasse einzugreifen noch bevor das Paket
% oder die Klasse geladen ist.
% \begin{macrocode}
@@ -1038,23 +1042,23 @@
}%
}
% \end{macrocode}
-% \end{macro}^^A \BeforeFamilyProcessOptions
+% \end{macro}%^^A \BeforeFamilyProcessOptions
% \begin{macro}{\AtEndOfFamilyOptions}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}^^A
-% \changes{v3.23}{2017/02/16}{Sternvariante}^^A
-% Mit dieser Option kann innerhalb der Ausführung einer Option Material auf
+% \changes{v3.12}{2013/03/04}{Neue Anweisung}%^^A
+% \changes{v3.23}{2017/02/16}{Sternvariante}%^^A
+% Mit dieser Option kann innerhalb der Ausführung einer Option Material auf
% das Ende der aktuellen \cs{FamilyProcessOptions}, \cs{FamilyExecuteOptions},
-% \cs{FamilyOptions} oder \cs{FamilyOption} verzögert werden. Als einziges
-% Argument wird der zu verzögernde Code erwartet, der an \cs{l@addto@macro}
-% delegiert wird. Die Normalvariante verzögert bei verschachtelten
+% \cs{FamilyOptions} oder \cs{FamilyOption} verzögert werden. Als einziges
+% Argument wird der zu verzögernde Code erwartet, der an \cs{l@addto@macro}
+% delegiert wird. Die Normalvariante verzögert bei verschachtelten
% \cs{FamilyOptions} bis zum Ende der aktuellen Schachtet, die Sternvariante
-% bis zum Ende der äußeren Schachtel.
+% bis zum Ende der äußeren Schachtel.
% \begin{macro}{\scr@AtEndOfFamilyOptions}
-% \changes{v3.12}{2013/05/29}{Neue Anweisung (intern)}^^A
+% \changes{v3.12}{2013/05/29}{Neue Anweisung (intern)}%^^A
% \begin{macro}{\scr@@AtEndOfFamilyOptions}
-% \changes{v3.23}{2017/02/16}{Neue Anweisung (intern)}^^A
+% \changes{v3.23}{2017/02/16}{Neue Anweisung (intern)}%^^A
% \begin{macro}{\scr@AtEndOfFamilyOptions@immediate}
-% \changes{v3.23}{2017/02/16}{Neue Anweisung (intern)}^^A
+% \changes{v3.23}{2017/02/16}{Neue Anweisung (intern)}%^^A
% \begin{macrocode}
\newcommand*{\scr@AtEndOfFamilyOptions}{%
\kernel@ifstar {\scr@@AtEndOfFamilyOptions{@topmost}}%
@@ -1070,32 +1074,32 @@
\newcommand*{\AtEndOfFamilyOptions}{}
\let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate
% \end{macrocode}
-% \end{macro}^^A \scr@AtEndOfFamilyOptions@immediate
-% \end{macro}^^A \scr@@AtEndOfFamilyOptions
-% \end{macro}^^A \scr@AtEndOfFamilyOptions
-% \end{macro}^^A \AtEndOfFamilyOptions
+% \end{macro}%^^A \scr@AtEndOfFamilyOptions@immediate
+% \end{macro}%^^A \scr@@AtEndOfFamilyOptions
+% \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}^^A
-% Dieses Makro führt eine aktuelle \textsf{keyval}-Option für das angegebene
+% in Klammern gesetzt}%^^A
+% 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
+% entsprechenden Wert hat, wird das vierte Argument ausgeführt, anderenfalls
% nicht. Es ist zu beachten, dass vor der Option des Mitglieds die
-% Familien-Option auszuführen ist. Ggf. benötigt das Mitglied dann keine
+% Familien-Option auszuführen ist. Ggf. benötigt das Mitglied dann keine
% entsprechende Option.
% \begin{macrocode}
\newcommand*\scr@ifprocess@curroption[2]{%
% \end{macrocode}
-% \changes{v3.26}{2018/10/22}{\cs{scr@sp@def} statt \cs{def} für das Abtrennen
-% des Schlüssels}^^A
+% \changes{v3.26}{2018/10/22}{\cs{scr@sp@def} statt \cs{def} für das Abtrennen
+% des Schlüssels}%^^A
% Da am 21. Oktober 2018 eine Diskussion begann, die darauf hindeutet, dass
-% das Entfernen der Leerzeichen in der Optionenliste sich jederzeit ändern
-% könnte, wird hier (und an einer weiteren Stelle) nun \cs{scr@sp@def}
-% verwendet, um den Schlüssel zu erhalten. Allerdings genügt dies nicht, falls
-% irgendwann tatsächlich gar keine Leerzeichen mehr entfernt werden. Dann
-% müsste nämlich der komplette Parser umgeschrieben werden. Ich bin alles
+% das Entfernen der Leerzeichen in der Optionenliste sich jederzeit ändern
+% könnte, wird hier (und an einer weiteren Stelle) nun \cs{scr@sp@def}
+% verwendet, um den Schlüssel zu erhalten. Allerdings genügt dies nicht, falls
+% irgendwann tatsächlich gar keine Leerzeichen mehr entfernt werden. Dann
+% müsste nämlich der komplette Parser umgeschrieben werden. Ich bin alles
% andere als begeistert von der Tatsache, dass hier im \LaTeX-Kern Jahrzehnte
-% altes Verhalten ohne Rücksicht auf Verluste zur Disposition gestellt wird.
+% altes Verhalten ohne Rücksicht auf Verluste zur Disposition gestellt wird.
% \begin{macrocode}
\def\reserved@a##1=##2\@nil{\scr@sp@def\reserved@a{##1}}%
\expandafter\reserved@a\CurrentOption=\@nil
@@ -1165,23 +1169,23 @@
% \end{macrocode}
% \begin{macro}{\scr@sp@def}
% \changes{v3.26}{2018/08/29}{von \texttt{tocbasic.dtx} nach
-% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}^^A
-% \changes{v3.26b}{2019/01/17}{\cs{long}}^^A
+% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}%^^A
+% \changes{v3.26b}{2019/01/17}{\cs{long}}%^^A
% \begin{macro}{\scr@sp@d}
% \changes{v3.26}{2018/08/29}{von \texttt{tocbasic.dtx} nach
-% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}^^A
+% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}%^^A
% \begin{macro}{\scr@sp@b}
% \changes{v3.26}{2018/08/29}{von \texttt{tocbasic.dtx} nach
-% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}^^A
-% \changes{v3.26b}{2019/01/17}{\cs{long}}^^A
+% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}%^^A
+% \changes{v3.26b}{2019/01/17}{\cs{long}}%^^A
% \begin{macro}{\scr@sp@c}
% \changes{v3.26}{2018/08/29}{von \texttt{tocbasic.dtx} nach
-% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}^^A
-% \changes{v3.26b}{2019/01/17}{\cs{long}}^^A
+% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}%^^A
+% \changes{v3.26b}{2019/01/17}{\cs{long}}%^^A
% Die Hilfsanweisung \cs{scr@sp@def} definiert eine Anweisung (erstes
% Argument) mit einer Tokenliste (zweites Argument) und entfernt dabei
-% führende und abschließende Leerzeichen. Die Anweisung stammt ursprünglich
-% aus \textsf{keyval}. Der Rest sind Hilfsanweisungen für die Implementierung
+% führende und abschließende Leerzeichen. Die Anweisung stammt ursprünglich
+% aus \textsf{keyval}. Der Rest sind Hilfsanweisungen für die Implementierung
% der Hilfsanweisung.
% \begin{macrocode}
\def\@tempa#1{%
@@ -1199,24 +1203,24 @@
\long\def\scr@sp@c#1\@nil#2\relax#3{\@temptokena{#1}\edef#3{\the\@temptokena}}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@sp@c
-% \end{macro}^^A \scr@sp@b
-% \end{macro}^^A \scr@sp@d
-% \end{macro}^^A \scr@sp@def
-% \end{macro}^^A \scr@process@curroption
-% \end{macro}^^A \FamilyProcessOptions
+% \end{macro}%^^A \scr@sp@c
+% \end{macro}%^^A \scr@sp@b
+% \end{macro}%^^A \scr@sp@d
+% \end{macro}%^^A \scr@sp@def
+% \end{macro}%^^A \scr@process@curroption
+% \end{macro}%^^A \FamilyProcessOptions
%
% \begin{macro}{\KOMAProcessOptions}
-% \changes{v2.97c}{2007/04/18}{neu}%
-% \changes{v3.00}{2008/04/30}{kein optionales Argument mehr}%
-% Diese Anweisung führt alle Optionen, sowohl normal deklarierte als auch
+% \changes{v2.97c}{2007/04/18}{neu}%
+% \changes{v3.00}{2008/04/30}{kein optionales Argument mehr}%
+% 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 globale 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.
+% keyval-Optionen ausgeführt.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAProcessOptions}{\FamilyProcessOptions{KOMA}}
@@ -1231,12 +1235,12 @@
% \fi
%
% \begin{option}{internalonly}
-% \changes{v2.96}{2006/11/26}{neu}^^A
-% \changes{v2.97c}{2007/06/20}{geht auch ohne Argument}^^A
+% \changes{v2.96}{2006/11/26}{neu}%^^A
+% \changes{v2.97c}{2007/06/20}{geht auch ohne Argument}%^^A
% \begin{macro}{\dont@let@as@internal@defined}
-% \changes{v2.96}{2006/11/26}{neu (intern)}^^A
+% \changes{v2.96}{2006/11/26}{neu (intern)}%^^A
% Anweisungen, die mit einem internen und einem Anwendername vorhanden sind,
-% können vor dem Anwender optional verborgen werden. Wird kein Argument
+% können vor dem Anwender optional verborgen werden. Wird kein Argument
% angegeben, so werden alle Anweisungen verborgen.
% \begin{macrocode}
%<*base>
@@ -1261,8 +1265,8 @@
% \end{option}
%
%
-% \changes{v2.96}{2006/08/20}{Optionen werden abgearbeitet}^^A
-% \changes{v2.97c}{2007/04/18}{Optionen werden mit \cs{KOMAProcessOptions}^^A
+% \changes{v2.96}{2006/08/20}{Optionen werden abgearbeitet}%^^A
+% \changes{v2.97c}{2007/04/18}{Optionen werden mit \cs{KOMAProcessOptions}%^^A
% abgearbeitet}
% \begin{macrocode}
%<koma>\KOMAProcessOptions\relax
@@ -1274,11 +1278,11 @@
%<*body>
% \fi
%
-% \subsection{Ein wenig zusätzliche Mathematik für \eTeX}
+% \subsection{Ein wenig zusätzliche Mathematik für \eTeX}
%
% \begin{macro}{\XdivY}
-% \changes{v3.05a}{2010/03/10}{Neu}^^A
-% Ergebnis ist erster Argument durch zweites abgerundet auf die nächst
+% \changes{v3.05a}{2010/03/10}{Neu}%^^A
+% Ergebnis ist erster Argument durch zweites abgerundet auf die nächst
% kleinere ganze Zahl.
% \begin{macrocode}
%<*base>
@@ -1290,7 +1294,7 @@
% \end{macro}
%
% \begin{macro}{\XmodY}
-% \changes{v3.05a}{2010/03/10}{Neu}^^A
+% \changes{v3.05a}{2010/03/10}{Neu}%^^A
% Ergebnis ist erstes Argument modulo zweites Argument.
% \begin{macrocode}
%<*base>
@@ -1301,17 +1305,44 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Häufig benötigte Befehle}
+% \subsection{Häufig benötigte Befehle}
+%
+% \selectlanguage{english}%^^A
+% \begin{macro}{\scr@ForEachTrimmedListElement}
+% \changes{v3.27}{2019/04/16}{new (internal)}%^^A
+% Executes \cs{\#2\{\meta{element}\}} for each \meta{element} of the comma
+% separated list \#1. Spaces before for after \meta{element} are eliminated
+% and empty elements are ignored.
+% \begin{macrocode}
+%<*base>
+\newcommand{\scr@ForEachTrimmedListElement}[2]{%
+ \begingroup
+ \def\reserved@a{\endgroup}%
+ \@for \reserved@b:=#1 \do {%
+ \scr@trim@spaces\reserved@b
+ \ifx\reserved@b\@empty\else
+ \edef\reserved@a{%
+ \unexpanded\expandafter{\reserved@a#2}%
+ {\unexpanded\expandafter{\reserved@b}}%
+ }%
+ \fi
+ }%
+ \reserved@a
+}
+%</base>
+% \end{macrocode}
+% \end{macro}%^^A \scr@ForEachTrimmedListElement
+% \selectlanguage{ngerman}%^^A
%
% \begin{macro}{\scr@trim@spaces}
-% \changes{v3.12}{2013/11/06}{neu (intern)}^^A
+% \changes{v3.12}{2013/11/06}{neu (intern)}%^^A
% \changes{v3.26}{2018/08/29}{von \texttt{scrkernel-language.dtx} nach
-% \texttt{scrkernel-basics.dtx} verschoben}^^A
-% Diese Hilfsanweisung entfernt führende und abschließende
+% \texttt{scrkernel-basics.dtx} verschoben}%^^A
+% Diese Hilfsanweisung entfernt führende und abschließende
% Leerzeichen. Argument ist die Anweisung, deren Inhalt von den Leerzeichen
-% befreit werden soll. Gedacht ist das ganze für die Listenverarbeitung mit
-% Hilfe von \cs{@for}. Als Argument wird ein Makro übergeben, in dessen
-% Definition führende und abschließende space-Tokens entfernt werden sollen.
+% befreit werden soll. Gedacht ist das ganze für die Listenverarbeitung mit
+% Hilfe von \cs{@for}. Als Argument wird ein Makro übergeben, in dessen
+% Definition führende und abschließende space-Tokens entfernt werden sollen.
% \begin{macrocode}
%<*base>
\newcommand\scr@trim@spaces[1]{%
@@ -1319,15 +1350,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@trim@space
+% \end{macro}%^^A \scr@trim@space
%
% \begin{macro}{\if@atdocument}
-% \changes{v2.95}{2002/12/05}{neuer Schalter}^^A
+% \changes{v2.95}{2002/12/05}{neuer Schalter}%^^A
% \begin{macro}{\@atdocumenttrue}
% \begin{macro}{\@atdocumentfalse}
% Dieser Schalter wird bei \cs{begin}\texttt{\{document\}} wahr. Er
-% wird von \KOMAScript{} für Befehle verwendet, die sich
-% unterschiedlich verhalten, je nachdem, ob sie in der Präambel oder
+% wird von \KOMAScript{} für Befehle verwendet, die sich
+% unterschiedlich verhalten, je nachdem, ob sie in der Präambel oder
% danach aufgerufen werden.
% \begin{macrocode}
%<*base>
@@ -1342,21 +1373,21 @@
% \end{macro}
%
% \begin{macro}{\let@as@internal@defined}
-% \changes{v2.95}{2002/08/19}{neu (intern)}^^A
-% \changes{v2.95c}{2006/08/12}{Warnung bei Umdefinierung}^^A
-% \changes{v2.96}{2006/11/26}{Herausreichen von internen Makros als
-% Benutzermakros kann verhindert werden}^^A
-% \changes{v2.97c}{2007/06/20}{Herausreichen von internen Makros kann
-% generell verhindert werden}^^A
-% \changes{v3.10}{2010/10/26}{\cs{ignorespaces} beim \cs{document}-Patch
-% ergänzt}
-% \changes{v3.13a}{2014/08/13}{potentielle Leerzeichen durch Zeilenumbruch
-% beseitigt}^^A
+% \changes{v2.95}{2002/08/19}{neu (intern)}%^^A
+% \changes{v2.95c}{2006/08/12}{Warnung bei Umdefinierung}%^^A
+% \changes{v2.96}{2006/11/26}{Herausreichen von internen Makros als
+% Benutzermakros kann verhindert werden}%^^A
+% \changes{v2.97c}{2007/06/20}{Herausreichen von internen Makros kann
+% generell verhindert werden}%^^A
+% \changes{v3.10}{2010/10/26}{\cs{ignorespaces} beim \cs{document}-Patch
+% 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
-% dokumentierten Makros wird als Parameter übergeben. Dies wird gleich
-% benötigt.
+% dokumentierten Makros wird als Parameter übergeben. Dies wird gleich
+% benötigt.
% \begin{macrocode}
%<*base>
\newcommand*{\let@as@internal@defined}[1]{%
@@ -1422,9 +1453,9 @@
% \end{macro}
%
% \begin{macro}{\ifundefinedorrelax}
-% \changes{v2.95}{2002/08/21}{neu}^^A
-% \changes{v2.95c}{2006/08/12}{über interne Anweisung definiert}^^A
-% \changes{v2.97c}{2007/06/20}{umbenannt von \cs{ifundefined}}
+% \changes{v2.95}{2002/08/21}{neu}%^^A
+% \changes{v2.95c}{2006/08/12}{über interne Anweisung definiert}%^^A
+% \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}
@@ -1435,11 +1466,11 @@
% \end{macro}
%
% \begin{macro}{\ifnotundefined}
-% \changes{v2.95}{2002/08/21}{neu}^^A
-% \changes{v2.95c}{2006/08/12}{nutzt \eTeX{} wenn möglich}
-% \changes{v3.02c}{2009/02/19}{\eTeX{} ist zwingend}
+% \changes{v2.95}{2002/08/21}{neu}%^^A
+% \changes{v2.95c}{2006/08/12}{nutzt \eTeX{} wenn möglich}
+% \changes{v3.02c}{2009/02/19}{\eTeX{} ist zwingend}
% Dieses Makro arbeitet genau umgekehrt zu \cs{ifundefined}. Manchmal
-% ist es ganz nützlich, auch das zu haben. Dieses Makro heißt nicht
+% 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}
%<*base>
@@ -1455,10 +1486,10 @@
% \end{macro}
%
% \begin{macro}{\ifstr}
-% \changes{v2.95}{2004/07/20}{if- und then-Teil werden nicht gefressen}^^A
-% \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}
-% Dieses Makro vergleicht zwei Tokenfolgen. Eigentlich müsste es also
-% eher \cs{ifequal} oder ähnlich heißen.
+% \changes{v2.95}{2004/07/20}{if- und then-Teil werden nicht gefressen}%^^A
+% \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}
+% Dieses Makro vergleicht zwei Tokenfolgen. Eigentlich müsste es also
+% eher \cs{ifequal} oder ähnlich heißen.
% \begin{macrocode}
%<*base>
\newcommand\ifstr[2]{%
@@ -1474,9 +1505,9 @@
% \end{macro}
%
% \begin{macro}{\ifstrstart}
-% \changes{v3.12}{2013/11/05}{neu}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
% Falls die Expansion des ersten Arguments mit der Expansion des zweiten
-% Arguments beginnt, wird das dritte Argument ausgeführt, sonst das vierte.
+% Arguments beginnt, wird das dritte Argument ausgeführt, sonst das vierte.
% \begin{macrocode}
%<*base>
\newcommand*{\ifstrstart}[2]{%
@@ -1487,8 +1518,8 @@
}
% \end{macrocode}
% \begin{macro}{\@ifstrstart}
-% \changes{v3.12}{2013/11/05}{neu (intern)}^^A
-% Hilfsmakro, damit die Argumente vollständig expandiert werden können.
+% \changes{v3.12}{2013/11/05}{neu (intern)}%^^A
+% Hilfsmakro, damit die Argumente vollständig expandiert werden können.
% \begin{macrocode}
\newcommand*{\@ifstrstart}[2]{%
\def\reserved@a ##1#2##2\@nil{%
@@ -1502,16 +1533,20 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \@ifstrstart
-% \end{macro}^^A \ifstrstart
+% \end{macro}%^^A \@ifstrstart
+% \end{macro}%^^A \ifstrstart
%
% \begin{macro}{\IfArgIsEmpty}
-% \changes{v3.19}{2015/08/29}{neu}^^A
-% Falls das erste Argument tatsächlich leer ist, wird das zweite Argument
-% ausgeführt sonst das dritte.
+% \changes{v3.19}{2015/08/29}{neu}%^^A
+% \changes{v3.27}{2019/03/11}{\cs{long}}%^^A
+% \changes{v3.27}{2019/07/19}{wird bereits vor den Optionen benötigt}%^^A
+% Falls das erste Argument tatsächlich leer ist, wird das zweite Argument
+% ausgeführt sonst das dritte.
+%</body>
+%<*prepare>
%<*base>
% \begin{macrocode}
-\newcommand*{\IfArgIsEmpty}[1]{%
+\newcommand{\IfArgIsEmpty}[1]{%
\if\relax\detokenize{#1}\relax
\expandafter\@firstoftwo
\else
@@ -1520,14 +1555,16 @@
}
% \end{macrocode}
%</base>
-% \end{macro}^^A \IfArgIsEmpty
+%</prepare>
+%<*body>
+% \end{macro}%^^A \IfArgIsEmpty
%
%
% \begin{macro}{\ifislengthprimitive}
-% \changes{v3.20}{2015/10/19}{neu}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem Primitiv
-% expandiert, das als Länge verwendet werden kann, wird das erste Argument
-% ausgeführt, sonst das zweite.
+% \changes{v3.20}{2015/10/19}{neu}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem Primitiv
+% expandiert, das als Länge verwendet werden kann, wird das erste Argument
+% ausgeführt, sonst das zweite.
% \begin{macrocode}
%<*base>
\newcommand*{\ifislengthprimitive}[1]{%
@@ -1535,8 +1572,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifislengthprimitive}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf diverse Primitive prüft.
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf diverse Primitive prüft.
% \begin{macrocode}
\newcommand*{\scr@ifislengthprimitive}[1]{%
\begingroup
@@ -1560,16 +1597,16 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@ifislengthprimitive
-% \end{macro}^^A \ifislengthprimitive
+% \end{macro}%^^A \scr@ifislengthprimitive
+% \end{macro}%^^A \ifislengthprimitive
%
%
% \begin{macro}{\ifisdimen}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem
% \cs{dimen}-Register (und zu nichts weiterem!) expandiert, wird das erste
-% Argument ausgeführt, sonst das zweite.
+% Argument ausgeführt, sonst das zweite.
% \begin{macrocode}
%<*base>
\newcommand*{\ifisdimen}[1]{%
@@ -1577,8 +1614,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdimen}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf ein \cs{dimen}-Register prüft
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf ein \cs{dimen}-Register prüft
% \begin{macrocode}
\newcommand*{\scr@ifisdimen}[1]{%
\begingroup
@@ -1595,12 +1632,12 @@
#1%
}
% \end{macrocode}
-% \end{macro}^^A \scr@ifisdimen
+% \end{macro}%^^A \scr@ifisdimen
% \begin{macro}{\scr@TestDimenAssignTillNil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
+% \changes{v3.20}{2015/10/19}{neu (intern)}
+% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
+% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
% Argument wird in jedem Fall komplett aufgebraucht.
% \begin{macrocode}
\newcommand*\scr@TestDimenAssignTillNil{}
@@ -1611,12 +1648,12 @@
}
% \end{macrocode}
% \begin{macro}{\scr@IfAfterEndgroupArgIsRelaxTillNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
+% \changes{v3.20}{2015/10/19}{neu (intern)}
% \begin{macro}{\scr@IfArgIsRelaxAfterRelaxTillNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
+% \changes{v3.20}{2015/10/19}{neu (intern)}
% Die Hilfsmakros lesen ein durch \cs{@nnil} begrenztes Argument. Falls dieses
% Argument nur aus einer Folge von \cs{relax} besteht, wird das erste Argument
-% nach \cs{@nnil} ausgeführt, sonst das zweite.
+% nach \cs{@nnil} ausgeführt, sonst das zweite.
% \begin{macrocode}
\newcommand*\scr@AfterEndGroupIfArgIsRelaxTillNnil{}
\def\scr@AfterEndGroupIfArgIsRelaxTillNnil#1\@nnil{%
@@ -1636,38 +1673,38 @@
}%
}
% \end{macrocode}
-% \end{macro}^^A \scr@IfArgIsRelaxAfterRelaxTillNnil
-% \end{macro}^^A \scr@IfArgIsRelaxTillNnil
-% \end{macro}^^A \scr@TestSkipAssignTillNil
+% \end{macro}%^^A \scr@IfArgIsRelaxAfterRelaxTillNnil
+% \end{macro}%^^A \scr@IfArgIsRelaxTillNnil
+% \end{macro}%^^A \scr@TestSkipAssignTillNil
% \begin{macro}{\scr@secondoftwoAfterNil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% Das Hilfsmakro liest ein durch \cs{@nil} begrenztes Argument und führt dann
-% das zweite Argument nach \cs{@nil} aus. Dabei wird auch Sorge dafür getrage,
-% dass das Argument eventuell leer sein könnte, was normalerweise dazu führen
-% würde, dass \cs{@nil} zum Argument selbst wird.
+% \changes{v3.20}{2015/10/19}{neu (intern)}
+% Das Hilfsmakro liest ein durch \cs{@nil} begrenztes Argument und führt dann
+% das zweite Argument nach \cs{@nil} aus. Dabei wird auch Sorge dafür getrage,
+% dass das Argument eventuell leer sein könnte, was normalerweise dazu führen
+% würde, dass \cs{@nil} zum Argument selbst wird.
% \begin{macro}{\scr@@secondoftwoAfterNil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% Zu diesem Zweck wird ein zweites Hilfsmakro benötigt.
+% \changes{v3.20}{2015/10/19}{neu (intern)}
+% Zu diesem Zweck wird ein zweites Hilfsmakro benötigt.
% \begin{macrocode}
\newcommand*{\scr@secondoftwoAfterNil}{\scr@@secondoftwoAfterNil\@empty}
\newcommand*{\scr@@secondoftwoAfterNil}{}
\def\scr@@secondoftwoAfterNil#1\@nil{\@secondoftwo}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@@secondoftwoAfterNil
-% \end{macro}^^A \scr@secondoftwoAfterNil
-% \end{macro}^^A \ifisdimen
+% \end{macro}%^^A \scr@@secondoftwoAfterNil
+% \end{macro}%^^A \scr@secondoftwoAfterNil
+% \end{macro}%^^A \ifisdimen
%
% \begin{macro}{\ifisskip}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.18a}{2015/07/07}{\cs{baselineskip} und \cs{parskip} werden als
-% skips akzeptiert}^^A
-% \changes{v3.20}{2015/10/19}{\cs{baselineskip} und \cs{parskip} sind keine
-% skips}^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.18a}{2015/07/07}{\cs{baselineskip} und \cs{parskip} werden als
+% skips akzeptiert}%^^A
+% \changes{v3.20}{2015/10/19}{\cs{baselineskip} und \cs{parskip} sind keine
+% skips}%^^A
+% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem
% \cs{skip}-Register (und zu nichts weiterem!) expandiert, wird das erste
-% Argument ausgeführt, sonst das zweite.
+% Argument ausgeführt, sonst das zweite.
% \begin{macrocode}
%<*base>
\newcommand*{\ifisskip}[1]{%
@@ -1675,8 +1712,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisskip}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf ein \cs{skip}-Register prüft
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf ein \cs{skip}-Register prüft
% \begin{macrocode}
\newcommand*{\scr@ifisskip}[1]{%
\begingroup
@@ -1693,12 +1730,12 @@
#1%
}
% \end{macrocode}
-% \end{macro}^^A \scr@ifisskip
+% \end{macro}%^^A \scr@ifisskip
% \begin{macro}{\scr@TestSkipAssignTillNil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
+% \changes{v3.20}{2015/10/19}{neu (intern)}
+% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
+% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
% Argument wird in jedem Fall komplett aufgebraucht.
% \begin{macrocode}
\newcommand*\scr@TestSkipAssignTillNil{}
@@ -1709,15 +1746,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@TestSkipAssignTillNil
-% \end{macro}^^A \ifiskip
+% \end{macro}%^^A \scr@TestSkipAssignTillNil
+% \end{macro}%^^A \ifiskip
%
% \begin{macro}{\ifiscount}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem
% \cs{count}-Register (und zu nichts weiterem!) expandiert, wird das erste
-% Argument ausgeführt, sonst das zweite.
+% Argument ausgeführt, sonst das zweite.
% \begin{macrocode}
%<*base>
\newcommand*{\ifiscount}[1]{%
@@ -1725,8 +1762,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifiscount}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf ein \cs{count}-Register prüft
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf ein \cs{count}-Register prüft
% \begin{macrocode}
\newcommand*{\scr@ifiscount}[1]{%
\begingroup
@@ -1743,12 +1780,12 @@
#1%
}
% \end{macrocode}
-% \end{macro}^^A \scr@ifiscount
+% \end{macro}%^^A \scr@ifiscount
% \begin{macro}{\scr@TestSkipCountTillNil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
+% \changes{v3.20}{2015/10/19}{neu (intern)}
+% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
+% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
% Argument wird in jedem Fall komplett aufgebraucht.
% \begin{macrocode}
\newcommand*\scr@TestCountAssignTillNil{}
@@ -1759,19 +1796,19 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@TestCountAssignTillNil
-% \end{macro}^^A \ifiscount
+% \end{macro}%^^A \scr@TestCountAssignTillNil
+% \end{macro}%^^A \ifiscount
%
%
% \begin{macro}{\ifisdimexpr}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einer
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einer
% \cs{dimexpr} (und zu nichts weiterem!) expandiert, wird das erste
-% Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
+% Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
% wichtigen Punkt von \cs{ifisdimen}: Sollte das ganze zwar als \cs{dimexpr}
% beginnen, aber syntaktisch nicht korrekt sein, so wird dies nicht erkannt,
-% sondern führt tatsächlich zu einer Fehlermeldung.
+% sondern führt tatsächlich zu einer Fehlermeldung.
% \begin{macrocode}
%<*base>
\newcommand*{\ifisdimexpr}[1]{%
@@ -1779,8 +1816,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdimexpr}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{dimexpr} prüft
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf eine \cs{dimexpr} prüft
% \begin{macrocode}
\newcommand*{\scr@ifisdimexpr}[1]{%
\begingroup
@@ -1798,19 +1835,19 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@ifisdimexpr
-% \end{macro}^^A \ifisdimexpr
+% \end{macro}%^^A \scr@ifisdimexpr
+% \end{macro}%^^A \ifisdimexpr
%
%
% \begin{macro}{\ifisglueexpr}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einer
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einer
% \cs{glueexpr} (und zu nichts weiterem!) expandiert, wird das erste
-% Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
+% Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
% wichtigen Punkt von \cs{ifisskip}: Sollte das ganze zwar als \cs{glueexpr}
% beginnen, aber syntaktisch nicht korrekt sein, so wird dies nicht erkannt,
-% sondern führt tatsächlich zu einer Fehlermeldung.
+% sondern führt tatsächlich zu einer Fehlermeldung.
% \begin{macrocode}
%<*base>
\newcommand*{\ifisglueexpr}[1]{%
@@ -1818,8 +1855,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisglueexpr}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{glueexpr} prüft
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf eine \cs{glueexpr} prüft
% \begin{macrocode}
\newcommand*{\scr@ifisglueexpr}[1]{%
\begingroup
@@ -1837,19 +1874,19 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@ifisglueexpr
-% \end{macro}^^A \ifisglueexpr
+% \end{macro}%^^A \scr@ifisglueexpr
+% \end{macro}%^^A \ifisglueexpr
%
%
% \begin{macro}{\ifisnumexpr}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einer
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einer
% \cs{numexpr} (und zu nichts weiterem!) expandiert, wird das erste
-% Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
+% Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
% wichtigen Punkt von \cs{ifiscount}: Sollte das ganze zwar als \cs{numexpr}
% beginnen, aber syntaktisch nicht korrekt sein, so wird dies nicht erkannt,
-% sondern führt tatsächlich zu einer Fehlermeldung.
+% sondern führt tatsächlich zu einer Fehlermeldung.
% \begin{macrocode}
%<*base>
\newcommand*{\ifisnumexpr}[1]{%
@@ -1857,8 +1894,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisnumexpr}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{numexpr} prüft
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf eine \cs{numexpr} prüft
% \begin{macrocode}
\newcommand*{\scr@ifisnumexpr}[1]{%
\begingroup
@@ -1876,18 +1913,18 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@ifisnumexpr
-% \end{macro}^^A \ifisnumexpr
+% \end{macro}%^^A \scr@ifisnumexpr
+% \end{macro}%^^A \ifisnumexpr
%
%
% \begin{macro}{\ifisdefchar}
-% \changes{v3.20}{2015/10/19}{neu}^^A
-% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem mit
+% \changes{v3.20}{2015/10/19}{neu}%^^A
+% Falls das erste Argument ggf. über mehrere Stufen hinweg zu einem mit
% \cs{chardef} definierten Wert (und zu nichts weiterem!) expandiert, wird das
-% erste Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
+% erste Argument ausgeführt, sonst das zweite. Dies unterscheidet sich in einem
% wichtigen Punkt von \cs{ifiscount}: Sollte das ganze zwar wie ein \cs{char}
% beginnen, aber syntaktisch nicht korrekt sein, so wird dies nicht erkannt,
-% sondern führt tatsächlich zu einer Fehlermeldung.
+% sondern führt tatsächlich zu einer Fehlermeldung.
% \begin{macrocode}
%<*base>
\newcommand*{\ifisdefchar}[1]{%
@@ -1895,8 +1932,8 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdefchar}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{char} prüft
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
+% Hilfsmacro, das ggf. rekusiv auf eine \cs{char} prüft
% \begin{macrocode}
\newcommand*{\scr@ifisdefchar}[1]{%
\begingroup
@@ -1914,14 +1951,14 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@ifisdefchar
-% \end{macro}^^A \ifisdefchar
+% \end{macro}%^^A \scr@ifisdefchar
+% \end{macro}%^^A \ifisdefchar
%
%
% \begin{macro}{\ifiscounter}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% Falls die Expansion des ersten Arguments ein \LaTeX-Zähler ist, wird das
-% zweite Argument ausgeführt, sonst das dritte.
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% Falls die Expansion des ersten Arguments ein \LaTeX-Zähler ist, wird das
+% zweite Argument ausgeführt, sonst das dritte.
% \begin{macrocode}
%<*base>
\newcommand*{\ifiscounter}[1]{%
@@ -1935,15 +1972,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \ifiscounter
+% \end{macro}%^^A \ifiscounter
%
%
% \begin{macro}{\ifisinteger}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}%^^A
+% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
% Falls die Expansion des ersten Arguments eine (positive oder negative) ganze
-% Zahl ist, wird das zweite Argument ausgeführt, sonst das dritte.
+% Zahl ist, wird das zweite Argument ausgeführt, sonst das dritte.
% \begin{macrocode}
%<*base>
\newcommand*{\ifisinteger}[1]{%
@@ -1951,9 +1988,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisinteger}
-% \changes{v3.20}{2015/10/19}{neu (intern)}^^A
+% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
% Hilfsmacro, das ggf. rekusiv auf ein Vorzeichen oder eine positive Zahl
-% prüft.
+% prüft.
% \begin{macrocode}
\def\scr@ifisinteger#1{%
\begingroup
@@ -2022,15 +2059,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@ifisinteger
-% \end{macro}^^A \ifisinteger
+% \end{macro}%^^A \scr@ifisinteger
+% \end{macro}%^^A \ifisinteger
%
%
% \begin{macro}{\scr@ifrelax@to@nnil}
-% \changes{v3.12}{2013/11/05}{neu (intern)}^^A
+% \changes{v3.12}{2013/11/05}{neu (intern)}%^^A
% Hilfsmakro, zur Verwendung beispielsweise nach Zuweissungen. Falls alles bis
% zum ersten \cs{@nnil} aus genau einem \cs{relax} besteht, wird das erste
-% Argument ausgeführt, sonst das zweite.
+% Argument ausgeführt, sonst das zweite.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifrelax@to@nnil}{}
@@ -2049,11 +2086,11 @@
% \end{macro}
%
% \begin{macro}{\ifisdimension}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}^^A
-% \changes{v3.20}{2015/10/20}{Reimplementierung}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}%^^A
+% \changes{v3.20}{2015/10/20}{Reimplementierung}%^^A
% Falls die stufenweise Expansion des ersten Arguments eine (positive oder
-% negative) Länge ist, wird das zweite Argument ausgeführt, sonst das
+% negative) Länge ist, wird das zweite Argument ausgeführt, sonst das
% dritte.
% \begin{macrocode}
%<*base>
@@ -2062,14 +2099,14 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdimension}
-% \changes{v3.20}{2015/10/20}{neu (intern)}
-% Eigentlich wäre dieses Hilfsmakro extrem aufwändig, da eine Dimension recht
+% \changes{v3.20}{2015/10/20}{neu (intern)}
+% Eigentlich wäre dieses Hilfsmakro extrem aufwändig, da eine Dimension recht
% komplex aufgebaut sein darf. Ich habe aber beschlossen, hier mit einer
% Heuristik zu Werke zu gehen: Wenn das Argument mit einer beliebigen Anzahl
% Vorzeichen, gefolgt von max. einem Punkt, Komma oder einer Ziffer oder
-% gefolgt einem der für Längen zulässigen Primitiv beginnt, dann probieren wir
+% gefolgt einem der für Längen zulässigen Primitiv beginnt, dann probieren wir
% eine Zuweisung. Ist diese syntaktisch nicht korrekt, kann ein Fehler die
-% Folge sein. Das mag unschön sein, vereinfacht den Test aber erheblich!
+% Folge sein. Das mag unschön sein, vereinfacht den Test aber erheblich!
% \begin{macrocode}
\newcommand*{\scr@ifisdimension}[1]{%
\begingroup
@@ -2151,10 +2188,10 @@
}
% \end{macrocode}
% \begin{macro}{\scr@TestDimenionAssignTillNil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
+% \changes{v3.20}{2015/10/19}{neu (intern)}
+% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
+% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
% Argument wird in jedem Fall komplett aufgebraucht.
% \begin{macrocode}
\newcommand*\scr@TestDimensionAssignTillNil{}
@@ -2165,12 +2202,12 @@
}
% \end{macrocode}
% \begin{macro}{\scr@IfAfterEndgroupArgIsRelaxTillptNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
+% \changes{v3.20}{2015/10/19}{neu (intern)}
% \begin{macro}{\scr@IfArgIsRelaxAfterRelaxTillptNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
+% \changes{v3.20}{2015/10/19}{neu (intern)}
% Die Hilfsmakros lesen ein durch \cs{@nnil} begrenztes Argument. Falls dieses
% Argument nur aus einer Folge von \cs{relax} besteht, wird das erste Argument
-% nach \cs{@nnil} ausgeführt, sonst das zweite.
+% nach \cs{@nnil} ausgeführt, sonst das zweite.
% \begin{macrocode}
\newcommand*\scr@AfterEndGroupIfArgIsRelaxTillptNnil{}
\def\scr@AfterEndGroupIfArgIsRelaxTillptNnil#1\@nnil{%
@@ -2191,19 +2228,19 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@IfArgIsRelaxAfterRelaxTillptNnil
-% \end{macro}^^A \scr@IfArgIsRelaxTillptNnil
-% \end{macro}^^A \scr@DimensionSkipAssignTillNil
-% \end{macro}^^A \scr@ifisdimension
-% \end{macro}^^A \ifisdimension
+% \end{macro}%^^A \scr@IfArgIsRelaxAfterRelaxTillptNnil
+% \end{macro}%^^A \scr@IfArgIsRelaxTillptNnil
+% \end{macro}%^^A \scr@DimensionSkipAssignTillNil
+% \end{macro}%^^A \scr@ifisdimension
+% \end{macro}%^^A \ifisdimension
%
%
% \begin{macro}{\ifisglue}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}^^A
-% \changes{v3.20}{2015/10/21}{Reimplementierung}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.12a}{2014/01/24}{Leerzeichenfehler korrigiert}%^^A
+% \changes{v3.20}{2015/10/21}{Reimplementierung}%^^A
% Falls die stufenweise Expansion des ersten Arguments eine (positive oder
-% negative) Länge mit Leim ist, wird das zweite Argument ausgeführt, sonst das
+% negative) Länge mit Leim ist, wird das zweite Argument ausgeführt, sonst das
% dritte.
% \begin{macrocode}
%<*base>
@@ -2212,14 +2249,14 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisglue}
-% \changes{v3.20}{2015/10/21}{neu (intern)}
-% Eigentlich wäre dieses Hilfsmakro extrem aufwändig, da Leim recht
+% \changes{v3.20}{2015/10/21}{neu (intern)}
+% Eigentlich wäre dieses Hilfsmakro extrem aufwändig, da Leim recht
% komplex aufgebaut sein darf. Ich habe aber beschlossen, hier mit einer
% Heuristik zu Werke zu gehen: Wenn das Argument mit einer beliebigen Anzahl
% Vorzeichen, gefolgt von max. einem Punkt, Komma oder einer Ziffer oder
-% gefolgt einem der für Leim zulässigen Primitiv beginnt, dann probieren wir
+% gefolgt einem der für Leim zulässigen Primitiv beginnt, dann probieren wir
% eine Zuweisung. Ist diese syntaktisch nicht korrekt, kann ein Fehler die
-% Folge sein. Das mag unschön sein, vereinfacht den Test aber erheblich!
+% Folge sein. Das mag unschön sein, vereinfacht den Test aber erheblich!
% \begin{macrocode}
\newcommand*{\scr@ifisglue}[1]{%
\begingroup
@@ -2301,10 +2338,10 @@
}
% \end{macrocode}
% \begin{macro}{\scr@TestGlueAssignTillNil}
-% \changes{v3.20}{2015/10/21}{neu (intern)}
-% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
+% \changes{v3.20}{2015/10/21}{neu (intern)}
+% Das durch \cs{@nil} begrenzte Argument wird einer temporären Länge
% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
+% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
% Argument wird in jedem Fall komplett aufgebraucht.
% \begin{macrocode}
\newcommand*\scr@TestGlueAssignTillNil{}
@@ -2315,23 +2352,24 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@TestGlueAssignTillNil
-% \end{macro}^^A \scr@ifisglue
-% \end{macro}^^A \ifisglue
+% \end{macro}%^^A \scr@TestGlueAssignTillNil
+% \end{macro}%^^A \scr@ifisglue
+% \end{macro}%^^A \ifisglue
%
%
% \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,
+% \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
+% \changes{v3.27}{2019/08/26}{leere Argumente werden korrekt behandelt}%^^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.
+% ausgeführt, sonst der dritte.
% \begin{macrocode}
%<*base>
\newcommand\ifnumber[1]{%
\begingroup\@tempswafalse\let\scr@next\test@number
- \expandafter\scr@next#1\scr@next
+ \IfArgIsEmpty{#1}{}{\expandafter\scr@next#1\scr@next}%
\if@tempswa
\aftergroup\@firstoftwo
\else
@@ -2341,7 +2379,7 @@
}
% \end{macrocode}
% \begin{macro}{\test@number}
-% Für den eigentlichen Test wird der erste Parameter Token für Token
+% Für den eigentlichen Test wird der erste Parameter Token für Token
% gescannt und beurteilt.
% \begin{macrocode}
\newcommand*{\test@number}[1]{%
@@ -2349,8 +2387,8 @@
\let\scr@next\relax
\else
% \end{macrocode}
-% Dabei wird für einen schnelleren Vergleich die Tatsache genutzt, dass
-% Ziffernzeichen immer im selben durchgängigen Bereich liegen
+% Dabei wird für einen schnelleren Vergleich die Tatsache genutzt, dass
+% Ziffernzeichen immer im selben durchgängigen Bereich liegen
% \begin{macrocode}
\@tempcnta=\expandafter\expandafter\expandafter\number
\expandafter`#1\relax
@@ -2360,7 +2398,7 @@
\else\@tempswafalse\fi
\else\@tempswafalse\fi
% \end{macrocode}
-% Das zeichenweise Scannen und Parsen kann natürlich nicht einfach
+% Das zeichenweise Scannen und Parsen kann natürlich nicht einfach
% abgebrochen werden. Stattdessen ist der Parameterrest noch zu
% entfernen.
% \begin{macrocode}
@@ -2381,9 +2419,9 @@
% \end{macro}
%
% \begin{macro}{\ifintnumber}
-% \changes{v3.12}{2013/10/30}{neu}^^A
+% \changes{v3.12}{2013/10/30}{neu}%^^A
% Ist das erste Argument eine positive oder negative ganze Zahl, to wird das
-% zweite Argument ausgeführt, sonst das dritte. Wie bei \TeX{} auch sind
+% zweite Argument ausgeführt, sonst das dritte. Wie bei \TeX{} auch sind
% beliebig viele Vorzeichen erlaubt.
% \begin{macrocode}
%<*base>
@@ -2399,7 +2437,7 @@
}
% \end{macrocode}
% \begin{macro}{\scr@test@sign}
-% \changes{v3.12}{2013/10/30}{neu (intern)}^^A
+% \changes{v3.12}{2013/10/30}{neu (intern)}%^^A
% \begin{macrocode}
\newcommand*{\scr@test@sign}[1]{%
\ifx \scr@next#1
@@ -2421,8 +2459,8 @@
% \end{macro}
%
% \begin{macro}{\ifdimen}
-% Dieses Makro testet, ob ein übergebener Parameter eine Dimension
-% ist und führt in Abhängigkeit davon den zweiten oder dritten
+% Dieses Makro testet, ob ein übergebener Parameter eine Dimension
+% ist und führt in Abhängigkeit davon den zweiten oder dritten
% Parameter aus.
% \begin{macrocode}
%<*base>
@@ -2448,8 +2486,8 @@
% \begin{macro}{\test@posdimen}
% Dann muss getestet werden, ob es sich beim Rest um eine Dimension
% handelt. Dabei werden der Einfachheit halber mehrere Dezimalkomma
-% und -punkte erlaubt. Natürlich könnte man es auch wirklich richtig
-% machen, aber das wäre nochmal etwas aufwendiger. Ist das wirklich
+% und -punkte erlaubt. Natürlich könnte man es auch wirklich richtig
+% machen, aber das wäre nochmal etwas aufwendiger. Ist das wirklich
% notwendig?
% \begin{macrocode}
\newcommand*{\test@posdimen}[1]{%
@@ -2470,9 +2508,9 @@
% \end{macrocode}
% \begin{macro}{\test@dimunt}
% \begin{macro}{\test@trueunt}
-% Außer einer Gleitkomma- bzw. Gleitpunktzahl muss auch noch die Einheit
+% Außer einer Gleitkomma- bzw. Gleitpunktzahl muss auch noch die Einheit
% behandelt werden. Dabei sind sowohl die neun Standardeinheiten als auch
-% deren "`true"'-Variante zu berücksichtigen. Deshalb wird zuerst ein
+% deren "`true"'-Variante zu berücksichtigen. Deshalb wird zuerst ein
% eventuelles "`\texttt{true}"' weggeworfen.
% \begin{macrocode}
\newcommand*{\test@dimunt}{}
@@ -2486,9 +2524,9 @@
}
% \end{macrocode}
% \begin{macro}{\test@@ifdimunt}
-% \changes{v3.21}{2016/05/27}{elf bis zwölf Einheiten nicht neun}
-% Anschließend wird dann getestet, ob es sich um eine der elf bis zwölf
-% üblichen Einheiten handelt.
+% \changes{v3.21}{2016/05/27}{elf bis zwölf Einheiten nicht neun}
+% Anschließend wird dann getestet, ob es sich um eine der elf bis zwölf
+% üblichen Einheiten handelt.
% \begin{macrocode}
\newcommand*\test@@ifdimunt[1]{%
\@tempswafalse
@@ -2529,9 +2567,9 @@
%
%
% \begin{macro}{\ifpdftex}
-% \changes{v2.95}{2002/08/19}{neu}^^A
+% \changes{v2.95}{2002/08/19}{neu}%^^A
% \begin{macro}{\scr@ifpdftex}
-% \changes{v2.95}{2002/08/19}{neu (intern)}^^A
+% \changes{v2.95}{2002/08/19}{neu (intern)}%^^A
% If-then-else-Konstrukt, um zu testen, ob pdf\TeX{} verwendet wird.
% \begin{macrocode}
%<*base>
@@ -2545,7 +2583,7 @@
% \end{macro}
%
% \begin{macro}{\scr@ifluatex}
-% \changes{v3.21}{2016/05/27}{neu (intern)}^^A
+% \changes{v3.21}{2016/05/27}{neu (intern)}%^^A
% If-the-else-Konstrukt, um zu testen, ob lua\TeX{} verwendet wird.
% \begin{macrocode}
%<*base>
@@ -2555,7 +2593,7 @@
% \end{macro}
%
% \begin{macro}{\scr@ifpdforluatex}
-% \changes{v3.21}{2016/05/27}{neu (intern)}^^A
+% \changes{v3.21}{2016/05/27}{neu (intern)}%^^A
% If-then-else-Konstrukt, um zu testen, ob pdf\TeX{} oder lua\TeX{} verwendet
% wird.
% \begin{macrocode}
@@ -2568,11 +2606,11 @@
% \end{macro}
%
% \begin{macro}{\ifVTeX}
-% \changes{v2.95}{2002/08/19}{neu}^^A
-% \changes{v2.97c}{2007/06/20}{umdefiniert von \cs{ifvtex}}
+% \changes{v2.95}{2002/08/19}{neu}%^^A
+% \changes{v2.97c}{2007/06/20}{umdefiniert von \cs{ifvtex}}
% \begin{macro}{\scr@ifVTeX}
-% \changes{v2.95}{2002/08/19}{neu}^^A
-% \changes{v2.97c}{2007/06/20}{umdefiniert von \cs{scr@ifvtex}}
+% \changes{v2.95}{2002/08/19}{neu}%^^A
+% \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}
%<*base>
@@ -2584,20 +2622,20 @@
% \end{macro}
%
% \begin{macro}{\ifpdfoutput}
-% \changes{v2.7g}{2001/04/17}{neu}^^A
-% \changes{v2.8q}{2001/10/19}{\cs{pdfoutput} wird nicht mehr zu
+% \changes{v2.7g}{2001/04/17}{neu}%^^A
+% \changes{v2.8q}{2001/10/19}{\cs{pdfoutput} wird nicht mehr zu
% \cs{relax}, wenn zuvor undefiniert}
-% \changes{v2.8q}{2001/10/19}{darf bereits definiert sein}^^A
-% \changes{v2.8q}{2001/10/19}{Verwendung von \cs{scr@ifpdfoutput}}
+% \changes{v2.8q}{2001/10/19}{darf bereits definiert sein}%^^A
+% \changes{v2.8q}{2001/10/19}{Verwendung von \cs{scr@ifpdfoutput}}
% \begin{macro}{\scr@ifpdfoutput}
-% \changes{v2.8q}{2001/10/19}{neu (intern)}^^A
-% \changes{v2.8q}{2001/11/13}{funktioniert}^^A
-% \changes{v2.95}{2002/08/21}{berücksichtigt V\TeX}^^A
-% \changes{v2.95}{2004/07/20}{Expandierbarkeit verbessert}^^A
-% \changes{v3.21}{2016/05/27}{lua\TeX{} nach 0.85 berücksichtigt}^^A
-% If-then-else-Konstrukt, um abhängig davon, ob als \texttt{pdf}
-% ausgegeben wird oder nicht, Befehle auszuführen. Dieses Makro wird
-% für die Deklaration der Option \texttt{pagesize} benötigt.
+% \changes{v2.8q}{2001/10/19}{neu (intern)}%^^A
+% \changes{v2.8q}{2001/11/13}{funktioniert}%^^A
+% \changes{v2.95}{2002/08/21}{berücksichtigt V\TeX}%^^A
+% \changes{v2.95}{2004/07/20}{Expandierbarkeit verbessert}%^^A
+% \changes{v3.21}{2016/05/27}{lua\TeX{} nach 0.85 berücksichtigt}%^^A
+% If-then-else-Konstrukt, um abhängig davon, ob als \texttt{pdf}
+% ausgegeben wird oder nicht, Befehle auszuführen. Dieses Makro wird
+% für die Deklaration der Option \texttt{pagesize} benötigt.
% \begin{macrocode}
%<*base>
\newcommand{\scr@ifpdfoutput}{%
@@ -2634,12 +2672,12 @@
% \end{macro}
%
% \begin{macro}{\ifpsoutput}
-% \changes{v2.95}{2002/08/21}{neu}^^A
+% \changes{v2.95}{2002/08/21}{neu}%^^A
% \begin{macro}{\scr@ifpsoutput}
-% \changes{v2.95}{2002/08/21}{neu (intern)}^^A
-% \changes{v2.95}{2004/07/20}{Expandierbarkeit verbessert}^^A
-% If-then-else-Konstrukt, um abhängig davon, ob früher oder später
-% \texttt{ps} ausgegeben wird oder nicht, Befehle auszuführen.
+% \changes{v2.95}{2002/08/21}{neu (intern)}%^^A
+% \changes{v2.95}{2004/07/20}{Expandierbarkeit verbessert}%^^A
+% If-then-else-Konstrukt, um abhängig davon, ob früher oder später
+% \texttt{ps} ausgegeben wird oder nicht, Befehle auszuführen.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifpsoutput}{%
@@ -2668,13 +2706,13 @@
% \end{macro}
%
% \begin{macro}{\ifdvioutput}
-% \changes{v2.95}{2002/08/21}{neu}^^A
+% \changes{v2.95}{2002/08/21}{neu}%^^A
% \begin{macro}{\scr@ifdvioutput}
-% \changes{v2.95}{2002/08/21}{neu (intern)}^^A
-% \changes{v2.95}{2004/07/20}{Expandierbarkeit verbessert}^^A
-% \changes{v3.23}{2017/02/14}{lua\TeX{} nach 0.85 berücksichtigt}^^A
-% If-then-else-Konstrukt, um abhängig davon, ob \texttt{dvi}
-% ausgegeben wird oder nicht, Befehle auszuführen.
+% \changes{v2.95}{2002/08/21}{neu (intern)}%^^A
+% \changes{v2.95}{2004/07/20}{Expandierbarkeit verbessert}%^^A
+% \changes{v3.23}{2017/02/14}{lua\TeX{} nach 0.85 berücksichtigt}%^^A
+% If-then-else-Konstrukt, um abhängig davon, ob \texttt{dvi}
+% ausgegeben wird oder nicht, Befehle auszuführen.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifdvioutput}{%
@@ -2711,10 +2749,10 @@
% \end{macro}
%
% \begin{macro}{\scr@smashdp}
-% \changes{v2.97c}{2007/09/17}{neu (intern)}^^A
-% \changes{v3.02a}{2009/01/23}{\cs{smash} nicht direkt verwenden, weil
+% \changes{v2.97c}{2007/09/17}{neu (intern)}%^^A
+% \changes{v3.02a}{2009/01/23}{\cs{smash} nicht direkt verwenden, weil
% \textsf{amsmath} das inkompatibel umdefiniert}
-% Gibt Material aus, erzeugt dabei aber nur Höhe und Breite, jedoch keine
+% Gibt Material aus, erzeugt dabei aber nur Höhe und Breite, jedoch keine
% Tiefe.
% \begin{macrocode}
%<*base>
@@ -2734,10 +2772,10 @@
% \end{macro}
%
% \begin{macro}{\IfRTL}
-% \changes{v3.24}{2017/05/04}{neu}
+% \changes{v3.24}{2017/05/04}{neu}
% Die Anweisung testet, ob wir uns gerade im Von-Rechts-Nach-Links-Modus von
% Paketen wie \textsf{bidi} befinden. Ist das der Fall, wird das erste
-% Argument ausgeführt, sonst das zweite.
+% Argument ausgeführt, sonst das zweite.
% \begin{macrocode}
%<*base>
\newcommand*{\IfRTL}{%
@@ -2752,12 +2790,12 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \IfRTL
+% \end{macro}%^^A \IfRTL
% \begin{macro}{\IfLTR}
-% \changes{v3.24}{2017/05/04}{neu}
+% \changes{v3.24}{2017/05/04}{neu}
% Die Anweisung testet, ob wir uns gerade nicht im
% Von-Rechts-Nach-Links-Modus von Paketen wie \textsf{bidi} befinden. Ist
-% das der Fall, wird das erste Argument ausgeführt, sonst das zweite.
+% das der Fall, wird das erste Argument ausgeführt, sonst das zweite.
% \begin{macrocode}
%<*base>
\newcommand*{\IfLTR}{%
@@ -2772,10 +2810,10 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \IfLTR
+% \end{macro}%^^A \IfLTR
%
% \begin{macro}{\PackageInfoNoLine}
-% \changes{v2.97d}{2007/10/03}{neu}^^A
+% \changes{v2.97d}{2007/10/03}{neu}%^^A
% Arbeitet wie \cs{PackageInfo} aber ohne Ausgabe der Zeilennummer.
% \begin{macrocode}
%<*base>
@@ -2787,7 +2825,7 @@
% \end{macro}
%
% \begin{macro}{\ClassInfoNoLine}
-% \changes{v2.98c}{2008/02/15}{neu}^^A
+% \changes{v2.98c}{2008/02/15}{neu}%^^A
% Arbeitet wie \cs{ClassInfo} aber ohne Ausgabe der Zeilennummer.
% \begin{macrocode}
%<*base>
@@ -2799,10 +2837,10 @@
% \end{macro}
%
% \begin{macro}{\@removefromreset}
-% \changes{v3.15}{2014/11/21}{neue Anweisung, kompatibel mit
-% \textsf{remreset} und \textsf{chngcntr}}^^A
+% \changes{v3.15}{2014/11/21}{neue Anweisung, kompatibel mit
+% \textsf{remreset} und \textsf{chngcntr}}%^^A
% Dieser alte Bekannte aus dem Paket \textsf{remreset} wird auch von
-% \KOMAScript{} benötigt. Es ist einfacher, ihn selbst zu definieren, als sich
+% \KOMAScript{} benötigt. Es ist einfacher, ihn selbst zu definieren, als sich
% auf andere Pakete zu verlassen.
% \begin{macrocode}
%<*base>
@@ -2822,9 +2860,10 @@
%
% \selectlanguage{english}%
% \begin{macro}{\IfActiveMkBoth}
-% \changes{v3.26}{2018/09/03}{new}^^A
+% \changes{v3.26}{2018/09/03}{new}%^^A
% \begin{macro}{\if@scrActiveMkBoth}
-% \changes{v3.26}{2018/09/03}{new}^^A
+% \changes{v3.26}{2018/09/03}{new}%^^A
+% \changes{v3.27}{2019/07/26}{handling for \cs{marks}}%^^A
% This command test, whether or not \cs{@mkboth} does change a mark or not.
% \begin{macrocode}
%<*base>
@@ -2838,7 +2877,8 @@
\def\markleft##1{\scr@ActiveMkBothtrue}%
\def\markboth##1{\scr@ActiveMkBothtrue}%
\def\markdouble##1{\scr@ActiveMkBothtrue}%
- \def\mark##1{\scr@ActiveMkBothtrue}
+ \def\mark##1{\scr@ActiveMkBothtrue}%
+ \def\marks##1##2{\scr@ActiveMkBothtrue}%
\scr@ActiveMkBothfalse
\setbox\@tempboxa\vbox{\@mkboth{}{}}%
\endgroup
@@ -2850,26 +2890,27 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A\if@scrActiveMkBoth
-% \end{macro}^^A\IfActiveMkBoth
+% \end{macro}%^^A\if@scrActiveMkBoth
+% \end{macro}%^^A\IfActiveMkBoth
% \selectlanguage{ngerman}%
%
-% \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Hauptteil)}
+% \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Hauptteil)}
%
% \begin{macro}{\FamilyExecuteOptions}
-% \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{setkeys} 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}^^A
-% \changes{v3.14}{2014/10/17}{das dritte Argument wird \cs{long}^^A
-% verarbeitet}^^A
+% \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{setkeys} 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}%^^A
+% \changes{v3.14}{2014/10/17}{das dritte Argument wird \cs{long}%^^A
+% verarbeitet}%^^A
% \begin{macro}{\@FamilyExecuteOptions}
-% \changes{v3.14}{2014/10/17}{Neue streng interne Anweisung}^^A
-% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
-% statt des Mitglieds}^^A
+% \changes{v3.14}{2014/10/17}{Neue streng interne Anweisung}%^^A
+% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
+% statt des Mitglieds}%^^A
+% \changes{v3.27}{2019/10/02}{Fehlermeldungen verbessert}%^^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.
@@ -2898,11 +2939,11 @@
\scr@ifundefinedorrelax{KV@#2@\scr@key@name}{%
\scr@ifundefinedorrelax{KV@#2#1@\scr@key@name}{%
% \end{macrocode}
-% \changes{v3.20}{2015/11/18}{Besondere Behandlung der
-% \texttt{@else@}-Option}^^A
+% \changes{v3.20}{2015/11/18}{Besondere Behandlung der
+% \texttt{@else@}-Option}%^^A
% Es existiert zwar weder eine Familienoption noch eine Mitgliedsoption, aber
% vielleicht existiert ja die Spezialoption \texttt{@else@}, die in einem
-% solchen Fall die eigentliche Option als Wert erhält.
+% solchen Fall die eigentliche Option als Wert erhält.
% \begin{macrocode}
\scr@ifundefinedorrelax{KV@#2#1@@else@}{%
\PackageError{scrbase}{%
@@ -2922,12 +2963,15 @@
% \end{macrocode}
% Im Gegensatz zu anderen Optionen bedeuten bei der \texttt{@else@}-Option
% alle von \cs{FamilyKeyStateProcessed} abweichenden Ergebnisse, dass die
-% Option nicht korrekt verarbeitet werden konnte und deshalb die ursprüngliche
+% Option nicht korrekt verarbeitet werden konnte und deshalb die ursprüngliche
% Option als Fehler zu melden ist.
% \begin{macrocode}
\ifx\FamilyKeyState\FamilyKeyStateProcessed\else
\PackageError{scrbase}{%
unknown option
+ \ifx\FamilyKeyState\FamilyKeyStateUnknownValue
+ value at
+ \fi
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
}{%
Member `#1' of family `#2'\MessageBreak
@@ -2947,12 +2991,12 @@
\scr@execute@option{#2}%
\ifstr{#1}{}{}{%
% \end{macrocode}
-% \changes{v3.20}{2015/11/18}{Memberoptionstest nach Familyoptionsausführung
-% korrigiert}^^A
-% Auch wenn eine Familienoption ausgeführt wurde, muss eine existierende
-% Mitgliederoption ggf. noch ausgeführt werden. Existiert sie nicht, wird
-% ebenfalls eine existierende \texttt{@else@}-Option ausgeführt. Allerdings
-% führen in diesem Fall von \cs{FamilyKeyStateProcessed} abweichende
+% \changes{v3.20}{2015/11/18}{Memberoptionstest nach Familyoptionsausführung
+% korrigiert}%^^A
+% Auch wenn eine Familienoption ausgeführt wurde, muss eine existierende
+% Mitgliederoption ggf. noch ausgeführt werden. Existiert sie nicht, wird
+% ebenfalls eine existierende \texttt{@else@}-Option ausgeführt. Allerdings
+% führen in diesem Fall von \cs{FamilyKeyStateProcessed} abweichende
% Ergebnisse nicht zu einer Fehlermeldung.
% \begin{macrocode}
\scr@ifundefinedorrelax{KV@#2#1@\scr@key@name}{%
@@ -2978,21 +3022,25 @@
%</base>
% \end{macrocode}
% \begin{macro}{\scr@show@key@state@error}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung (intern)}%
-% Zeige abhängig von \cs{FamilyKeyState} eine Fehlermeldung. Alle
-% Informationen zu dem Fehler müssen in \cs{FamilyMemberOfKey}
+% \changes{v3.12}{2013/03/04}{Neue Anweisung (intern)}%^^A
+% \changes{v3.27}{2019/10/02}{Fehlermeldungen verbessert}%^^A
+% Zeige abhängig von \cs{FamilyKeyState} eine Fehlermeldung. Alle
+% Informationen zu dem Fehler müssen in \cs{FamilyMemberOfKey}
% (Familienmitglied oder \cs{@empty}), \cs{FamilyOfKey} (Familie oder
% \cs{@empty}), \cs{scr@key@atlist} (Option, wie sie in der Liste stand),
% \cs{scr@key@name} (Name der Option) und \cs{scr@key@value} (Wert der
% Option) stehen. Es ist zu beachten, dass \cs{scr@key@atlist} und
-% \cs{scr@key@value} ebenfalls Macros enthalten können. Deshalb werden diese
-% Werte ggf. über \cs{detokenize} ausgegeben.
+% \cs{scr@key@value} ebenfalls Macros enthalten können. Deshalb werden diese
+% Werte ggf. über \cs{detokenize} ausgegeben.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@show@key@state@error}{%
\ifx\FamilyKeyState\FamilyKeyStateProcessed\else
\PackageError{scrbase}{%
unknown option
+ \ifx\FamilyKeyState\FamilyKeyStateUnknownValue
+ value at
+ \fi
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
}{%
Option
@@ -3020,16 +3068,16 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@show@key@state@error
-% \end{macro}^^A \@FamilyExecuteOptions
-% \end{macro}^^A \FamilyExecuteOptions
+% \end{macro}%^^A \scr@show@key@state@error
+% \end{macro}%^^A \@FamilyExecuteOptions
+% \end{macro}%^^A \FamilyExecuteOptions
%
% \begin{macro}{\KOMAExecuteOptions}
-% \changes{v2.97c}{2007/04/19}{Neue Anweisung}^^A
-% \changes{v3.00}{2008/04/30}{Kein optionales Argument mehr}^^A
-% \changes{v3.12}{2013/03/04}{darf auch noch nach der Präambel verwendet
-% werden}^^A
-% Liste von Optionen für ein Mitglied der Familie \texttt{KOMA} ausführen.
+% \changes{v2.97c}{2007/04/19}{Neue Anweisung}%^^A
+% \changes{v3.00}{2008/04/30}{Kein optionales Argument mehr}%^^A
+% \changes{v3.12}{2013/03/04}{darf auch noch nach der Präambel verwendet
+% werden}%^^A
+% Liste von Optionen für ein Mitglied der Familie \texttt{KOMA} ausführen.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAExecuteOptions}[1][.\@currname.\@currext]{%
@@ -3040,21 +3088,22 @@
% \end{macro}
%
% \begin{macro}{\FamilyOptions}
-% \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
+% \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
+% \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}%^^A
+% \changes{v3.27}{2019/10/02}{Fehlermeldungen verbessert}%^^A
% \begin{macro}{\Family@Options}
-% \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
-% ausgegeben. Diese Anweisung selbst ist reentrant, das heißt sie kann auch
-% innerhalb der Ausführung von Optionen aufgerufen werden. Es sei jedoch
-% erwähnt, dass der hook dabei nur die jeweilige Anweisung umfasst.
+% \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
+% ausgegeben. Diese Anweisung selbst ist reentrant, das heißt sie kann auch
+% innerhalb der Ausführung von Optionen aufgerufen werden. Es sei jedoch
+% erwähnt, dass der hook dabei nur die jeweilige Anweisung umfasst.
% \begin{macrocode}
%<*base>
\newcommand{\FamilyOptions}[1]{\@FamilyOptions{#1}}
@@ -3072,23 +3121,23 @@
}%
}%
% \end{macrocode}
-% \changes{v3.23}{2017/02/16}{neuer Haken für \cs{AtEndOfFamilyOptions*}}^^A
+% \changes{v3.23}{2017/02/16}{neuer Haken für \cs{AtEndOfFamilyOptions*}}%^^A
% Seit Version 3.23 wird hier auch der neuen Haken vor
-% \cs{AtEndOfFamilyOptions*} initialisiert. Zunächst findet eine Art
+% \cs{AtEndOfFamilyOptions*} initialisiert. Zunächst findet eine Art
% Vorinitialisierung statt, bei der der Haken lediglich leer definiert wird,
-% falls er noch nicht existiert. Falls er nämlich existiert, kann an einem
+% falls er noch nicht existiert. Falls er nämlich existiert, kann an einem
% leeren Haken die oberste Ebene erkannt werden.
% \begin{macrocode}
\scr@ifundefinedorrelax{scr@after@options@#1@hook@topmost}{%
\@namedef{scr@after@options@#1@hook@topmost}{}%
}{}%
% \end{macrocode}
-% Dann wird an einem leeren Haken die oberste Ausführungsebene erkennt. In
-% diesem Fall wird zum einen die Ausführung des Hakens in den normalen
+% Dann wird an einem leeren Haken die oberste Ausführungsebene erkennt. In
+% diesem Fall wird zum einen die Ausführung des Hakens in den normalen
% Ebenen-Haken (das ist dann automatische der oberste Ebenen-Haken)
-% eingehängt und zum anderen der Haken selbst so initialisiert, dass er sich
-% bei seiner Ausführung als erstes selbst löscht. Gleichzeitig ist der Haken
-% selbst dadurch nicht mehr leer, so dass sich tiefere Ebenen von der höchsten
+% eingehängt und zum anderen der Haken selbst so initialisiert, dass er sich
+% bei seiner Ausführung als erstes selbst löscht. Gleichzeitig ist der Haken
+% selbst dadurch nicht mehr leer, so dass sich tiefere Ebenen von der höchsten
% eindeutig unterscheiden.
% \begin{macrocode}
\expandafter\ifx\csname scr@after@options@#1@hook@topmost\endcsname\@empty
@@ -3103,54 +3152,83 @@
% \begin{description}
% \item[Anmerkung:] Es wird nicht auf \textsf{xkeyval} 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
+% der Optionen, sondern in der Reihenfolge der Familien ausführt. Das passt
% mir aber hier gar nicht.
% \end{description}
-% In einer Schleife über alle Optionen werden die Optionen zunächst in Option
+% In einer Schleife über alle Optionen werden die Optionen zunächst in Option
% und Wert aufgespaltet.
% \begin{macrocode}
\@for\scr@key@atlist:=#2\do{%
% \end{macrocode}
-% \changes{v3.08}{2010/11/05}{leere Argumente in der Optionenliste}%
-% Auf vielfachen Wunsch und entgegen meiner Überzeugung, sind auch leere
-% Argumente in der Optionenliste erlaubt. Die erste Form wäre, wenn zwei
+% \changes{v3.08}{2010/11/05}{leere Argumente in der Optionenliste}%
+% Auf vielfachen Wunsch und entgegen meiner Ãœberzeugung, sind auch leere
+% Argumente in der Optionenliste erlaubt. Die erste Form wäre, wenn zwei
% Kommas diret aufeinander folgen:
% \begin{macrocode}
\ifx\scr@key@atlist\@empty\else
% \end{macrocode}
-% Die zweite Möglichkeit wäre, dass noch Leerzeichen zwischen den Komma
-% übrig bleiben:
+% Die zweite Möglichkeit wäre, dass noch Leerzeichen zwischen den Komma
+% übrig bleiben:
% \begin{macrocode}
\ifx\scr@key@atlist\space\else
\expandafter\scr@key@split@name@value\scr@key@atlist==\@nil
% \end{macrocode}
-% Die dritte Möglichkeit, dass auch noch ein Gleichheitszeichen übrig
-% gelassen wurde, werde ich aber nicht abfangen. Irgendwann müssen die
+% Die dritte Möglichkeit, dass auch noch ein Gleichheitszeichen übrig
+% gelassen wurde, werde ich aber nicht abfangen. Irgendwann müssen die
% Anwender auch mal ihre Fehler einsehen und korrigieren!
%
-% Wir haben jetzt also eine Option und diese aufgespaltet in Schlüssel und
+% Wir haben jetzt also eine Option und diese aufgespaltet in Schlüssel und
% Wert.
-% \changes{v3.12}{2013/03/04}{der Gesamtstatus wird gespeichert}^^A
+% \changes{v3.12}{2013/03/04}{der Gesamtstatus wird gespeichert}%^^A
% Jetzt speichern wir den Gesamtstatus einfach, indem der Fehlerspeicher
-% gelöscht wird. Bei \cs{relax} wird er nicht weiter benötigt und es liegt
+% gelöscht wird. Bei \cs{relax} wird er nicht weiter benötigt und es liegt
% ebenso wie bei \cs{@empty} kein auszugebender Fehler vor. Bei anderen
-% Werten, enthält er Fehler, die zu melden sind.
+% Werten, enthält er Fehler, die zu melden sind.
% \begin{macrocode}
\let\scr@key@run@errors\@empty
% \end{macrocode}
-%
-% \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}
-% \changes{v3.09a}{2011/06/07}{weniger Expansion durch sinnvollen Gebrauch
+% \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}
+% \changes{v3.09a}{2011/06/07}{weniger Expansion durch sinnvollen Gebrauch
% von \cs{unexpanded}}
-% Dann wird in einer Schleife über alle Familien festgestellt, ob die Option
-% in einer Familie bekannt ist und ggf. ausgeführt. Hier ist wichtig, dass
-% keines der internen Macros vom Aufruf verändert wird. Außerdem muss der
-% Status und die daraus resultierenden Meldungen aufgesammelt werden.
+% Dann wird in einer Schleife über alle Familienmitglieder festgestellt, ob
+% die Option bei einem Mitglied bekannt ist und ggf. ausgeführt. Hier ist
+% wichtig, dass keines der internen Macros vom Aufruf verändert wird. Außerdem
+% muss der Status und die daraus resultierenden Meldungen aufgesammelt
+% werden. Hilfreich ist, dass \cs{\meta{Familie}@key@familylist} eine Liste
+% aus Familie + Mitglied ist und nicht nur aus dem Namen der Mitglieder.
+% \changes{v3.27}{2019/07/19}{Fix: Familienoptionen werden zuerst
+% ausgeführt}%^^A
% \begin{macrocode}
\scr@key@found@false
- \edef\reserved@a{\csname #1@key@familylist\endcsname}%
+ \edef\reserved@a{#1,\csname #1@key@familylist\endcsname}%
\@for\reserved@a:=\reserved@a\do{%
- \scr@ifundefinedorrelax{KV@\reserved@a @\scr@key@name}{}{%
+ \scr@ifundefinedorrelax{KV@\reserved@a @\scr@key@name}{%
+% \end{macrocode}
+% \changes{v3.27}{2019/07/19}{Behandlung für \texttt{@else@}-Optionen}%^^A
+% Wenn das Familiemitglied keine entsprechende Option besitzt, kann es noch
+% immer eine \texttt{@else@}-Option besitzen. In diesem Fall wird selbige
+% ausgeführt. Die Ausführung hat aber nur dann Einfluss auf den
+% Fehlerspeicher, wenn sie erfolgreich war. In diesem Fall wird der
+% Fehlerspeicher gelöscht. Ausnahme ist, wenn das aktuelle Mitglied die
+% Familie selbst ist. In diesem Fall wird die \texttt{@else@}-Option nicht
+% hier ausgeführt. Das erledigen wir später und nur in dem Fall, dass
+% tatsächlich kein Mitglied eine solche Option oder eine
+% \texttt{@else@}-Option hatte.
+% \begin{macrocode}
+ \ifstr{\reserved@a}{#1}{}{%
+ \scr@ifundefinedorrelax{KV@\reserved@a @@else@}{}{%
+ \expandafter\scr@execute@elseoption\expandafter{\reserved@a}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \scr@key@found@true
+ \let\scr@key@run@errors\relax
+ \fi
+ }%
+ }%
+ }{%
+% \end{macrocode}
+% Wurde hingegen eine Option für ein Familienmitglied gefunden, so wird sie
+% ausgeführt und bei Bedarf der Fehlerspeicher angepasst.
+% \begin{macrocode}
\expandafter\scr@execute@option\expandafter{\reserved@a}%
\scr@key@found@true
\ifx\scr@key@run@errors\relax\else
@@ -3161,21 +3239,21 @@
\edef\scr@key@run@errors{%
\unexpanded\expandafter{\scr@key@run@errors}%
\noexpand\MessageBreak
- \FamilyMemberOfKey: unkown value
- `\expandafter\detokenize\expandafter{\scr@key@value}'.%
+ \space\space- `\FamilyMemberOfKey': unkown value
+ `\expandafter\detokenize\expandafter{\scr@key@value}'%
}%
\else
\ifx\FamilyKeyState\FamilyKeyStateNeedValue
\edef\scr@key@run@errors{%
\unexpanded\expandafter{\scr@key@run@errors}%
\noexpand\MessageBreak
- \FamilyMemberOfKey: value expected.
+ \space\space- `\FamilyMemberOfKey': value expected
}%
\else
\edef\scr@key@run@errors{%
\unexpanded\expandafter{\scr@key@run@errors}%
\noexpand\MessageBreak
- \FamilyMemberOfKey: \FamilyKeyState.
+ \space\space- `\FamilyMemberOfKey': \FamilyKeyState
}%
\fi
\fi
@@ -3186,35 +3264,93 @@
\ifscr@key@found@
\ifx\scr@key@run@errors\relax\else
\ifx\scr@key@run@errors\@empty\else
+ \scr@ifundefinedorrelax{KV@#1@@else@}{%
+ \PackageError{scrbase}{%
+ unknown option
+ `\expandafter\detokenize\expandafter{\scr@key@atlist}'%
+ }{%
+ The members of family `#1' cannot set option
+ `\scr@key@name'
+ \ifx\scr@key@value\@empty\else
+ \MessageBreak
+ to value
+ `\expandafter\detokenize\expandafter{\scr@key@value}'%
+ \fi.\MessageBreak
+ Here's what each member says:
+ \scr@key@run@errors\MessageBreak
+ o\expandafter\@gobble
+ }%
+ }{%
+ \scr@execute@elseoption{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \PackageInfo{scrbase}{%
+ option
+ `\expandafter\detokenize\expandafter{\scr@key@atlist}'%
+ \MessageBreak
+ processed by `@else@' option of family\MessageBreak
+ `#1', after the members said:
+ \scr@key@run@errors\MessageBreak
+ o\expandafter\@gobble
+ }%
+ \let\scr@key@run@errors\relax
+ \else
+ \PackageError{scrbase}{%
+ unknown option
+ \ifx\FamilyKeyState\FamilyKeyStateUnknownValue
+ value at
+ \fi
+ `\expandafter\detokenize\expandafter{\scr@key@atlist}'%
+ }{%
+ The members of family `#1' cannot set option
+ `\scr@key@name'
+ \ifx\scr@key@value\@empty\else
+ \MessageBreak
+ to value
+ `\expandafter\detokenize\expandafter{\scr@key@value}'%
+ \fi.\MessageBreak
+ Here's what each member says:
+ \scr@key@run@errors\MessageBreak
+ o\expandafter\@gobble
+ }%
+ \fi
+ }%
+ \fi
+ \fi
+ \else
+ \scr@ifundefinedorrelax{KV@#1@@else@}{%
+ \PackageError{scrbase}{%
+ unknown option
+ `\expandafter\detokenize\expandafter{\scr@key@atlist}'%
+ }{%
+ No one of the members of family `#1'\MessageBreak
+ can handle option `\scr@key@name'.\MessageBreak
+ So it cannot be set%
+ \ifx\scr@key@value\@empty\else
+ \space to value
+ `\expandafter\detokenize\expandafter{\scr@key@value}'%
+ \fi.%
+ }%
+ }{%
+ \scr@execute@elseoption{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \else
\PackageError{scrbase}{%
unknown option
+ \ifx\FamilyKeyState\FamilyKeyStateUnknownValue
+ value at
+ \fi
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
}{%
- The members of family `#1' cannot set option
- `\scr@key@name'
+ No one of the members of family `#1'\MessageBreak
+ can handle option `\scr@key@name'.\MessageBreak
+ So it cannot be set%
\ifx\scr@key@value\@empty\else
- \MessageBreak
- to value
+ \space to value
`\expandafter\detokenize\expandafter{\scr@key@value}'%
- \fi.\MessageBreak
- Here's what each member says:
- \scr@key@run@errors
+ \fi.%
}%
\fi
- \fi
- \else
- \PackageError{scrbase}{%
- unknown option
- `\expandafter\detokenize\expandafter{\scr@key@atlist}'%
- }{%
- No one of the members of family `#1'\MessageBreak
- can handle option `\scr@key@name'.\MessageBreak
- So it cannot be set%
- \ifx\scr@key@value\@empty\else
- \space to value
- `\expandafter\detokenize\expandafter{\scr@key@value}'%
- \fi.%
- }%
+ }%
\fi
\fi
\fi
@@ -3223,15 +3359,15 @@
}
% \end{macrocode}
% \begin{macro}{\scr@execute@option}
-% \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
-% \changes{v3.23}{2017/02/16}{den \cs{AtEndOfFamilyOptions} Haken hier zu
-% sichern nützt nichts}^^A
-% Es wird die bereits gesplittete Option ausgeführt, ohne dass die dabei
-% wesentlichen Macros (aber nicht \cs{reserved@a}!) verändert werden. Das
+% \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
+% \changes{v3.23}{2017/02/16}{den \cs{AtEndOfFamilyOptions} Haken hier zu
+% sichern nützt nichts}%^^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.
% \begin{macrocode}
\newcommand*{\scr@execute@option}[1]{%
@@ -3275,7 +3411,7 @@
}
% \end{macrocode}
% \begin{macro}{\scr@KV@err}
-% \changes{v3.12a}{2013/03/04}{missing internal command added}^^A
+% \changes{v3.12a}{2013/03/04}{missing internal command added}%^^A
% We just have to signal, that the option needs a value, that is missing.
% \begin{macrocode}
\newcommand*{\scr@KV@err}[1]{%
@@ -3284,33 +3420,34 @@
% \end{macrocode}
% \end{macro}
% \begin{macro}{\scr@key@run@errors}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung (intern)}^^A
-% Wird innerhalb von \cs{FamilyOptions} benötigt, um die Fehlermeldungen
-% aufzusammeln, aber erst auszugeben, wenn tatsächlich kein Mitglied die
+% \changes{v3.12}{2013/03/04}{Neue Anweisung (intern)}%^^A
+% Wird innerhalb von \cs{FamilyOptions} benötigt, um die Fehlermeldungen
+% aufzusammeln, aber erst auszugeben, wenn tatsächlich kein Mitglied die
% Option verarbeiten konnte. Wir definieren das hier, damit oben die
% Wiederherstellung korrekt funktioniert.
% \begin{macrocode}
\newcommand*{\scr@key@run@errors}{}
% \end{macrocode}
-% \end{macro}^^A \scr@key@run@errors}
-% \end{macro}^^A \scr@execute@option
+% \end{macro}%^^A \scr@key@run@errors}
+% \end{macro}%^^A \scr@execute@option
% \begin{macro}{\scr@execute@elseoption}
-% \changes{v3.20}{2015/11/18}{neu (intern)}^^A
-% \changes{v3.25}{2017/11/16}{Gruppe eingefügt}^^A
+% \changes{v3.20}{2015/11/18}{neu (intern)}%^^A
+% \changes{v3.25}{2017/11/16}{Gruppe eingefügt}%^^A
% \changes{v3.25}{2017/11/16}{\cs{scr@key@name@else} und
-% \cs{scr@key@value@else} neu}^^A
+% \cs{scr@key@value@else} neu}%^^A
+% \changes{v3.27}{2019/03/10}{missing percent added to avoid spaces}%^^A
% Ist eine Spezialoption mit dem Namen \texttt{@else@} definiert, so wird
-% diese von \cs{FamilyExecuteOptions} genau dann ausgeführt, wenn keine
-% passende Option gefunden wurde. Dafür dient dieses Makro, dessen Argumente
+% diese von \cs{FamilyExecuteOptions} genau dann ausgeführt, wenn keine
+% passende Option gefunden wurde. Dafür dient dieses Makro, dessen Argumente
% und Aufrufstatus genau \cs{scr@execute@option} entspricht. Es soll auch
-% genau dasselbe tun, außer dass es nicht die Option selbst aufruft, sondern
-% die Option als Wert an die \texttt{@else@}-Option übergibt. Es muss also
-% temporär \cs{scr@key@atlist}, \cs{scr@key@name} und \cs{scr@key@value}
-% geändert werden, bevor \cs{scr@execute@option} ausgeführt wird. Da
+% genau dasselbe tun, außer dass es nicht die Option selbst aufruft, sondern
+% die Option als Wert an die \texttt{@else@}-Option übergibt. Es muss also
+% temporär \cs{scr@key@atlist}, \cs{scr@key@name} und \cs{scr@key@value}
+% geändert werden, bevor \cs{scr@execute@option} ausgeführt wird. Da
% allerdings die Originalwerte ggf. von der \texttt{@else@}-Option ausgewertet
% werden sollen, wird das originale \cs{scr@key@atlist} zum Wert der
% \texttt{@else@}-Option. Damit diese nicht erneut aufgespaltet werden muss,
-% werden die originalen \cs{scr@key@name} und \cs{scr@key@value} zusätzlich in
+% werden die originalen \cs{scr@key@name} und \cs{scr@key@value} zusätzlich in
% \cs{scr@key@name@else} und \cs{scr@key@value@else} gespeichert.
% \begin{macrocode}
\newcommand*{\scr@execute@elseoption}[1]{%
@@ -3339,7 +3476,7 @@
\noexpand\def\noexpand\scr@key@name@else{%
\unexpanded\expandafter{\scr@key@name@else}%
}%
- }
+ }%
\scr@ifundefinedorrelax{scr@key@value@else}{%
\unexpanded{\let\scr@key@value@else\relax}%
}{%
@@ -3350,27 +3487,27 @@
}\reserved@a
}
% \end{macrocode}
-% \end{macro}^^A \scr@execute@elseoption
+% \end{macro}%^^A \scr@execute@elseoption
% \begin{macro}{\ifscr@key@found@}
-% \changes{v2.97c}{2007/04/19}{Neuer Schalter (intern)}^^A
-% \changes{v3.00}{2008/04/30}{umbenannt von \cs{ifKOMA@key@found}}^^A
+% \changes{v2.97c}{2007/04/19}{Neuer Schalter (intern)}%^^A
+% \changes{v3.00}{2008/04/30}{umbenannt von \cs{ifKOMA@key@found}}%^^A
% \begin{macro}{\scr@key@atlist}
-% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}^^A
-% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@atlist}}^^A
+% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}%^^A
+% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@atlist}}%^^A
% \begin{macro}{\scr@key@name}
-% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}^^A
-% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@name}}^^A
+% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}%^^A
+% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@name}}%^^A
% \begin{macro}{\scr@key@value}
-% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}^^A
-% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@value}}^^A
+% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}%^^A
+% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@value}}%^^A
% \begin{macro}{\scr@key@split@name@value}
-% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}^^A
+% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}%^^A
% \changes{v2.97e}{2007/11/10}{verwendet \cs{KV@@sp@def} zur Entsorgung von
-% Leerzeichen}^^A
-% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@split@name@value}}^^A
-% \changes{v3.13}{2014/10/17}{\cs{long}}^^A
+% Leerzeichen}%^^A
+% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@split@name@value}}%^^A
+% \changes{v3.13}{2014/10/17}{\cs{long}}%^^A
% \changes{v3.26}{2018/08/29}{Verwendung von \cs{scr@sp@def} statt
-% \cs{KV@@sp@def}}^^A
+% \cs{KV@@sp@def}}%^^A
% \begin{macrocode}
\newif\ifscr@key@found@
\newcommand*{\scr@key@atlist}{}
@@ -3383,30 +3520,30 @@
}
%</base>
% \end{macrocode}
-% \end{macro}^^A \scr@key@split@name@value
-% \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
+% \end{macro}%^^A \scr@key@split@name@value
+% \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}^^A
-% \changes{v3.26b}{2019/01/09}{Tyischen Fehler abgefangen}^^A
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
+% \changes{v3.26b}{2019/01/09}{Tyischen Fehler abgefangen}%^^A
% \begin{macro}{\@FamilyOptions}
-% \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}^^A
+% \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}%^^A
% \changes{v3.26}{2018/08/29}{Verwendung von \cs{scr@sp@def} statt
-% \cs{KV@@sp@def}}^^A
+% \cs{KV@@sp@def}}%^^A
% \begin{macro}{\Family@Option}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
-% \changes{v3.12}{2013/03/04}{entfernt}^^A
+% \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
-% einzige Option setzen. Dafür kann man gleich mehrere durch Komma getrennte
-% Argumente für diese Option setzen. Das erste obligatorische Argument ist
+% einzige Option setzen. Dafür kann man gleich mehrere durch Komma getrennte
+% Argumente für diese Option setzen. Das erste obligatorische Argument ist
% wieder die Familie, das zweite obligatorische Argument ist die Option, das
-% dritte, obligatorische Argument ist die Liste der Werte für diese Option.
+% dritte, obligatorische Argument ist die Liste der Werte für diese Option.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyOption}[2]{%
@@ -3458,18 +3595,18 @@
\expandafter\scr@sp@def\expandafter\scr@key@name\expandafter{#2}%
% \end{macrocode}
% Der einfachste Weg ist nun schlicht, die Liste der Werte durchzugehen und so
-% nach und nach eine Liste von Werten für \cs{FamilyOptions} zu erzeugen.
+% nach und nach eine Liste von Werten für \cs{FamilyOptions} zu erzeugen.
% \begin{macrocode}
\let\reserved@a\@empty
\@for\reserved@b:=#3\do{%
% \end{macrocode}
-% \changes{v3.08}{2010/11/05}{leere Argumente in der Werteliste}^^A
-% Auf vielfachen Wunsch und entgegen meiner Überzeugung, sind auch leere
+% \changes{v3.08}{2010/11/05}{leere Argumente in der Werteliste}%^^A
+% Auf vielfachen Wunsch und entgegen meiner Ãœberzeugung, sind auch leere
% Argumente in der Werteliste erlaubt, werden jedoch ignoriert:
% \begin{macrocode}
\ifx\reserved@b\@empty\else
% \end{macrocode}
-% \changes{v3.12}{2012/03/04}{auch Leerzeichenargumente werden ignoriert}^^A
+% \changes{v3.12}{2012/03/04}{auch Leerzeichenargumente werden ignoriert}%^^A
% Auch Argumente, die nur aus einem Leerzeichen bestehen, werden ignoriert:
% \begin{macrocode}
\ifx\reserved@b\space\else
@@ -3488,30 +3625,30 @@
% \end{macro}
%
% \begin{macro}{\KOMAoptions}
-% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen}^^A
-% \changes{v2.97c}{2007/04/19}{Optionen aller KOMA-Familien abarbeiten}^^A
-% \changes{v3.12}{2013/03/04}{Hook-Mechanismus von \cs{FamilyOptions}^^A
+% \changes{v2.96}{2006/08/20}{Neuer Hook nach den Optionen}%^^A
+% \changes{v2.97c}{2007/04/19}{Optionen aller KOMA-Familien abarbeiten}%^^A
+% \changes{v3.12}{2013/03/04}{Hook-Mechanismus von \cs{FamilyOptions}%^^A
% verwendent}
-% Simple kleine Abkürzung.
+% Simple kleine Abkürzung.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAoptions}{\FamilyOptions{KOMA}}
%</koma>
% \end{macrocode}
% \begin{macro}{\KOMA@options}
-% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}^^A
-% \changes{v3.12}{2013/03/04}{entfernt}^^A
-% \end{macro}^^A \KOMA@options
-% \end{macro}^^A \KOMAoptions
+% \changes{v2.97c}{2007/04/19}{Neues Makro (intern)}%^^A
+% \changes{v3.12}{2013/03/04}{entfernt}%^^A
+% \end{macro}%^^A \KOMA@options
+% \end{macro}%^^A \KOMAoptions
%
% \begin{macro}{\KOMAoptionsOf}
-% \changes{v3.17}{2015/02/25}{neue Anweisung}^^A
-% Mit dieser Anweisung können die aktuell gesetzten \KOMAScript-Optionen
+% \changes{v3.17}{2015/02/25}{neue Anweisung}%^^A
+% Mit dieser Anweisung können die aktuell gesetzten \KOMAScript-Optionen
% eines Pakets oder einer Klasse abgefragt werden, sobald ein Paket oder eine
-% Klasse das unterstützt. Das erste (optionale) Argument gibt dabei eine
-% Anweisung an, die für die Optionenliste ausgeführt werden soll. Das zweite
+% Klasse das unterstützt. Das erste (optionale) Argument gibt dabei eine
+% Anweisung an, die für die Optionenliste ausgeführt werden soll. Das zweite
% (nicht optionale Argument) ist der Name eines KOMA-Script-Pakets oder einer
-% KOMA-Script-Klasse einschließlich Dateiendung.
+% KOMA-Script-Klasse einschließlich Dateiendung.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAoptionsOf}[2][\@firstofone]{%
@@ -3529,16 +3666,16 @@
}
%</koma>
% \end{macrocode}
-% \end{macro}^^A \KOMAoptionsOf
+% \end{macro}%^^A \KOMAoptionsOf
%
% \begin{macro}{\KOMAoptionOf}
-% \changes{v3.17}{2015/02/26}{neue Anweisung}^^A
+% \changes{v3.17}{2015/02/26}{neue Anweisung}%^^A
% Mit dieser Anweisung kann eine aktuell gesetzte \KOMAScript-Option
% eines Pakets oder einer Klasse abgefragt werden, sobald ein Paket oder eine
-% Klasse das unterstützt. Das erste (optionale) Argument gibt dabei eine
-% Anweisung an, die für die Optionenliste ausgeführt werden soll. Das zweite
+% Klasse das unterstützt. Das erste (optionale) Argument gibt dabei eine
+% Anweisung an, die für die Optionenliste ausgeführt werden soll. Das zweite
% (nicht optionale Argument) ist der Name eines KOMA-Script-Pakets oder einer
-% KOMA-Script-Klasse einschließlich Dateiendung, das dritte (nicht optionale
+% KOMA-Script-Klasse einschließlich Dateiendung, das dritte (nicht optionale
% Argument) ist der Name der Option, die abgefragt werden soll.
% \begin{macrocode}
%<*koma>
@@ -3565,30 +3702,30 @@
% \end{macro}
%
% \begin{macro}{\post@kopt@hook}
-% \changes{v3.12}{2013/03/04}{entfernt}^^A
-% \end{macro}^^A \post@kopt@hook
+% \changes{v3.12}{2013/03/04}{entfernt}%^^A
+% \end{macro}%^^A \post@kopt@hook
% \begin{macro}{\AfterKOMAoptions}
-% \changes{v3.12}{2013/03/04}{Verwendung von \cs{AtEndOfFamilyOptions}}^^A
-% \changes{v3.23}{2017/02/16}{kein \cs{let}}^^A
-% Eine Option kann dafür sorgen, dass nach den Optionen noch etwas passiert.
+% \changes{v3.12}{2013/03/04}{Verwendung von \cs{AtEndOfFamilyOptions}}%^^A
+% \changes{v3.23}{2017/02/16}{kein \cs{let}}%^^A
+% Eine Option kann dafür sorgen, dass nach den Optionen noch etwas passiert.
% \begin{macrocode}
%<*koma>
\newcommand*{\AfterKOMAoptions}{\AtEndOfFamilyOptions}
%</koma>
% \end{macrocode}
-% \end{macro}^^A \AfterKOMAoptions
+% \end{macro}%^^A \AfterKOMAoptions
%
% \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}^^A
-% verhält}
-% \changes{v3.12}{2013/04/20}{veraltete \eTeX-freie Version entfernt}^^A
-% \changes{v3.12}{2013/04/20}{Warnung, falls eine inkompatible Definition
+% \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}%^^A
+% verhält}
+% \changes{v3.12}{2013/04/20}{veraltete \eTeX-freie Version entfernt}%^^A
+% \changes{v3.12}{2013/04/20}{Warnung, falls eine inkompatible Definition
% von \cs{l@addto@macro} entdeckt wird}
-% \changes{v3.23}{2017/02/16}{in den Optionen-Teil verschoben}^^A
+% \changes{v3.23}{2017/02/16}{in den Optionen-Teil verschoben}%^^A
% \begin{macrocode}
%</body>
%<*base&prepare>
@@ -3623,13 +3760,13 @@
%</base&prepare>
%<*body>
% \end{macrocode}
-% \end{macro}^^A \l@addto@macro
+% \end{macro}%^^A \l@addto@macro
%
% \begin{macro}{\l@addto@macro@a}
-% \changes{v3.20}{2015/11/20}{neu (intern)}
-% So eine ähnliche Anweisung benötige ich außerdem für den Fall, dass eine
+% \changes{v3.20}{2015/11/20}{neu (intern)}
+% So eine ähnliche Anweisung benötige ich außerdem für den Fall, dass eine
% Anweisung erweitert werden soll, die genau ein obligatorisches Argument
-% benötigt. Achtung! Diese Anweisung funktioniert deutlich weniger allgemein
+% benötigt. Achtung! Diese Anweisung funktioniert deutlich weniger allgemein
% als \cs{l@addto@macro} und wird deshalb nie offiziell dokumentiert!
% \begin{macrocode}
%<*base>
@@ -3665,12 +3802,12 @@
\endgroup
%</base>
% \end{macrocode}
-% \end{macro}^^A \l@addto@macro@a
+% \end{macro}%^^A \l@addto@macro@a
%
% \begin{macro}{\l@preto@macro}
-% \changes{v3.20}{2015/11/25}{neu (intern)}^^A
+% \changes{v3.20}{2015/11/25}{neu (intern)}%^^A
% In gewisser Weise das gleiche wie \cs{l@appto@macro}, allerdings wird vorn
-% statt hinten angefügt.
+% statt hinten angefügt.
% \begin{macrocode}
%<*base>
\newcommand\l@preto@macro[2]{%
@@ -3678,13 +3815,13 @@
}%
%</base>
% \end{macrocode}
-% \end{macro}^^A \l@preto@macro
+% \end{macro}%^^A \l@preto@macro
%
% \begin{macro}{\l@preto@macro@a}
-% \changes{v3.20}{2015/11/25}{neu (intern)}
-% So eine ähnliche Anweisung benötige ich außerdem für den Fall, dass eine
+% \changes{v3.20}{2015/11/25}{neu (intern)}
+% So eine ähnliche Anweisung benötige ich außerdem für den Fall, dass eine
% Anweisung erweitert werden soll, die genau ein obligatorisches Argument
-% benötigt. Achtung! Diese Anweisung funktioniert deutlich weniger allgemein
+% benötigt. Achtung! Diese Anweisung funktioniert deutlich weniger allgemein
% als \cs{l@preto@macro} und wird deshalb nie offiziell dokumentiert!
% \begin{macrocode}
%<*base>
@@ -3720,11 +3857,11 @@
\endgroup
%</base>
% \end{macrocode}
-% \end{macro}^^A \l@preto@macro@a
+% \end{macro}%^^A \l@preto@macro@a
%
% \begin{macro}{\KOMAoption}
-% \changes{v2.98c}{2008/03/12}{Neue Anweisung}^^A
-% \changes{v3.12}{2013/03/04}{Einfacher Aufruf von \cs{FamilyOption}}
+% \changes{v2.98c}{2008/03/12}{Neue Anweisung}%^^A
+% \changes{v3.12}{2013/03/04}{Einfacher Aufruf von \cs{FamilyOption}}
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAoption}{\FamilyOption{KOMA}}
@@ -3733,13 +3870,13 @@
% \end{macro}
%
% \begin{macro}{\FamilyUnknownKeyValue}
-% \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.
+% \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]{%
@@ -3757,9 +3894,9 @@
%</base>
% \end{macrocode}
% \begin{macro}{\FamilyElseValues}
-% \changes{v3.00}{2008/05/02}{Neue Anweisung}^^A
-% \changes{v3.12}{2013/03/04}{wird intern nicht mehr verwendet}^^A
-% Diese Anweisung konnte ursprünglich vor dem Setzen eines Wertes definiert
+% \changes{v3.00}{2008/05/02}{Neue Anweisung}%^^A
+% \changes{v3.12}{2013/03/04}{wird intern nicht mehr verwendet}%^^A
+% Diese Anweisung konnte ursprünglich vor dem Setzen eines Wertes definiert
% werden, um bei einer etwaigen Fehlermeldung weitere Werte als erlaubt
% auszugeben. Am Ende von \cs{FamilySetBool} und \cs{FamilySetNumerical}
% wird die Anweisung automatisch zu \cs{@empty}. Seit Version~3.12 wird
@@ -3769,15 +3906,15 @@
\newcommand*{\FamilyElseValues}{}
%</base>
% \end{macrocode}
-% \end{macro}^^A \FamilyUnknownKeyValue
-% \end{macro}^^A \FamilyElseValue
+% \end{macro}%^^A \FamilyUnknownKeyValue
+% \end{macro}%^^A \FamilyElseValue
%
% \begin{macro}{\FamilyBoolKey}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
-% Dieses Makro definiert einen Schlüssel für eine Familie. Dieser Schlüssel
-% ist ein Schalter, der über diverse Werte geschaltet werden kann.
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
+% Dieses Makro definiert einen Schlüssel für eine Familie. Dieser Schlüssel
+% ist ein Schalter, der über diverse Werte geschaltet werden kann.
% Das erste, optionale Argument ist das Familienmitglied, das zweite,
-% obligatorische Argument ist die Familie, das dritte der Name des Schlüssels,
+% obligatorische Argument ist die Familie, das dritte der Name des Schlüssels,
% das vierte der Schalter.
% \begin{macrocode}
%<*base>
@@ -3789,21 +3926,24 @@
}
% \end{macrocode}
% \begin{macro}{\FamilySetBool}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
-% \changes{v3.11a}{2012/05/25}{Argument in Fehlermeldung korrigiert}^^A
-% Über diese Anweisung wird der Wert dann gesetzt. Dabei ist das erste
-% Argument die Familie, das zweite der Name des Schlüssels, das dritte der
-% Schalter und das vierte schließlich der gewünschte Wert.
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
+% \changes{v3.11a}{2012/05/25}{Argument in Fehlermeldung korrigiert}%^^A
+% \changes{v3.27}{2019/07/08}{Leeres Argument ist \texttt{true}}%^^A
+% Ãœber diese Anweisung wird der Wert dann gesetzt. Dabei ist das erste
+% Argument die Familie, das zweite der Name des Schlüssels, das dritte der
+% Schalter und das vierte schließlich der gewünschte Wert.
% \begin{macrocode}
\newcommand*{\FamilySetBool}[4]{%
- \ifstr{#4}{true}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
- \ifstr{#4}{on}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
- \ifstr{#4}{yes}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
- \ifstr{#4}{false}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
- \ifstr{#4}{off}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
- \ifstr{#4}{no}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
- \FamilyUnknownKeyValue{#1}{#2}{#4}{%
- `true', `on', `yes', `false', `off', `no'%
+ \ifstr{#4}{}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
+ \ifstr{#4}{true}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
+ \ifstr{#4}{on}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
+ \ifstr{#4}{yes}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
+ \ifstr{#4}{false}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
+ \ifstr{#4}{off}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
+ \ifstr{#4}{no}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
+ \FamilyUnknownKeyValue{#1}{#2}{#4}{%
+ `true', `on', `yes', `false', `off', `no'%
+ }%
}%
}%
}%
@@ -3817,11 +3957,42 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \selectlanguage{english}
+% \begin{macro}{\FamilyInverseBoolKey}
+% \changes{3.27}{2019/07/08}{new}
+% \begin{macro}{\FamilySetInverseBool}
+% \changes{3.27}{2019/07/08}{new}
+% These are similar to \cs{FamilyBoolKey} and \cs{FamilySetBoolKey} but use
+% inverse logic (true sets false and false sets true).
+% \begin{macrocode}
+%<*base>
+\newcommand*{\FamilyInverseBoolKey}[4][.\@currname.\@currext]{%
+ \@ifundefined{if#4}{%
+ \expandafter\newif\csname if#4\endcsname
+ \@nameuse{#4true}%
+ }{}%
+ \DefineFamilyKey[{#1}]{#2}{#3}[true]{\FamilySetInverseBool{#2}{#3}{#4}{##1}}%
+}
+\newcommand*{\FamilySetInverseBool}[4]{%
+ \FamilySetBool{#1}{#2}{#3}{#4}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \expandafter\ifx\csname if#3\expandafter\endcsname\csname iftrue\endcsname
+ \@nameuse{#3false}%
+ \else
+ \@nameuse{#3true}%
+ \fi
+ \fi
+}
+%</base>
+% \end{macrocode}
+% \end{macro}%^^A \FamilySetInverseBool
+% \end{macro}%^^A \FamilyInverseBoolKey
+% \selectlanguage{ngerman}
%
% \begin{macro}{\KOMA@unknown@keyval}
-% Dieses Makro berichtet über Fehler wegen unbekannter Wertübergabe an
-% einen Schlüssel. Das erste Argument ist der Schlüssel, das zweite
-% der Wert und das dritte die Liste der möglichen Werte.
+% Dieses Makro berichtet über Fehler wegen unbekannter Wertübergabe an
+% einen Schlüssel. Das erste Argument ist der Schlüssel, das zweite
+% der Wert und das dritte die Liste der möglichen Werte.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@unknown@keyval}{\FamilyUnknownKeyValue{KOMA}}
@@ -3830,15 +4001,15 @@
% \end{macro}
%
% \begin{macro}{\KOMA@ifkey}
-% \changes{v3.02c}{2009/02/04}{definiert ebenfalls das Familienmitglied}^^A
-% \changes{v3.17}{2015/03/02}{ersetzt den gespeicherten Wert}^^A
-% Dieses Makro definiert einen Schlüssel, der einen Schalter an Hand des
+% \changes{v3.02c}{2009/02/04}{definiert ebenfalls das Familienmitglied}%^^A
+% \changes{v3.17}{2015/03/02}{ersetzt den gespeicherten Wert}%^^A
+% Dieses Makro definiert einen Schlüssel, der einen Schalter an Hand des
% Wertes setzt. Als Werte sind "`\texttt{true}"', "`\texttt{false}"',
% "`\texttt{on}"', "`\texttt{off}"', "`\texttt{yes}"' und
-% "`\texttt{no}"' erlaubt. Der Default-Wert für den Schalter ist
-% grundsätzlich "`false"', so dass der Default-Wert für die Verwendung
-% des Schküssels grundsätzlich "`true"' ist. Das erste Argument ist
-% der Name des Schlüssels, der zweite ist der Name des Schalters.
+% "`\texttt{no}"' erlaubt. Der Default-Wert für den Schalter ist
+% grundsätzlich "`false"', so dass der Default-Wert für die Verwendung
+% des Schküssels grundsätzlich "`true"' ist. Das erste Argument ist
+% der Name des Schlüssels, der zweite ist der Name des Schalters.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@ifkey}[2][.\@currname.\@currext]{%
@@ -3863,8 +4034,8 @@
% \end{macrocode}
% \begin{macro}{\KOMA@set@ifkey}
% Die eigentliche Arbeit bei der ganzen Sache wird von diesem internen
-% Makro erledigt. Dabei wird der Name des Schlüssels zu Argument 1, der
-% Name des Schalters zu Argument 2 und der Wert des Schlüssels wird
+% Makro erledigt. Dabei wird der Name des Schlüssels zu Argument 1, der
+% Name des Schalters zu Argument 2 und der Wert des Schlüssels wird
% Argument 3.
% \begin{macrocode}
%<*koma>
@@ -3875,20 +4046,20 @@
% \end{macro}
%
% \begin{macro}{\FamilyCounterKey}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
-% unterstützt}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
-% Dieses Makro definiert einen Schlüssel, der einen \LaTeX-Zähler an Hand
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
+% unterstützt}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}%^^A
+% Dieses Makro definiert einen Schlüssel, der einen \LaTeX-Zähler an Hand
% des Wertes setzt. Das erste, optionale Argument ist das Familienmitglied,
% das zweite, obligatorische Argument ist die Familie, das dritte der Name
-% des Schlüssels, das vierte, optionale ist der Säumniswert, das fünfte der
-% Name des \LaTeX-Zählers. Erlaubt sind alle Integer-Werte.
+% des Schlüssels, das vierte, optionale ist der Säumniswert, das fünfte der
+% Name des \LaTeX-Zählers. Erlaubt sind alle Integer-Werte.
% \begin{macro}{\Family@@Counter@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macro}{\Family@Counter@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyCounterKey}[3][.\@currname.\@currext]{%
@@ -3907,13 +4078,13 @@
}
% \end{macrocode}
% \begin{macro}{\FamilySetCounter}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
-% \cs{FamilyKeyStateProcessed}}^^A
-% \changes{v3.23}{2017/02/23}{Leerzeichen durch \cs{relax} ersetzt}^^A
-% Über diese Anweisung wird der Wert dann gesetzt. Dabei ist das erste
-% Argument die Familie, das zweite der Name des Schlüssels, das dritte der
-% Name des \LaTeX-Zählers, das vierte schließlich der gewünschte Wert.
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
+% \cs{FamilyKeyStateProcessed}}%^^A
+% \changes{v3.23}{2017/02/23}{Leerzeichen durch \cs{relax} ersetzt}%^^A
+% Ãœber diese Anweisung wird der Wert dann gesetzt. Dabei ist das erste
+% Argument die Familie, das zweite der Name des Schlüssels, das dritte der
+% Name des \LaTeX-Zählers, das vierte schließlich der gewünschte Wert.
% \begin{macrocode}
\newcommand*{\FamilySetCounter}[4]{%
\begingroup
@@ -3952,30 +4123,30 @@
% \end{macro}
% \end{macro}
% \begin{macro}{\FamilyCounterMacroKey}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
-% unterstützt}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
+% unterstützt}%^^A
% Diese Anweisung arbeitet fast wie \cs{FamilyCounterKey}, allerdings wird
-% dabei nicht ein Zähler, sondern ein Marko auf einen Wert definiert. Dabei
+% dabei nicht ein Zähler, sondern ein Marko auf einen Wert definiert. Dabei
% ist das erste (optionale) Argument das Mitglied, das zweite die Familie, das
-% dritte der Schlüssel, das vierte (optionale) der Säumniswert, das fünfte das
+% dritte der Schlüssel, das vierte (optionale) der Säumniswert, das fünfte das
% Makro.
% \begin{macro}{\FamilySetCounterMacro}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.15}{2014/12/17}{\cs{aftergroup} vor
-% \cs{FamilyKeyStateProcessed}}^^A
-% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
-% \cs{FamilyKeyStateProcessed}}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.15}{2014/12/17}{\cs{aftergroup} vor
+% \cs{FamilyKeyStateProcessed}}%^^A
+% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
+% \cs{FamilyKeyStateProcessed}}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}%^^A
% Diese Anweisung arbeitet fast wie \cs{FamilySetCounter}, allerdings wird
-% nicht ein Zähler gesetzt, sondern ein Makro auf einen Wert definiert. Dabei
-% ist das erste Argument die Familie, das zweite der Name des Schlüssels, das
-% dritte das Makro, das vierte schließlich der gewünschte Wert.
+% nicht ein Zähler gesetzt, sondern ein Makro auf einen Wert definiert. Dabei
+% ist das erste Argument die Familie, das zweite der Name des Schlüssels, das
+% dritte das Makro, das vierte schließlich der gewünschte Wert.
% \begin{macro}{\Family@@Counter@@Macro@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macro}{\Family@Counter@Macro@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyCounterMacroKey}[3][.\@currname.\@currext]{%
@@ -3995,8 +4166,8 @@
\newcommand*{\FamilySetCounterMacro}[4]{%
\begingroup
% \end{macrocode}
-% An dieser Stelle wird nun der immer definierte Zähler page als lokaler
-% Zähler verwendet. Das ist nur möglich, weil \cs{FamilySetCounter} nicht
+% An dieser Stelle wird nun der immer definierte Zähler page als lokaler
+% Zähler verwendet. Das ist nur möglich, weil \cs{FamilySetCounter} nicht
% global mit \cs{setcounter} arbeitet, sondern lokal mit einer Zuweisung an
% \cs{value}.
% \begin{macrocode}
@@ -4025,19 +4196,19 @@
% \end{macro}
%
% \begin{macro}{\FamilyLengthKey}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
-% unterstützt}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
-% Dieses Makro definiert einen Schlüssel, der eine \LaTeX-Länge an Hand
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
+% unterstützt}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}%^^A
+% Dieses Makro definiert einen Schlüssel, der eine \LaTeX-Länge an Hand
% des Wertes setzt. Das erste, optionale Argument ist das Familienmitglied,
% das zweite, obligatorische Argument ist die Familie, das dritte der Name
-% des Schlüssels, das vierte der name der \LaTeX-Länge.
+% des Schlüssels, das vierte der name der \LaTeX-Länge.
% \begin{macro}{\Family@@Length@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macro}{\Family@Length@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyLengthKey}[3][.\@currname.\@currext]{%
@@ -4056,14 +4227,14 @@
}
% \end{macrocode}
% \begin{macro}{\FamilySetLength}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.15}{2015/01/02}{\cs{ifglueexpr} hinzugefügt}^^A
-% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
-% \cs{FamilyKeyStateProcessed}}^^A
-% \changes{v3.20}{2016/04/27}{Expansion vor dem Test}^^A
-% Über diese Anweisung wird der Wert dann gesetzt. Dabei ist das erste
-% Argument die Familie, das zweite der Name des Schlüssels, das dritte der
-% Name der \LaTeX-Länge, das vierte schließlich der gewünschte Wert.
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.15}{2015/01/02}{\cs{ifglueexpr} hinzugefügt}%^^A
+% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
+% \cs{FamilyKeyStateProcessed}}%^^A
+% \changes{v3.20}{2016/04/27}{Expansion vor dem Test}%^^A
+% Ãœber diese Anweisung wird der Wert dann gesetzt. Dabei ist das erste
+% Argument die Familie, das zweite der Name des Schlüssels, das dritte der
+% Name der \LaTeX-Länge, das vierte schließlich der gewünschte Wert.
% \begin{macrocode}
\newcommand*{\FamilySetLength}[4]{%
\begingroup
@@ -4112,29 +4283,29 @@
% \end{macro}
% \end{macro}
% \begin{macro}{\FamilyLengthMacroKey}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
-% unterstützt}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.15}{2014/12/03}{er wird ein (optionaler) Säumniswert
+% unterstützt}%^^A
% \begin{macro}{\FamilySetLengthMacro}
-% \changes{v3.12}{2013/11/05}{neu}^^A
-% \changes{v3.14a}{2014/11/24}{fix: \cs{@tempskipa} statt \cs{@temskipa}}^^A
-% \changes{v3.15}{2014/12/17}{\cs{aftergroup} vor
-% \cs{FamilyKeyStateProcessed}}^^A
-% \changes{v3.15}{2015/01/02}{\cs{ifglueexpr} hinzugefügt}^^A
-% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
-% \cs{FamilyKeyStateProcessed}}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} ersetzt durch
-% \cs{kernel@ifnextchar}}^^A
-% \changes{v3.20}{2016/04/27}{interne Verwendung von \cs{FamilySetLength}}^^A
+% \changes{v3.12}{2013/11/05}{neu}%^^A
+% \changes{v3.14a}{2014/11/24}{fix: \cs{@tempskipa} statt \cs{@temskipa}}%^^A
+% \changes{v3.15}{2014/12/17}{\cs{aftergroup} vor
+% \cs{FamilyKeyStateProcessed}}%^^A
+% \changes{v3.15}{2015/01/02}{\cs{ifglueexpr} hinzugefügt}%^^A
+% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
+% \cs{FamilyKeyStateProcessed}}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} ersetzt durch
+% \cs{kernel@ifnextchar}}%^^A
+% \changes{v3.20}{2016/04/27}{interne Verwendung von \cs{FamilySetLength}}%^^A
% Diese Anweisungen arbeitet fast wie \cs{FamilyLengthKey} und
-% \cs{FamilySetLengt}, allerdings wird nicht eine Länge gesetzt, sondern
+% \cs{FamilySetLengt}, allerdings wird nicht eine Länge gesetzt, sondern
% ein Makro auf einen Wert definiert. Dabei ist das erste Argument die
-% Familie, das zweite der Name des Schlüssels, das dritte das Makro, das
-% vierte schließlich der gewünschte Wert.
+% Familie, das zweite der Name des Schlüssels, das dritte das Makro, das
+% vierte schließlich der gewünschte Wert.
% \begin{macro}{\Family@@Length@@Macro@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macro}{\Family@Length@Macro@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}^^A
+% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyLengthMacroKey}[3][.\@currname.\@currext]{%
@@ -4179,20 +4350,20 @@
%
%
% \begin{macro}{\FamilyUseLengthMacroKey}
-% \changes{v3.20}{2016/04/27}{neu}^^A
+% \changes{v3.20}{2016/04/27}{neu}%^^A
% \begin{macro}{\FamilySetUseLengthMacro}
-% \changes{v3.20}{2016/04/27}{neu}^^A
+% \changes{v3.20}{2016/04/27}{neu}%^^A
% Diese Anweisungen arbeitet fast wie \cs{FamilyLengthKey} und
% \cs{FamilySetLengt}, allerdings wird das Makro nicht als den Wert des Werts,
% sondern als den Wert selbst definiert. Eine Expansion des Werts findet nur
-% für die Prüfung statt. Änderungen am Wert wirken sich also ggf. weiterhin
+% für die Prüfung statt. Änderungen am Wert wirken sich also ggf. weiterhin
% aus. Dabei ist das erste Argument die Familie, das zweite der Name des
-% Schlüssels, das dritte das Makro, das vierte schließlich der gewünschte
+% Schlüssels, das dritte das Makro, das vierte schließlich der gewünschte
% Wert.
% \begin{macro}{\Family@@UseLength@@Macro@@Key}
-% \changes{v3.20}{2016/04/27}{neu (intern)}^^A
+% \changes{v3.20}{2016/04/27}{neu (intern)}%^^A
% \begin{macro}{\Family@USeLength@Macro@Key}
-% \changes{v3.20}{2016/04/27}{neu (intern)}^^A
+% \changes{v3.20}{2016/04/27}{neu (intern)}%^^A
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyUseLengthMacroKey}[3][.\@currname.\@currext]{%
@@ -4238,25 +4409,25 @@
%
%
% \begin{macro}{\FamilyNumericalKey}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}%^^A
% \begin{macro}{\Family@Numerical@Key}
-% \changes{v3.00}{2008/05/28}{Neu (intern)}^^A
-% \changes{v3.08b}{2011/03/31}{fehlendes Argument bei \cs{ifundefined}}
-% Ein ähnliches Makro definiert einen Schlüssel, der ein nummerisches Makro
-% auf einen bestimmten Wert setzt. Dabei können auch verschiedene symbolische
+% \changes{v3.00}{2008/05/28}{Neu (intern)}%^^A
+% \changes{v3.08b}{2011/03/31}{fehlendes Argument bei \cs{ifundefined}}
+% Ein ähnliches Makro definiert einen Schlüssel, der ein nummerisches Makro
+% auf einen bestimmten Wert setzt. Dabei können auch verschiedene symbolische
% Werte auf denselben nummerischen Wert abgebildet werden. Das erste,
% optionale Argument ist das Familienmitglied, das zweite, obligatorische
% Argument ist die Familie, das dritte, obligatorische Argument ist der Name
-% der Option, das vierte, optionale Artument ist der Defaultwert für den
-% Schlüssel, das fünfte, obligatorische Argument ist der Name des Makros, das
+% der Option, das vierte, optionale Artument ist der Defaultwert für den
+% Schlüssel, das fünfte, obligatorische Argument ist der Name des Makros, das
% (in der Voreinstellung als 0) definiert werden soll, das sechste,
% obligatorische Argument ist die Liste der symbolischen und nummerischen
% Werte. Die Liste hat die Form:
% \{\emph{Symbol}\}\{\emph{Wert}\},\{\emph{Symbol}\}\{\emph{Wert}\}\dots
-% Das interne Makro wird benötigt, um das vierte, optionale Argument zu
-% ermöglichen. Dabei ist dann das erste Argument nicht mehr optional, sondern
+% Das interne Makro wird benötigt, um das vierte, optionale Argument zu
+% ermöglichen. Dabei ist dann das erste Argument nicht mehr optional, sondern
% obligatorisch.
% \begin{macrocode}
%<*base>
@@ -4277,11 +4448,11 @@
% \end{macrocode}
% \begin{macro}{\FamilySetNumerical}
% \changes{v3.11a}{2012/05/28}{call of \cs{FamilyUnknownKeyValue} outside of
-% local group}^^A
+% local group}%^^A
% \changes{v3.25}{2017/12/04}{komplett leere Listenelemente werden
-% ignoriert}^^A
+% ignoriert}%^^A
% Die eigentliche Arbeit dabei wird von diesem Makro erledigt. Dabei
-% wird die Familie zu Argument 1, der Name des Schlüssels zu Argument 2, der
+% wird die Familie zu Argument 1, der Name des Schlüssels zu Argument 2, der
% Name des Makros, das definiert werden soll zu Argument 3, die Liste zu
% Argument 4 und der Wert, auf den gesetzt werden soll, zu Argument 5.
% \begin{macrocode}
@@ -4324,21 +4495,21 @@
% \end{macro}
%
% \begin{macro}{\KOMA@ncmdkey}
-% \changes{v3.02c}{2009/02/04}{definiert ebenfalls das Familienmitglied}^^A
-% \changes{v3.17}{2015/03/16}{neu implementiert mit Speicherung der
-% Werte und optionalem erstem Argument}^^A
+% \changes{v3.02c}{2009/02/04}{definiert ebenfalls das Familienmitglied}%^^A
+% \changes{v3.17}{2015/03/16}{neu implementiert mit Speicherung der
+% Werte und optionalem erstem Argument}%^^A
% \begin{macro}{\KOMA@@ncmdkey}
-% \changes{v3.17}{2015/03/16}{neu (intern)}^^A
+% \changes{v3.17}{2015/03/16}{neu (intern)}%^^A
% \begin{macro}{\KOMA@@@ncmdkey}
-% \changes{v3.17}{2015/03/16}{neu (intern)}^^A
+% \changes{v3.17}{2015/03/16}{neu (intern)}%^^A
% Wie \cs{FamilyNumericalKey} mit zwei entscheidenden Unterschieden:
% \begin{itemize}
-% \item Die Familien ist immer \texttt{KOMA} und entfällt daher als zweites
+% \item Die Familien ist immer \texttt{KOMA} und entfällt daher als zweites
% Argument.
-% \item Der gespeicherte Wert wird ausgetauscht. Daher kann es nicht nur für
+% \item Der gespeicherte Wert wird ausgetauscht. Daher kann es nicht nur für
% Optionen verwendet werden, bei denen die Werte exklusiv sind.
% \end{itemize}
-% Wichtig: Die Voreinstellung muss anschließend noch in jedem Fall mit
+% Wichtig: Die Voreinstellung muss anschließend noch in jedem Fall mit
% \cs{KOMA@kav@add} gesetzt werden!
% \begin{macrocode}
%<*koma>
@@ -4369,7 +4540,7 @@
% \end{macrocode}
% \begin{macro}{\KOMA@set@ncmdkey}
% Die eigentliche Arbeit dabei wird wahlweise von diesem Makro erledigt. Dabei
-% wird der Name des Schlüssels zu Argument 1, der Name des Makros,
+% wird der Name des Schlüssels zu Argument 1, der Name des Makros,
% das definiert werden soll zu Argument 2, die Liste zu Argument 3 und
% der Wert, auf den gesetzt werden soll, zu Argument 4. Dabei wird allerdings
% kein gespeicherter Wert ersetzt!
@@ -4385,23 +4556,23 @@
%
%
% \begin{macro}{\FamilyStringKey}
-% \changes{v3.08}{2010/11/05}{Neue Anweisung}^^A
+% \changes{v3.08}{2010/11/05}{Neue Anweisung}%^^A
% \changes{v3.08b}{2011/03/31}{\cs{Family@String@Key} und
-% \cs{Family@@String@@Key} vertauscht}^^A
+% \cs{Family@@String@@Key} vertauscht}%^^A
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
+% \cs{kernel@ifnextchar}}%^^A
% \begin{macro}{\Family@String@Key}
-% \changes{v3.08}{2010/11/05}{Neu (intern)}^^A
+% \changes{v3.08}{2010/11/05}{Neu (intern)}%^^A
% \begin{macro}{\Family@@String@@Key}
-% \changes{v3.08}{2010/11/05}{Neu (intern)}^^A
-% Ein ähnliches Makro definiert einen Schlüssel, der ein Makro auf einen
+% \changes{v3.08}{2010/11/05}{Neu (intern)}%^^A
+% Ein ähnliches Makro definiert einen Schlüssel, der ein Makro auf einen
% beliegigen Wert setzt. Das erste, optionale Argument ist das
% Familienmitglied, das zweite, obligatorische Argument ist die Familie, das
% dritte, obligatorische Argument ist der Name der Option, das vierte,
-% optionale Artument ist der Defaultwert für den Schlüssel, das fünfte,
+% optionale Artument ist der Defaultwert für den Schlüssel, das fünfte,
% obligatorische Argument ist das Makros, das (in der Voreinstellung
-% als leer) definiert werden soll. Die internen Makro werden benötigt, um das
-% vierte, optionale Argument zu ermöglichen. Dabei ist dann das erste Argument
+% als leer) definiert werden soll. Die internen Makro werden benötigt, um das
+% vierte, optionale Argument zu ermöglichen. Dabei ist dann das erste Argument
% nicht mehr optional, sondern obligatorisch.
% \begin{macrocode}
%<*base>
@@ -4424,21 +4595,21 @@
%
%
% \begin{macro}{\FamilyCSKey}
-% \changes{v3.25}{2017/12/08}{Neue Anweisung}^^A
+% \changes{v3.25}{2017/12/08}{Neue Anweisung}%^^A
% \begin{macro}{\Family@CS@Key}
-% \changes{v3.25}{2017/12/08}{Neu (intern)}^^A
+% \changes{v3.25}{2017/12/08}{Neu (intern)}%^^A
% \begin{macro}{\Family@@CS@@Key}
-% \changes{v3.25}{2017/12/08}{Neu (intern)}^^A
+% \changes{v3.25}{2017/12/08}{Neu (intern)}%^^A
% \changes{v3.26}{2018/11/06}{Es wird wirklich diese Anweisung (statt erneut
-% \cs{Family@@String@@Key}) definiert}^^A
-% Ein ähnliches Makro definiert einen Schlüssel, der eine Befehlssequenz auf
+% \cs{Family@@String@@Key}) definiert}%^^A
+% Ein ähnliches Makro definiert einen Schlüssel, der eine Befehlssequenz auf
% einen beliegigen Wert setzt. Das erste, optionale Argument ist das
% Familienmitglied, das zweite, obligatorische Argument ist die Familie, das
% dritte, obligatorische Argument ist der Name der Option, das vierte,
-% optionale Artument ist der Defaultwert für den Schlüssel, das fünfte,
+% optionale Artument ist der Defaultwert für den Schlüssel, das fünfte,
% obligatorische Argument ist der Name des Makros, das (in der Voreinstellung
-% als leer) definiert werden soll. Die internen Makro werden benötigt, um das
-% vierte, optionale Argument zu ermöglichen. Dabei ist dann das erste Argument
+% als leer) definiert werden soll. Die internen Makro werden benötigt, um das
+% vierte, optionale Argument zu ermöglichen. Dabei ist dann das erste Argument
% nicht mehr optional, sondern obligatorisch.
% \begin{macrocode}
%<*base>
@@ -4461,19 +4632,19 @@
%
%
% \begin{macro}{\KOMA@DeclareDeprecatedOption}
-% \changes{v3.01a}{2008/11/20}{neu (intern)}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
+% \changes{v3.01a}{2008/11/20}{neu (intern)}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}%^^A
% \begin{macro}{\KOMA@@DeclareDeprecatedOption}
-% \changes{v3.01a}{2008/11/20}{neu (intern)}^^A
+% \changes{v3.01a}{2008/11/20}{neu (intern)}%^^A
% \begin{macro}{\KOMA@@@DeclareDeprecatedOption}
-% \changes{v3.01a}{2008/11/20}{neu (intern)}^^A
+% \changes{v3.01a}{2008/11/20}{neu (intern)}%^^A
% Mit Hilfe dieses Makros kann eine Option definiert werden, die
-% eigentlich obsolete ist. Statt dieser Option wird dann ein Schlüssel
+% eigentlich obsolete ist. Statt dieser Option wird dann ein Schlüssel
% verwendet. Das erste Argument ist optional und muss dann der Paketname
% sein. Ist es nicht gesetzt, so wird stattdessen die Klasse
% \cs{KOMAClassName} angenommen. Das zweite Argument ist der Name der
-% Option. Das vierte Argument ist das Setzen des gewünschten Schlüssels.
+% Option. Das vierte Argument ist das Setzen des gewünschten Schlüssels.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@DeclareDeprecatedOption}{%
@@ -4489,13 +4660,13 @@
}
% \end{macrocode}
% \begin{macro}{\KOMA@UseDeprecatedOption}
-% \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
-% \changes{v3.22}{2016/07/29}{diverse \cs{detokenize} eingefügt}^^A
+% \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
+% \changes{v3.22}{2016/07/29}{diverse \cs{detokenize} eingefügt}%^^A
% Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind
-% 1. Meldungsbefehl, 2. obsolete Option, 3. Setzen des Schlüssels.
+% 1. Meldungsbefehl, 2. obsolete Option, 3. Setzen des Schlüssels.
% \begin{macrocode}
\newcommand*{\KOMA@UseDeprecatedOption}[3]{%
\begingroup
@@ -4532,26 +4703,26 @@
}
%</koma>
% \end{macrocode}
-% \end{macro}^^A \KOMA@UseDeprecatedOption
-% \end{macro}^^A \KOMA@@@DeclareDeprecatedOption
-% \end{macro}^^A \KOMA@@DeclareDeprecatedOption
-% \end{macro}^^A \KOMA@DeclareDeprecatedOption
+% \end{macro}%^^A \KOMA@UseDeprecatedOption
+% \end{macro}%^^A \KOMA@@@DeclareDeprecatedOption
+% \end{macro}%^^A \KOMA@@DeclareDeprecatedOption
+% \end{macro}%^^A \KOMA@DeclareDeprecatedOption
%
%
% \begin{macro}{\KOMA@DeclareStandardOption}
-% \changes{v3.01a}{2008/11/21}{neu (intern)}^^A
-% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}^^A
+% \changes{v3.01a}{2008/11/21}{neu (intern)}%^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}%^^A
% \begin{macro}{\KOMA@@DeclareStandardOption}
-% \changes{v3.01a}{2008/11/21}{neu (intern)}^^A
+% \changes{v3.01a}{2008/11/21}{neu (intern)}%^^A
% \begin{macro}{\KOMA@@@DeclareStandardOption}
-% \changes{v3.01a}{2008/11/21}{neu (intern)}^^A
+% \changes{v3.01a}{2008/11/21}{neu (intern)}%^^A
% Mit Hilfe dieses Makros kann eine Option definiert werden, die
-% eigentlich obsolete ist. Statt dieser Option wird dann ein Schlüssel
+% eigentlich obsolete ist. Statt dieser Option wird dann ein Schlüssel
% verwendet. Das erste Argument ist optional und muss dann der Paketname
% sein. Ist es nicht gesetzt, so wird stattdessen die Klasse
% \cs{KOMAClassName} angenommen. Das zweite Argument ist der Name der
-% Option. Das vierte Argument ist das Setzen des gewünschten Schlüssels.
+% Option. Das vierte Argument ist das Setzen des gewünschten Schlüssels.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@DeclareStandardOption}{%
@@ -4567,9 +4738,9 @@
}
% \end{macrocode}
% \begin{macro}{\KOMA@UseStandardOption}
-% \changes{v3.01a}{2008/11/21}{neu (intern)}^^A
+% \changes{v3.01a}{2008/11/21}{neu (intern)}%^^A
% Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind
-% 1. Meldungsbefehl, 2. obsolete Option, 3. Setzen des Schlüssels.
+% 1. Meldungsbefehl, 2. obsolete Option, 3. Setzen des Schlüssels.
% \begin{macrocode}
\newcommand*{\KOMA@UseStandardOption}[3]{%
\begingroup
@@ -4591,46 +4762,46 @@
%</koma>
% \end{macrocode}
% \begin{macro}{\scr@sr@co}
-% \changes{v2.96}{2006/08/20}{neu (intern)}^^A
-% \changes{v3.12a}{2014/01/22}{beseitigt}^^A
-% \end{macro}^^A \scr@sr@co
-% \end{macro}^^A \KOMA@UseStandardOption
-% \end{macro}^^A \KOMA@@@DeclareStandardOption
-% \end{macro}^^A \KOMA@@DeclareStandardOption
-% \end{macro}^^A \KOMA@DeclareStandardOption
+% \changes{v2.96}{2006/08/20}{neu (intern)}%^^A
+% \changes{v3.12a}{2014/01/22}{beseitigt}%^^A
+% \end{macro}%^^A \scr@sr@co
+% \end{macro}%^^A \KOMA@UseStandardOption
+% \end{macro}%^^A \KOMA@@@DeclareStandardOption
+% \end{macro}%^^A \KOMA@@DeclareStandardOption
+% \end{macro}%^^A \KOMA@DeclareStandardOption
%
%
% \begin{macro}{\KOMA@DeclareObsoleteOption}
-% \changes{v2.96}{2006/08/20}{\cs{CurrentOption wir geschützt}}
-% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}^^A
+% \changes{v2.96}{2006/08/20}{\cs{CurrentOption wir geschützt}}
+% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}%^^A
% \begin{macro}{\KOMA@@DeclareObsoleteOption}
-% \changes{v2.98c}{2008/02/18}{neu (intern)}^^A
-% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}^^A
+% \changes{v2.98c}{2008/02/18}{neu (intern)}%^^A
+% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}%^^A
% \begin{macro}{\KOMA@@@DeclareObsoleteOption}
-% \changes{v2.98c}{2008/02/18}{neu (intern)}^^A
-% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}^^A
+% \changes{v2.98c}{2008/02/18}{neu (intern)}%^^A
+% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}%^^A
% \begin{macro}{\KOMA@iv@DeclareObsoleteOption}
-% \changes{v2.98c}{2008/02/18}{neu (intern)}^^A
-% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}^^A
+% \changes{v2.98c}{2008/02/18}{neu (intern)}%^^A
+% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}%^^A
% \begin{macro}{\KOMA@UseObsoleteOption}
-% \changes{v2.97c}{2007/04/19}{neu (intern)}^^A
-% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}^^A
-% \end{macro}^^A \KOMA@UseObsoleteOption
-% \end{macro}^^A \KOMA@iv@DeclareObsoleteOption
-% \end{macro}^^A \KOMA@iii@DeclareObsoleteOption
-% \end{macro}^^A \KOMA@ii@DeclareObsoleteOption
-% \end{macro}^^A \KOMA@i@DeclareObsoleteOption
+% \changes{v2.97c}{2007/04/19}{neu (intern)}%^^A
+% \changes{v3.12}{2013/03/04}{entfernt weil unbenutzt}%^^A
+% \end{macro}%^^A \KOMA@UseObsoleteOption
+% \end{macro}%^^A \KOMA@iv@DeclareObsoleteOption
+% \end{macro}%^^A \KOMA@iii@DeclareObsoleteOption
+% \end{macro}%^^A \KOMA@ii@DeclareObsoleteOption
+% \end{macro}%^^A \KOMA@i@DeclareObsoleteOption
%
%
% \begin{macro}{\KOMA@newdeprecatedcommand}
-% \changes{v3.12}{2013/03/04}{renamed \cs{KOMA@newobsoletecommand} into
+% \changes{v3.12}{2013/03/04}{renamed \cs{KOMA@newobsoletecommand} into
% \cs{KOMA@newdeprecatedcommand}}
% 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
+% Schlüssel. Das erste Argument ist optional und muss dann entweder
% \cs{PackageInfo}, \cs{PackageInfoNoLine}, \cs{PackageWarning} oder
% \cs{PackageWarningNoLine} sein. Das zweite Argument ist das Makro.
-% Das dritte Argument ist das Setzen des gewünschten Schlüssels. Das
+% Das dritte Argument ist das Setzen des gewünschten Schlüssels. Das
% definierte Makro selbst hat Schaltercharakter, ist also nicht
% \cs{long} und versteht auch keine Argumente.
% \begin{macrocode}
@@ -4640,8 +4811,8 @@
}
% \end{macrocode}
% \begin{macro}{\KOMA@UseDeprecatedCommand}
-% \changes{v2.97c}{2007/04/19}{neu (intern)}^^A
-% \changes{v3.12}{2013/03/04}{renamed \cs{KOMA@UseObsoleteCommand} into
+% \changes{v2.97c}{2007/04/19}{neu (intern)}%^^A
+% \changes{v3.12}{2013/03/04}{renamed \cs{KOMA@UseObsoleteCommand} into
% \cs{KOMA@UseDeprecatedCommand}}
% Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind
% dieselben.
@@ -4658,9 +4829,211 @@
}
%</koma>
% \end{macrocode}
-% \end{macro}^^A \KOMA@UseDeprecatedCommand
-% \end{macro}^^A \KOMA@newdeprecatedcommand
+% \end{macro}%^^A \KOMA@UseDeprecatedCommand
+% \end{macro}%^^A \KOMA@newdeprecatedcommand
+%
+%
+% \selectlanguage{english}
+% \subsection{Do Hook Mechanism}
+% \label{sec:dohook}
+%
+% \changes{v3.27}{2019/02/02}{Do hook mechanism added}%^^A
+% From \KOMAScript~v3.27 there is a new general hook mechanism called ``do
+% hook mechanism''. This mechanism is mentioned to provide extended hooks for
+% package authors. All hooks newly implemented in \KOMAScript{} \emph{should}
+% use this new mechanism.
+%
+%
+% \begin{macro}{\ForDoHook}
+% \changes{v3.27}{2019/02/05}{New}%^^A
+% Arguments:
+% \begin{description}
+% \item[\meta{specificator}:]
+% \meta{string} or \meta{string}\texttt{/}\meta{specificator}
+% \item[\meta{code}:] \LaTeX{} code
+% \end{description}
+% Executes \meta{code} for earch level of a do-hook. This is a helper command
+% normally not interesting for users or package authors. However, I define it
+% in the user context to be consistent with the other do-hook commands. Note,
+% there will be two arguments appended to the \meta{code}. The first one is
+% the name of the hook, the second one the hook argument.
+% See \cs{ExecuteDoHook} as an example.
+% \begin{macrocode}
+%<*base>
+\newcommand*{\ForDoHook}[2]{%
+ \ifstr{#1}{}{%
+ \PackageError{scrbase}{empty do-hook specificator}{%
+ You've tried to use an empty do-hook specificator,\MessageBreak
+ but do-hook specificators must not be empty.%
+ }%
+ }{%
+ \let\scr@hookname\relax
+ \edef\scr@hookargument{#1}%
+ \loop
+ \scr@hooksplit@specificator\scr@hookname\scr@hookargument
+ \scr@hookargument
+ \begingroup\edef\reserved@a{%
+ \unexpanded{\endgroup #2}{\scr@hookname}{\scr@hookargument}%
+ }\reserved@a
+ \ifx\scr@hookargument\@empty\else
+ \repeat
+ \let\scr@hookname\relax
+ \let\scr@hookargument\relax
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\SplitDoHook}
+% \changes{v3.27}{2019/02/04}{New}%^^A
+% Arguments:
+% \begin{description}
+% \item[\meta{specificator}:]
+% \meta{string} or \meta{string}\texttt{/}\meta{specificator}
+% \item[\meta{prefix command}:] \LaTeX{} macro
+% \item[\meta{postfix command}:] \LaTeX{} macro
+% \end{description}
+% Splits of the \emph{last} element of the \meta{specificator}. The
+% \meta{postfix command} is defined to be that last element, the \meta{prefix
+% command} is defined to be the rest.
+% \begin{macrocode}
+\newcommand*{\SplitDoHook}[3]{%
+ \ifstr{#1}{}{%
+ \PackageWarning{scrbase}{empty do-hook specificator}%
+ \let#2\@empty\let#3\@empty
+ }{%
+ \let#2\relax
+ \edef\reserved@a{%
+ \unexpanded{\scr@hooksplit@specificator{#2}{#3}}{#1}%
+ }\reserved@a
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\scr@hooksplit@specificator}
+% \changes{v3.27}{2019/02/02}{New internal}%^^A
+% Split of the first string of the specificator argument, append it to
+% \cs{scr@hookname} and store the rest in \cs{scr@hookargument}. The argument
+% must not be empty!
+% \begin{macro}{\scr@@hooksplit@specificator}
+% \changes{v3.27}{2019/02/02}{New internal}%^^A
+% \begin{macrocode}
+\newcommand*{\scr@hooksplit@specificator}[3]{%
+ \expandafter\scr@@hooksplit@specificator\expandafter#1\expandafter#2#3/\@nil
+}
+\newcommand*{\scr@@hooksplit@specificator}{}
+\def\scr@@hooksplit@specificator#1#2#3/#4\@nil{%
+ \scr@ifundefinedorrelax{scr@hookname}{\def#1{#3}}{%
+ \edef#1{#1/#3}%
+ }%
+ \def#2{#4}%
+ \ifx#2\@empty\else \scr@@hookargument#2#4\@nil\fi
+}
+\newcommand*{\scr@@hookargument}{}
+\def\scr@@hookargument#1#2/\@nil{\def#1{#2}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ExecuteDoHook}
+% \changes{v3.27}{2019/02/02}{New}%^^A
+% Arguments:
+% \begin{description}
+% \item[\meta{specificator}:]
+% \meta{string} or \meta{string}\texttt{/}\meta{specificator}
+% \end{description}
+% Each string of the \meta{specificator} defines a hook subgroup. The
+% execution is done in a loop, first all hook elements of the first
+% \meta{string} of the \meta{specificator} are executed with the rest of the
+% \meta{specificator} as an argument. Then the hook elements of the
+% composition of the first and the second \meta{string} are executed again
+% with the rest of the \meta{specificator} as an agument and so on until the
+% hook elements of the whole \meta{specificator} has been executed with an
+% empty argument. So every hook element has to expect an argument that is
+% itself a \meta{specificator}. At each loop level the one-time hooks
+% are executed after the permanent hooks.
+% \begin{macrocode}
+\newcommand*{\ExecuteDoHook}[1]{%
+ \@ifundefined{scr@execute@dohook}{%
+ \def\scr@execute@dohook##1##2{%
+ \def\scr@hook@do####1{####1{##2}}%
+ \@nameuse{scr@dohook@##1}%
+ \@nameuse{scr@otdohook@##1}%
+ \expandafter\global\expandafter\let
+ \csname scr@otdohook@##1\endcsname\@empty
+ \let\scr@hook@do\relax
+ }%
+ \ForDoHook{#1}{\scr@execute@dohook}%
+ \let\scr@execute@dohook\relax
+ }{%
+ \PackageWarning{scrbase}{cascaded do-hook detected.\MessageBreak
+ It seems, that the do-hook `\detokenize{#1}'\MessageBreak
+ is be executed, while another do-hook is active.\MessageBreak
+ This is not allowed and therefore ignored%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
%
+% \begin{macro}{\AddtoDoHook}
+% \changes{v3.27}{2019/02/02}{New}%^^A
+% Arguments:
+% \begin{description}
+% \item[\meta{specificator}:]
+% \meta{string} or \meta{string}\texttt{/}\meta{specificator}
+% \item[\meta{element}:]
+% a \LaTeX command, that expects exactly one argument.
+% \end{description}
+% For the \meta{specificator} see \cs{ExecuteDoHook}. Here you can add an
+% \meta{element} to a hook defined by the \meta{specificator}. Adding a hook
+% is local to the current group.
+% \begin{macrocode}
+\newcommand*{\AddtoDoHook}[2]{%
+ \ifstr{#1}{}{%
+ \PackageError{scrbase}{empty hook specificator}{%
+ As hook specificators can never be empty, the first argument\MessageBreak
+ of \string\AddtoDoHook\space must expand to an not empty string.%
+ }%
+ }{%
+ \scr@ifundefinedorrelax{scr@dohook@#1}{\@namedef{scr@dohook@#1}{}}{}%
+ \expandafter\l@addto@macro\csname scr@dohook@#1\endcsname{%
+ \scr@hook@do{#2}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AddtoOneTimeDoHook}
+% \changes{v3.27}{2019/02/02}{New}%^^A
+% Arguments:
+% \begin{description}
+% \item[\meta{specificator}:]
+% \meta{string} or \meta{string}\texttt{/}\meta{specificator}
+% \item[\meta{element}:]
+% a \LaTeX command, that expects exactly one argument.
+% \end{description}
+% This is almost the same as \cs{AddtoDoHook} but a hook added by this command
+% is executed only once.
+% \begin{macrocode}
+\newcommand*{\AddtoOneTimeDoHook}[2]{%
+ \ifstr{#1}{}{%
+ \PackageError{scrbase}{empty hook specificator}{%
+ As hook specificators can never be empty, the first argument\MessageBreak
+ of \string\AddtoDoHook\space must expand to an not empty string.%
+ }%
+ }{%
+ \scr@ifundefinedorrelax{scr@otdohook@#1}{\@namedef{scr@otdohook@#1}{}}{}%
+ \expandafter\l@addto@macro\csname scr@otdohook@#1\endcsname{%
+ \scr@hook@do{#2}%
+ }%
+ }%
+}
+%</base>
+% \end{macrocode}
+% \end{macro}
+%
+% \selectlanguage{ngerman}
%
% \iffalse
%</body>