diff options
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.dtx | 195 |
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]{% |