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.dtx3348
1 files changed, 1567 insertions, 1781 deletions
diff --git a/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx b/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx
index 9c8358b466..6c9a8c0302 100644
--- a/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx
+++ b/macros/latex/contrib/koma-script/source/scrkernel-basics.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
% ======================================================================
% scrkernel-basics.dtx
-% Copyright (c) Markus Kohm, 2002-2021
+% Copyright (c) Markus Kohm, 2002-2022
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
@@ -17,26 +17,8 @@
% The Current Maintainer and author of this work is Markus Kohm.
%
% This work consists of all files listed in manifest.txt.
-% ----------------------------------------------------------------------
-% scrkernel-basics.dtx
-% Copyright (c) Markus Kohm, 2002-2021
-%
-% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
-% Version 1.3c, verteilt und/oder veraendert werden.
-% Die neuste Version dieser Lizenz ist
-% http://www.latex-project.org/lppl.txt
-% und Version 1.3c ist Teil aller Verteilungen von LaTeX
-% Version 2005/12/01 oder spaeter und dieses Werks.
-%
-% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
-% (allein durch den Autor verwaltet).
-%
-% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
-%
-% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
% ======================================================================
-%
-%%% From File: $Id: scrkernel-basics.dtx 3606 2021-06-08 08:28:35Z kohm $
+%%% From File: $Id: scrkernel-basics.dtx 3773 2022-03-29 06:27:55Z kohm $
%<prepare>%%% (run: prepare)
%<option>%%% (run: option)
%<body>%%% (run: body)
@@ -46,14 +28,14 @@
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\begingroup
\def\filedate$#1: #2-#3-#4 #5${\def\filedate{#2/#3/#4}}
- \filedate$Date: 2021-06-08 10:28:35 +0200 (Tue, 08 Jun 2021) $
+ \filedate$Date: 2022-03-29 08:27:55 +0200 (Tue, 29 Mar 2022) $
\def\filerevision$#1: #2 ${\def\filerevision{r#2}}
- \filerevision$Revision: 1638 $
- \xdef\fileinfo{\filedate\space\filerevision\space}
+ \filerevision$Revision: 3773 $
\edef\reserved@a{%
\noexpand\endgroup
- \noexpand\ProvidesFile{scrkernel_basics.dtx}%
+ \noexpand\ProvidesFile{scrkernel-basics.dtx}%
[\filedate\space\filerevision\space
+ KOMA-Script
}
\reserved@a
%</dtx>
@@ -94,83 +76,103 @@
\let\endbatchfile\relax
\fi
\endbatchfile
-\documentclass{scrdoc}
-\usepackage[english,ngerman]{babel}
-\CodelineIndex
-\RecordChanges
-\GetFileInfo{scrkernel-basics.dtx}
-\title{\KOMAScript{} \partname\ \texttt{\filename}%
- \footnote{Dies ist Revision \fileversion\ von Datei
- \texttt{\filename}.}}
-\date{\filedate}
-\author{Markus Kohm}
-
+\documentclass[USenglish]{koma-script-source-doc}
+\usepackage{babel}
+\usepackage{hvlogos}
+\setcounter{StandardModuleDepth}{2}
\begin{document}
- \maketitle
- \tableofcontents
- \DocInput{\filename}
+\DocInput{scrkernel-basics.dtx}
\end{document}
%</dtx>
-% \fi
-%
-% \selectlanguage{ngerman}
-%
-% \changes{v1.0}{2002/07/06}{Beginn der ersten Version}
-% \changes{v3.12}{203/03/05}{Verwendung von \cs{@tempa}, \cs{@tempb},
-% \cs{@tempc} eliminiert}
-% \changes{v3.32}{2020/09/11}{\textsf{scrlfile} wird nicht mehr geladen}
-%
-% \section{Grundlegenden \KOMAScript-Erweiterungen}
-%
-% 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
-% einigen Punkten nicht den Anforderungen von \KOMAScript{}. Deshalb
-% werden hier Erweiterungen vorgenommen, die von \KOMAScript-Klassen
-% und \KOMAScript-Paketen verwendet werden können.
-%
-% 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
-% Paket auch ohne den Rest von \KOMAScript{} zum Einsatz bringen.
-%
-% \selectlanguage{english}
+% \fi^^A meta-comment
+%
+% \changes{v1.0}{2002/07/06}{starting implementation}
+% \changes{v3.12}{203/03/05}{usage of \cs{@tempa}, \cs{@tempb}, \cs{@tempc}
+% eliminated}
+% \changes{v3.36}{2022/02/16}{switch over from \cls*{scrdoc} to
+% \cls*{koma-script-source-doc}}
+% \changes{v3.36}{2022/02/21}{whole implementation documentation in English}
+%
+% \GetFileInfo{scrkernel-basics.dtx}
+% \title{Basic Funktionality Used by Almost all
+% \href{https://komascript.de}{\KOMAScript} Classes and Packages}
+% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}}
+% \date{Revision \fileversion{} of \filedate}
+% \maketitle
+% \begin{abstract}
+% New versions of \KOMAScript{} make increasing use of the \pkg{keyval}
+% package. The \pkg{keyval} package is part of the \pkg{graphics} package
+% and as such must be included on all \TeX{} systems with \LaTeX{}. However,
+% it does not meet the requirements of \KOMAScript{} in some
+% respects. Therefore, extensions are made here which can be used by
+% \KOMAScript classes and \KOMAScript packages.
+%
+% In addition, more and more parts of \KOMAScript{} are used by more than
+% one package or by packages and classes. These basic things have therefore
+% been split into two packages, \pkg*{scrbase} (for things that can also be
+% used by other classes and packages) and \pkg*{scrkbase} (for things that
+% are reserved for \pkg*{scrkbase}). This makes the packages and classes
+% themselves smaller and they can still be used independently. Of course you
+% can also use this package without the rest of \KOMAScript{}.
+% \end{abstract}
+% \tableofcontents
+%
+% \section{User Manual}
+%
+% You can find the user documentation of package \pkg*{scrbase} and the
+% commands implemented in \file{scrkernel-basics.dtx} in the \KOMAScript{}
+% manual, either the German \file{scrguide} or the English \file{scrguien}.
+%
+%
% \subsection{Functions not yet in the Manual}
%
-% \DescribeMacro\IfLTXAtLeastTF
-% \marginpar{\raggedleft\tiny New: 2021-01-31}%
+% Some user commands are not documented in the \KOMAScript{} manuals, e.g.,
+% because they are not stable enough to be used by average users or more or
+% less for internal usage only. Some are only not documented in the
+% \KOMAScript{} manual, because nobody has done it yet.
+%
+% \DescribeCommand\IfLTXAtLeastTF
+% \marginpar{\raggedleft\tiny Added: 2021-01-31}%
% This is the same like \cs{IfFormatAtLeast} of \LaTeX{} from 2020/10/01, but
% works also with older \LaTeX{} kernels.
%
-% \selectlanguage{ngerman}
-% \StopEventually{\PrintIndex\PrintChanges}
+% \DescribeCommand\Ifislengthprimitive
+% \marginpar{\raggedleft\tiny Added: 2015/10/19\\Renamed: 2022/02/17}%
+% \cs{Ifislengthprimitive}\marg{macro}\marg{then code}\marg{else code}
+% expands the \meta{macro} and tests if the result can be used as a length
+% primitive. If this is the case the \meta{then code} is executed, otherwise
+% the \meta{else code}. Note, that this command can be false negative,
+% because, i.e., with \LuaLaTeX{} there can be primitives, that are like length,
+% but that are not known by \cs{Ifislengthprimitive}.
+%
+% \DescribeCommand\Ifisdefchar
+% \marginpar{\raggedleft\tiny Added: 2015/10/19\\Renamed: 2022/02/17}%
+% \cs{Ifislengthprimitive}\marg{macro}\marg{then code}\marg{else code}
+% expands the \meta{macro} and tests if the result is a \cs{char}. If this is
+% the case the \meta{then code} is executed, otherwise the \meta{else code}.
+% Note, that this command can be false positive, if the \cs{char} value is
+% incorrect.
%
-% \iffalse
-%<*load>
-% \fi
%
-% \subsection{Laden des Pakets}
-% Wer das Paket lädt, tut das allerdings in der Regel sogar bereits
-% vor der Definition der Optionen mit:
+% \MaybeStop{\PrintIndex}
+%
+% \section{Implementation of \pkg*{scrbase} and \pkg*{scrkbase}}
+%
+% \subsection{Loading \pkg*{scrkbase}}
+% Who ever loads ths package, always wants the same version of the already
+% used \KOMAScript version.
% \begin{macrocode}
+%<*load>
\RequirePackage{scrkbase}[\KOMAScriptVersion]
+%</load>
% \end{macrocode}
%
-% \iffalse
-%</load>
-%<*prepare>
-% \fi
%
-% \subsection{\eTeX-Test}
-% \changes{v3.02c}{2009/02/19}{Fehlermeldung, wenn nicht \eTeX{} verwendet
-% wird}
+% \subsection{\eTeX{} test}
+% \changes{v3.02c}{2009/02/19}{error message without \eTeX}
%
% \begin{macrocode}
+%<*prepare>
%<*base>
\begingroup
\def\reserved@b{}%
@@ -200,59 +202,56 @@
% \end{macrocode}
%
%
-% \subsection{Der abhängige Teil lädt den unabhängigen Teil}
+% \subsection{The \KOMAScript-only package loads the universal package}
%
+% Once again the same version is wanted.
% \begin{macrocode}
%<koma>\RequirePackage{scrbase}[\KOMAScriptVersion]
% \end{macrocode}
%
-% \subsection{Laden von \textsf{scrlfile}}
+% \subsection{Package \pkg*{scrlfile}}
%
-% \textsf{scrlfile} wird benötigt, um auf das Laden anderer Pakete reagieren
-% zu können. Dazu gehört beispielsweise \textsf{polyglossia} wegen dessen
-% unzureichender Behandlung unterschiedlicher Sprachvarianten. Welche Version
-% davon geladen wird, ist allerdings ziemlich egal.
+% We need to react on the loading other packages like \pkg{polyglossia}. For
+% this we use \pkg*{scrlfile}. But we can use any version.
%
% \begin{macrocode}
%<base>\RequirePackage{scrlfile}
% \end{macrocode}
%
-% \subsection{Laden von \textsf{keyval}}
+% \subsection{Package \pkg*{keyval}}
%
-% Hier wird nicht nur das Paket geladen, was ruckzuck mit:
+% The \KOMAScript{} key handling bases on package \pkg{keyval}.
% \begin{macrocode}
%<base>\RequirePackage{keyval}
% \end{macrocode}
-% erledigt ist.
%
-% \subsection{Schutz vor Umdefinierung von
-% \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
-% 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.
+%
+% \subsection{Using protected kernel macros}
+% Some package like \pkg{amsgen} redefine internal \LaTeX{} kernel macros, but
+% break them for other purposes than the own. So I have to make them work
+% again. The \KOMAScript{} classes have less problems with this, because most
+% of these packages cannot be loaded before a class. So the classes can simply
+% copy the original macro, before it is redefined. But I do not know, when a
+% package is loaded. So I have to implement the whole macro again with another
+% name (and can only hope, that such packages do not damage them also).
%
% \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
-% geht, sorge ich hier vor.
+% \changes{v3.20}{2016/04/12}{added}
+% I hope, the \LaTeX{} kernel will define this in future and other packages do
+% not redefine like they do with \cs{@ifstar}. So I use \cs{providecommand} to
+% not redefine the kernel macro, if it does exist.
% \begin{macrocode}
%<base>\providecommand*\kernel@ifstar[1]{\kernel@ifnextchar*{\@firstoftwo{#1}}}
% \end{macrocode}
-% \end{macro}%^^A \kernel@ifstar
+% \end{macro}^^A \kernel@ifstar
%
-% \selectlanguage{english}
%
% \subsection{Improved \LaTeX{} kernel commands}
% The \LaTeX{} kernel already provides some useful commands, but some can be
% improved.
%
-% \begin{macro}{\rloop}
-% \changes{v3.30}{2020/03/07}{new}
+% \begin{command}{\rloop}
+% \changes{v3.30}{2020/03/07}{added}
% The \cs{loop} \dots \cs{repeat} of the \LaTeX{} kernel cannot be used inside
% a \cs{loop} \dots \cs{repeat} without extra code for preserving
% \cs{iterate}. So here is a re-entrant version that is also long. This
@@ -273,9 +272,9 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\IfLTXAtLeastTF}
+% \begin{command}{\IfLTXAtLeastTF}
% \changes{v3.33}{2021/01/21}{new}
% This is the same like \cs{IfFormatAtLeastTF} of the current \LaTeX{} kernel,
% but does also work, if \cs{IfFormatAtLeastTF} is not defined because of
@@ -289,21 +288,20 @@
\@onlypreamble\IfLTXAtLeastTF
%</base>
% \end{macrocode}
-% \end{macro}
-% \selectlanguage{ngerman}
+% \end{command}
%
%
-% \subsection{Test von Anweisungen}
+% \subsection{Testing macros}
%
% \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
-% 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.
+% \changes{v2.95c}{2006/08/12}{added}
+% \changes{v2.97b}{2007/03/08}{broken logic fixed}
+% \changes{v2.97c}{2007/04/18}{broken functionality fixed}
+% \changes{v2.97c}{2007/04/18}{\cs{scr@ifundefined} renamed}
+% \changes{v3.02c}{2009/02/19}{special treatment of \eTeX{} removed}
+% This macro is like \cs{@ifundefined}, but does not define the test macro
+% \cs{relax} if it was undefined before. Note: With up-to-date \LaTeX{} this
+% is the same with the original \cs{@ifundefined}.
% \begin{macrocode}
%<*base>
\newcommand{\scr@ifundefinedorrelax}[1]{%
@@ -319,51 +317,44 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ifundefinedorrelax
+% \end{macro}^^A \scr@ifundefinedorrelax
%
%
-% \subsection{Erweiterung von Meldungen}
+% \subsection{Extending messages}
%
-% \begin{macro}{\PackageErrorNoLine}
-% \changes{v3.12}{2013/09/19}{neu}%^^A
-% \changes{v3.28}{2019/11/23}{unsinnige Anweisung entfernt}%^^A
-% Wie Falk richtig angemerkt hat, ist die Anweisung sinnlos, weil
-% \cs{PackageError} gar keine Zeilennummer anhängt. Verwendet wurde die
-% Anweisung nur in einem veralteten Paket.
-% \end{macro}
+% \begin{command}{\PackageErrorNoLine}
+% \changes{v3.12}{2013/09/19}{added}
+% \changes{v3.28}{2019/11/23}{nonsense command removed}
+% Falk correctly stated, that \cs{PackageError} already does not show a line
+% number. So we do not need this command.
+% \end{command}
%
%
-% \subsection{Definition von KOMA-\textsf{keyval}-Schlüsseln (Basis)}
+% \subsection{Definition of the \KOMAScript{} \pkg*{keyval} basis}
%
-% Üblicherweise verwendet \KOMAScript{} für alle
-% \textsf{keyval}-Schlüssel die gleiche Bereichskennung
-% "`\texttt{KOMA}"'. Dadurch ist es möglich, dass Pakete die Schlüssel
-% der Klassen umdefinieren und dass jeder Teil von \KOMAScript{} die
-% Schlüssel jedes anderen Teils ausführen kann -- sobald sie definiert
-% sind.
+% \KOMAScript{} could use \pkg{keyval} keys with the same set of keywords
+% ``\texttt{KOMA}'' to make it possible, that packages can redefine keys of
+% classes and other packages. However this would be dangerous and can easily
+% break. So we split the set of keywords in an family of keywords and family
+% member of keywords and define commands to process the keywords either of a
+% member or a whole family.
%
-% \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
-% \begin{macro}{\DefineFamilyMember}
-% \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}}
+% \begin{command}{\DefineFamily,\DefineFamilyMember,\DefineFamilyKey}
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by \cs{kernel@ifnextchar}}
% \begin{macro}{\scr@if@family}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}%^^A
+% \changes{v3.00}{2008/04/30}{added}
% \begin{macro}{\scr@if@familymember}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}%^^A
-% \changes{v3.27}{2019/07/19}{das leere Mitglied existiert immer}%^^A
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.27}{2019/07/19}{the empty member exists by default}
% \begin{macro}{\scr@define@family@key}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}%^^A
+% \changes{v3.00}{2008/04/30}{added}
% \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
-% Familienmitglied definieren. Dabei wird als Familienmitglied per Default der
-% (Datei-)Name des aktuellen Pakets bzw. der aktuellen Klasse verwendet.
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.18a}{2015/07/03}{missing \% added}
+% Family, member of a family and \pkg{keyval} key for a member of a
+% family. The default of the member of a family is always the file name of a
+% class or package (while reading the file).
% \begin{macrocode}
%<*base>
\newcommand*{\DefineFamily}[1]{%
@@ -455,20 +446,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
-%
-% \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
-% Defaultwert als \cs{relax} definiert, so dass er nicht mehr verwendet werden
-% kann.
+% \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{command}^^A \DefineFamily,\DefineFamilyMember,\DefineFamilyKey
+%
+%
+% \begin{command}{\RelaxFamilyKey}
+% \changes{v3.15}{2014/12/03}{added}
+% Sometimes it is useful to be able to \emph{un-define} a key. This will not
+% un-define all helper macros but only the key and a default value will become
+% \cs{relax}.
% \begin{macrocode}
%<*base>
\newcommand*{\RelaxFamilyKey}[3][.\@currname.\@currext]{%
@@ -481,28 +470,20 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\FamilyKeyState}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}%^^A
-% \begin{macro}{\FamilyKeyStateProcessed}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}%^^A
-% \begin{macro}{\FamilyKeyStateUnknown}
-% \changes{v3.12}{2013/03/04}{Neue Anweisung}%
-% \begin{macro}{\FamilyKeyStateUnknownValue}
-% \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
-% \cs{FamilyKeyStateUnknown} gesetzt, was anzeigt, dass der Zustand
-% 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
-% das Makro einen Text enthalten, der ggf. Teil einer Fehlermeldung, einer
-% 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.
+% \end{command}^^A \RelaxFamilyKey
+%
+% \begin{command}{\FamilyKeyState,\FamilyKeyStateProcessed,\FamilyKeyStateUnknown,
+% \FamilyKeyStateUnknownValue,\FamilyKeyStateNeedValue}
+% \changes{v3.12}{2013/03/04}{added}
+% \cs{FamilyKeyState} is the state of processing a key. The initial state is
+% \cs{FamilyKeyStateUnknown}, so the state is indeed unknown. If a key has
+% been processed by the definition code and everything is OK, you should run
+% \cs{FamilyKeyStateProcessed}. This will set \cs{FamilyKeyState} also to
+% \cs{FamilyKeyStateProcessed} to indicate, the key has been processed
+% successfully. If the value assigned to the key is unknown, you should run
+% \cs{FamilyKeyStateUnknownValue}. And if the value is needed but no value has
+% been assigned, \cs{FamilyKeyStateNeedValue} is the correct choice. Note:
+% \cs{FamilyKeyState} is valid only immediately after processing a key.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyKeyState}{}
@@ -521,35 +502,25 @@
\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{command}^^A \FamilyKeyState … \FamilyKeyStateNeedValue
%
-% \begin{macro}{\FamilyOfKey}
-% \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.
+% \begin{command}{\FamilyOfKey,\FamilyMemberOfKey}
+% \changes{v3.12}{2013/03/04}{added}
+% While processing a key, this is the family and the member of family.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyOfKey}{}
\newcommand*{\FamilyMemberOfKey}{}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \FamilyMemberOfKey
-% \end{macro}%^^A \FamilyOfKey
+% \end{command}^^A \FamilyOfKey,\FamilyMemberOfKey
%
% \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
-% \begin{macro}{\KOMA@key@familylist}
-% \textsf{keyval}-Schlüssel für \KOMAScript{} werden mit \cs{KOMAkey}
-% definiert, damit auch die Familie korrekt gesetzt und ggf. der Liste der
-% Familien (\cs{KOMA@key@familylist}) hinzugefügt wird.
+% \changes{v2.97c}{2007/04/19}{optional argument added}
+% \changes{v3.17}{2015/02/24}{rudimentary value storage}
+% \pkg{keyval} keys of \KOMAScript{} are defined with \cs{KOMAkey} to setup
+% the family to ``\texttt{KOMA}'' automatically. Additionally the value
+% storage is initialized.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@key}[1][.\@currname.\@currext]{%
@@ -560,12 +531,12 @@
%</koma>
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\KOMA@kav@add}
-% \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.
+% \changes{v3.17}{2015/02/24}{added}
+% This macro stores a \texttt{\meta{key}=\meta{value}} pair in a internal
+% list. The first argument is the family member, the second the \meta{key} and
+% the third the \meta{value}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@add}[3]{%
@@ -580,10 +551,11 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@xadd}
-% \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.
+% \changes{v3.17}{2015/02/24}{added}
+% This macro stores a \texttt{\meta{key}=\meta{value}} pair in a internal
+% list after expanding both, the \meta{key} and the \meta{value}. The first
+% argument is the family member, the second the \meta{key} and the third the
+% \meta{value}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@xadd}[3]{%
@@ -600,10 +572,10 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@remove}
-% \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.
+% \changes{v3.17}{2015/02/24}{added}
+% This macro removes a \texttt{\meta{key}=\meta{value}} pair from the internal
+% list. The first argument is the family member, the second the \meta{key} and
+% the third the \meta{value}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@remove}[3]{%
@@ -632,10 +604,10 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@removekey}
-% \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.
+% \changes{v3.17}{2015/02/24}{added}
+% This macro removes all \texttt{\meta{key}=\meta{value}} pairs of a given
+% \meta{key} from the internal list. The first argument is the family member,
+% the second the \meta{key}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@removekey}[2]{%
@@ -664,14 +636,13 @@
% \end{macrocode}
% \end{macro}
%
-% \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
-% 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
-% \cs{FamilyKeyStateProcessed} voraus. Anderenfalls tut es nichts!
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% \begin{macro}{\KOMA@kav@replacevalue,\KOMA@kav@xreplacevalue}
+% \changes{v3.17}{2015/02/25}{added}
+% If \cs{FamilyKeyState} is \cs{FamilyKeyStateProcessed},
+% these macros replace a \texttt{\meta{key}=\meta{value}} pair in the internal list.
+% The first argument is the family member, the second the \meta{key} and the
+% third is the new \meta{value}. \cs{KOMA@kav@xreplacevalue} expands both, the
+% \meta{key} and the \meta{value}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@replacevalue}[3]{%
@@ -697,15 +668,13 @@
%</koma>
% \end{macrocode}
% \end{macro}
-% \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
-% 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
-% Status \cs{FamilyKeyStateProcessed} voraus. Anderenfalls tut es nichts!
-% Es ist ausschließlich für den \KOMAScript-internen Gebrauch bestimmt.
+% \changes{v3.17}{2015/02/24}{added}
+% If \cs{FamilyKeyState} is \cs{FamilyKeyStateProcessed},
+% this macro replaces the value of a if key in the internal list.
+% The first argument is the family member, the second the \meta{key} and the
+% third is the boolean switch (\cs{if\dots} statement) representing the new value.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@replacebool}[3]{%
@@ -729,11 +698,10 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@defall}
-% \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.
+% \changes{v3.17}{2015/02/24}{added}
+% This macro defines a macro/command with the \texttt{\meta{key}=\meta{value}}
+% list of all stored pairs. The first argument is the macro/command to be
+% defined with the list. The second is the family member.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@defall}[2]{%
@@ -762,14 +730,12 @@
% \end{macro}
%
% \begin{macro}{\KOMA@kav@defone}
-% \changes{v3.17}{2015/02/25}{neu (\KOMAScript intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^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
-% 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.
+% \changes{v3.17}{2015/02/25}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% This macro defines a macro/command with all stored values of a \meta{key}
+% from the internal list of \texttt{\meta{key}=\meta{value}} pairs.
+% The first argument is the macro/command to be defined. The second is the
+% family member and the third is the \meta{key}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@kav@defone}[3]{%
@@ -800,9 +766,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
-% entsprechenden Bug-Report.
+% \changes{v3.17}{2015/02/24}{added}
+% General internal error message with the recommendation to report a bug.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@internal@error}[2]{%
@@ -821,29 +786,25 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Optionen}
+% \subsection{Options}
%
-% Ab Version 2.97c sollen sowohl globale KOMA-Optionen als auch die
-% KOMA-Optionen der jeweiligen Datei als auch die normalen Optionen in der
-% Reihenfolge ausgeführt werden, in der sie angegeben wurden -- zuerst die
-% globalen Optionen, dann die lokalen. Dabei werden nur die Optionen
-% verwendet, die auch für das jeweilige Paket bzw. die jeweilige Klasse
-% definiert wurden.
+% From version 2.97c \KOMAScript{} processes all options in the order they
+% have been set and no longer in the order they have been defined. This is
+% much more intuitive for users. Packages first process the global options
+% then the local options.
%
% \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
-% 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
-% wird die Zuweisung, seit \KOMAScript{} 3.20 in \cs{FamilyProcessOptions}
-% durchgeführt.
+% \changes{v2.96}{2006/11/26}{added}
+% \changes{v2.96}{2006/11/26}{process class options}
+% \changes{v3.20}{2016/02/06}{delay decisions}
+% The lost of global options is sometimes needed. But because \pkg{xkeyval}
+% has the opinion it should remove all options with equal char from the list
+% of class options, we define out own macro with a copy of the class
+% options. Until \KOMAScript{} 3.19a the copy has been done here. But if
+% \pkg*{scrbase} is loaded before \cs{documentclass} this is too early. From
+% \KOMAScript{} 3.20 the assignment has been moved to
+% \cs{FamilyProcessOptions}. And from \KOMAScript{} 3.33 the normal class
+% option list is only used if the raw option list is not available.
% \begin{macrocode}
%<*base>
\newcommand*{\@globaloptionslist}{}
@@ -851,38 +812,27 @@
% \end{macrocode}
% \end{macro}
%
-% \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
-% \begin{macro}{\scr@optiontest}
-% \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
-%
-% \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}
-% \changes{v3.12}{2013/03/04}{Fehlerbehandlung}
-% 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
-% 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
-% darf.
-% \selectlanguage{english}%
+% \begin{macro}{\scr@removeunused,\scr@optiontest,\scr@pti@ntest}
+% \changes{v2.97c}{2007/04/18}{added}
+% \changes{v3.12}{2013/03/04}{removed}
+% \end{macro}^^A \scr@removeunused,\scr@optiontest,\scr@pti@ntest
+%
+% \begin{command}{\FamilyProcessOptions}
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.11a}{2012/06/11}{classes do not report errors for unknown values}
+% \changes{v3.12}{2013/03/04}{error handling}
% \changes{v3.33}{2021/03/02}{new version using raw options lists of \LaTeX{}
-% 2021/05/01}
-% Note, we use 2021/05/01 instead of the official \LaTeX{} release date,
-% because there were relevant earlier \LaTeX{} developer releases with that
-% date.
+% 2021/05/01}
+% Note: Wrong values should not result in errors or warnings and only seldom
+% in information. The best is to signal all kind of errors via
+% \cs{FamilyKeyState}. Only values, that cannot be handled by any family
+% member have to be reported. This is done inside \cs{FamilyProcessOptions}
+% depending on \cs{FamilyKeyState} of each member.
+% Note also: This command is not re-entrant. So it cannot be used while
+% processing another option.
+% Note also: We use 2021/05/01 instead of the official \LaTeX{} release date,
+% to detect a \LaTeX{} kernel version with raw option lists, because there
+% were relevant earlier \LaTeX{} developer releases with that date.
% \begin{macrocode}
%<*base>
\IncludeInRelease{2021/05/01}{\FamilyProcessOptions}%
@@ -948,7 +898,7 @@
% If this is not a class, we first have to process all raw class options.
% \changes{v3.33}{2021/03/12}{switched to fast test like \LaTeX{} 2021/06/01}
% \changes{v3.34}{2021/05/30}{use \cs{@raw@classoptionslist} only, if defined}
-% Note, if \Package{scrbase} or a depending package is loaded before the class,
+% Note, if \pkg*{scrbase} or a depending package is loaded before the class,
% \cs{@raw@classoptionslist} should not be processed.
% \begin{macrocode}
\ifx\@currext\@clsextension\else
@@ -1044,7 +994,6 @@
\EndIncludeInRelease
% \end{macrocode}
% And here the old version for old \LaTeX{} kernel version:
-% \selectlanguage{ngerman}%
% \begin{macrocode}
\IncludeInRelease{0000/00/00}{\FamilyProcessOptions}%
{Usage of raw or classic option list}
@@ -1061,11 +1010,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
-% Mitglied.
+% \changes{v3.18}{2015/06/17}{new hooks before processing the options}
+% From version 3.18 we execute two hooks. The first one is valid for all
+% classes and packages of a family. This is multi-time hook, not deleting
+% itself. The second one is valid only one time for one member.
% \begin{macrocode}
\scr@ifundefinedorrelax{scr@before@process@options@#2@hook}{}{%
\@nameuse{scr@before@process@options@#2@hook}%
@@ -1076,22 +1024,21 @@
\relax
}%
% \end{macrocode}
-% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
-% statt des Mitglieds}%^^A
-% Jetzt \cs{AtEndOfFamilyOptions} samt Haken initialisieren.
+% \changes{v3.23}{2017/02/16}{fix: the after hook uses the family instead of
+% the member}
+% Initialization of \cs{AtEndOfFamilyOptions} inclusive hook.
% \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.
+% The first hook action is to delete the hook.
% \begin{macrocode}
\@namedef{scr@after@options@#2@hook}{}%
}%
}{%
\expandafter\edef\csname scr@after@options@#2@hook\endcsname{%
% \end{macrocode}
-% Die erste Aktion im Haken wird sein, die jetzige Form des Hakens wieder
-% herzustellen.
+% The first action in the hook is to reactivate the current hook.
% \begin{macrocode}
\noexpand\@namedef{scr@after@options@#2@hook}{%
\unexpanded\expandafter\expandafter\expandafter
@@ -1100,52 +1047,47 @@
}%
}%
% \end{macrocode}
-% \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
-% oberste Ebene hier einfach an der Definition von \cs{AtEndOfFamilyOptions},
-% weil das schneller geht als die Erkennung über die Definition des Hakens
-% selbst (wie sie in \cs{FamilyOptions} verwendet werden muss).
+% \changes{v3.23}{2017/02/16}{new hook added for \cs{AtEndOfFamilyOptions*}}
+% From version 3.23 there is one more hook before \cs{AtEndOfFamilyOptions*}
+% to be initialized and executed. We can detect the topmost level comparing
+% the definition of \cs{AtEndOfFamilyOptions}. This is faster than by the
+% definition of the hook itself (we have to do so in \cs{FamilyOptions}).
% \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.
+% The hook definitions also contains the hook deletion. This is important for
+% recursive calls, to distinguish lower levels from the topmost level.
% \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
-% \cs{AtEndOfFamilyOptions} in den Haken der (obersten) Ebene
-% eingefügt.
+% The top hook is added to the hook of the (topmost) level, while resetting
+% the definition of \cs{AtEndOfFamilyOptions}.
% \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
-% umzustellen.
+% Don't forget to change the command to fill one of the hooks from immediate
+% execution to adding code to the corresponding hook.
% \begin{macrocode}
\let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions
\fi
% \end{macrocode}
-% Jetzt geht es weiter mit der Adaption des Codes aus \cs{ProcessOptions}.
+% Continue the adaption of code from \cs{ProcessOptions}.
% \begin{macrocode}
\let\ds@\@empty
\edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
\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
-% 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
+% Within classes the current option list is same like the global option
+% list. So classes are not allowed to process the global option list
+% additionally to the local one. But packages do process the global option
+% list, but do not report errors or warnings about these options.
+% \changes{v3.18}{2015/06/17}{handling of not defined \cs{@globaloptionslist}}
+% \changes{v3.20}{2016/02/06}{\cs{@globaloptionslist} assignment always}
% \begin{macrocode}
\let\@globaloptionslist\@classoptionslist
\scr@ifundefinedorrelax{XKV@classoptionslist}{%
@@ -1161,10 +1103,10 @@
\scr@ifundefinedorrelax{@globaloptionslist}{}{%
\@for\CurrentOption:=\@globaloptionslist\do{%
% \end{macrocode}
-% Die Optionen werden in der Reihenfolge verarbeitet, in der sie als globale
-% Optionen angegeben wurden. Dabei werden nur Optionen verarbeitet, die nicht
-% leer sind und die im aktuellen Paket bekannt sind. Das sind also keine
-% \textsf{keyval}-Optionen, sondern normale \LaTeX-Optionen.
+% The options are processed in the order they have been set into the global
+% option list. But only these options are processed, that are not empty and
+% that are known by the current package. So these are only classic options not
+% \pkg{keyval} options.
% \begin{macrocode}
\ifx\CurrentOption\@empty\else
\@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}%
@@ -1173,13 +1115,11 @@
\expandafter\let\csname ds@\CurrentOption\endcsname\@empty
\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
-% 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
-% einer unbekannnten Option oder eines unbekannten Wertes, geschieht hier gar
-% nichts.
+% But if they are not classic options, they could be \pkg{keyval} options. In
+% this case we test, if member (\texttt{\#1}) of family (\texttt{\#2}) has
+% such an option. If this is the case, the options is executed once with
+% member and once again with member. In case of an unknown key or value
+% nothing else happens.
% \begin{macrocode}
\scr@ifprocess@curroption{#1}{#2}{%
\@expandtwoargs\@removeelement\CurrentOption
@@ -1191,25 +1131,24 @@
}%
\fi
% \end{macrocode}
-% 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
-% es sich um ein Paket handelt. Bei Klassen landet die Option hingegen in der
-% Liste der nicht benutzten globalen Optionen.
+% Now, processing local options of classes and packages follows. In this case
+% unknown options (keys) or values of packages immediately can result in error
+% messages. But in classes they are only added to the list of unused global
+% options.
% \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
-% 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
-% \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.
+% \changes{v3.26}{2018/10/22}{options are not fully expanded for the tests}
+% \changes{v3.26}{2018/10/22}{\cs{@use@ption} is not used for
+% \texttt{\meta{key}\quotechar=\meta{value}} options}
+% From \KOMAScript~3.26 the options are not fully expanded to test, if it is a
+% classic option. The essential expansion already has been done. So removing
+% the full expansion avoids errors because of missing
+% \cs{endcsname}. Additionally using \cs{@use@option} hat been removed for all
+% \texttt{\meta{key}=\meta{value}} options, because this would result in the
+% same error because of the |\csname ds@\CurrentOption\endcsname|, that is
+% used inside \cs{@use@option}. Instead of \cs{@use@option} we just remove the
+% option from the list of unused options.
% \begin{macrocode}
\edef\reserved@a{\expandafter\detokenize\expandafter{\CurrentOption}}%
\scr@ifundefinedorrelax{ds@\reserved@a}{%
@@ -1219,9 +1158,11 @@
}\@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
-% keine unverarbeiteten Optionen mehr vorhanden sind.
+% Almost at the end we delete the options code of all declared options. This
+% is the same as with the \LaTeX{} kernel command
+% \cs{ProcessOptions*}. Additionally at the end of the package (not
+% \pkg*{tocbasic} but the package, that is using the command) all unprocessed
+% options are processed.
% \changes{v3.33}{2021/02/15}{prepared for \LaTeX{} 2020/10/01}
% \begin{macrocode}
\@for\CurrentOption:=\@declaredoptions\do{%
@@ -1236,23 +1177,20 @@
\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
+% Last but not least the hook has to be executed and (self-)deleted.
+% \changes{v3.23}{2017/02/16}{fix using family instead of member}
% \begin{macrocode}
\@nameuse{scr@after@options@#2@hook}%
}
\EndIncludeInRelease
\@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
-% des Hakens weder das Mitglied noch die Familie existieren. Man kann dies
-% 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{command}{\BeforeFamilyProcessOptions}
+% \changes{v3.18}{2015/06/17}{added}
+% Add code to the hook used immediately before executing the options via
+% \cs{FamilyProcessOptions}. Neither the family nor the member need to
+% exist. So you are able to already add code to the hook before the class or
+% package has been loaded.
% \begin{macrocode}
\newcommand*{\BeforeFamilyProcessOptions}[3][.\@currname.\@currext]{%
\scr@ifundefinedorrelax{scr@before@process@options@#2#1@hook}{%
@@ -1263,23 +1201,20 @@
}%
}
% \end{macrocode}
-% \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
-% 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} bis zum Ende der aktuellen Schachtet, die Sternvariante
-% bis zum Ende der äußeren Schachtel.
+% \end{command}^^A \BeforeFamilyProcessOptions
+% \begin{command}{\AtEndOfFamilyOptions}
+% \changes{v3.12}{2013/03/04}{added}
+% \changes{v3.23}{2017/02/16}{star variant added}
+% Inside the code of an option you can delay execution of code till the end of
+% the current \cs{FamilyProcessOptions}, \cs{FamilyExecuteOptions},
+% \cs{FamilyOptions} or \cs{FamilyOption}. The only argument is the code. The
+% argument is delegated to \cs{l@addto@macro} (instead of reading it
+% directly). The non-star variant delays only till the end of the current
+% level. The star-variant delays till the end of all levels.
% \begin{macro}{\scr@AtEndOfFamilyOptions}
-% \changes{v3.12}{2013/05/29}{Neue Anweisung (intern)}%^^A
-% \begin{macro}{\scr@@AtEndOfFamilyOptions}
-% \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.12}{2013/05/29}{added}
+% \begin{macro}{\scr@@AtEndOfFamilyOptions,\scr@AtEndOfFamilyOptions@immediate}
+% \changes{v3.23}{2017/02/16}{added}
% \begin{macrocode}
\newcommand*{\scr@AtEndOfFamilyOptions}{%
\kernel@ifstar {\scr@@AtEndOfFamilyOptions{@topmost}}%
@@ -1295,32 +1230,24 @@
\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,\scr@AtEndOfFamilyOptions@immediate
+% \end{macro}^^A \scr@AtEndOfFamilyOptions
+% \end{command}^^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
-% Mitglied (\#1) der angegebenen Familie (\#2) aus. Falls die Option keinen
-% 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
-% entsprechende Option.
+% \changes{v3.13}{2014/01/04}{brackets around \cs{CurrentOption} inside \cs{setkeys}}
+% This macro executes the current \pkg{keyval} option for member
+% \texttt{\#1} of family \texttt{\#2}. If the option does not know the value,
+% the forth argument is used. Otherwise it is ignored. Note, before the member
+% option the family option is executed. If this is successful the member does
+% not need to know the 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
-% 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
-% andere als begeistert von der Tatsache, dass hier im \LaTeX-Kern Jahrzehnte
-% altes Verhalten ohne Rücksicht auf Verluste zur Disposition gestellt wird.
+% \changes{v3.26}{2018/10/22}{using \cs{scr@sp@def} instead of \cs{def} for
+% splitting the key}
+% Because white spaces are not always and forever removed from the option
+% list, here \cs{scr@sp@def} is used to eliminate unwanted white spaces before
+% the key, before and after the equal sign and at the end of the value.
% \begin{macrocode}
\def\reserved@a##1=##2\@nil{\scr@sp@def\reserved@a{##1}}%
\expandafter\reserved@a\CurrentOption=\@nil
@@ -1388,26 +1315,14 @@
\fi
}
% \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
-% \begin{macro}{\scr@sp@d}
-% \changes{v3.26}{2018/08/29}{von \texttt{tocbasic.dtx} nach
-% \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
-% \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
-% 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
-% der Hilfsanweisung.
+% \begin{macro}{\scr@sp@d,\scr@sp@b,\scr@sp@c,\scr@sp@def}
+% \changes{v3.26}{2018/08/29}{moved from \file{tocbasic.dtx} to
+% \file{scrkernel-basics.dtx} and renamed}
+% \changes{v3.26b}{2019/01/17}{\cs{long}}
+% The helper macro \cs{scr@sp@def} defines a macro (\texttt{\#1}) to contain a
+% token list (\texttt{\#2}) and removes tailing spaces at the beginning an the
+% end. The original definition was from \pkg{keyval}. The other macros are
+% helpers to realize \cs{scr@sp@def}.
% \begin{macrocode}
\def\@tempa#1{%
\long\def\scr@sp@def##1##2{%
@@ -1424,67 +1339,62 @@
\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
-%
-% \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
-% 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.
+% \end{macro}^^A \scr@sp@d,\scr@sp@b,\scr@sp@c,\scr@sp@def
+% \end{macro}^^A \scr@process@curroption
+% \end{command}^^A \FamilyProcessOptions
+%
+% \begin{command}{\KOMAProcessOptions}
+% \changes{v2.97c}{2007/04/18}{added}
+% \changes{v3.00}{2008/04/30}{no optional argument}
+% This command executes all options, not only classic declared by
+% \cs{DeclareOption} or \cs{DeclareOption*}, but also \pkg{keyval} options in
+% the order these options have been used (not declared). For packages first
+% the global options, than the local options. For classes global and local
+% options are the same and only local options are processed. This is similar
+% to the \LaTeX{} kernel command \cs{ProcessOptions*} (with the difference of
+% processing \pkg{keyval} options too). Family options are always executed
+% before member options.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAProcessOptions}{\FamilyProcessOptions{KOMA}}
\@onlypreamble\KOMAProcessOptions
%</koma>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
% \begin{macro}{\scr@trim@spaces}
-% \changes{v3.12}{2013/11/06}{neu (intern)}
-% \changes{v3.26}{2018/08/29}{von \texttt{scrkernel-language.dtx} nach
-% \texttt{scrkernel-basics.dtx} verschoben}
+% \changes{v3.12}{2013/11/06}{added}
+% \changes{v3.26}{2018/08/29}{moved from \file{scrkernel-language.dtx} to
+% \file{scrkernel-basics.dtx}}
% \changes{v3.33}{2021/03/02}{moved to preparation section}
-% 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.
+% Helper macro to remove white spaces from the beginning or the end. This is
+% useful for list processing with \cs{@for} to remove spaces before or after
+% commas. The argument is a macro with the string to be trimmed and the result
+% is stored again in this macro.
% \begin{macrocode}
%<*base>
\newcommand\scr@trim@spaces[1]{%
\expandafter\scr@sp@def\expandafter#1\expandafter{#1}%
}
%</base>
+%</prepare>
% \end{macrocode}
-% \end{macro}%^^A \scr@trim@space
+% \end{macro}^^A \scr@trim@space
%
-% \iffalse
-%</prepare>
-%<*option>
-% \fi
%
% \begin{option}{internalonly}
-% \changes{v2.96}{2006/11/26}{neu}%^^A
-% \changes{v2.97c}{2007/06/20}{geht auch ohne Argument}%^^A
-% \changes{v3.27a}{2019/11/04}{\cs{FamilyKeyStateProcessed} ergänzt}%^^A
-% \changes{v3.27a}{2019/11/04}{nur innerhalb des Pakets definiert}%^^A
-% \changes{v3.27a}{2019/11/04}{temporär in den Klassen definiert}%^^A
-% \changes{v3.28}{2019/11/18}{Option ist veraltet}%^^A
+% \changes{v2.96}{2006/11/26}{added}
+% \changes{v2.97c}{2007/06/20}{no argument needed}
+% \changes{v3.27a}{2019/11/04}{\cs{FamilyKeyStateProcessed} added}
+% \changes{v3.27a}{2019/11/04}{defined only inside the package}
+% \changes{v3.27a}{2019/11/04}{defined temporary inside the classes}
+% \changes{v3.28}{2019/11/18}{deprecated}
% \begin{macro}{\dont@let@as@internal@defined}
-% \changes{v2.96}{2006/11/26}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{entfernt}%^^A
+% \changes{v2.96}{2006/11/26}{added}
+% \changes{v3.28}{2019/11/18}{removed}
+% \end{macro}
% \begin{macrocode}
+%<*option>
%<*base>
\DefineFamily{KOMA}
\DefineFamilyMember{KOMA}
@@ -1497,10 +1407,10 @@
}
%</base>
% \end{macrocode}
-% Da \textsf{scrbase} von den Klassen bereits vor der Verarbeitung der
-% Optionen geladen wird, wird die Option zwar verarbeitet aber dann trotzdem
-% als unbekannt gemeldet. Das kann man notdürftig beheben, indem die Klasse
-% vorrübergehend eine Dummy-Option erhält.
+% If \pkg*{scrbase} has been loaded before the class, the option will be
+% reported as unused, despite it already has been processed. We could solve
+% this using a dummy option inside the classes. However, because the option is
+% deprecated the following code should never been used.
% \begin{macrocode}
%</option>
%<*load&class&neveruse>
@@ -1511,29 +1421,24 @@
%</load&class&neveruse>
%<*option>
% \end{macrocode}
-% \end{macro}
% \end{option}
%
%
-% \changes{v2.96}{2006/08/20}{Optionen werden abgearbeitet}%^^A
-% \changes{v2.97c}{2007/04/18}{Optionen werden mit \cs{KOMAProcessOptions}%^^A
-% abgearbeitet}
+% \changes{v2.96}{2006/08/20}{processing options}
+% \changes{v2.97c}{2007/04/18}{using \cs{KOMAProcessOptions} for processing options}
% \begin{macrocode}
%<koma>\KOMAProcessOptions\relax
%<base>\FamilyProcessOptions{KOMA}\relax
-% \end{macrocode}
-%
-% \iffalse
%</option>
%<*body>
-% \fi
+% \end{macrocode}
+%
%
-% \subsection{Ein wenig zusätzliche Mathematik für \eTeX}
+% \subsection{Some additional math missing from \eTeX}
%
-% \begin{macro}{\XdivY}
-% \changes{v3.05a}{2010/03/10}{Neu}%^^A
-% Ergebnis ist erster Argument durch zweites abgerundet auf die nächst
-% kleinere ganze Zahl.
+% \begin{command}{\XdivY}
+% \changes{v3.05a}{2010/03/10}{added}
+% \meta{X} divided by \meta{Y} and rounded to the lower integer.
% \begin{macrocode}
%<*base>
\newcommand*{\XdivY}[2]{%
@@ -1541,11 +1446,11 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\XmodY}
-% \changes{v3.05a}{2010/03/10}{Neu}%^^A
-% Ergebnis ist erstes Argument modulo zweites Argument.
+% \begin{command}{\XmodY}
+% \changes{v3.05a}{2010/03/10}{added}
+% \meta{X} modulo \meta{Y} (rest of integer division \meta{X} divided by \meta{Y}).
% \begin{macrocode}
%<*base>
\newcommand*{\XmodY}[2]{%
@@ -1553,13 +1458,12 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \subsection{Häufig benötigte Befehle}
+% \subsection{Often needed commands and macros}
%
-% \selectlanguage{english}%^^A
% \begin{macro}{\scr@ForEachTrimmedListElement}
-% \changes{v3.27}{2019/04/16}{new (internal)}%^^A
+% \changes{v3.27}{2019/04/16}{new (internal)}
% 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.
@@ -1581,17 +1485,13 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ForEachTrimmedListElement
-% \selectlanguage{ngerman}%^^A
+% \end{macro}^^A \scr@ForEachTrimmedListElement
%
-% \begin{macro}{\if@atdocument}
-% \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
-% danach aufgerufen werden.
+% \begin{macro}{\@atdocumenttrue,\@atdocumentfalse,\if@atdocument}
+% \changes{v2.95}{2002/12/05}{added}
+% The boolean switch becomes true while |\begin{document}|. \KOMAScript{} uses
+% it for commands and macros, which are different in the document preamble and
+% the document body.
% \begin{macrocode}
%<*base>
\newif\if@atdocument
@@ -1601,50 +1501,40 @@
%</base>
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \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{v3.28}{2019/11/18}{entfernt}%^^A
+% \changes{v2.95}{2002/08/19}{added}
+% \changes{v2.95c}{2006/08/12}{warning while redefining}
+% \changes{v2.96}{2006/11/26}{making user commands from internal macros can
+% be banned for single macros}
+% \changes{v2.97c}{2007/06/20}{making user commands from internal macros can
+% generally banned}
+% \changes{v3.10}{2010/10/26}{\cs{ignorespaces} at \cs{document} patch added}
+% \changes{v3.13a}{2014/08/13}{unwanted white spaces removed}
+% \changes{v3.28}{2019/11/18}{removed}
% \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}}%^^A
-% \changes{v3.28}{2019/11/18}{umbenannt in \cs{Ifundefinedorrelax}}%^^A
-% \changes{v3.29}{2020/01/17}{fix of missing backslash}%^^A
-% \begin{macro}{\Ifundefinedorrelax}%^^A
-% Dieses Makro arbeitet wie \cs{@ifundefined}, definiert dabei aber
-% ein undefiniertes Makro nicht als \cs{relax}.
+% \begin{command}{\ifundefined,\ifundefinedorrelax,\Ifundefinedorrelax}
+% \changes{v2.95}{2002/08/21}{added}
+% \changes{v2.95c}{2006/08/12}{using an internal macro to define it}
+% \changes{v2.97c}{2007/06/20}{\cs{ifundefinedorrelax} replaces \cs{ifundefined}}
+% \changes{v3.28}{2019/11/18}{\cs{ifundefinedorrelax} renamed to
+% \cs{Ifundefinedorrelax}}
+% \changes{v3.29}{2020/01/17}{fix of missing backslash}
+% Same as \cs{scr@ifundefinedorrelax} but at user level.
% \begin{macrocode}
%<*base>
\newcommand*{\Ifundefinedorrelax}{\scr@ifundefinedorrelax}%
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\ifnotundefined}
-% \changes{v2.95}{2002/08/21}{neu}%^^A
-% \changes{v2.95c}{2006/08/12}{nutzt \eTeX{} wenn möglich}%^^A
-% \changes{v3.02c}{2009/02/19}{\eTeX{} ist zwingend}%^^A
-% \changes{v3.28}{2019/11/18}{umdefiniert in \cs{Ifnotundefined}}%^^A
-% \begin{macro}{\Ifnotundefined}
-% \changes{v3.28}{2019/11/18}{neu Umbenennung von \cs{ifnotundefinded}}%^^A
-% Dieses Makro arbeitet genau umgekehrt zu \cs{ifundefined}. Manchmal
-% ist es ganz nützlich, auch das zu haben. Dieses Makro heißt nicht
-% \cs{ifdefined}, weil \eTeX\ bereits ein solches Primitiv bietet.
+% \begin{command}{\ifnotundefined,\Ifnotundefined}
+% \changes{v2.95}{2002/08/21}{added}
+% \changes{v2.95c}{2006/08/12}{using \eTeX{} if possible}
+% \changes{v3.02c}{2009/02/19}{\eTeX{} is mandatory}
+% \changes{v3.28}{2019/11/18}{\cs{ifnotundefined} renamed to \cs{Ifnotundefined}}
+% This is the opposite to \cs{Ifundefinedorrelax}. Sometimes it is useful.
% \begin{macrocode}
%<*base>
\providecommand*{\ifnotundefined}{%
@@ -1665,18 +1555,16 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{command}
%
-% \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}%^^A
-% \changes{v3.28}{2019/11/18}{umbenannt in \cs{IfStr}}%^^A
-% \begin{macro}{\Ifstr}
-% \changes{v3.28}{2019/11/18}{neu aus Umbenennung von \cs{ifstr}}%^^A
-% Dieses Makro vergleicht zwei Tokenfolgen. Eigentlich müsste es also
-% eher \cs{ifequal} oder ähnlich heißen.
+% \begin{command}{\ifstr,\Ifstr}
+% \changes{v2.95}{2004/07/20}{\meta{if code} and \meta{then code} delegated
+% after the command execution}
+% \changes{v3.04b}{2010/01/29}{\cs{edef} replaced by \cs{protected@edef}}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr} (but still
+% available as deprecated command)}
+% This command compares two fully expanded token lists. So an alternative name
+% would be \cs{Ifxequal}.
% \begin{macrocode}
%<*base>
\providecommand*{\ifstr}{%
@@ -1698,16 +1586,14 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\Ifstrstart}
-% \changes{v3.28}{2019/11/18}{neu aus Umbenennung von \cs{ifstrstart}}%^^A
-% \begin{macro}{\ifstrstart}
-% \changes{v3.12}{2013/11/05}{neu}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Falls die Expansion des ersten Arguments mit der Expansion des zweiten
-% Arguments beginnt, wird das dritte Argument ausgeführt, sonst das vierte.
+% \begin{command}{\ifstrstart,\Ifstrstart}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart} (but
+% still available as deprecated command)}
+% If the expansion of the first argument starts with expansion of the second
+% one use the third argument, otherwise the fourth.
% \begin{macrocode}
%<*base>
\providecommand*{\ifstrstart}{%
@@ -1727,8 +1613,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}{added}
+% Helper.
% \begin{macrocode}
\newcommand*{\@ifstrstart}[2]{%
\def\reserved@a ##1#2##2\@nil{%
@@ -1742,16 +1628,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \@ifstrstart
-% \end{macro}%^^A \ifstrstart
-% \end{macro}%^^A \Ifstrstart
+% \end{macro}^^A \@ifstrstart
+% \end{command}^^A \ifstrstart,\Ifstrstart
%
-% \begin{macro}{\IfArgIsEmpty}
-% \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.
+% \begin{command}{\IfArgIsEmpty}
+% \changes{v3.19}{2015/08/29}{added}
+% \changes{v3.27}{2019/03/11}{\cs{long}}
+% \changes{v3.27}{2019/07/19}{needed already to process options}
+% If the first argument is absolutely empty execute the second one, otherwise
+% the third one.
%</body>
%<*prepare>
%<*base>
@@ -1767,25 +1652,35 @@
%</base>
%</prepare>
%<*body>
-% \end{macro}%^^A \IfArgIsEmpty
+% \end{command}^^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.
+% \begin{command}{\ifislengthprimitive,\Ifislengthprimitive}
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.36}{2022/02/17}{\cs{ifislengthprimitive} renamed to
+% \cs{Ifislengthprimitive} (but still defined as deprecated)}
+% If the first argument expands to a primitive, that can be used as a length,
+% execute the second argument, otherwise the third one.
% \begin{macrocode}
%<*base>
-\newcommand*{\ifislengthprimitive}[1]{%
+\providecommand*{\ifislengthprimitive}{%
+ \PackageWarning{scrbase}{Usage of deprecated command
+ `\string\ifislengthprimitive'.\MessageBreak
+ The command has been renamed because of a\MessageBreak
+ recommendation of The LaTeX Project Team.\MessageBreak
+ Please replace `\string\ifislengthprimitive' by `\string\Ifislengthprimitive'%
+ }%
+ \Ifislengthprimitive
+}
+\newcommand*{\Ifislengthprimitive}[1]{%
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifislengthprimitive#1\@nil}%
}
% \end{macrocode}
% \begin{macro}{\scr@ifislengthprimitive}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf diverse Primitive prüft.
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% Helper macro to test against several length like \TeX{} primitives.
% \begin{macrocode}
\newcommand*{\scr@ifislengthprimitive}[1]{%
\begingroup
@@ -1809,19 +1704,17 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ifislengthprimitive
-% \end{macro}%^^A \ifislengthprimitive
+% \end{macro}^^A \scr@ifislengthprimitive
+% \end{command}^^A \ifislengthprimitive,\Ifislengthprimitive
%
%
-% \begin{macro}{\ifisdimen}
-% \changes{v3.12}{2013/11/05}{neu}%^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
-% \changes{v3.28}{2019/11/19}{umdefiniert in \cs{Ifisdimen}}%^^A
-% \begin{macro}{\Ifisdimen}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisdimen}}%^^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.
+% \begin{command}{\ifisdimen,\Ifisdimen}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.20}{2015/10/19}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisdimen} renamed to \cs{Ifisdimen} (but
+% still defined as deprecated command)}
+% If the first argument expands to a \cs{dimen} register (and nothing else),
+% execute the second argument, otherwise the third one.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisdimen}{%
@@ -1838,9 +1731,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdimen}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf ein \cs{dimen}-Register prüft
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro, that tests a macro recursive to expand to a \cs{dimen} register.
% \begin{macrocode}
\newcommand*{\scr@ifisdimen}[1]{%
\begingroup
@@ -1857,13 +1750,13 @@
#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
-% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
-% Argument wird in jedem Fall komplett aufgebraucht.
+% \changes{v3.20}{2015/10/19}{added}
+% Argument \texttt{\#1} delimited by \cs{@nil} is assigned to a temporary
+% length. If this uses the argument completely, the argument \texttt{\#2} behind
+% \cs{@nil} will executed, otherwise argument \texttt{\#3}. In any case
+% \texttt{\#1} will removed from the input totally.
% \begin{macrocode}
\newcommand*\scr@TestDimenAssignTillNil{}
\def\scr@TestDimenAssignTillNil#1\@nil{%
@@ -1872,17 +1765,13 @@
\@tempdima=#1\relax\@nnil
}
% \end{macrocode}
-% \begin{macro}{\scr@IfAfterEndgroupArgIsRelaxTillNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% \begin{macro}{\scr@IfArgIsRelaxAfterRelaxTillNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% 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.
+% \begin{macro}{\scr@IfAfterEndgroupArgIsRelaxTillNnil,\scr@IfArgIsRelaxAfterRelaxTillNnil}
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% The helper macros read an argument delimited by \cs{@nnil}. If this
+% arguments consists of a number of \cs{relax} only, the second argument (first
+% behind \cs{@nnil}) will be execute, otherwise the third (second behind \cs{@nnil}).
% \begin{macrocode}
\newcommand*\scr@AfterEndGroupIfArgIsRelaxTillNnil{}
\def\scr@AfterEndGroupIfArgIsRelaxTillNnil#1\@nnil{%
@@ -1902,42 +1791,31 @@
}%
}
% \end{macrocode}
-% \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.
-% \begin{macro}{\scr@@secondoftwoAfterNil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% Zu diesem Zweck wird ein zweites Hilfsmakro benötigt.
+% \end{macro}^^A \scr@IfArgIsRelaxTillNnil,\scr@IfArgIsRelaxAfterRelaxTillNnil
+% \end{macro}^^A \scr@TestSkipAssignTillNil
+% \begin{macro}{\scr@@secondoftwoAfterNil,\scr@secondoftwoAfterNil}
+% \changes{v3.20}{2015/10/19}{added}
+% The helper macros reads arguments \texttt{\#1} delimited by \cs{@nil} and
+% executes \texttt{\#3}. We have to take care for the case of an empty first
+% argument, which would make \cs{@nil} to be the argument. Because of this we
+% need two helpers.
% \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 \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
-% \changes{v3.28}{2019/11/19}{umdefiniert in \cs{Ifisskip}}%^^A
-% \begin{macro}{\Ifisskip}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisskip}}%^^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.
+% \end{macro}^^A \scr@@secondoftwoAfterNil,\scr@secondoftwoAfterNil
+% \end{command}^^A \ifisdimen,\Ifisdimen
+%
+% \begin{command}{\ifisskip,\Ifisskip}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.18a}{2015/07/07}{\cs{baselineskip} and \cs{parskip} are skips}
+% \changes{v3.20}{2015/10/19}{\cs{baselineskip} and \cs{parskip} are not skips}
+% \changes{v3.20}{2015/10/19}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisskip} renamed to \cs{Ifisskip}}
+% If the first argument expands to a \cs{skip} register (and nothing else),
+% execute the second argument, otherwise the third one.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisskip}{%
@@ -1954,9 +1832,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisskip}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf ein \cs{skip}-Register prüft
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro, that tests a macro recursive to expand to a \cs{skip} register.
% \begin{macrocode}
\newcommand*{\scr@ifisskip}[1]{%
\begingroup
@@ -1973,13 +1851,13 @@
#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
-% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
-% Argument wird in jedem Fall komplett aufgebraucht.
+% \changes{v3.20}{2015/10/19}{added}
+% Argument \texttt{\#1} delimited by \cs{@nil} is assigned to a temporary
+% \cs{skip}. If this uses the argument completely, the argument \texttt{\#2} behind
+% \cs{@nil} will executed, otherwise argument \texttt{\#3}. In any case
+% \texttt{\#1} will removed from the input totally.
% \begin{macrocode}
\newcommand*\scr@TestSkipAssignTillNil{}
\def\scr@TestSkipAssignTillNil#1\@nil{%
@@ -1989,19 +1867,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@TestSkipAssignTillNil
-% \end{macro}%^^A \Ifisskip
-% \end{macro}%^^A \ifiskip
+% \end{macro}^^A \scr@TestSkipAssignTillNil
+% \end{command}^^A \ifiskip,\Ifisskip
%
-% \begin{macro}{\ifiscount}
-% \changes{v3.12}{2013/11/05}{neu}%^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
-% \changes{v3.28}{2019/11/19}{umdefiniert in \cs{Ifiscount}}%^^A
-% \begin{macro}{\Ifiscount}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifiscount}}%^^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.
+% \begin{command}{\ifiscount,\Ifiscount}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.20}{2015/10/19}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifiscount} renamed to \cs{Ifiscount}}
+% If the first argument expands to a \cs{count} register (and nothing else),
+% execute the second argument, otherwise the third one.
% \begin{macrocode}
%<*base>
\providecommand*{\ifiscount}{%
@@ -2018,9 +1892,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifiscount}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf ein \cs{count}-Register prüft
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro, that tests a macro recursive to expand to a \cs{count} register.
% \begin{macrocode}
\newcommand*{\scr@ifiscount}[1]{%
\begingroup
@@ -2037,13 +1911,13 @@
#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
-% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
-% Argument wird in jedem Fall komplett aufgebraucht.
+% \changes{v3.20}{2015/10/19}{added}
+% Argument \texttt{\#1} delimited by \cs{@nil} is assigned to a temporary
+% counter. If this uses the argument completely, the argument \texttt{\#2} behind
+% \cs{@nil} will executed, otherwise argument \texttt{\#3}. In any case
+% \texttt{\#1} will removed from the input totally.
% \begin{macrocode}
\newcommand*\scr@TestCountAssignTillNil{}
\def\scr@TestCountAssignTillNil#1\@nil{%
@@ -2053,23 +1927,19 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@TestCountAssignTillNil
-% \end{macro}%^^A \Ifiscount
-% \end{macro}%^^A \ifiscount
+% \end{macro}^^A \scr@TestCountAssignTillNil
+% \end{command}^^A \ifiscount,\Ifiscount
%
%
-% \begin{macro}{\ifisdimexpr}
-% \changes{v3.12}{2013/11/05}{neu}%^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
-% \changes{v3.28}{2019/11/19}{umdefiniert in \cs{Ifisdimexpr}}%^^A
-% \begin{macro}{\Ifisdimexpr}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisdimexpr}}%^^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
-% 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.
+% \begin{command}{\ifisdimexpr,\Ifisdimexpr}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.20}{2015/10/19}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisdimexpr} renamed to \cs{Ifisdimexpr}}
+% If the first argument expands to a \cs{dimexpr},
+% execute the second argument, otherwise the third one. There is an important
+% difference to \cs{Ifisdimen}: If the argument begins with \cs{dimexpr} but
+% is not a valid \emph{dimension expression} \cs{Ifisdimexpr} detects a
+% \cs{dimexpr}, but using this expression later will result in an error.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisdimexpr}{%
@@ -2086,9 +1956,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdimexpr}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{dimexpr} prüft
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro, that tests a macro recursive to expand to a \cs{dimexpr}.
% \begin{macrocode}
\newcommand*{\scr@ifisdimexpr}[1]{%
\begingroup
@@ -2106,23 +1976,19 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ifisdimexpr
-% \end{macro}%^^A \Ifisdimexpr
-% \end{macro}%^^A \ifisdimexpr
+% \end{macro}^^A \scr@ifisdimexpr
+% \end{command}^^A \ifisdimexpr,\Ifisdimexpr
%
%
-% \begin{macro}{\ifisglueexpr}
-% \changes{v3.12}{2013/11/05}{neu}%^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
-% \changes{v3.28}{2019/11/19}{umdefiniert in \cs{Ifisglueexpr}}%^^A
-% \begin{macro}{\Ifisglueexpr}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisglueexpr}}%^^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
-% 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.
+% \begin{command}{\ifisglueexpr,\Ifisglueexpr}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.20}{2015/10/19}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisglueexpr} renamed to \cs{Ifisglueexpr}}
+% If the first argument expands to a \cs{glueexpr},
+% execute the second argument, otherwise the third one. There is an important
+% difference to \cs{Ifisskip}: If the argument begins with \cs{glueexpr} but
+% is not a valid \emph{glue expression} \cs{Ifisglueexpr} detects a
+% \cs{göueexpr}, but using this expression later will result in an error.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisglueexpr}{%
@@ -2139,9 +2005,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisglueexpr}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{glueexpr} prüft
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro, that tests a macro recursive to expand to a \cs{glueexpr}.
% \begin{macrocode}
\newcommand*{\scr@ifisglueexpr}[1]{%
\begingroup
@@ -2159,23 +2025,19 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ifisglueexpr
-% \end{macro}%^^A \Ifisglueexpr
-% \end{macro}%^^A \ifisglueexpr
+% \end{macro}^^A \scr@ifisglueexpr
+% \end{command}^^A \ifisglueexpr,\Ifisglueexpr
%
%
-% \begin{macro}{\ifisnumexpr}
-% \changes{v3.12}{2013/11/05}{neu}%^^A
-% \changes{v3.20}{2015/10/19}{Reimplementierung}%^^A
-% \changes{v3.28}{2019/11/19}{umdefiniert in \cs{Ifisnumexpr}}%^^A
-% \begin{macro}{\Ifisnumexpr}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisnumexpr}}%^^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
-% 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.
+% \begin{command}{\ifisnumexpr,\Ifisnumexpr}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.20}{2015/10/19}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisnumexpr} renamed to \cs{Ifisnumexpr}}
+% If the first argument expands to a \cs{numexpr},
+% execute the second argument, otherwise the third one. There is an important
+% difference to \cs{Ifiscount}: If the argument begins with \cs{numexpr} but
+% is not a valid \emph{numerical expression} \cs{Ifisnumexpr} detects a
+% \cs{numexpr}, but using this expression later will result in an error.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisnumexpr}{%
@@ -2192,9 +2054,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisnumexpr}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{numexpr} prüft
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro, that tests a macro recursive to expand to a \cs{numexpr}.
% \begin{macrocode}
\newcommand*{\scr@ifisnumexpr}[1]{%
\begingroup
@@ -2212,29 +2074,37 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ifisnumexpr
-% \end{macro}%^^A \Ifisnumexpr
-% \end{macro}%^^A \ifisnumexpr
+% \end{macro}^^A \scr@ifisnumexpr
+% \end{command}^^A \ifisnumexpr,\Ifisnumexpr
%
%
-% \begin{macro}{\ifisdefchar}
-% \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
-% 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.
+% \begin{command}{\ifisdefchar,\Ifisdefchar}
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.36}{2022/02/17}{\cs{ifisdefchar} renamed to \cs{Ifisdefchar}}
+% If the first argument expands to a value defined using \cs{chardef},
+% execute the second argument, otherwise the third one. Note: If the expanded
+% argument begins with \verb|\char"| but is not a valid \emph{character value}
+% \cs{Ifisdefchar} detects a valid value, but using this value later will
+% result in an error.
% \begin{macrocode}
%<*base>
-\newcommand*{\ifisdefchar}[1]{%
+\providecommand*{\ifisdefchar}{%
+ \PackageWarning{scrbase}{Usage of deprecated command
+ `\string\ifisdefchar'.\MessageBreak
+ The command has been renamed because of a\MessageBreak
+ recommendation of The LaTeX Project Team.\MessageBreak
+ Please replace `\string\ifisdefchar' by `\string\Ifisdefchar'%
+ }%
+ \Ifisdefchar
+}
+\newcommand*{\Ifisdefchar}[1]{%
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisdefchar#1\@nil}%
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdefchar}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf eine \cs{char} prüft
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro, that tests a macro recursive to expand to a \cs{char}.
% \begin{macrocode}
\newcommand*{\scr@ifisdefchar}[1]{%
\begingroup
@@ -2252,17 +2122,15 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ifisdefchar
-% \end{macro}%^^A \ifisdefchar
+% \end{macro}^^A \scr@ifisdefchar
+% \end{command}^^A \ifisdefchar,\Ifisdefchar
%
%
-% \begin{macro}{\ifiscounter}
-% \changes{v3.12}{2013/11/05}{neu}%^^A
-% \changes{v3.28}{2019/11/19}{umdefiniert in \cs{Ifiscounter}}%^^A
-% \begin{macro}{\Ifiscounter}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifiscounter}}%^^A
-% Falls die Expansion des ersten Arguments ein \LaTeX-Zähler ist, wird das
-% zweite Argument ausgeführt, sonst das dritte.
+% \begin{command}{\ifiscounter,\Ifiscounter}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.28}{2019/11/19}{\cs{ifiscounter} renamed to \cs{Ifiscounter}}
+% If the first argument expands to a \LaTeX{} counter, execute the second
+% argument, otherwise the third one.
% \begin{macrocode}
%<*base>
\providecommand*{\ifiscounter}{%
@@ -2285,19 +2153,16 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \Ifiscounter
-% \end{macro}%^^A \ifiscounter
+% \end{command}^^A \ifiscounter,\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.28}{2019/11/19}{umdefiniert in \cs{Ifisinteger}}%^^A
-% \begin{macro}{\Ifisinteger}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisinteger}}%^^A
-% Falls die Expansion des ersten Arguments eine (positive oder negative) ganze
-% Zahl ist, wird das zweite Argument ausgeführt, sonst das dritte.
+% \begin{command}{\ifisinteger,\Ifisinteger}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.12a}{2014/01/24}{white space removed}
+% \changes{v3.20}{2015/10/19}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisinteger} renamed to \cs{Ifisinteger}}
+% If the first argument expands to a (positive or negative) integer, execute
+% the second argument, otherwise the third one.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisinteger}{%
@@ -2314,10 +2179,9 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisinteger}
-% \changes{v3.20}{2015/10/19}{neu (intern)}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% Hilfsmacro, das ggf. rekusiv auf ein Vorzeichen oder eine positive Zahl
-% prüft.
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% Helper macro to test recursive to a algebraic sign or a number without sign.
% \begin{macrocode}
\def\scr@ifisinteger#1{%
\begingroup
@@ -2386,16 +2250,16 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@ifisinteger
-% \end{macro}%^^A \Ifisinteger
-% \end{macro}%^^A \ifisinteger
+% \end{macro}^^A \scr@ifisinteger
+% \end{command}^^A \ifisinteger,\Ifisinteger
%
%
% \begin{macro}{\scr@ifrelax@to@nnil}
-% \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.
+% \changes{v3.12}{2013/11/05}{added}
+% Helper macro to be used after an assignment. If everything until the first
+% \cs{@nnil} is exactly one \cs{relax}, the second argument (first after the
+% \cs{@nnil}) will be executed, otherwise the third argument (second after the
+% \cs{@nnil}).
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifrelax@to@nnil}{}
@@ -2413,16 +2277,14 @@
% \end{macrocode}
% \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.28}{2019/11/19}{umdefiniert in \cs{Ifisdimension}}%^^A
-% \begin{macro}{\Ifisdimension}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisdimension}}%^^A
-% Falls die stufenweise Expansion des ersten Arguments eine (positive oder
-% negative) Länge ist, wird das zweite Argument ausgeführt, sonst das
-% dritte.
+% \begin{command}{\ifisdimension,\Ifisdimension}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.12a}{2014/01/24}{white space removed}
+% \changes{v3.20}{2015/10/20}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisdimension} renamed to \cs{Ifisdimension}}
+% If the step by step expansion of the first argument results in a (positive
+% or negative) length, the second argument will be executed, otherwise the
+% third one.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisdimension}{%
@@ -2439,16 +2301,15 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisdimension}
-% \changes{v3.20}{2015/10/20}{neu (intern)}
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% \changes{v3.28}{2019/11/23}{Vorzeichenfall \texttt{+} korrigiert}%^^A
-% 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
-% eine Zuweisung. Ist diese syntaktisch nicht korrekt, kann ein Fehler die
-% Folge sein. Das mag unschön sein, vereinfacht den Test aber erheblich!
+% \changes{v3.20}{2015/10/20}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% \changes{v3.28}{2019/11/23}{arithmetic plus sign fixed}
+% To make this command absolutely correct without false positive and false
+% negative results, it would be very complicated. Instead we use a heuristic:
+% If the argument consists of a arbitrary number of arithmetic signs followed
+% by at most one dot, comma or digit or followed by something, that is a valid
+% lengths primitive, we try an assignment. Invalid assignments can result in
+% errors. This is not the best solution but makes things a lot easier.
% \begin{macrocode}
\newcommand*{\scr@ifisdimension}[1]{%
\begingroup
@@ -2530,11 +2391,12 @@
}
% \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
-% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
-% Argument wird in jedem Fall komplett aufgebraucht.
+% \changes{v3.20}{2015/10/19}{added}
+% Argument \texttt{\#1} delimited by \cs{@nil} is assigned to a temporary
+% length. If this uses the argument completely, the argument \texttt{\#2} behind
+% \cs{@nil} will executed, otherwise argument \texttt{\#3}. In any case
+% \texttt{\#1} will removed from the input totally. The difference to
+% \cs{scr@TestDimenAssignTillNil} is the \texttt{pt} test.
% \begin{macrocode}
\newcommand*\scr@TestDimensionAssignTillNil{}
\def\scr@TestDimensionAssignTillNil#1\@nil{%
@@ -2543,14 +2405,10 @@
\@tempdima=#1pt\@nnil
}
% \end{macrocode}
-% \begin{macro}{\scr@IfAfterEndgroupArgIsRelaxTillptNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
-% \begin{macro}{\scr@IfArgIsRelaxAfterRelaxTillptNnil}
-% \changes{v3.20}{2015/10/19}{neu (intern)}
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in \cs{Ifstrstart}}%^^A
+% \begin{macro}{\scr@IfArgIsRelaxAfterRelaxTillptNnil,\scr@IfAfterEndgroupArgIsRelaxTillptNnil}
+% \changes{v3.20}{2015/10/19}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
% 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.
@@ -2574,24 +2432,20 @@
}
%</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 \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.28}{2019/11/19}{umdefiniert in \cs{Ifisglue}}%^^A
-% \begin{macro}{\Ifisglue}
-% \changes{v3.28}{2019/11/19}{neu aus Umdefinierung von \cs{ifisglue}}%^^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
-% dritte.
+% \end{macro}^^A \scr@IfArgIsRelaxAfterRelaxTillptNnil,\scr@IfAfterEndgroupArgIsRelaxTillptNnil
+% \end{macro}^^A \scr@DimensionSkipAssignTillNil
+% \end{macro}^^A \scr@ifisdimension
+% \end{command}^^A \ifisdimension,\Ifisdimension
+%
+%
+% \begin{command}{\ifisglue}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.12a}{2014/01/24}{white space removed}
+% \changes{v3.20}{2015/10/21}{re-implemented}
+% \changes{v3.28}{2019/11/19}{\cs{ifisglue} renamed to \cs{Ifisglue}}
+% If the step-by-step expansion of the first argument results in a (positive
+% or negativ) length with glue, the second argument is executed, otherwise the
+% third one.
% \begin{macrocode}
%<*base>
\providecommand*{\ifisglue}{%
@@ -2608,19 +2462,17 @@
}
% \end{macrocode}
% \begin{macro}{\scr@ifisglue}
-% \changes{v3.20}{2015/10/21}{neu (intern)}
-% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} umbenannt in
-% \cs{Ifstrstart}}%^^A
-% \changes{v3.28}{2019/11/23}{Vorzeichenfall \texttt{+} korrigiert}%^^A
-% \changes{v3.28}{2019/11/23}{im Plusfall \cs{ifisdimension} durch
-% \cs{ifisglue} ersetzt}%^^A
-% 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
-% eine Zuweisung. Ist diese syntaktisch nicht korrekt, kann ein Fehler die
-% Folge sein. Das mag unschön sein, vereinfacht den Test aber erheblich!
+% \changes{v3.20}{2015/10/21}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstrstart} renamed to \cs{Ifstrstart}}
+% \changes{v3.28}{2019/11/23}{arithmetic plus sign fixed}
+% \changes{v3.28}{2019/11/23}{in plus case \cs{ifisdimension} replaced by
+% \cs{ifisglue}}
+% To make this command absolutely correct without false positive and false
+% negative results, it would be very complicated. Instead we use a heuristic:
+% If the argument consists of a arbitrary number of arithmetic signs followed
+% by at most one dot, comma or digit or followed by something, that is a valid
+% primitive for skips, we try an assignment. Invalid assignments can result in
+% errors. This is not the best solution but makes things a lot easier.
% \begin{macrocode}
\newcommand*{\scr@ifisglue}[1]{%
\begingroup
@@ -2702,11 +2554,12 @@
}
% \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
-% zugewiesen. Wird dabei das Argument komplett aufgebraucht, so wird das
-% erste Argument nach \cs{@nil} ausgeführt, sonst das zweite. Das begrenzte
-% Argument wird in jedem Fall komplett aufgebraucht.
+% \changes{v3.20}{2015/10/21}{added}
+% Argument \texttt{\#1} delimited by \cs{@nil} is assigned to a temporary
+% \cs{skip}. If this uses the argument completely, the argument \texttt{\#2} behind
+% \cs{@nil} will executed, otherwise argument \texttt{\#3}. In any case
+% \texttt{\#1} will removed from the input totally. The difference to
+% \cs{scr@TestSkipAssignTillNil} is the \texttt{pt} test.
% \begin{macrocode}
\newcommand*\scr@TestGlueAssignTillNil{}
\def\scr@TestGlueAssignTillNil#1\@nil{%
@@ -2716,35 +2569,31 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \scr@TestGlueAssignTillNil
-% \end{macro}%^^A \scr@ifisglue
-% \end{macro}%^^A \Ifisglue
-% \end{macro}%^^A \ifisglue
+% \end{macro}^^A \scr@TestGlueAssignTillNil
+% \end{macro}^^A \scr@ifisglue
+% \end{command}^^A \ifisglue,\Ifisglue
%
%
-% \begin{macro}{\ifnumber}
+% \begin{command}{\ifnumber,\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
-% \changes{v3.27}{2019/08/26}{leere Argumente werden korrekt behandelt}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifnumber} umbenannt in \cs{Ifnumber}}%^^A
-% \begin{macro}{\Ifnumber}
-% \changes{v3.28}{2019/11/18}{Neu aus Umbenennung von \cs{ifnumber}}%^^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.
+% \cs{endgroup}\cs{expandafter}}
+% \changes{v3.12a}{2014/01/24}{white space removed}
+% \changes{v3.27}{2019/08/26}{empty arguments fixed}
+% \changes{v3.28}{2019/11/18}{\cs{ifnumber} renamed to \cs{Ifnumber}}
+% If the first argument is a positive integer, the second argument is
+% executed, otherwise the third.
% \begin{macrocode}
%<*base>
\providecommand*{\ifnumber}{%
% \end{macrocode}
-% Die Warnung darf nicht ausgegeben werden, wenn \textsf{babelbib} geladen
-% wurde, weil das Paket die Anweisung ebenfalls definiert, aber nur, wenn sie
-% nicht bereits definiert war. Dabei werden übrigens teilweise Makronamen mit
-% dem Präfix \cs{scr@} definiert, was ich gar nicht lustig finde. Überhaupt
-% geht das böse in die Hose, wenn \textsf{babelbib} vor \texttt{scrbase}
-% geladen wird, was ja durchaus passieren kann. Möglichweise werde ich daher
-% die Sonderbehandlung an dieser Stelle auch wieder entfernen, sobald ich die
-% Anleitung von \textsf{babelbib} auf \textsf{biblatex} umgestellt habe.
+% Note: We must not output the warning if package \pkg{babelbib} has been
+% loaded, because the package defines the same command but only, if it has not
+% been defined already. Unfortunately and against all conventions, it even
+% defines internal macros of \pkg*{scrbase} with prefix \cs{scr@}. This is
+% very dangerous and would result in errors, if \pkg{babelbib} is loaded
+% before \pkg*{scrbase}. Maybe I will remove this special treatment of
+% \pkg{babelbib} after switching over to \pkg{biblatex} for the \KOMAScript{}
+% manuals.
% \begin{macrocode}
\scr@ifundefinedorrelax{ver@babelbib.sty}{%
\PackageWarning{scrbase}{Usage of deprecated command
@@ -2757,7 +2606,7 @@
\Ifnumber
}
\newcommand\Ifnumber[1]{%
- \begingroup\@tempswafalse\let\scr@next\test@number
+ \begingroup\@tempswafalse\let\scr@next\scr@test@number
\IfArgIsEmpty{#1}{}{\expandafter\scr@next#1\scr@next}%
\if@tempswa
\aftergroup\@firstoftwo
@@ -2767,18 +2616,14 @@
\endgroup
}
% \end{macrocode}
-% \begin{macro}{\test@number}
-% Für den eigentlichen Test wird der erste Parameter Token für Token
-% gescannt und beurteilt.
+% \begin{macro}{\test@number,\scr@test@number}
+% \changes{v3.36}{2022/02/17}{\cs{test@number} renamed to \cs{scr@test@number}}
+% For the real test scan the first argument token by token.
% \begin{macrocode}
-\newcommand*{\test@number}[1]{%
+\newcommand*{\scr@test@number}[1]{%
\ifx \scr@next#1%
\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
-% \begin{macrocode}
\@tempcnta=\expandafter\expandafter\expandafter\number
\expandafter`#1\relax
\ifnum \@tempcnta>47
@@ -2787,9 +2632,7 @@
\else\@tempswafalse\fi
\else\@tempswafalse\fi
% \end{macrocode}
-% Das zeichenweise Scannen und Parsen kann natürlich nicht einfach
-% abgebrochen werden. Stattdessen ist der Parameterrest noch zu
-% entfernen.
+% Remove the rest, if a non-digit has been found.
% \begin{macrocode}
\if@tempswa\else\let\scr@next\gobble@till@scr@next\fi
\fi
@@ -2797,26 +2640,22 @@
}
% \end{macrocode}
% \begin{macro}{\gobble@tillscr@@next}
-% Das geschieht mit einem einzigen "`Leermacro"'.
+% Use a delimited \emph{empty} macro.
% \begin{macrocode}
\newcommand*{\gobble@till@scr@next}{}
\def\gobble@till@scr@next#1\scr@next{}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \gobble@tillscr@next
+% \end{macro}^^A \test@number, \scr@test@number
+% \end{command}^^A \ifnumber,\Ifnumber
%
-% \begin{macro}{\ifintnumber}
-% \changes{v3.12}{2013/10/30}{neu}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifintnumber} umbenannt in
-% \cs{Ifintnumber}}%^^A
-% \begin{macro}{\Ifintnumber}
-% \changes{v3.28}{2019/11/18}{neu aus Umbenennung von \cs{ifintnumber}}
-% 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
-% beliebig viele Vorzeichen erlaubt.
+% \begin{command}{\ifintnumber,\Ifintnumber}
+% \changes{v3.12}{2013/10/30}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifintnumber} renamed to
+% \cs{Ifintnumber}}
+% If the first argument is a positive or negative integer, execute the second
+% argument, otherwise the third one. There are multiple arithmetic signs allowed.
% \begin{macrocode}
%<*base>
\providecommand*{\ifintnumber}{%
@@ -2840,7 +2679,7 @@
}
% \end{macrocode}
% \begin{macro}{\scr@test@sign}
-% \changes{v3.12}{2013/10/30}{neu (intern)}%^^A
+% \changes{v3.12}{2013/10/30}{added}
% \begin{macrocode}
\newcommand*{\scr@test@sign}[1]{%
\ifx \scr@next#1
@@ -2850,7 +2689,7 @@
\else
\ifx #1+%
\else
- \def\scr@next{\let\scr@next\test@number\scr@next #1}%
+ \def\scr@next{\let\scr@next\scr@test@number\scr@next #1}%
\fi
\fi
\fi
@@ -2858,17 +2697,13 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \scr@test@sign
+% \end{command}^^A \ifintnumber,\Ifintnumber
%
-% \begin{macro}{\ifdimen}
-% \changes{v3.28}{2019/11/18}{umbenannt in \cs{Ifdimen}}%^^A
-% \begin{macro}{\Ifdimen}
-% \changes{v3.28}{2019/11/18}{neu aus Umbenennung von \cs{ifdimen}}%^^A
-% Dieses Makro testet, ob ein übergebener Parameter eine Dimension
-% ist und führt in Abhängigkeit davon den zweiten oder dritten
-% Parameter aus.
+% \begin{command}{\ifdimen,\Ifdimen}
+% \changes{v3.28}{2019/11/18}{renamed to \cs{Ifdimen}}
+% If the first argument is a dimension number, the second argument will be
+% executed, otherwise the third.
% \begin{macrocode}
%<*base>
\providecommand*{\ifdimen}{%
@@ -2881,8 +2716,8 @@
\Ifdimen
}
\newcommand{\Ifdimen}[1]{%
- \begingroup\@tempswatrue\let\scr@next\test@posdimen
- \expandafter\test@dimen#1\scr@next
+ \begingroup\@tempswatrue\let\scr@next\scr@test@posdimen
+ \expandafter\scr@test@dimen#1\scr@next
\if@tempswa
\endgroup\expandafter\@firstoftwo
\else
@@ -2890,23 +2725,22 @@
\fi
}
% \end{macrocode}
-% \begin{macro}{\test@dimen}
-% Als erste muss ein Vorzeichen entfernt werden.
+% \begin{macro}{\test@dimen,\scr@test@dimen}
+% \changes{v3.36}{2022/02/17}{\cs{test@dimen} renamed to \cs{scr@test@dimen}}
+% We have to remove the arithmetic signs.
% \begin{macrocode}
-\newcommand*{\test@dimen}[1]{%
+\newcommand*{\scr@test@dimen}[1]{%
\ifx -#1\else\ifx +#1\else
- \def\scr@next{\let\scr@next\test@posdimen\scr@next#1}\fi\fi
+ \def\scr@next{\let\scr@next\scr@test@posdimen\scr@next#1}\fi\fi
\scr@next
}
% \end{macrocode}
-% \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
-% notwendig?
+% \begin{macro}{\test@posdimen,\scr@test@posdimen}
+% \changes{v3.36}{2022/02/17}{\cs{test@posdimen} renamed to \cs{scr@test@posdimen}}
+% Is the rest a dimension. Despite this is not correct, we allow more than one
+% decimal point or decimal comma. Should this be changed?
% \begin{macrocode}
-\newcommand*{\test@posdimen}[1]{%
+\newcommand*{\scr@test@posdimen}[1]{%
\ifx \scr@next#1%
\@tempswafalse\let\scr@next\relax
\else
@@ -2915,37 +2749,33 @@
\expandafter\expandafter\expandafter\number\expandafter`#1\relax
\ifnum \@tempcnta>47
\ifnum \@tempcnta<58
- \else\def\scr@next{\test@dimunt#1}\fi
- \else\def\scr@next{\test@dimunt#1}\fi
+ \else\def\scr@next{\scr@test@dimunt#1}\fi
+ \else\def\scr@next{\scr@test@dimunt#1}\fi
\fi\fi
\fi
\scr@next
}
% \end{macrocode}
-% \begin{macro}{\test@dimunt}
-% \begin{macro}{\test@trueunt}
-% 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
-% eventuelles "`\texttt{true}"' weggeworfen.
+% \begin{macro}{\test@dimunt,\test@trueunt,\scr@test@dimunt,\scr@test@trueunt}
+% Last but not least the unit has to be tested. We have standard units and
+% true units. So we first cut of a ``\texttt{true}''.
% \begin{macrocode}
-\newcommand*{\test@dimunt}{}
-\def\test@dimunt#1\scr@next{%
- \expandafter\test@trueunt#1truetrue\test@trueunt
+\newcommand*{\scr@test@dimunt}{}
+\def\scr@test@dimunt#1\scr@next{%
+ \expandafter\scr@test@trueunt#1truetrue\scr@test@trueunt
}
-\newcommand*{\test@trueunt}{}
-\def\test@trueunt#1true#2true#3\test@trueunt{%
+\newcommand*{\scr@test@trueunt}{}
+\def\scr@test@trueunt#1true#2true#3\scr@test@trueunt{%
\edef\reserved@a{#1}%
- \ifx\reserved@a\@empty\test@@ifdimunt{#2}\else\test@@ifdimunt{#1}\fi
+ \ifx\reserved@a\@empty\scr@test@@dimunt{#2}\else\scr@test@@dimunt{#1}\fi
}
% \end{macrocode}
-% \begin{macro}{\test@@ifdimunt}
-% \changes{v3.21}{2016/05/27}{elf bis zwölf Einheiten nicht neun}
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
-% Anschließend wird dann getestet, ob es sich um eine der elf bis zwölf
-% üblichen Einheiten handelt.
+% \begin{macro}{\test@@ifdimunt,\scr@test@@dimunt}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% Currently we know eleven or twelve units. Unit \texttt{px} is only valid
+% with PDF output.
% \begin{macrocode}
-\newcommand*\test@@ifdimunt[1]{%
+\newcommand*\scr@test@@dimunt[1]{%
\@tempswafalse
\Ifstr{#1}{pt}{\@tempswatrue}{%
\Ifstr{#1}{pc}{\@tempswatrue}{%
@@ -2975,36 +2805,36 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \test@@ifdimunt,\scr@test@@dimunt
+% \end{macro}^^A \test@dimunt,\test@trueunt,\scr@test@dimunt,\scr@test@trueunt
+% \end{macro}^^A \scr@test@posdimen
+% \end{macro}^^A \scr@test@dimen
+% \end{command}^^A \ifdimen,\Ifdimen
%
%
-% \begin{macro}{\ifpdftex}
-% \changes{v2.95}{2002/08/19}{neu}%^^A
-% \changes{v3.28}{2019/11/18}{entfernt}%^^A
+% \begin{command}{\ifpdftex}
+% \changes{v2.95}{2002/08/19}{added}
+% \changes{v3.28}{2019/11/18}{removed}
+% \end{command}
% \begin{macro}{\scr@ifpdftex}
-% \changes{v2.95}{2002/08/19}{neu (intern)}%^^A
-% \changes{v3.30}{2020/03/06}{veralteten Befehl \cs{ifnotundefined} durch
-% \cs{Ifnotundefined} ersetzt}%^^A
-% If-then-else-Konstrukt, um zu testen, ob pdf\TeX{} verwendet wird.
+% \changes{v2.95}{2002/08/19}{added}
+% \changes{v3.30}{2020/03/06}{\cs{ifnotundefined} replaced by \cs{Ifnotundefined}}
+% If \pdfTeX{} is used, execute the first argument, otherwise the
+% second. Note, we do not read the arguments but delegate them to
+% \cs{Ifnotundefined}.
% \begin{macrocode}
%<*base>
\newcommand{\scr@ifpdftex}{\Ifnotundefined{pdftexversion}}
%</base>
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\scr@ifluatex}
-% \changes{v3.21}{2016/05/27}{neu (intern)}%^^A
-% \changes{v3.30}{2020/03/06}{veralteten Befehl \cs{ifnotundefined} durch
-% \cs{Ifnotundefined} ersetzt}%^^A
-% If-the-else-Konstrukt, um zu testen, ob lua\TeX{} verwendet wird.
+% \changes{v3.21}{2016/05/27}{added}
+% \changes{v3.30}{2020/03/06}{\cs{ifnotundefined} replaced by \cs{Ifnotundefined}}
+% If \LuaTeX{} is used, execute the first argument, otherwise the
+% second. Note, we do not read the arguments but delegate them to
+% \cs{Ifnotundefined}.
% \begin{macrocode}
%<*base>
\newcommand{\scr@ifluatex}{\Ifnotundefined{luatexversion}}
@@ -3013,9 +2843,10 @@
% \end{macro}
%
% \begin{macro}{\scr@ifpdforluatex}
-% \changes{v3.21}{2016/05/27}{neu (intern)}%^^A
-% If-then-else-Konstrukt, um zu testen, ob pdf\TeX{} oder lua\TeX{} verwendet
-% wird.
+% \changes{v3.21}{2016/05/27}{added}
+% If either \LuaTeX{} or \pdfTeX{} is used, execute the first argument,
+% otherwise the second. Note, we do not read the arguments but delegate them
+% to \cs{@firstoftwo} and \cs{@secondoftwo}.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifpdforluatex}{%
@@ -3025,42 +2856,41 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\ifVTeX}
-% \changes{v2.95}{2002/08/19}{neu}%^^A
-% \changes{v2.97c}{2007/06/20}{umdefiniert von \cs{ifvtex}}%^^A
-% \changes{v3.28}{2019/11/18}{entfernt}%^^A
-% \begin{macro}{\scr@ifVTeX}
-% \changes{v2.95}{2002/08/19}{neu}%^^A
-% \changes{v2.97c}{2007/06/20}{umdefiniert von \cs{scr@ifvtex}}
-% \changes{v3.30}{2020/03/06}{veralteten Befehl \cs{ifnotundefined} durch
-% \cs{Ifnotundefined} ersetzt}%^^A
-% If-then-else-Konstrukt, um zu testen, ob V\TeX{} verwendet wird.
+% \begin{command}{\ifvtex,\ifVTeX}
+% \changes{v2.95}{2002/08/19}{added}
+% \changes{v2.97c}{2007/06/20}{\cs{ifvtex} renamed to \cs{ifVTeX}}
+% \changes{v3.28}{2019/11/18}{removed}
+% \end{command}
+% \begin{macro}{\scr@ifvtex,\scr@ifVTeX}
+% \changes{v2.95}{2002/08/19}{added}
+% \changes{v2.97c}{2007/06/20}{\cs{scr@ifvtex} renamed to \cs{scr@ifVTeX}}
+% \changes{v3.30}{2020/03/06}{\cs{ifnotundefined} replaced by \cs{Ifnotundefined}}
+% If \VTeX{} is used, execute the first argument, otherwise the
+% second. Note, we do not read the arguments but delegate them to
+% \cs{Ifnotundefined}.
% \begin{macrocode}
%<*base>
\newcommand{\scr@ifVTeX}{\Ifnotundefined{VTeXversion}}
%</base>
% \end{macrocode}
% \end{macro}
-% \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
-% \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}}%^^A
-% \changes{v3.28}{2019/11/18}{Umbenannt in \cs{Ifpdfoutput}}%^^A
-% \begin{macro}{\Ifpdfoutput}
-% \changes{v3.28}{2019/11/18}{Neu aus Umbenennung von \cs{ifpdfoutput}}%^^A
+% \begin{command}{\ifpdfoutput,\Ifpdfoutput}
+% \changes{v2.7g}{2001/04/17}{added}
+% \changes{v2.8q}{2001/10/19}{\cs{pdfoutput} does not become \cs{relax} if it
+% was undefined before}
+% \changes{v2.8q}{2001/10/19}{\cs{ifpdfoutput} is only defined if new}
+% \changes{v2.8q}{2001/10/19}{usage of \cs{scr@ifpdfoutput}}
+% \changes{v3.28}{2019/11/18}{\cs{ifpdfoutput} renamed to \cs{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}{added}
+% \changes{v2.8q}{2001/11/13}{full functional}
+% \changes{v2.95}{2002/08/21}{knowing \VTeX}
+% \changes{v2.95}{2004/07/20}{expandable}
+% \changes{v3.21}{2016/05/27}{works for \LuaTeX{} after version 0.85}
+% If the output (currently) produces a PDF, the first argument is executed,
+% otherwise the second one. This macro is used inside the implementation of
+% option \opt{pagesize}, so we cannot remove it or declare it as deprecated.
% \begin{macrocode}
%<*base>
\newcommand{\scr@ifpdfoutput}{%
@@ -3103,21 +2933,19 @@
%</base>
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\ifpsoutput}
-% \changes{v2.95}{2002/08/21}{neu}%^^A
-% \changes{v3.28}{2019/11/18}{umbenannt in \cs{Ifpsoutput}}%^^A
-% \begin{macro}{\Ifpsoutput}
-% \changes{v3.28}{2019/11/18}{neu aus Umbenennung von \cs{ifpsoutput}}%^^A
+% \begin{command}{\ifpsoutput,\Ifpsoutput}
+% \changes{v2.95}{2002/08/21}{added}
+% \changes{v3.28}{2019/11/18}{renamed to \cs{Ifpsoutput}}
% \begin{macro}{\scr@ifpsoutput}
-% \changes{v2.95}{2002/08/21}{neu (intern)}%^^A
-% \changes{v2.95}{2004/07/20}{Expandierbarkeit verbessert}%^^A
-% \changes{v3.30}{2020/03/06}{veralteten Befehl \cs{ifnotundefined} durch
-% \cs{Ifnotundefined} ersetzt}%^^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}{added}
+% \changes{v2.95}{2004/07/20}{expandable}
+% \changes{v3.30}{2020/03/06}{\cs{ifnotundefined} replaced by \cs{Ifnotundefined}}
+% If the output is (currently) expected to be PS some time, the first argument
+% is executed, otherwise the second one. This macro is used inside the
+% implementation of option \opt{pagesize}, so we cannot remove it or declare
+% it as deprecated.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifpsoutput}{%
@@ -3152,20 +2980,18 @@
%</base>
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\ifdvioutput}
-% \changes{v2.95}{2002/08/21}{neu}%^^A
-% \changes{v3.28}{2019/11/18}{umbenannt in \cs{Ifdvioutput}}%^^A
-% \begin{macro}{\Ifdvioutput}
-% \changes{v3.28}{2019/11/18}{neu aus Umbenennung von \cs{ifdvioutput}}%^^A
+% \begin{command}{\ifdvioutput,\Ifdvioutput}
+% \changes{v2.95}{2002/08/21}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifdvioutput} renamed to \cs{Ifdvioutput}}
% \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}{added}
+% \changes{v2.95}{2004/07/20}{expandable}
+% \changes{v3.23}{2017/02/14}{works for \LuaTeX{} after version 0.85}
+% If the output (currently) produces a DVI, the first argument is executed,
+% otherwise the second one. This macro is used inside the implementation of
+% option \opt{pagesize}, so we cannot remove it or declare it as deprecated.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifdvioutput}{%
@@ -3208,20 +3034,24 @@
%</base>
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{command}
%
% \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
-% \textsf{amsmath} das inkompatibel umdefiniert}
-% Gibt Material aus, erzeugt dabei aber nur Höhe und Breite, jedoch keine
-% Tiefe.
+% \changes{v2.97c}{2007/09/17}{added}
+% \changes{v3.02a}{2009/01/23}{using own definition instead of \cs{smash}}
+% \changes{v3.36}{2022/02/18}{as robust as \cs{smash}}
+% Generate a box and output it with height and width but no depth. Note: Using
+% internal macros \cs{finsm@sh}, \cs{mathsm@sh} and \cs{makesm@ash} from the
+% \LaTeX{} kernel is a very ugly hack and dangerous. Using \cs{smash} itself
+% would be problematic, because \pkg{amsmath} redefines it and the new
+% definition is not fully compatible. But maybe a better definition could be
+% found depending on, whether \pkg{amsmath} has been loaded or not.
% \begin{macrocode}
%<*base>
-\newcommand*{\scr@smashdp}[1]{%
+\DeclareRobustCommand{\scr@smashdp}[1]{%
+ \relax
\begingroup
- \def\finsm@sh{\dp\z@\z@\box\z@}%
+ \def\finsm@sh{\dp\z@\z@ \leavevmode\box\z@}%
\ifmmode
\expandafter\mathpalette\expandafter\mathsm@sh
\else
@@ -3234,11 +3064,11 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\IfRTL}
-% \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.
+% \begin{command}{\IfRTL}
+% \changes{v3.24}{2017/05/04}{added}
+% \changes{v3.36}{2022/02/18}{white space removed}
+% If we are in the right-to-left mode of a package like \pkg{bidi} the first
+% argument will be used otherwise the second one.
% \begin{macrocode}
%<*base>
\newcommand*{\IfRTL}{%
@@ -3249,16 +3079,17 @@
\else
\expandafter\@secondoftwo
\fi
- }
+ }%
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \IfRTL
-% \begin{macro}{\IfLTR}
-% \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.
+% \end{command}^^A \IfRTL
+% \begin{command}{\IfLTR}
+% \changes{v3.24}{2017/05/04}{added}
+% \changes{v3.36}{2022/02/18}{white space removed}
+% If we are not in the right-to-left mode of a package like \pkg{bidi} any
+% kind of left-to-right mode is assumed and the first argument is used,
+% otherwise the second one.
% \begin{macrocode}
%<*base>
\newcommand*{\IfLTR}{%
@@ -3269,15 +3100,15 @@
\else
\expandafter\@firstoftwo
\fi
- }
+ }%
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \IfLTR
+% \end{command}^^A \IfLTR
%
-% \begin{macro}{\PackageInfoNoLine}
-% \changes{v2.97d}{2007/10/03}{neu}%^^A
-% Arbeitet wie \cs{PackageInfo} aber ohne Ausgabe der Zeilennummer.
+% \begin{command}{\PackageInfoNoLine}
+% \changes{v2.97d}{2007/10/03}{added}
+% Like \cs{PackageInfo} but without output of line number at the end.
% \begin{macrocode}
%<*base>
\providecommand*{\PackageInfoNoLine}[2]{%
@@ -3285,11 +3116,11 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\ClassInfoNoLine}
-% \changes{v2.98c}{2008/02/15}{neu}%^^A
-% Arbeitet wie \cs{ClassInfo} aber ohne Ausgabe der Zeilennummer.
+% \begin{command}{\ClassInfoNoLine}
+% \changes{v2.98c}{2008/02/15}{added}
+% Like \cs{ClassInfo} but without output of line number at the end.
% \begin{macrocode}
%<*base>
\providecommand*{\ClassInfoNoLine}[2]{%
@@ -3297,16 +3128,12 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
% \begin{macro}{\@removefromreset}
-% \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
-% auf andere Pakete zu verlassen. Ab \LaTeX~2018-04-01 ist das aber auch
-% Bestandteil von \LaTeX. Deshalb ist es in jedem Fall sinnvoll die Definition
-% nur vorzunehmen, wenn es nicht definiert ist.
+% \changes{v3.15}{2014/11/21}{added}%
+% For \LaTeX{} releases before 2018/04/01 and without using a package like
+% \pkg{remreset} or \pkg{chngcntr} we still need \cs{@removefromreset}.
% \begin{macrocode}
%<*base>
\providecommand*\@removefromreset[2]{%
@@ -3323,12 +3150,11 @@
% \end{macrocode}
% \end{macro}
%
-% \selectlanguage{english}%
-% \begin{macro}{\IfActiveMkBoth}
-% \changes{v3.26}{2018/09/03}{new}%^^A
+% \begin{command}{\IfActiveMkBoth}
+% \changes{v3.26}{2018/09/03}{added}
% \begin{macro}{\if@scrActiveMkBoth}
-% \changes{v3.26}{2018/09/03}{new}%^^A
-% \changes{v3.27}{2019/07/26}{handling for \cs{marks}}%^^A
+% \changes{v3.26}{2018/09/03}{added}
+% \changes{v3.27}{2019/07/26}{handling for \cs{marks}}
% This command test, whether or not \cs{@mkboth} does change a mark or not.
% \begin{macrocode}
%<*base>
@@ -3355,31 +3181,27 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A\if@scrActiveMkBoth
-% \end{macro}%^^A\IfActiveMkBoth
-% \selectlanguage{ngerman}%
-%
-% \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
+% \end{macro}^^A \if@scrActiveMkBoth
+% \end{command}^^A \IfActiveMkBoth
+%
+%
+% \subsection{Definition of the \KOMAScript{} \pkg*{keyval} main handling}
+%
+% \begin{command}{\FamilyExecuteOptions}
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.04b}{2010/01/29}{\cs{edef} replaced by \cs{protected@edef}}
+% \changes{v3.04b}{2010/02/02}{prevent overwriting of \cs{scr@key@atlist} and
+% \cs{scr@key@name} in \cs{setkeys}}
+% \changes{v3.12}{2013/03/04}{re-implemented}
+% \changes{v3.12}{2013/03/04}{can be used after document preamble}
+% \changes{v3.14}{2014/10/17}{third argument is \cs{long}}
% \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.27}{2019/10/02}{Fehlermeldungen verbessert}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^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.
+% \changes{v3.14}{2014/10/17}{new}
+% \changes{v3.23}{2017/02/16}{fix: hook after uses family instead of member}
+% \changes{v3.27}{2019/10/02}{improved error message}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% Similar to \cs{ExecuteOptions} but with \pkg{keyval} options. The command
+% also is re-entrant. Note: The hooks are local to every usage.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyExecuteOptions}[2][.\@currname.\@currext]{%
@@ -3405,11 +3227,10 @@
\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
-% 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.
+% \changes{v3.20}{2015/11/18}{special treatment of \opt{@else@} option}
+% Neither family nor member option found. But maybe special option
+% \opt{@else@} exists. In this case the current option is set as value of
+% \opt{@else@}.
% \begin{macrocode}
\scr@ifundefinedorrelax{KV@#2#1@@else@}{%
\PackageError{scrbase}{%
@@ -3427,10 +3248,9 @@
}{%
\scr@execute@elseoption{#2#1}%
% \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 als Fehler zu melden ist.
+% In difference to other options, for \opt{@else@} all states different from
+% \cs{FamilyKeyStateProcessed} have to be reported as error of the
+% current/original option.
% \begin{macrocode}
\ifx\FamilyKeyState\FamilyKeyStateProcessed\else
\PackageError{scrbase}{%
@@ -3457,13 +3277,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
-% Ergebnisse nicht zu einer Fehlermeldung.
+% \changes{v3.20}{2015/11/18}{member option test after execution of family
+% option fixed}
+% If a family option has been found and executed an existing member option
+% still has to be executed. If no member option exists, also an existing
+% \opt{@else@} option of the member has to been used. But in this case, the
+% states different from \cs{FamilyKeyStateProcessed} are not errors.
% \begin{macrocode}
\scr@ifundefinedorrelax{KV@#2#1@\scr@key@name}{%
\scr@ifundefinedorrelax{KV@#2#1@@else@}{}{%
@@ -3488,16 +3307,15 @@
%</base>
% \end{macrocode}
% \begin{macro}{\scr@show@key@state@error}
-% \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.
+% \changes{v3.12}{2013/03/04}{added}
+% \changes{v3.27}{2019/10/02}{improved error message}
+% Show depending on \cs{FamilyKeyState} a error message. All information to
+% the error has to be set to \cs{FamilyMemberOfKey} (member or \cs{@empty}),
+% \cs{FamilyOfKey} (family or \cs{@empty}), \cs{scr@key@atlest} (option as it
+% was in the option list), \cs{scr@key@name} (\meta{key} of the option), and
+% \cs{scr@key@value} (\meta{value} of the option). Note: \cs{scr@key@atlist}
+% and \cs{scr@key@value} can contain macros and will be output using
+% \cs{detokenize}.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@show@key@state@error}{%
@@ -3534,16 +3352,21 @@
}
%</base>
% \end{macrocode}
-% \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.
+% \end{macro}^^A \scr@show@key@state@error
+% \end{macro}^^A \@FamilyExecuteOptions
+% \end{command}^^A \FamilyExecuteOptions
+%
+% \begin{command}{\KOMAExecuteOptions}
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v3.00}{2008/04/30}{no optional argument}
+% \changes{v3.12}{2013/03/04}{can be used after the document preamble}
+% Executes a \meta{list of options} (\texttt{\#3}) of a \meta{member} (optional
+% \texttt{\#1}) of a \meta{family} (\texttt{\#2}). The default for the
+% \meta{member} is \file{.\cs{@currname}.\cs{@currext}}. Note: If
+% \cs{KOMAExcuteOptions} is not used while loading a class or package, the
+% optional first argument is not optional, but has to be set correctly! And
+% because filenames can be changed, it is recommended to \emph{always} use the
+% optional argument to set a definite \meta{member}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAExecuteOptions}[1][.\@currname.\@currext]{%
@@ -3551,25 +3374,26 @@
}
%</koma>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \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
+% \begin{command}{\FamilyOptions}
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.12}{2013/03/02}{re-implemented}
+% \changes{v3.12}{2013/03/02}{\cs{scr@after@options@\#1@hook}}
+% \changes{v3.14}{2014/10/17}{second argument is \cs{long}}
% \begin{macro}{\@FamilyOptions}
-% \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}%^^A
-% \changes{v3.27}{2019/10/02}{Fehlermeldungen verbessert}%^^A
+% \changes{v3.14}[2014/10/17]{added}
+% \changes{v3.27}{2019/10/02}{improved error message}
% \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}{added}
+% \changes{v3.12}{2013/03/04}{removed}
+% \end{macro}^^A \Family@Options
+% Used to set the options of a family. The first argument (\texttt{\#1}) is
+% the \meta{family} and the second (\texttt{\#2}) a \meta{list of options}. If
+% a \meta{key} or a \meta{value} to a \meta{key} in the \meta{list of options}
+% does not exist, an error is reported. The command itself is re-entrant, so
+% it can be used inside the definition of an option. But in this case the hook
+% is local to the local usage of the command.
% \begin{macrocode}
%<*base>
\newcommand{\FamilyOptions}[1]{\@FamilyOptions{#1}}
@@ -3587,24 +3411,22 @@
}%
}%
% \end{macrocode}
-% \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
-% Vorinitialisierung statt, bei der der Haken lediglich leer definiert wird,
-% falls er noch nicht existiert. Falls er nämlich existiert, kann an einem
-% leeren Haken die oberste Ebene erkannt werden.
+% \changes{v3.23}{2017/02/16}{\cs{AtEndOfFamilyOptions*} hook added}
+% From version 3.23 the new hook before \cs{AtEndOfFamilyOptions*} has to be
+% initialized. First step is a kind of pre-initialization: The hook is
+% defined empty, if it does not already exist. So if the hook exists empty we
+% can now recognize the top level of using \cs{FamilyOptions}.
% \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
-% 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
-% eindeutig unterscheiden.
+% Now, if we recognize the top level, because of an empty hook, the execution
+% of the hook to the normal level hook (which is the top level hook in this
+% case) is added. Additionally the self destruction code is added to the very
+% beginning of the hook. Because of the self destruction hook the hook itself
+% it no longer empty. So deeper levels distinguish from the top level. Because
+% the hook is not empty any longer.
% \begin{macrocode}
\expandafter\ifx\csname scr@after@options@#1@hook@topmost\endcsname\@empty
\expandafter\l@addto@macro\csname scr@after@options@#1@hook\endcsname{%
@@ -3616,70 +3438,64 @@
\fi
% \end{macrocode}
% \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
-% mir aber hier gar nicht.
+% \item[Note:] We do not use \pkg{xkeyval} and its \cs{setkeys+}, because this
+% would not execute the options in the order of the options but in the order
+% of the families, which is not intuitive and therefore not what we want.
% \end{description}
-% In einer Schleife über alle Optionen werden die Optionen zunächst in Option
-% und Wert aufgespaltet.
+% We use a loop over all \meta{option}s in the \meta{list of options} to
+% split each \meta{option} into \meta{key} and \meta{value}.
% \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
-% Kommas diret aufeinander folgen:
+% \changes{v3.08}{2010/11/05}{empty options in the list are ignored}
+% Despite they do not make any sense empty \emph{options} are allowed and
+% ignored. This would at first mean two consecutive commas.
% \begin{macrocode}
\ifx\scr@key@atlist\@empty\else
% \end{macrocode}
-% Die zweite Möglichkeit wäre, dass noch Leerzeichen zwischen den Komma
-% übrig bleiben:
+% But there also can be white spaces between the commas.
% \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
-% Anwender auch mal ihre Fehler einsehen und korrigieren!
-%
-% 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
-% Jetzt speichern wir den Gesamtstatus einfach, indem der Fehlerspeicher
-% 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.
+% The third possibility would be a single equal sign. But in my opinion this
+% would be a mistake and therefore an error. So now, we have an \opt{option}
+% splitted into a \meta{key} and a \meta{value} (which can be empty).
+% \changes{v3.12}{2013/03/04}{storing the overall state}
+% Now, we are storing the overall state by emptying the error storage. If the
+% error storage is \cs{relax} it is not needed any longer. Both, \cs{relax}
+% and \cs{@empty} means no error. All other cases the error storage contains
+% all the errors to be reported.
% \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
-% von \cs{unexpanded}}
-% 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
+% \changes{v3.04b}{2010/01/29}{\cs{edef} replaced by \cs{protected@edef}}
+% \changes{v3.09a}{2011/06/07}{less number of expansions by improved usage of
+% \cs{unexpanded}}
+% Next a loop over the members is used, to detect members, that have the
+% \meta{key}. In this case the member option is executed. Note: The execution
+% of an option must not change any of the internal macros with the \meta{key},
+% \meta{value}, \meta{option} or \meta{list of options}
+% information. Additionally the states and the resulting messages have to been
+% collected. Here it is useful to have \cs{\meta{family}@key@familylist}, a
+% list of family + member and not only of members.
+% \changes{v3.27}{2019/07/19}{family options are executed first}
% \begin{macrocode}
\scr@key@found@false
\edef\reserved@a{#1,\csname #1@key@familylist\endcsname}%
\@for\reserved@a:=\reserved@a\do{%
\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.
+% \changes{v3.27}{2019/07/19}{treatment of \opt{@else@} options}
+% If a family member does not have the current option, there still may be a
+% \opt{@else@} option. In this case the \opt{@else@} option gets the current
+% \meta{option} as value and is executed. But this changes the error storage
+% only, if it was successful. In this case, the error storage has to become
+% empty. But the \opt{@else@} must not be executed here, if the current member
+% is the empty one, which represents the family itself. This will be done
+% later and only, if no one of the members have had the option itself or a
+% \opt{@else@} option. So the family \opt{@else@} option is only used, if the
+% option has not been successfully processed by any member in any kind.
% \begin{macrocode}
\Ifstr{\reserved@a}{#1}{}{%
\scr@ifundefinedorrelax{KV@\reserved@a @@else@}{}{%
@@ -3692,8 +3508,8 @@
}%
}{%
% \end{macrocode}
-% Wurde hingegen eine Option für ein Familienmitglied gefunden, so wird sie
-% ausgeführt und bei Bedarf der Fehlerspeicher angepasst.
+% If the option has been found for a member, it is executed and the error
+% storage is updated.
% \begin{macrocode}
\expandafter\scr@execute@option\expandafter{\reserved@a}%
\scr@key@found@true
@@ -3731,9 +3547,9 @@
\ifx\scr@key@run@errors\relax\else
\ifx\scr@key@run@errors\@empty\else
% \end{macrocode}
-% \changes{v3.28}{2019/11/23}{Fehlermeldungen und Infos korrigiert}%^^A
-% Jetzt muss gegebenenfalls noch eine \texttt{@else@} Option behandelt und
-% abhängig davon entweder ein Fehler oder eine Info ausgegeben werden.
+% \changes{v3.28}{2019/11/23}{error messages and info fixed}
+% Now, an existing \opt{@else@} option has to be used and either an error or
+% info has to be shown.
% \begin{macrocode}
\scr@ifundefinedorrelax{KV@#1@@else@}{%
\PackageError{scrbase}{%
@@ -3828,16 +3644,13 @@
}
% \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
-% erste Argument ist bereits der Besitzer in \textsf{keyval}-Syntax.
+% \changes{v3.12}{2013/03/04}{added}
+% \changes{v3.13}{2014/06/30}{missing \cs{expandafter} in \cs{PackageInfo} added}
+% \changes{v3.13a}{2014/08/13}{white spaces removed}
+% \changes{v3.23}{2017/02/16}{it does not help to save the
+% \cs{AtEndOfFamilyOptions} hook}
+% A split \opt{option} is executed, without changing any relevant macros (but
+% \cs{reserved@a}). The first argument is the complete set in \pkg{keyval} syntax.
% \begin{macrocode}
\newcommand*{\scr@execute@option}[1]{%
\protected@edef\reserved@a{%
@@ -3880,44 +3693,43 @@
}
% \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}
% We just have to signal, that the option needs a value, that is missing.
% \begin{macrocode}
\newcommand*{\scr@KV@err}[1]{%
\FamilyKeyStateNeedValue
}
% \end{macrocode}
-% \end{macro}
+% \end{macro}^^A \scr@KV@err
% \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
-% Option verarbeiten konnte. Wir definieren das hier, damit oben die
-% Wiederherstellung korrekt funktioniert.
+% \changes{v3.12}{2013/03/04}{added}
+% Needed by \cs{FamilyOptions} to collect the error messages, but report the
+% error only, if no member has successfully processed the option. We define it
+% here to make the re-definition in the previous code does work without error.
% \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.25}{2017/11/16}{\cs{scr@key@name@else} und
-% \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
-% 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
-% 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
-% \cs{scr@key@name@else} und \cs{scr@key@value@else} gespeichert.
+% \changes{v3.20}{2015/11/18}{added}
+% \changes{v3.25}{2017/11/16}{group added}
+% \changes{v3.25}{2017/11/16}{\cs{scr@key@name@else} and
+% \cs{scr@key@value@else} added}
+% \changes{v3.27}{2019/03/10}{missing percent added to avoid spaces}
+% If a special option \opt{@else@} has been defined, it is executed by
+% \cs{FamilyExecuteOptions} if and only if no other suitable option has been
+% found. This is done by \cs{scr@execute@elseoption}. The argument and
+% resulting state are exactly the same as with \cs{scr@execute@option}. It
+% also have to do the same, but it does not call the option, but the
+% \opt{@else@} option. The option itself is used as \meta{value} of the
+% \opt{@else@} option. So temporary \cs{scr@key@atlist}, \cs{scr@key@name} and
+% \cs{scr@key@value} have to be changed, before calling
+% \cs{scr@execute@option}. To avoid once again splitting the \meta{value} into
+% an internal \meta{key} and \meta{value} the original \cs{scr@key@name} and
+% \cs{scr@key@value} are copied to \cs{scr@key@name@else} and
+% \cs{scr@key@value@else}. These can be used inside the code of the
+% \opt{@else@} option.
% \begin{macrocode}
\newcommand*{\scr@execute@elseoption}[1]{%
\begingroup
@@ -3956,27 +3768,27 @@
}\reserved@a
}
% \end{macrocode}
-% \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
-% \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
-% \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
-% \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
-% \begin{macro}{\scr@key@split@name@value}
-% \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
-% \changes{v3.26}{2018/08/29}{Verwendung von \cs{scr@sp@def} statt
-% \cs{KV@@sp@def}}%^^A
+% \end{macro}^^A \scr@execute@elseoption
+% \begin{macro}{\KOMA@key@foundtrue,\KOMA@key@foundfalse,\ifKOMA@key@found,
+% \scr@key@found@true,\scr@key@found@false,\ifscr@key@found@}
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v3.00}{2008/04/30}{\cs{ifKOMA@key@found} renamed to \cs{ifscr@key@found}}
+% \begin{macro}{\KOMA@key@at@list,\scr@key@atlist}
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v3.00}{2008/04/30}{\cs{KOMA@key@atlist} renamed to \cs{scr@key@atlist}}
+% \begin{macro}{\KOMA@key@name,\scr@key@name}
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v3.00}{2008/04/30}{\cs{KOMA@key@name} renamed to \cs{scr@key@name}}
+% \begin{macro}{\KOMA@key@value,\scr@key@value}
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v3.00}{2008/04/30}{\cs{KOMA@key@value} renamed to \cs{scr@key@value}}
+% \begin{macro}{\KOMA@key@split@name@value,\scr@key@split@name@value}
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v2.97e}{2007/11/10}{using \cs{KV@@sp@def} to remove white spaces}
+% \changes{v3.00}{2008/04/30}{\cs{KOMA@key@split@name@value} renamed to
+% \cs{scr@key@split@name@value}}
+% \changes{v3.13}{2014/10/17}{\cs{long}}
+% \changes{v3.26}{2018/08/29}{using \cs{scr@sp@def} instead of \cs{KV@@sp@def}}
% \begin{macrocode}
\newif\ifscr@key@found@
\newcommand*{\scr@key@atlist}{}
@@ -3989,30 +3801,29 @@
}
%</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
-%
-% \begin{macro}{\FamilyOption}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
-% \changes{v3.26b}{2019/01/09}{Tyischen Fehler abgefangen}%^^A
+% \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 \ifscr@key@found@
+% \end{command}^^A \FamilyOptions
+%
+% \begin{command}{\FamilyOption}
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.26b}{2019/01/09}{handling of typical user mistakes}
% \begin{macro}{\@FamilyOptions}
-% \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
+% \changes{v3.14}[2014/10/17]{added}
+% \changes{v3.26}{2018/08/29}{using \cs{scr@sp@def} instead of \cs{KV@@sp@def}}
% \begin{macro}{\Family@Option}
-% \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
-% wieder die Familie, das zweite obligatorische Argument ist die Option, das
-% dritte, obligatorische Argument ist die Liste der Werte für diese Option.
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.12}{2013/03/04}{removed}
+% \end{macro}^^A \Family@Option
+% \changes{v3.04b}{2010/01/29}{\cs{edef} replaced by \cs{protected@edef}}
+% In opposite to \cs{FamilyOptions} this command sets only one \meta{option}
+% (\texttt{\#2}) of a \meta{family} (\texttt{\#1}). But you can set it to a
+% \meta{list of values} (\texttt{\#3}). The values are set in the order of the
+% \meta{list of values}.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyOption}[2]{%
@@ -4063,20 +3874,21 @@
\newcommand{\@FamilyOption}[3]{%
\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.
+% The most simply solution is to walk through the \meta{list of values} and
+% generate a \meta{list of options} for \cs{FamilyOptions}.
% \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
-% Argumente in der Werteliste erlaubt, werden jedoch ignoriert:
+% \changes{v3.08}{2010/11/05}{allow empty values}
+% Empty elements in the \meta{list of values} are ignored. Note: This is not
+% really the correct solution but several users expect it. So for a real empty
+% value you need to use |{}|.
% \begin{macrocode}
\ifx\reserved@b\@empty\else
% \end{macrocode}
-% \changes{v3.12}{2012/03/04}{auch Leerzeichenargumente werden ignoriert}%^^A
-% Auch Argumente, die nur aus einem Leerzeichen bestehen, werden ignoriert:
+% \changes{v3.12}{2012/03/04}{ignore white space values}
+% The same for white space values.
% \begin{macrocode}
\ifx\reserved@b\space\else
\edef\reserved@a{\unexpanded\expandafter{\reserved@a},%
@@ -4090,34 +3902,32 @@
%</base>
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{command}
%
-% \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
-% verwendent}
-% Simple kleine Abkürzung.
+% \begin{command}{\KOMAoptions}
+% \changes{v2.96}{2006/08/20}{hook after options added}
+% \changes{v2.97c}{2007/04/19}{process options of all members}
+% \changes{v3.12}{2013/03/04}{using hooks of \cs{FamilyOptions}}
+% Nice little shortcut.
% \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
-%
-% \begin{macro}{\KOMAoptionsOf}
-% \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
-% (nicht optionale Argument) ist der Name eines KOMA-Script-Pakets oder einer
-% KOMA-Script-Klasse einschließlich Dateiendung.
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v3.12}{2013/03/04}{removed}
+% \end{macro}^^A \KOMA@options
+% \end{command}^^A \KOMAoptions
+%
+% \begin{command}{\KOMAoptionsOf}
+% \changes{v3.17}{2015/02/25}{added}
+% Ask for the currently set options of a supporting \KOMAScript{} class or
+% package. The optional first argument (\texttt{\#1}) is a command or macro,
+% that will be execute with the list of options as an argument. The second
+% argument (\texttt{\#2}) is the filename of a \KOMAScript{} class or package
+% (with extension). Without optional argument, the \meta{list of options} are
+% be printed.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAoptionsOf}[2][\@firstofone]{%
@@ -4135,17 +3945,17 @@
}
%</koma>
% \end{macrocode}
-% \end{macro}%^^A \KOMAoptionsOf
+% \end{command}^^A \KOMAoptionsOf
%
-% \begin{macro}{\KOMAoptionOf}
-% \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
-% (nicht optionale Argument) ist der Name eines KOMA-Script-Pakets oder einer
-% KOMA-Script-Klasse einschließlich Dateiendung, das dritte (nicht optionale
-% Argument) ist der Name der Option, die abgefragt werden soll.
+% \begin{command}{\KOMAoptionOf}
+% \changes{v3.17}{2015/02/26}{added}
+% Ask for the current values of one option of a supporting \KOMAScript{} class
+% or package. Again the optional first argument (\texttt{\#1}) is a command or
+% macro, that will be execute with the list of values as an argument. The second
+% argument (\texttt{\#2}) is the filename of a \KOMAScript{} class or package
+% (with extension). The third argument (\texttt{\#3}) is the name of an
+% option of the class resp. package. Without optional argument, the \meta{list of
+% values} are be printed.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAoptionOf}[3][\@firstofone]{%
@@ -4168,33 +3978,32 @@
}
%</koma>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
% \begin{macro}{\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}{removed}
+% \end{macro}^^A \post@kopt@hook
+% \begin{command}{\AfterKOMAoptions}
+% \changes{v3.12}{2013/03/04}{using \cs{AtEndOfFamilyOptions}}
+% \changes{v3.23}{2017/02/16}{\cs{newcommand} instead of \cs{let}}
+% An option can process code after executing all options of the current
+% \cs{KOMAoptions}.
% \begin{macrocode}
%<*koma>
\newcommand*{\AfterKOMAoptions}{\AtEndOfFamilyOptions}
%</koma>
% \end{macrocode}
-% \end{macro}%^^A \AfterKOMAoptions
+% \end{command}^^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
-% von \cs{l@addto@macro} entdeckt wird}
-% \changes{v3.23}{2017/02/16}{in den Optionen-Teil verschoben}%^^A
+% \changes{v2.8p}{2001/09/22}{added}
+% \changes{v2.95}{2006/06/02}{changed to handle macros with arguments same
+% like \cs{g@addto@macro}}
+% \changes{v3.12}{2013/04/20}{removed non-\eTeX{} implementation}
+% \changes{v3.12}{2013/04/20}{warn, if \cs{l@addto@macro} is already defined
+% different from our definition}
+% \changes{v3.23}{2017/02/16}{moved to \texttt{prepare}}
+% We need a local variant of \cs{g@addto@macro}.
% \begin{macrocode}
%</body>
%<*base&prepare>
@@ -4229,14 +4038,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
-% Anweisung erweitert werden soll, die genau ein obligatorisches Argument
-% benötigt. Achtung! Diese Anweisung funktioniert deutlich weniger allgemein
-% als \cs{l@addto@macro} und wird deshalb nie offiziell dokumentiert!
+% \changes{v3.20}{2015/11/20}{added}
+% I also need a version for macros with exactly one argument. Note: This macro
+% is dangerous. Sometimes it does not work correctly, so there is not an will
+% not be an official documentation.
% \begin{macrocode}
%<*base>
\begingroup
@@ -4271,12 +4079,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
-% In gewisser Weise das gleiche wie \cs{l@appto@macro}, allerdings wird vorn
-% statt hinten angefügt.
+% \changes{v3.20}{2015/11/25}{added}
+% Similar to \cs{l@addto@macro} but adds code at the very beginning instead of
+% appending it a the end.
% \begin{macrocode}
%<*base>
\newcommand\l@preto@macro[2]{%
@@ -4284,14 +4092,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
-% Anweisung erweitert werden soll, die genau ein obligatorisches Argument
-% benötigt. Achtung! Diese Anweisung funktioniert deutlich weniger allgemein
-% als \cs{l@preto@macro} und wird deshalb nie offiziell dokumentiert!
+% \changes{v3.20}{2015/11/25}{added}
+% I also need a version for macros with exactly one argument. Note: This macro
+% is dangerous. Sometimes it does not work correctly, so there is not an will
+% not be an official documentation.
% \begin{macrocode}
%<*base>
\begingroup
@@ -4326,27 +4133,27 @@
\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}}
+% \begin{command}{\KOMAoption}
+% \changes{v2.98c}{2008/03/12}{added}
+% \changes{v3.12}{2013/03/04}{using \cs{FamilyOption}}
+% Simple little shortcut.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMAoption}{\FamilyOption{KOMA}}
%</koma>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\FamilyUnknownKeyValue}
-% \changes{v3.10}{2011/09/12}{no error while processing global options}%^^A
+% \begin{command}{\FamilyUnknownKeyValue}
+% \changes{v3.10}{2011/09/12}{no error while processing global options}
% \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
-% \changes{v3.30}{2020/02/25}{spurious space in warning message removed}%^^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.
+% options globally}
+% \changes{v3.14}{2014/10/17}{\cs{long}}
+% \changes{v3.30}{2020/02/25}{spurious space in warning message removed}
+% Used to report an error because of unknown values. Arguments are
+% \marg{family}\marg{key}\marg{valid values}.
% \begin{macrocode}
%<*base>
\newcommand{\FamilyUnknownKeyValue}[4]{%
@@ -4363,29 +4170,29 @@
}
%</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
-% 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
-% diese Anweisung jedoch nicht mehr ausgewertet.
+% \begin{command}{\FamilyElseValues}
+% \changes{v3.00}{2008/05/02}{added}
+% \changes{v3.12}{2013/03/04}{deprecated and not used internally}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyElseValues}{}
%</base>
% \end{macrocode}
-% \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.
-% Das erste, optionale Argument ist das Familienmitglied, das zweite,
-% obligatorische Argument ist die Familie, das dritte der Name des Schlüssels,
-% das vierte der Schalter.
+% \end{command}^^A \FamilyUnknownKeyValue
+% \end{command}^^A \FamilyElseValue
+%
+% \begin{command}{\FamilyBoolKey}
+% \changes{v3.00}{2008/04/30}{added}
+% Defining a new boolean key:
+% \begin{quote}
+% \cs{FamilyBoolKey}\oarg{member}\marg{family}\marg{key}\marg{switch}
+% \end{quote}
+% The default \meta{member} is (once again)
+% \file{.\cs{@currname}.\cs{@currext}} and it is recommended to always use it!
+% \cs{if\meta{switch}} is automatically defined, if it was undefined. In this
+% case the initial value is \opt{false}. The default for using the \meta{key}
+% without argument would be \opt{true}. For other allowed values see
+% \cs{FamilySetBool}.
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyBoolKey}[4][.\@currname.\@currext]{%
@@ -4395,14 +4202,22 @@
\DefineFamilyKey[{#1}]{#2}{#3}[true]{\FamilySetBool{#2}{#3}{#4}{##1}}%
}
% \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
-% \changes{v3.27}{2019/07/08}{Leeres Argument ist \texttt{true}}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^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{command}{\FamilySetBool}
+% \changes{v3.00}{2008/04/30}{added}
+% \changes{v3.11a}{2012/05/25}{error message fixed}
+% \changes{v3.27}{2019/07/08}{empty argument is \texttt{true}}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% Setting a boolean key:
+% \begin{quote}
+% \cs{FamilySetBool}\marg{family}\marg{key}\marg{switch}\marg{value}
+% \end{quote}
+% The \meta{family} and the \meta{key} are used for reporting unknown values using
+% \cs{FamilyUnknownKeyValue}. The \meta{switch} is used to use either
+% \cs{\meta{switch}true} or \cs{\meta{switch}false}. It is ignored, if these
+% are not defined, so have to take care, that \cs{if\meta{switch}} already has
+% been defined, e.g., using \cs{FamilyBoolKey}. The \meta{value} can either be
+% \opt{true}, \opt{on} or \opt{yes} for \cs{\meta{switch}true} or
+% \opt{false}, \opt{off} or \opt{no} for \cs{\meta{switch}false}.
% \begin{macrocode}
\newcommand*{\FamilySetBool}[4]{%
\Ifstr{#4}{}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
@@ -4426,13 +4241,10 @@
}
%</base>
% \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}
+% \end{command}
+% \end{command}
+% \begin{command}{\FamilyInverseBoolKey,\FamilySetInverseBool}
+% \changes{3.27}{2019/07/08}{added}
% These are similar to \cs{FamilyBoolKey} and \cs{FamilySetBoolKey} but use
% inverse logic (true sets false and false sets true).
% \begin{macrocode}
@@ -4456,14 +4268,10 @@
}
%</base>
% \end{macrocode}
-% \end{macro}%^^A \FamilySetInverseBool
-% \end{macro}%^^A \FamilyInverseBoolKey
-% \selectlanguage{ngerman}
+% \end{command}^^A \FamilyInverseBoolKey,\FamilySetInverseBool
%
% \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.
+% Version of \cs{FamilyUnknownKeyValue} with static family |KOMA|.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@unknown@keyval}{\FamilyUnknownKeyValue{KOMA}}
@@ -4472,15 +4280,21 @@
% \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
-% 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.
+% \changes{v3.02c}{2009/02/04}{defines the member if needed}
+% \changes{v3.17}{2015/03/02}{replaces the value in the storage}
+% This is an extended version of \cs{FamilyBoolKey} with static family
+% |KOMA|. So the syntax is:
+% \begin{quote}
+% \cs{KOMA@ifkey}\oarg{member}\marg{key}\marg{switch}
+% \end{quote}
+% The default \meta{member} is (once again)
+% \file{.\cs{@currname}.\cs{@currext}} and it is recommended to always use it!
+% \cs{if\meta{switch}} is automatically defined, if it was undefined. The
+% default for using the \meta{key} without argument would be \opt{true}. Note:
+% \meta{member} and \meta{key} are always fully expanded. Depending on a
+% already existing \cs{if\meta{key}} either \opt{\meta{key}=true} or
+% \opt{\meta{key}=false} is added to the value storage. If \cs{if\meta{key}}
+% was not defined, the initialized value is \opt{false}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@ifkey}[2][.\@currname.\@currext]{%
@@ -4504,10 +4318,11 @@
%</koma>
% \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
-% Argument 3.
+% Simple a shortcut for |\FamilySetBool{KOMA}|. So the syntax is:
+% \begin{quote}
+% \cs{KOMA@set@ifkey}\marg{key}\marg{switch}\marg{value}
+% \end{quote}
+% But all arguments are delegated.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@set@ifkey}{\FamilySetBool{KOMA}}
@@ -4516,21 +4331,21 @@
% \end{macro}
% \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
+% \begin{command}{\FamilyCounterKey}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.15}{2014/12/03}{optional default value}
% \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.
-% \begin{macro}{\Family@@Counter@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
-% \begin{macro}{\Family@Counter@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
+% \cs{kernel@ifnextchar}}
+% Defining a \meta{key} that sets a \LaTeX{} counter to a \meta{value}.
+% \begin{quote}
+% \cs{FamilyCounterKey}\oarg{member}\marg{family}\marg{key}\oarg{default}\marg{\LaTeX{} counter}
+% \end{quote}
+% \meta{default} and the \meta{value} of the option has to be (almost) any
+% kind of value, that can be assigned to a \LaTeX{} counter. The
+% \meta{counter} is automatically defined, if it was undefined. In this case
+% the initial value is 0.
+% \begin{macro}{\Family@@Counter@@Key,\Family@Counter@Key}
+% \changes{v3.15}{2014/12/03}{added}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyCounterKey}[3][.\@currname.\@currext]{%
@@ -4548,14 +4363,18 @@
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetCounter{#2}{#3}{#4}{##1}}%
}
% \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.
+% \end{macro}
+% \begin{command}{\FamilySetCounter}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.18a}{2015/07/06}{using \cs{FamilyKeyStateProcessed}}
+% \changes{v3.23}{2017/02/23}{white space replaced by \cs{relax}}
+% Set the value of a \meta{key} defined by \cs{FamilyCounterKey}:
+% \begin{quote}
+% \cs{FamilySetCounter}\marg{family}\marg{key}\marg{counter}\marg{value}
+% \end{quote}
+% Note: Before assigning the \meta{value} to the \meta{counter} tests are
+% done, if the \meta{value} can be used to be assigned to a \LaTeX{}
+% counter. If this fails a unknown value is reported.
% \begin{macrocode}
\newcommand*{\FamilySetCounter}[4]{%
\begingroup
@@ -4589,35 +4408,23 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \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
-% Diese Anweisung arbeitet fast wie \cs{FamilyCounterKey}, allerdings wird
-% 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
-% 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
-% 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.
-% \begin{macro}{\Family@@Counter@@Macro@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
-% \begin{macro}{\Family@Counter@Macro@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
+% \end{command}
+% \end{command}
+%
+% \begin{command}{\FamilyCounterMacroKey}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.15}{2014/12/03}{support for optional default}
+% Similar to \cs{FamilyCounterKey}, but it does not use a \LaTeX{} counter to
+% store the value but a macro (or command):
+% \begin{quote}
+% \cs{FamilyCounterMacroKey}\oarg{member}\marg{family}\marg{key}\oarg{default}\marg{macro}
+% \end{quote}
+% The \meta{value} will be assigned to a counter (\cnt{page}) locally and the
+% \meta{macro} is defined using the value of the counter. The \meta{macro}
+% is automatically set to \cs{z@} if it was not already defined. If it was
+% defined, the user is responsible for that it has to be a number.
+% \begin{macro}{\Family@@Counter@@Macro@@Key,\Family@Counter@Macro@Key}
+% \changes{v3.15}{2014/12/03}{added}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyCounterMacroKey}[3][.\@currname.\@currext]{%
@@ -4634,14 +4441,24 @@
\ifdefined#4\else\let#4\z@\fi
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetCounterMacro{#2}{#3}{#4}{##1}}%
}
-\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
-% global mit \cs{setcounter} arbeitet, sondern lokal mit einer Zuweisung an
-% \cs{value}.
+% \end{macro}^^A \Family@@Counter@@Macro@@Key,\Family@Counter@Macro@Key
+% \begin{command}{\FamilySetCounterMacro}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.15}{2014/12/17}{\cs{aftergroup} before \cs{FamilyKeyStateProcessed}}
+% \changes{v3.18a}{2015/07/06}{fixed usage of \cs{FamilyKeyStateProcessed}}
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}
+% Similar to \cs{FamilySetCounter} but using a macro (or command) instead of a
+% \LaTeX{} counter:
+% \begin{quote}
+% \cs{FamilySetCounterMacro}\marg{family}\marg{key}\marg{macro}\marg{value}
+% \end{quote}
+% Note, that the \meta{value} is locally assigned to a counter (\cnt{page})
+% before defining the \meta{macro} using the value of the counter.
% \begin{macrocode}
+\newcommand*{\FamilySetCounterMacro}[4]{%
+ \begingroup
\FamilySetCounter{#1}{#2}{page}{#4}%
\ifx\FamilyKeyState\FamilyKeyStateProcessed
\edef\reserved@a{%
@@ -4661,25 +4478,24 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{command}^^A \FamilySetCounterMacro
+% \end{command}^^A \FamilyCounterMacroKey
%
-% \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
+% \begin{command}{\FamilyLengthKey}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.15}{2014/12/03}{optional default value}
% \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.
-% \begin{macro}{\Family@@Length@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
-% \begin{macro}{\Family@Length@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
+% \cs{kernel@ifnextchar}}
+% Defining a \meta{key} that sets a \LaTeX{} length to a \meta{value}.
+% \begin{quote}
+% \cs{FamilyLengthKey}\oarg{member}\marg{family}\marg{key}\oarg{default}\marg{\LaTeX{} length}
+% \end{quote}
+% \meta{default} and the \meta{value} of the option has to be (almost) any
+% kind of value, that can be assigned to a \LaTeX{} length, a \TeX{} dimension
+% or a \TeX{} skip. The \meta{\LaTeX{} length} is automatically defined, if it
+% was undefined. In this case the initial value is 0.
+% \begin{macro}{\Family@@Length@@Key,\Family@Length@Key}
+% \changes{v3.15}{2014/12/03}{added}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyLengthKey}[3][.\@currname.\@currext]{%
@@ -4697,27 +4513,34 @@
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetLength{#2}{#3}{#4}{##1}}%
}
% \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.
+% \begin{command}{\FamilySetLength}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.15}{2015/01/02}{\cs{ifglueexpr} added}
+% \changes{v3.18a}{2015/07/06}{usage of \cs{FamilyKeyStateProcessed} fixed}
+% \changes{v3.20}{2016/04/27}{expansion before testing}
+% Set the value of a \meta{key} defined by \cs{FamilyLengthKey}:
+% \begin{quote}
+% \cs{FamilySetLength}\marg{family}\marg{key}\marg{\LaTeX{} length}\marg{value}
+% \end{quote}
+% Note: Before assigning the \meta{value} to the \meta{\LaTeX{} length} it is
+% fully expanded and tests are done, if the \meta{value} can be used to be
+% assigned to a \LaTeX{} length. If this fails a unknown value is reported. If
+% the expansion or the assignment fails a \TeX{} error happens.
% \begin{macrocode}
\newcommand*{\FamilySetLength}[4]{%
\begingroup
\protected@edef\reserved@a{#4}%
% \end{macrocode}
-% Zusammen mit \cs{@defaultsunits} (siehe unten) wäre hier das sinnvoll:
+% Together with \cs{@defaultsunits} (see below) following code, could be used:
% \begin{macrocode}
%<*neveruse>
\expandafter\Ifiscount\expandafter{\reserved@a}{%
\aftergroup\@firstoftwo
}{%
%</neveruse>
+% \end{macrocode}
+% But currently we don't use it!
+% \begin{macrocode}
\expandafter\Ifisdimen\expandafter{\reserved@a}{%
\aftergroup\@firstoftwo
}{%
@@ -4725,13 +4548,16 @@
\aftergroup\@firstoftwo
}{%
% \end{macrocode}
-% Zusammen mit \cs{@defaultsunits} (siehe unten) wäre hier das sinnvoll:
+% Together with \cs{@defaultsunits} (see below) following code, could be used:
% \begin{macrocode}
%<*neveruse>
\expandafter\Ifisnumexpr\expandafter{\reserved@a}{%
\aftergroup\@firstoftwo
}{%
%</neveruse>
+% \end{macrocode}
+% But currently we don't use it!
+% \begin{macrocode}
\expandafter\Ifisdimexpr\expandafter{\reserved@a}{%
\aftergroup\@firstoftwo
}{%
@@ -4755,13 +4581,18 @@
%</neveruse>
\endgroup
% \end{macrocode}
-% TODO: An der Stelle wäre etwas wie:
+% \begin{description}
+% \item[ToDo:] Maybe something like:
% \begin{macrocode}
%<*neveruse>
{\@defaultunits#3=#4pt\relax\@nnil\FamilyKeyStateProcessed}
%</neveruse>
-% schön. Aber aus irgend einem Grund habe ich mich seinerzeit dafür
-% entschieden, die einfacher Form zu wählen:
+% \end{macrocode}
+% would be nice. But there are reasons I've decided not to use
+% this. Unfortunately I cannot remember the reason (and because of this I've
+% added the code as \texttt{neveruse}). So the simple assignment is used
+% instead:
+% \end{description}
% \begin{macrocode}
{#3=#4\FamilyKeyStateProcessed}%
{%
@@ -4776,34 +4607,35 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \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
-% \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
-% Diese Anweisungen arbeitet fast wie \cs{FamilyLengthKey} und
-% \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.
-% \begin{macro}{\Family@@Length@@Macro@@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
-% \begin{macro}{\Family@Length@Macro@Key}
-% \changes{v3.15}{2014/12/03}{neu (intern)}%^^A
+% \end{command}^^A \FamilySetLength
+% \end{macro}^^A \Family@@Leng{\FamilyLengthKey}th@@Key,\Family@Length@Key
+% \end{command}^^A FamilyLengthKey
+%
+% \begin{command}{\FamilyLengthMacroKey}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.15}{2014/12/03}{support for optional default}
+% \begin{command}{\FamilySetLengthMacro}
+% \changes{v3.12}{2013/11/05}{added}
+% \changes{v3.14a}{2014/11/24}{fix: \cs{@tempskipa} instead of \cs{@temskipa}}
+% \changes{v3.15}{2014/12/17}{\cs{aftergroup} before
+% \cs{FamilyKeyStateProcessed}}
+% \changes{v3.15}{2015/01/02}{\cs{ifglueexpr} added}
+% \changes{v3.18a}{2015/07/06}{usage of \cs{FamilyKeyStateProcessed} fixed}
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}
+% \changes{v3.20}{2016/04/27}{using \cs{FamilySetLength}}
+% Similar to \cs{FamilyLengthKey}, but it does not use a \LaTeX{} counter to
+% store the value but a macro (or command):
+% \begin{quote}
+% \cs{FamilyLength MacroKey}\oarg{member}\marg{family}\marg{key}\oarg{default}\marg{macro}
+% \end{quote}
+% The \meta{value} will be assigned to a length (\len{@tempskipa}) locally and
+% the \meta{macro} is defined using the value of the length. The \meta{macro}
+% is automatically set to \cs{z@} if it was not already defined. If it was
+% defined, the user is responsible for that it has to be a valid length. Usage
+% of \cs{dimexpr} is recommended for such a definition.
+% \begin{macro}{\Family@@Length@@Macro@@Key,\Family@Length@Macro@Key}
+% \changes{v3.15}{2014/12/03}{added}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyLengthMacroKey}[3][.\@currname.\@currext]{%
@@ -4841,27 +4673,21 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \Family@@Length@@Macro@@Key,\Family@Length@Macro@Key
+% \end{command}^^A \FamilySetLengthMacro
+% \end{command}^^A \FamilyLengthMacroKey
%
%
-% \begin{macro}{\FamilyUseLengthMacroKey}
-% \changes{v3.20}{2016/04/27}{neu}%^^A
-% \begin{macro}{\FamilySetUseLengthMacro}
-% \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
-% 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
-% Wert.
-% \begin{macro}{\Family@@UseLength@@Macro@@Key}
-% \changes{v3.20}{2016/04/27}{neu (intern)}%^^A
-% \begin{macro}{\Family@USeLength@Macro@Key}
-% \changes{v3.20}{2016/04/27}{neu (intern)}%^^A
+% \begin{command}{\FamilyUseLengthMacroKey,\FamilySetUseLengthMacro}
+% \changes{v3.20}{2016/04/27}{added}
+% These are almost the same like \cs{FamilyLengthMacroKey} and
+% \cs{FamilySetLengthMacro}. But there is one important difference: Instead of
+% setting the \meta{macro} to the value of the temporary length, that has been
+% used for a test assignment, the \meta{macro} is defined as \meta{value}. So
+% later changes valid for the expansion and value of \meta{value} will indeed
+% change the value of \meta{macro}, when it is used.
+% \begin{macro}{\Family@@UseLength@@Macro@@Key,\Family@USeLength@Macro@Key}
+% \changes{v3.20}{2016/04/27}{added}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyUseLengthMacroKey}[3][.\@currname.\@currext]{%
@@ -4900,33 +4726,29 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \Family@@UseLength@@Macro@@Key,\Family@USeLength@Macro@Key
+% \end{command}^^A \FamilyUseLengthMacroKey,\FamilySetUseLengthMacro
%
%
-% \begin{macro}{\FamilyNumericalKey}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}%^^A
+% \begin{command}{\FamilyNumericalKey}
+% \changes{v3.00}{2008/04/30}{added}
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}%^^A
+% \cs{kernel@ifnextchar}}
+% This is a mapping of symbolic values to numerical values:
+% \begin{quote}
+% \cs{FamilyNumericalKey}\oarg{member}\marg{family}\marg{key}\oarg{default}\marg{macro}\marg{mapping list}
+% \end{quote}
+% The \meta{mapping list} is:
+% \begin{quote}
+% \texttt{\marg{symbol$_1$}\marg{value$_1$},\marg{symbol$_2$}\marg{value$_2$}\dots}
+% \end{quote}
+% There is no need for \meta{value$_n$} and \meta{value$_m$} to be mutual
+% exclusive. So several symbols can be mapped to the same value.
% \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
-% 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
-% (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
-% obligatorisch.
+% \changes{v3.00}{2008/05/28}{added}
+% \changes{v3.08b}{2011/03/31}{fixed: missing argument to \cs{ifundefined}}
+% The internal macro is used to handle the optional \meta{default} (because
+% currently we are not using \pkg{xparse}).
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyNumericalKey}[3][.\@currname.\@currext]{%
@@ -4944,15 +4766,15 @@
\fi
}
% \end{macrocode}
-% \begin{macro}{\FamilySetNumerical}
+% \end{macro}
+% \begin{command}{\FamilySetNumerical}
% \changes{v3.11a}{2012/05/28}{call of \cs{FamilyUnknownKeyValue} outside of
-% local group}%^^A
-% \changes{v3.25}{2017/12/04}{komplett leere Listenelemente werden
-% 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
-% 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.
+% local group}
+% \changes{v3.25}{2017/12/04}{handling of completely empty list elements}
+% Set the value of \meta{key} defined by \cs{FamilyNumericalKey}:
+% \begin{quote}
+% \cs{FamilySetNumerical}\marg{family}\marg{key}\marg{macro}\marg{mapping list}\marg{value}
+% \end{quote}
% \begin{macrocode}
\newcommand*{\FamilySetNumerical}[5]{%
\begingroup
@@ -4988,27 +4810,21 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{command}^^A \FamilySetNumerical
+% \end{command}^^A \FamilyNumericalKey
%
% \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
-% \begin{macro}{\KOMA@@ncmdkey}
-% \changes{v3.17}{2015/03/16}{neu (intern)}%^^A
-% \begin{macro}{\KOMA@@@ncmdkey}
-% \changes{v3.17}{2015/03/16}{neu (intern)}%^^A
-% Wie \cs{FamilyNumericalKey} mit zwei entscheidenden Unterschieden:
+% \changes{v3.02c}{2009/02/04}{defining the member (if needed)}
+% \changes{v3.17}{2015/03/16}{re-implemented with value storage and optional default}
+% \begin{macro}{\KOMA@@@ncmdkey,\KOMA@@ncmdkey}
+% \changes{v3.17}{2015/03/16}{added}
+% Like \cs{FamilyNumericalKey} with two important differences:
% \begin{itemize}
-% \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
-% Optionen verwendet werden, bei denen die Werte exklusiv sind.
+% \item The family is not an argument but always |KOMA|.
+% \item The values will in the internal value storage is replaced (on success).
% \end{itemize}
-% Wichtig: Die Voreinstellung muss anschließend noch in jedem Fall mit
-% \cs{KOMA@kav@add} gesetzt werden!
+% Important: Don't forget to add the default to the internal value storage,
+% e.g., using \cs{KOMA@kav@add}.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@ncmdkey}[2][.\@currname.\@currext]{%
@@ -5037,41 +4853,33 @@
%</koma>
% \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,
-% 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!
+% The corresponding set command similar to \cs{FamilySetNumerical} but again
+% the family is not an argument but always |KOMA|.
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@set@ncmdkey}{\FamilySetNumerical{KOMA}}
%</koma>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \KOMA@set@ncmdkey
+% \end{macro}^^A \KOMA@@@ncmdkey,\KOMA@@ncmdkey
+% \end{macro}^^A \KOMA@ncmdkey
%
%
-% \begin{macro}{\FamilyStringKey}
-% \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
+% \begin{command}{\FamilyStringKey}
+% \changes{v3.08}{2010/11/05}{added}
+% \changes{v3.08b}{2011/03/31}{\cs{Family@String@Key} and
+% \cs{Family@@String@@Key} switched}
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
-% \cs{kernel@ifnextchar}}%^^A
-% \begin{macro}{\Family@String@Key}
-% \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
-% 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,
-% 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
-% nicht mehr optional, sondern obligatorisch.
+% \cs{kernel@ifnextchar}}
+% Defining a \meta{key} that defines a \meta{macro} to be a \meta{value}.
+% \begin{quote}
+% \cs{FamilyStringKey}\oarg{member}\marg{family}\marg{key}\oarg{default}\marg{macro}
+% \end{quote}
+% \meta{default} and the \meta{value} of the option should be a string (but
+% currently every value is accepted). The definition is done using
+% \cs{def}. So it doesn't matter whether the \meta{macro} is already defined.
+% \begin{macro}{\Family@String@Key,\Family@@String@@Key}
+% \changes{v3.08}{2010/11/05}{added}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyStringKey}[3][.\@currname.\@currext]{%
@@ -5087,28 +4895,24 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \Family@String@Key,\Family@@String@@Key
+% \end{command}^^A \FamilyStringKey
%
%
-% \begin{macro}{\FamilyCSKey}
-% \changes{v3.25}{2017/12/08}{Neue Anweisung}%^^A
+% \begin{command}{\FamilyCSKey}
+% \changes{v3.25}{2017/12/08}{added}
+% This is similar to \cs{FamilyStringKey} but instead of a \meta{macro} a
+% \meta{command sequence} is used:
+% \begin{quote}
+% \cs{FamilyCSKey}\oarg{member}\marg{family}\marg{key}\oarg{default}\marg{command sequence}
+% \end{quote}
+% Because of this, \cs{@namedef} instead of \cs{def} is used to define the
+% corresponding \cs{\meta{command sequence}}.
% \begin{macro}{\Family@CS@Key}
-% \changes{v3.25}{2017/12/08}{Neu (intern)}%^^A
+% \changes{v3.25}{2017/12/08}{added}
% \begin{macro}{\Family@@CS@@Key}
-% \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
-% 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,
-% 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
-% nicht mehr optional, sondern obligatorisch.
+% \changes{v3.25}{2017/12/08}{added}
+% \changes{v3.26}{2018/11/06}{fix: don't overwrite \cs{Family@@String@@Key}}
% \begin{macrocode}
%<*base>
\newcommand*{\FamilyCSKey}[3][.\@currname.\@currext]{%
@@ -5124,25 +4928,25 @@
}
%</base>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}^^A \Family@@CS@@Key
+% \end{macro}^^A \Family@CS@Key
+% \end{command}^^A \FamilyCSKey
%
%
% \begin{macro}{\KOMA@DeclareDeprecatedOption}
-% \changes{v3.01a}{2008/11/20}{neu (intern)}%^^A
+% \changes{v3.01a}{2008/11/20}{added}
% \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
-% \begin{macro}{\KOMA@@@DeclareDeprecatedOption}
-% \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
-% 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.
+% \cs{kernel@ifnextchar}}
+% Used to define a deprecated \meta{classic option} by an up-to-date
+% \meta{\pkg*{keyval} option}.
+% \begin{quote}
+% \cs{KOMA@DeclareDeprecatedOption}\oarg{package name}\marg{classic
+% option}\marg{\pkg*{keyval} option}
+% \end{quote}
+% If the \meta{package name} is omitted, \cs{KOMAClassName} is used to report
+% a class warning instead of a package warning.
+% \begin{macro}{\KOMA@@DeclareDeprecatedOption,\KOMA@@@DeclareDeprecatedOption}
+% \changes{v3.01a}{2008/11/20}{added}
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@DeclareDeprecatedOption}{%
@@ -5158,13 +4962,19 @@
}
% \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
-% Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind
-% 1. Meldungsbefehl, 2. obsolete Option, 3. Setzen des Schlüssels.
+% \changes{v3.01a}{2008/11/20}{added}
+% \changes{v3.12}{2013/03/04}{test to use \opt{version\quotechar=first}}
+% \changes{v3.12a}{2014/01/22}{test fixed}
+% \changes{v3.22}{2016/07/29}{added several \cs{detokenize}}
+% One more helper:
+% \begin{quote}
+% \cs{KOMA@UseDeprecatedOption}\marg{warning command}\marg{classic
+% option}\marg{\pkg*{keyval} option}
+% \end{quote}
+% Note: \meta{warning command} should either be
+% |\ClassWarningNoLine{\KOMAClassName}| or
+% \cs{PackageWarningNoLine}\marg{package name}. But you could also use
+% \cs{ClassInfoNoLine} or \cs{PackageInfoNoLine}.
% \begin{macrocode}
\newcommand*{\KOMA@UseDeprecatedOption}[3]{%
\begingroup
@@ -5201,26 +5011,27 @@
}
%</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,\KOMA@@@DeclareDeprecatedOption
+% \end{macro}^^A \KOMA@DeclareDeprecatedOption
%
%
% \begin{macro}{\KOMA@DeclareStandardOption}
-% \changes{v3.01a}{2008/11/21}{neu (intern)}%^^A
+% \changes{v3.01a}{2008/11/21}{added}
% \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
-% \begin{macro}{\KOMA@@@DeclareStandardOption}
-% \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
-% 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.
+% \cs{kernel@ifnextchar}}
+% This is similar to \cs{KOMA@DeclareDeprecatedOption} but is used for
+% standard options, which means options known by the standard classes.
+% \begin{quote}
+% \cs{KOMA@DeclareStandardOption}\oarg{package name}\marg{classic
+% option}\marg{\pkg*{keyval} option}
+% \end{quote}
+% For compatibility these options are not reported as deprecated, but an info
+% is added to the \file{log} file about the usage and how it could be replaced
+% by a \pkg*{keyval} option.
+% \begin{macro}{\KOMA@@DeclareStandardOption,\KOMA@@@DeclareStandardOption,
+% \KOMA@UseStandardOption}
+% \changes{v3.01a}{2008/11/21}{added}
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@DeclareStandardOption}{%
@@ -5234,12 +5045,6 @@
\newcommand*{\KOMA@@@DeclareStandardOption}[3]{%
\DeclareOption{#2}{\KOMA@UseStandardOption{#1}{#2}{#3}}%
}
-% \end{macrocode}
-% \begin{macro}{\KOMA@UseStandardOption}
-% \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.
-% \begin{macrocode}
\newcommand*{\KOMA@UseStandardOption}[3]{%
\begingroup
\edef\reserved@a{\noexpand\endgroup
@@ -5260,61 +5065,44 @@
%</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}{added}
+% \changes{v3.12a}{2014/01/22}{removed}
+% \end{macro}^^A \scr@sr@co
+% \end{macro}^^A \KOMA@@@DeclareStandardOption … \KOMA@UseStandardOption
+% \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
-% \begin{macro}{\KOMA@@DeclareObsoleteOption}
-% \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
-% \begin{macro}{\KOMA@iv@DeclareObsoleteOption}
-% \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
-%
-%
-% \begin{macro}{\KOMA@newdeprecatedcommand}
-% \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
-% \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
-% definierte Makro selbst hat Schaltercharakter, ist also nicht
-% \cs{long} und versteht auch keine Argumente.
+% \changes{v2.96}{2006/08/20}{\cs{CurrentOption} protected}
+% \changes{v3.12}{2013/03/04}{removed}
+% \begin{macro}{\KOMA@@DeclareObsoleteOption,\KOMA@@@DeclareObsoleteOption,
+% \KOMA@iv@DeclareObsoleteOption,\KOMA@UseObsoleteOption}
+% \changes{v2.98c}{2008/02/18}{added}
+% \changes{v3.12}{2013/03/04}{removed}
+% \end{macro}^^A \KOMA@@DeclareObsoleteOption … \KOMA@UseObsoleteOption
+% \end{macro}^^A \KOMA@DeclareObsoleteOption
+%
+%
+% \begin{macro}{\KOMA@newobsoletecommand,\KOMA@newdeprecatedcommand}
+% \changes{v3.12}{2013/03/04}{\cs{KOMA@newobsoletecommand} renamed to
+% \cs{KOMA@newdeprecatedcommand}}
+% Defines a deprecated command or \meta{macro}, represented by a
+% \meta{\pkg*{keyval} option}:
+% \begin{quote}
+% \cs{KOMA@newdeprecatedcommand}\oarg{warning
+% command}\marg{macro}\marg{\pkg*{keyval} option}
+% \end{quote}
+% Note: This can be used only for macros and commands, that behave as a
+% selector. Macros or commands with arguments are not supported.
+% \begin{macro}{\KOMA@UseDeprecatedCommand,\KOMA@UseDeprecatedCommand}
+% \changes{v2.97c}{2007/04/19}{added}
+% \changes{v3.12}{2013/03/04}{\cs{KOMA@UseObsoleteCommand} renamed to
+% \cs{KOMA@UseDeprecatedCommand}}
% \begin{macrocode}
%<*koma>
\newcommand*{\KOMA@newdeprecatedcommand}[3][\@gobbletwo]{%
\newcommand*{#2}{\KOMA@UseDeprecatedCommand{#1}{\string#2}{#3}}%
}
-% \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
-% \cs{KOMA@UseDeprecatedCommand}}
-% Die eigentliche Arbeit wird von diesem Makro erledigt. Die Argumente sind
-% dieselben.
-% \begin{macrocode}
\newcommand*{\KOMA@UseDeprecatedCommand}[3]{%
#1{%
scrkbase%
@@ -5327,26 +5115,25 @@
}
%</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}
+% \subsection{Do hook mechanism}
% \label{sec:dohook}
%
-% \changes{v3.27}{2019/02/02}{Do hook mechanism added}%^^A
+% \changes{v3.27}{2019/02/02}{Do hook mechanism added}
% 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
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
-% \changes{v3.30}{2020/03/07}{\cs{loop}\dots\cs{repeat} inside group}%^^A
-% \changes{v3.30}{2020/03/07}{using \cs{rloop} instead of \cs{loop}}%^^A
+% \begin{command}{\ForDoHook}
+% \changes{v3.27}{2019/02/05}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% \changes{v3.30}{2020/03/07}{\cs{loop}\dots\cs{repeat} inside group}
+% \changes{v3.30}{2020/03/07}{using \cs{rloop} instead of \cs{loop}}
% Arguments:
% \begin{description}
% \item[\meta{specificator}:]
@@ -5385,9 +5172,9 @@
}%
}
% \end{macrocode}
-% \begin{macro}{\SplitDoHook}
-% \changes{v3.27}{2019/02/04}{New}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
+% \begin{command}{\SplitDoHook}
+% \changes{v3.27}{2019/02/04}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
% Arguments:
% \begin{description}
% \item[\meta{specificator}:]
@@ -5412,12 +5199,12 @@
}
% \end{macrocode}
% \begin{macro}{\scr@hooksplit@specificator}
-% \changes{v3.27}{2019/02/02}{New internal}%^^A
+% \changes{v3.27}{2019/02/02}{added}
% 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
+% \changes{v3.27}{2019/02/02}{added}
% \begin{macrocode}
\newcommand*{\scr@hooksplit@specificator}[3]{%
\expandafter\scr@@hooksplit@specificator\expandafter#1\expandafter#2#3/\@nil
@@ -5435,11 +5222,11 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{command}
+% \end{command}
%
-% \begin{macro}{\ExecuteDoHook}
-% \changes{v3.27}{2019/02/02}{New}%^^A
+% \begin{command}{\ExecuteDoHook}
+% \changes{v3.27}{2019/02/02}{added}
% Arguments:
% \begin{description}
% \item[\meta{specificator}:]
@@ -5477,10 +5264,10 @@
}%
}
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\AddtoDoHook}
-% \changes{v3.27}{2019/02/02}{New}%^^A
+% \begin{command}{\AddtoDoHook}
+% \changes{v3.27}{2019/02/02}{added}
% Arguments:
% \begin{description}
% \item[\meta{specificator}:]
@@ -5506,11 +5293,11 @@
}%
}
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \begin{macro}{\AddtoOneTimeDoHook}
-% \changes{v3.27}{2019/02/02}{New}%^^A
-% \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A
+% \begin{command}{\AddtoOneTimeDoHook}
+% \changes{v3.27}{2019/02/02}{added}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
% Arguments:
% \begin{description}
% \item[\meta{specificator}:]
@@ -5535,21 +5322,20 @@
}%
}
%</base>
+%</body>
% \end{macrocode}
-% \end{macro}
+% \end{command}
%
-% \selectlanguage{ngerman}
-%
-% \iffalse
-%</body>
-% \fi
%
% \Finale
-%
+% \PrintChanges
+%
\endinput
-%
-% end of file `scrkernel-basics.dtx'
-%%% Local Variables:
-%%% mode: doctex
-%%% TeX-master: t
-%%% End:
+% Local Variables:
+% mode: doctex
+% ispell-local-dictionary: "en_US"
+% eval: (flyspell-mode 1)
+% TeX-master: t
+% TeX-engine: luatex-dev
+% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx"))
+% End: