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 | 223 |
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}{}{% |