summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
diff options
context:
space:
mode:
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.dtx223
1 files changed, 184 insertions, 39 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 7a198f3654c..c3190e3e9fe 100644
--- a/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
+++ b/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{3578}
+% \CheckSum{3641}
% \iffalse meta-comment
% ======================================================================
% scrkernel-basics.dtx
@@ -55,13 +55,15 @@
% Right brace \} Tilde \~}
%
% \iffalse
-%%% From File: $Id: scrkernel-basics.dtx 2490 2016-07-29 06:29:45Z kohm $
-%<package&option>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+%<prepare>%%% From File: $Id: scrkernel-basics.dtx 2601 2017-02-23 16:26:09Z kohm $ (prepare)
+%<option>%%% From File: $Id: scrkernel-basics.dtx 2601 2017-02-23 16:26:09Z kohm $ (option)
+%<body>%%% From File: $Id: scrkernel-basics.dtx 2601 2017-02-23 16:26:09Z kohm $ (body)
+%<package&prepare>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\begingroup
\def\filedate$#1: #2-#3-#4 #5${\def\filedate{#2/#3/#4}}
- \filedate$Date: 2016-07-29 08:29:45 +0200 (Fri, 29 Jul 2016) $
+ \filedate$Date: 2017-02-23 17:26:09 +0100 (Thu, 23 Feb 2017) $
\def\filerevision$#1: #2 ${\def\filerevision{r#2}}
\filerevision$Revision: 1638 $
\xdef\fileinfo{\filedate\space\filerevision\space}
@@ -72,7 +74,7 @@
}
\reserved@a
%</driver>
-%<*driver|(package&option)>
+%<*driver|(package&prepare)>
%<package>\ProvidesPackage{%
%<package&base> scrbase%
%<package&koma> scrkbase%
@@ -82,7 +84,7 @@
%<base> KOMA-Script-independent
%<koma> KOMA-Script-dependent
basics and keyval usage)]
-%</driver|(package&option)>
+%</driver|(package&prepare)>
%<*dtx>
\ifx\documentclass\undefined
\input scrdocstrip.tex
@@ -92,6 +94,7 @@
\generate{\usepreamble\defaultpreamble
\file{scrbase.sty}{%
\from{scrkernel-version.dtx}{package,scrbase}%
+ \from{scrkernel-basics.dtx}{package,prepare,base}%
\from{scrkernel-basics.dtx}{package,option,base}%
\from{scrkernel-language.dtx}{package,option,base}%
\from{scrlfile.dtx}{load}%
@@ -167,7 +170,7 @@
%
% \iffalse
%</load>
-%<*option>
+%<*prepare>
% \fi
%
% \subsection{\eTeX-Test}
@@ -203,6 +206,7 @@
%</base>
% \end{macrocode}
%
+%
% \subsection{Der abhängige Teil lädt den unabhängigen Teil}
%
% \begin{macrocode}
@@ -850,8 +854,66 @@
\expandafter\let\csname scr@before@process@options@#2#1@hook\endcsname
\relax
}%
- \let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions
- \@namedef{scr@after@options@#1@hook}{\@namedef{scr@after@options@#1@hook}{}}%
+% \end{macrocode}
+% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
+% statt des Mitglieds}^^A
+% Jetzt \cs{AtEndOfFamilyOptions} samt Haken initialisieren.
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{scr@after@options@#2@hook}{%
+ \@namedef{scr@after@options@#2@hook}{%
+% \end{macrocode}
+% Die erste Aktion im Haken wird sein, den Haken selbst zu löschen.
+% \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.
+% \begin{macrocode}
+ \noexpand\@namedef{scr@after@options@#2@hook}{%
+ \unexpanded\expandafter\expandafter\expandafter
+ {\csname scr@after@options@#2@hook\endcsname}%
+ }%
+ }%
+ }%
+% \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).
+% \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.
+% \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.
+% \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.
+% \begin{macrocode}
+ \let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions
+ \fi
+% \end{macrocode}
+% Jetzt geht es weiter mit der Adaption des Codes aus \cs{ProcessOptions}.
+% \begin{macrocode}
\let\ds@\@empty
\edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
\ifx\@currext\@clsextension\else
@@ -932,9 +994,10 @@
\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
% \begin{macrocode}
- \let\AtEndOfFamilyOptions\@firstofone
- \@nameuse{scr@after@options@#1@hook}%
+ \@nameuse{scr@after@options@#2@hook}%
}
\@onlypreamble\FamilyProcessOptions
% \end{macrocode}
@@ -959,21 +1022,37 @@
% \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.
+% 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.
% \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
% \begin{macrocode}
\newcommand*{\scr@AtEndOfFamilyOptions}{%
+ \kernel@ifstar {\scr@@AtEndOfFamilyOptions{@topmost}}%
+ {\scr@@AtEndOfFamilyOptions\@empty}%
+}
+\newcommand*{\scr@@AtEndOfFamilyOptions}[1]{%
\expandafter
- \l@addto@macro\csname scr@after@options@\FamilyOfKey @hook\endcsname
+ \l@addto@macro\csname scr@after@options@\FamilyOfKey @hook#1\endcsname
+}
+\newcommand*{\scr@AtEndOfFamilyOptions@immediate}{%
+ \kernel@ifstar {\@firstofone}{\@firstofone}%
}
\newcommand*{\AtEndOfFamilyOptions}{}
-\let\AtEndOfFamilyOptions\@firstofone
+\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
% \begin{macro}{\scr@ifprocess@curroption}
@@ -1076,6 +1155,11 @@
% \end{macrocode}
% \end{macro}
%
+% \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
@@ -1106,6 +1190,7 @@
% \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}
@@ -2499,19 +2584,28 @@
% \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.
% \begin{macrocode}
%<*base>
\newcommand*{\scr@ifdvioutput}{%
\scr@ifundefinedorrelax{pdfoutput}{%
- \scr@ifundefinedorrelax{OpMode}{%
- \expandafter\@firstoftwo
- }{%
- \ifnum\OpMode=0
+ \scr@ifundefinedorrelax{outputmode}{%
+ \scr@ifundefinedorrelax{OpMode}{%
\expandafter\@firstoftwo
- \else
+ }{%
+ \ifnum\OpMode=0
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }%
+ }{%
+ \ifnum\outputmode>0
\expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
\fi
}%
}{%
@@ -2611,6 +2705,8 @@
% verarbeitet}^^A
% \begin{macro}{\@FamilyExecuteOptions}
% \changes{v3.14}{2014/10/17}{Neue streng interne Anweisung}^^A
+% \changes{v3.23}{2017/02/16}{Korrektur: Haken danach verwendet die Familie
+% statt des Mitglieds}^^A
% 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.
@@ -2620,7 +2716,18 @@
\@FamilyExecuteOptions[{#1}]{#2}%
}
\newcommand{\@FamilyExecuteOptions}[3][.\@currname.\@currext]{%
- \@namedef{scr@after@options@#1@hook}{\@namedef{scr@after@options@#1@hook}{}}%
+ \scr@ifundefinedorrelax{scr@after@options@#2@hook}{%
+ \@namedef{scr@after@options@#2@hook}{%
+ \@namedef{scr@after@options@#2@hook}{}%
+ }%
+ }{%
+ \expandafter\edef\csname scr@after@options@#2@hook\endcsname{%
+ \noexpand\@namedef{scr@after@options@#2@hook}{%
+ \unexpanded\expandafter\expandafter\expandafter
+ {\csname scr@after@options@#2@hook\endcsname}%
+ }%
+ }%
+ }%
\@for\scr@key@atlist:=#3\do{%
\expandafter\scr@key@split@name@value\scr@key@atlist==\@nil
\ifx\scr@key@name\@empty\else
@@ -2703,7 +2810,7 @@
\fi
\fi
}%
- \@nameuse{scr@after@options@#1@hook}%
+ \@nameuse{scr@after@options@#2@hook}%
}
%</base>
% \end{macrocode}
@@ -2789,7 +2896,46 @@
%<*base>
\newcommand{\FamilyOptions}[1]{\@FamilyOptions{#1}}
\newcommand{\@FamilyOptions}[2]{%
- \@namedef{scr@after@options@#1@hook}{\@namedef{scr@after@options@#1@hook}{}}%
+ \scr@ifundefinedorrelax{scr@after@options@#1@hook}{%
+ \@namedef{scr@after@options@#1@hook}{%
+ \@namedef{scr@after@options@#1@hook}{}%
+ }%
+ }{%
+ \expandafter\edef\csname scr@after@options@#1@hook\endcsname{%
+ \noexpand\@namedef{scr@after@options@#1@hook}{%
+ \unexpanded\expandafter\expandafter\expandafter
+ {\csname scr@after@options@#1@hook\endcsname}%
+ }%
+ }%
+ }%
+% \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.
+% \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.
+% \begin{macrocode}
+ \expandafter\ifx\csname scr@after@options@#1@hook@topmost\endcsname\@empty
+ \expandafter\l@addto@macro\csname scr@after@options@#1@hook\endcsname{%
+ \@nameuse{scr@after@options@#1@hook@topmost}%
+ }%
+ \@namedef{scr@after@options@#1@hook@topmost}{%
+ \@namedef{scr@after@options@#1@hook@topmost}{}%
+ }%
+ \fi
% \end{macrocode}
% \begin{description}
% \item[Anmerkung:] Es wird nicht auf \textsf{xkeyval} und den dortigen Befehl
@@ -2919,6 +3065,8 @@
% 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.
@@ -2940,20 +3088,13 @@
\noexpand\def\noexpand\scr@key@run@errors{%
\unexpanded\expandafter{\scr@key@run@errors}}%
\fi
- \expandafter\ifx\csname scr@after@options@#1@hook\endcsname\relax
- \noexpand\expandafter\noexpand\let\noexpand\csname
- scr@after@options@#1@hook\endcsname\relax
- \else
- \noexpand\def\expandafter\noexpand
- \csname scr@after@options@#1@hook\endcsname{%
- \expandafter\unexpanded\expandafter\expandafter\expandafter{%
- \csname scr@after@options@#1@hook\endcsname
- }}%
+ \ifx\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate
+ \noexpand\let\noexpand\AtEndOfFamilyOptions
+ \noexpand\scr@AtEndOfFamilyOptions@immediate
\fi
}%
\let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions
\reserved@a
- \let\AtEndOfFamilyOptions\@firstofone
\ifx\FamilyKeyState\FamilyKeyStateUnknown
\PackageInfo{scrbase}{Unknown processing state.\MessageBreak
Processing option
@@ -3187,12 +3328,12 @@
% \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}}
+% \changes{v3.12}{2013/03/04}{Verwendung von \cs{AtEndOfFamilyOptions}}^^A
+% \changes{v3.23}{2017/02/16}{kein \cs{let}}^^A
% Eine Option kann dafür sorgen, dass nach den Optionen noch etwas passiert.
% \begin{macrocode}
%<*koma>
-\newcommand*{\AfterKOMAoptions}{}
-\let\AfterKOMAoptions\AtEndOfFamilyOptions
+\newcommand*{\AfterKOMAoptions}{\AtEndOfFamilyOptions}
%</koma>
% \end{macrocode}
% \end{macro}^^A \AfterKOMAoptions
@@ -3207,8 +3348,10 @@
% \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
% \begin{macrocode}
-%<*base>
+%</body>
+%<*base&prepare>
\@ifundefined{l@addto@macro}{}{%
\begingroup
\long\def\reserved@a#1#2{%
@@ -3237,7 +3380,8 @@
\long\def\l@addto@macro#1#2{%
\edef#1{\unexpanded\expandafter{#1#2}}%
}%
-%</base>
+%</base&prepare>
+%<*body>
% \end{macrocode}
% \end{macro}^^A \l@addto@macro
%
@@ -3526,14 +3670,15 @@
% \changes{v3.12}{2013/11/05}{neu}^^A
% \changes{v3.18a}{2015/07/06}{korrekte Verwendung von
% \cs{FamilyKeyStateProcessed}}^^A
-% Über diese Anwesiung wird der Wert dann gesetzt. Dabei ist das erste
+% \changes{v3.23}{2017/02/23}{Leerzeichen durch \cs{relax} ersetzt}^^A
+% Über diese Anweisung wird der Wert dann gesetzt. Dabei ist das erste
% Argument die Familie, das zweite der Name des Schlüssels, das dritte der
% Name des \LaTeX-Zählers, das vierte schließlich der gewünschte Wert.
% \begin{macrocode}
\newcommand*{\FamilySetCounter}[4]{%
\begingroup
\protected@edef\reserved@a{#4}%
- \def\reserved@b{\endgroup\value{#3}=#4 \FamilyKeyStateProcessed}%
+ \def\reserved@b{\endgroup\value{#3}=#4\relax\FamilyKeyStateProcessed}%
\expandafter\ifiscount\expandafter{\reserved@a}{}{%
\expandafter\ifisdimen\expandafter{\reserved@a}{}{%
\expandafter\ifisskip\expandafter{\reserved@a}{}{%