diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/source/scrkernel-basics.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/source/scrkernel-basics.dtx | 3348 |
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: |