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 | 225 |
1 files changed, 187 insertions, 38 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 6a65c8fc812..fa5cb5e9a68 100644 --- a/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx +++ b/Master/texmf-dist/source/latex/koma-script/scrkernel-basics.dtx @@ -1,7 +1,7 @@ % \iffalse meta-comment % ====================================================================== % scrkernel-basics.dtx -% Copyright (c) Markus Kohm, 2002-2020 +% Copyright (c) Markus Kohm, 2002-2021 % % This file is part of the LaTeX2e KOMA-Script bundle. % @@ -19,7 +19,7 @@ % This work consists of all files listed in manifest.txt. % ---------------------------------------------------------------------- % scrkernel-basics.dtx -% Copyright (c) Markus Kohm, 2002-2020 +% 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. @@ -36,7 +36,7 @@ % Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien. % ====================================================================== % -%%% From File: $Id: scrkernel-basics.dtx 3527 2020-09-11 09:44:32Z kohm $ +%%% From File: $Id: scrkernel-basics.dtx 3578 2021-03-12 16:50:00Z kohm $ %<prepare>%%% (run: prepare) %<option>%%% (run: option) %<body>%%% (run: body) @@ -46,7 +46,7 @@ \ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi \begingroup \def\filedate$#1: #2-#3-#4 #5${\def\filedate{#2/#3/#4}} - \filedate$Date: 2020-09-11 11:44:32 +0200 (Fri, 11 Sep 2020) $ + \filedate$Date: 2021-03-12 17:50:00 +0100 (Fri, 12 Mar 2021) $ \def\filerevision$#1: #2 ${\def\filerevision{r#2}} \filerevision$Revision: 1638 $ \xdef\fileinfo{\filedate\space\filerevision\space} @@ -139,6 +139,15 @@ % unabhängig voneinander verwendet werden. Selbstverständlich kann man dieses % Paket auch ohne den Rest von \KOMAScript{} zum Einsatz bringen. % +% \selectlanguage{english} +% \subsection{Functions not yet in the Manual} +% +% \DescribeMacro\IfLTXAtLeastTF +% \marginpar{\raggedleft\tiny New: 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} % % \iffalse @@ -265,6 +274,22 @@ %</base> % \end{macrocode} % \end{macro} +% +% \begin{macro}{\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 +% very old \LaTeX{} kernel. +% \begin{macrocode} +%<*base> +\newcommand*{\IfLTXAtLeastTF}{\@ifl@t@r\fmtversion} +\ifcsname IfFormatAtLeastTF\endcsname + \let\IfLTXAtLeastTF\IfFormatAtLeastTF +\fi +\@onlypreamble\IfLTXAtLeastTF +%</base> +% \end{macrocode} +% \end{macro} % \selectlanguage{ngerman} % % @@ -550,8 +575,8 @@ \expandafter\l@addto@macro\csname scr@kav@KOMA#1\endcsname{\do{{#2}{#3}}}% }% } -% \end{macrocode} %</koma> +% \end{macrocode} % \end{macro} % % \begin{macro}{\KOMA@kav@xadd} @@ -570,8 +595,8 @@ \expandafter{\expandafter\do\expandafter{\reserved@a}}% }% } -% \end{macrocode} %</koma> +% \end{macrocode} % \end{macro} % % \begin{macro}{\KOMA@kav@remove} @@ -826,19 +851,6 @@ % \end{macrocode} % \end{macro} % -% \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}%^^A -% \changes{v3.12}{2013/03/04}{Fehlerbehandlung}%^^A -% 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. % \begin{macro}{\scr@removeunused} % \changes{v3.10}{2011/09/12}{neu (intern)}% % \changes{v3.12}{2013/03/04}{entfernt}%^^A @@ -851,8 +863,136 @@ % \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}% +% \changes{v3.33}{2021/03/02}{new version using raw options lists of \LaTeX{} +% 2021/05/01} % \begin{macrocode} %<*base> +\IncludeInRelease{2021/05/01}{\FamilyProcessOptions}{% + Usage of raw option list} +\newcommand*{\FamilyProcessOptions}[2][.\@currname.\@currext]{% +% \end{macrocode} +% Before processing of the options we have to execute an initialise several +% hooks: +% \begin{macrocode} + \ifx\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions + \PackageError{scrbase}{nested \string\FamilyProcessOptions\space + detected\MessageBreak}{% + \string\FamilyProcessOptions\space has been used while processing or + setting options.\MessageBreak + This is currently not allowed. You should contact the author of the + causing\MessageBreak + code.\MessageBreak + This error is fatal. You should not continue.% + }% + \fi + \scr@ifundefinedorrelax{scr@before@process@options@#2@hook}{}{% + \@nameuse{scr@before@process@options@#2@hook}% + }% + \scr@ifundefinedorrelax{scr@before@process@options@#2#1@hook}{}{% + \@nameuse{scr@before@process@options@#2#1@hook}% + \expandafter\let\csname scr@before@process@options@#2#1@hook\endcsname + \relax + }% + \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}% + }% + }% + }% + \ifx\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate + \@namedef{scr@after@options@#2@hook@topmost}{% + \@namedef{scr@after@options@#2@hook@topmost}{}% + }% + \expandafter\l@addto@macro\csname scr@after@options@#2@hook\endcsname{% + \let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate + \@nameuse{scr@after@options@#2@hook@topmost}% + }% + \let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions + \fi + \let\ds@\@empty +% \end{macrocode} +% Here we set up \cs{@curroptions} to the raw options of the current class or +% package or empty if the options are not defined. +% \begin{macrocode} + \@ifundefined{@raw@opt@\@currname.\@currext}{% + \let\@curroptions\@empty + }{% + \expandafter\let\expandafter\@curroptions + \csname @raw@opt@\@currname.\@currext\endcsname + }% +% \end{macrocode} +% 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/05/01} +% \begin{macrocode} + \ifx\@currext\@clsextension\else + \@for\CurrentOption:=\@raw@classoptionslist\do{% + \scr@trim@spaces\CurrentOption + \ifx\CurrentOption\@empty\else + \@ifundefined{ds@\CurrentOption}{% + \scr@ifprocess@curroption{#1}{#2}{% + \@expandtwoargs\@removeelement{% + \expandafter\@remove@eq@value\CurrentOption=\@nil}% + \@unusedoptionlist\@unusedoptionlist + }{}% + }{% + \@use@ption + \expandafter\let\csname ds@\CurrentOption\endcsname\@empty + }% + \fi + }% + \fi +% \end{macrocode} +% Afterwards we have to process the current options. +% \begin{macrocode} + \@for\CurrentOption:=\@curroptions\do{% + \scr@trim@spaces\CurrentOption + \@ifundefined{ds@\CurrentOption}{% + \@use@ption + \scr@ifprocess@curroption{#1}{#2}{}\default@ds + }\@use@ption + }% +% \end{macrocode} +% Clear all the definitions for declared options and the current option. Then +% reset the marker macro, initiate emptying the unprocessed options list of +% the current file and execute the exit hook. +% \begin{macrocode} + \@for\CurrentOption:=\@declaredoptions\do{% + \expandafter\let\csname ds@\CurrentOption\endcsname\relax}% + \let\CurrentOption\@empty + \let\@fileswith@pti@ns\@@fileswith@pti@ns + \AtEndOfPackage{\expandafter\let + \csname unprocessedoptions-\@currname.\@currext\endcsname + \relax}% + \@nameuse{scr@after@options@#2@hook}% +} +\EndIncludeInRelease +% \end{macrocode} +% And here the old version for old \LaTeX{} kernel version: +% \selectlanguage{ngerman}% +% \begin{macrocode} +\IncludeInRelease{0000/00/00}{\FamilyProcessOptions}{% + compatibility for LaTeX before 2021/05/01} \newcommand*{\FamilyProcessOptions}[2][.\@currname.\@currext]{% \ifx\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions \PackageError{scrbase}{nested \string\FamilyProcessOptions\space @@ -1027,12 +1167,19 @@ % 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. +% \changes{v3.33}{2021/02/15}{prepared for \LaTeX{} 2020/10/01} % \begin{macrocode} \@for\CurrentOption:=\@declaredoptions\do{% \expandafter\let\csname ds@\CurrentOption\endcsname\relax}% \let\CurrentOption\@empty \let\@fileswith@pti@ns\@@fileswith@pti@ns - \AtEndOfPackage{\let\@unprocessedoptions\relax}% + \IfLTXAtLeastTF{2020/10/01}{% + \AtEndOfPackage{\expandafter\let + \csname unprocessedoptions-\@currname.\@currext\endcsname + \relax}% + }{% + \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 @@ -1040,6 +1187,7 @@ % \begin{macrocode} \@nameuse{scr@after@options@#2@hook}% } +\EndIncludeInRelease \@onlypreamble\FamilyProcessOptions % \end{macrocode} % \begin{macro}{\BeforeFamilyProcessOptions} @@ -1247,6 +1395,25 @@ % \end{macrocode} % \end{macro} % +% \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.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. +% \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 +% % \iffalse %</prepare> %<*option> @@ -1362,24 +1529,6 @@ % \end{macro}%^^A \scr@ForEachTrimmedListElement % \selectlanguage{ngerman}%^^A % -% \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} |