summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-01-03 21:58:12 +0000
committerKarl Berry <karl@freefriends.org>2019-01-03 21:58:12 +0000
commit9a6785706ed1238169de63236cf1ade3038a8315 (patch)
treeebb7724b3d63ab7a3670016195a008e8b1995026 /Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
parent5e448e499d3c7ac969a219544ef8c2d51cc282b0 (diff)
koma-script (3jan19)
git-svn-id: svn://tug.org/texlive/trunk@49587 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx')
-rw-r--r--Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx195
1 files changed, 158 insertions, 37 deletions
diff --git a/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx b/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
index 38b12a8f180..9ba05887eeb 100644
--- a/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
+++ b/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
@@ -1,8 +1,8 @@
-% \CheckSum{3730}
+% \CheckSum{3830}
% \iffalse meta-comment
% ======================================================================
% scrkernel-basics.dtx
-% Copyright (c) Markus Kohm, 2002-2017
+% Copyright (c) Markus Kohm, 2002-2018
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
@@ -20,7 +20,7 @@
% This work consists of all files listed in manifest.txt.
% ----------------------------------------------------------------------
% scrkernel-basics.dtx
-% Copyright (c) Markus Kohm, 2002-2017
+% Copyright (c) Markus Kohm, 2002-2018
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3c, verteilt und/oder veraendert werden.
@@ -55,7 +55,7 @@
% Right brace \} Tilde \~}
%
% \iffalse
-%%% From File: $Id: scrkernel-basics.dtx 2818 2017-12-08 08:31:53Z kohm $
+%%% From File: $Id: scrkernel-basics.dtx 3043 2018-11-06 07:50:06Z kohm $
%<prepare>%%% (run: prepare)
%<option>%%% (run: option)
%<body>%%% (run: body)
@@ -65,7 +65,7 @@
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\begingroup
\def\filedate$#1: #2-#3-#4 #5${\def\filedate{#2/#3/#4}}
- \filedate$Date: 2017-12-08 09:31:53 +0100 (Fri, 08 Dec 2017) $
+ \filedate$Date: 2018-11-06 08:50:06 +0100 (Tue, 06 Nov 2018) $
\def\filerevision$#1: #2 ${\def\filerevision{r#2}}
\filerevision$Revision: 1638 $
\xdef\fileinfo{\filedate\space\filerevision\space}
@@ -981,8 +981,23 @@
% Liste der nicht benutzten globalen Optionen.
% \begin{macrocode}
\@for\CurrentOption:=\@curroptions\do{%
- \scr@ifundefinedorrelax{ds@\CurrentOption}{%
- \@use@ption
+% \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.
+% \begin{macrocode}
+ \edef\reserved@a{\expandafter\detokenize\expandafter{\CurrentOption}}%
+ \scr@ifundefinedorrelax{ds@\reserved@a}{%
+ \@expandtwoargs\@removeelement\CurrentOption
+ \@unusedoptionlist\@unusedoptionlist
\scr@ifprocess@curroption{#1}{#2}{}\default@ds
}\@use@ption
}%
@@ -1060,8 +1075,8 @@
% \end{macro}^^A \scr@AtEndOfFamilyOptions
% \end{macro}^^A \AtEndOfFamilyOptions
% \begin{macro}{\scr@ifprocess@curroption}
-% \changes{v3.13}{2014/01/04}{\cs{CurrentOption} innerhalb von \cs{setkeys}
-% in Klammern gesetzt}
+% \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
@@ -1070,7 +1085,19 @@
% entsprechende Option.
% \begin{macrocode}
\newcommand*\scr@ifprocess@curroption[2]{%
- \def\reserved@a##1=##2\@nil{\def\reserved@a{##1}}%
+% \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.
+% \begin{macrocode}
+ \def\reserved@a##1=##2\@nil{\scr@sp@def\reserved@a{##1}}%
\expandafter\reserved@a\CurrentOption=\@nil
\scr@ifundefinedorrelax{KV@#2@\reserved@a}{%
\scr@ifundefinedorrelax{KV@#2#1@\reserved@a}{%
@@ -1106,7 +1133,7 @@
}%
\FamilyKeyStateProcessed
\fi
- \def\reserved@a##1=##2\@nil{\def\reserved@a{##1}}%
+ \def\reserved@a##1=##2\@nil{\scr@sp@def\reserved@a{##1}}%
\expandafter\reserved@a\CurrentOption=\@nil
\scr@ifundefinedorrelax{KV@#2#1@\reserved@a}{}{%
\protected@edef\reserved@b{\noexpand\setkeys{#2#1}{{\CurrentOption}}%
@@ -1135,8 +1162,44 @@
\expandafter\@secondoftwo
\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
+% \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
+% \begin{macro}{\scr@sp@c}
+% \changes{v3.26}{2018/08/29}{von \texttt{tocbasic.dtx} nach
+% \texttt{scrkernel-basics.dtx} verschoben und umbenannt}^^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{macrocode}
+\def\@tempa#1{%
+ \def\scr@sp@def##1##2{%
+ \futurelet\scr@sp@tempa\scr@sp@d##2\@nil\@nil#1\@nil\relax##1}%
+ \def\scr@sp@d{%
+ \ifx\scr@sp@tempa\@sptoken
+ \expandafter\scr@sp@b
+ \else
+ \expandafter\scr@sp@b\expandafter#1%
+ \fi}%
+ \def\scr@sp@b#1##1 \@nil{\scr@sp@c##1}%
+}
+\@tempa{ }
+\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
%
@@ -1237,6 +1300,24 @@
%
% \subsection{Häufig benötigte Befehle}
%
+% \begin{macro}{\scr@trim@spaces}
+% \changes{v3.12}{2013/11/06}{neu (intern)}^^A
+% \changes{v3.26}{2018/08/29}{von \texttt{scrkernel-language.dtx} nach
+% \texttt{scrkernel-basics.dtx} verschoben}^^A
+% Diese Hilfsanweisung entfernt führende und abschließende
+% 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.
+% \begin{macrocode}
+%<*base>
+\newcommand\scr@trim@spaces[1]{%
+ \expandafter\scr@sp@def\expandafter#1\expandafter{#1}%
+}
+%</base>
+% \end{macrocode}
+% \end{macro}^^A \scr@trim@space
+%
% \begin{macro}{\if@atdocument}
% \changes{v2.95}{2002/12/05}{neuer Schalter}^^A
% \begin{macro}{\@atdocumenttrue}
@@ -2736,6 +2817,40 @@
% \end{macrocode}
% \end{macro}
%
+% \selectlanguage{english}%
+% \begin{macro}{\IfActiveMkBoth}
+% \changes{v3.26}{2018/09/03}{new}^^A
+% \begin{macro}{\if@scrActiveMkBoth}
+% \changes{v3.26}{2018/09/03}{new}^^A
+% This command test, whether or not \cs{@mkboth} does change a mark or not.
+% \begin{macrocode}
+%<*base>
+\newif\ifscr@ActiveMkBoth
+\def\scr@ActiveMkBothfalse{\global\let\ifscr@ActiveMkBoth\iffalse}
+\def\scr@ActiveMkBothtrue {\global\let\ifscr@ActiveMkBoth\iftrue}
+\newcommand*{\IfActiveMkBoth}{%
+ \begingroup
+ \def\markboth##1##2{\scr@ActiveMkBothtrue}%
+ \def\markright##1{\scr@ActiveMkBothtrue}%
+ \def\markleft##1{\scr@ActiveMkBothtrue}%
+ \def\markboth##1{\scr@ActiveMkBothtrue}%
+ \def\markdouble##1{\scr@ActiveMkBothtrue}%
+ \def\mark##1{\scr@ActiveMkBothtrue}
+ \scr@ActiveMkBothfalse
+ \setbox\@tempboxa\vbox{\@mkboth{}{}}%
+ \endgroup
+ \ifscr@ActiveMkBoth
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+%</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}
@@ -3234,23 +3349,25 @@
% \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}}
+% \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}}
+% \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}}
+% \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}}
+% \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}
-% \changes{v3.00}{2008/04/30}{umbenannt von \cs{KOMA@key@split@name@value}}
-% \changes{v3.13}{2014/10/17}{\cs{long}}
+% \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
% \begin{macrocode}
\newif\ifscr@key@found@
\newcommand*{\scr@key@atlist}{}
@@ -3258,8 +3375,8 @@
\newcommand*{\scr@key@value}{}
\newcommand*{\scr@key@split@name@value}{}
\long\def\scr@key@split@name@value#1=#2=#3\@nil{%
- \KV@@sp@def\scr@key@name{#1}%
- \KV@@sp@def\scr@key@value{#2}%
+ \scr@sp@def\scr@key@name{#1}%
+ \scr@sp@def\scr@key@value{#2}%
}
%</base>
% \end{macrocode}
@@ -3271,12 +3388,14 @@
% \end{macro}^^A \FamilyOptions
%
% \begin{macro}{\FamilyOption}
-% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
+% \changes{v3.00}{2008/04/30}{Neue Anweisung}^^A
% \begin{macro}{\@FamilyOptions}
-% \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}^^A
+% \changes{v3.14}[2014/10/17]{Neue streng interne Anweisung}^^A
+% \changes{v3.26}{2018/08/29}{Verwendung von \cs{scr@sp@def} statt
+% \cs{KV@@sp@def}}^^A
% \begin{macro}{\Family@Option}
-% \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
-% \changes{v3.12}{2013/03/04}{entfernt}^^A
+% \changes{v3.00}{2008/04/30}{Neu (intern)}^^A
+% \changes{v3.12}{2013/03/04}{entfernt}^^A
% \end{macro}
% \changes{v3.04b}{2010/01/29}{\cs{edef} durch \cs{protected@edef} ersetzt}
% Im Gegensatz zu \cs{FamilyOptions} kann man mit dieser Anweisung nur eine
@@ -3288,7 +3407,7 @@
%<*base>
\newcommand*{\FamilyOption}[2]{\@FamilyOption{#1}{#2}}
\newcommand{\@FamilyOption}[3]{%
- \expandafter\KV@@sp@def\expandafter\scr@key@name\expandafter{#2}%
+ \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.
@@ -4013,12 +4132,12 @@
%
% \begin{macro}{\FamilyUseLengthMacroKey}
% \changes{v3.20}{2016/04/27}{neu}^^A
-% \begin{macro}{\FamilySetLengthMacro}
+% \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. weiterhing
+% 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.
@@ -4257,11 +4376,13 @@
%
%
% \begin{macro}{\FamilyCSKey}
-% \changes{v3.25}{2017/12/08}{Neue Anweisung}^^A
+% \changes{v3.25}{2017/12/08}{Neue Anweisung}^^A
% \begin{macro}{\Family@CS@Key}
-% \changes{v3.25}{2017/12/08}{Neu (intern)}^^A
+% \changes{v3.25}{2017/12/08}{Neu (intern)}^^A
% \begin{macro}{\Family@@CS@@Key}
-% \changes{v3.25}{2017/12/08}{Neu (intern)}^^A
+% \changes{v3.25}{2017/12/08}{Neu (intern)}^^A
+% \changes{v3.26}{2018/11/06}{Es wird wirklich diese Anweisung (statt erneut
+% \cs{Family@@String@@Key}) definiert}^^A
% Ein ähnliches Makro definiert einen Schlüssel, der eine Befehlssequenz auf
% einen beliegigen Wert setzt. Das erste, optionale Argument ist das
% Familienmitglied, das zweite, obligatorische Argument ist die Familie, das
@@ -4278,7 +4399,7 @@
{\Family@@CS@@Key{#1}{#2}{#3}}{\Family@CS@Key{#1}{#2}{#3}}%
}
\newcommand*{\Family@@CS@@Key}{}
-\long\def\Family@@String@@Key#1#2#3[#4]#5{%
+\long\def\Family@@CS@@Key#1#2#3[#4]#5{%
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{\@namedef{#5}{##1}}%
}
\newcommand{\Family@CS@Key}[4]{%