You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2846 lines
93 KiB
2846 lines
93 KiB
%%
|
|
%% This is file `scrbase.sty',
|
|
%% generated with the docstrip utility, extended by scrdocstrip.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% scrkernel-version.dtx (with options: `package,scrbase')
|
|
%% scrkernel-basics.dtx (with options: `package,prepare,base')
|
|
%% scrkernel-basics.dtx (with options: `package,option,base')
|
|
%% scrkernel-language.dtx (with options: `package,option,base')
|
|
%% scrlfile.dtx (with options: `load')
|
|
%% scrkernel-basics.dtx (with options: `package,body,base')
|
|
%% scrkernel-language.dtx (with options: `package,body,base')
|
|
%% scrlogo.dtx (with options: `logo')
|
|
%%
|
|
%% Copyright (c) 2002-2019 Markus Kohm [komascript at gmx info]
|
|
%%
|
|
%% This file was generated from file(s) of the KOMA-Script bundle.
|
|
%% ---------------------------------------------------------------
|
|
%%
|
|
%% It may be distributed under the conditions of the
|
|
%% LaTeX Project Public License in the version distributed together
|
|
%% with KOMA-Script, see file `lppl.txt' or `lppl-de.txt'.
|
|
%%
|
|
%% This file may only be distributed together with a copy of the
|
|
%% KOMA-Script bundle. You may however distribute the
|
|
%% KOMA-Script bundle without all such generated files. See also
|
|
%% `lppl.txt' or `lppl-de.txt' for additional information.
|
|
%%
|
|
%% The list of files belonging to KOMA-Script distribution is given in
|
|
%% the file `manifest.txt'. See also `lppl.txt' or `lppl-de.txt' for
|
|
%% additional information.
|
|
%%
|
|
%% If this file is a beta version, you may not be allowed to distribute
|
|
%% it. Look at the comments below to see if this is the case.
|
|
%%
|
|
%% English and German manuals are part of KOMA-Script bundle.
|
|
%% ----------------------------------------------------------
|
|
%%
|
|
%% See `README'.
|
|
%%
|
|
%% The KOMA-Script bundle (but maybe not this file) was based upon the
|
|
%% LaTeX 2.09 Script family created by Frank Neukam 1993 and the LaTeX2e
|
|
%% standard classes created by The LaTeX3 Project 1994-1996. You can
|
|
%% find a complete unmodified copy of LaTeX2e at
|
|
%% <http://mirror.ctan.org/tex-archive/macros/latex/base/>.
|
|
%%
|
|
%%% From File: $Id: scrkernel-version.dtx 3510 2020-07-22 13:29:13Z kohm $
|
|
\begingroup
|
|
\catcode`\@11\relax
|
|
\ifx\KOMAScriptVersion\undefined
|
|
\newcommand*{\@CheckKOMAScriptVersion}[1]{%
|
|
\gdef\KOMAScriptVersion{#1}%
|
|
}%
|
|
\else
|
|
\newcommand*{\@CheckKOMAScriptVersion}[1]{%
|
|
\def\@tempa{#1}%
|
|
\ifx\KOMAScriptVersion\@tempa\else
|
|
\@latex@warning@no@line{%
|
|
\noexpand\KOMAScriptVersion\space is
|
|
`\KOMAScriptVersion',\MessageBreak
|
|
but `#1' was expected!\MessageBreak
|
|
You should not use classes, packages or files
|
|
from\MessageBreak
|
|
different KOMA-Script versions%
|
|
}%
|
|
\fi
|
|
}
|
|
\fi
|
|
\@CheckKOMAScriptVersion{2020/07/22 v3.31 KOMA-Script}%
|
|
\endgroup
|
|
\providecommand*{\scr@pkgextension}{\@pkgextension}
|
|
\AtBeginDocument{%
|
|
\let\scr@pkgextension\@pkgextension
|
|
}
|
|
%%% From File: $Id: scrkernel-basics.dtx 3465 2020-03-07 10:23:56Z kohm $
|
|
%%% (run: prepare)
|
|
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
|
|
\ProvidesPackage{%
|
|
scrbase%
|
|
}[%
|
|
2020/07/22 v3.31 KOMA-Script
|
|
package
|
|
(%
|
|
KOMA-Script-independent
|
|
basics and keyval usage)]
|
|
\begingroup
|
|
\def\reserved@b{}%
|
|
\def\reserved@a#1{%
|
|
\PackageError{scrbase}{seems you are not running e-TeX#1}{%
|
|
Since 2004 the LaTeX team recommends to use e-TeX.\MessageBreak
|
|
KOMA-Script since version 2.95 uses several e-TeX features.\MessageBreak
|
|
At actual systems `latex' should already use e-TeX.\MessageBreak
|
|
At deprecated systems it may be called `elatex'.\MessageBreak
|
|
Use either unsupported KOMA-Script up to version 2.9u or\MessageBreak
|
|
ask you administrator for LaTeX using e-TeX#1.\MessageBreak
|
|
Not using e-TeX#1 is a fatal error!\MessageBreak
|
|
Processing cannot be continued!}%
|
|
\endgroup
|
|
\batchmode \errmessage{}\csname @@end\endcsname\end\relax
|
|
\csname endinput\endcsname
|
|
}%
|
|
\expandafter\ifx\csname eTeXversion\endcsname\relax\else
|
|
\ifnum\eTeXversion <2
|
|
\def\reserved@b{ V 2}%
|
|
\else
|
|
\let\reserved@a\endgroup
|
|
\fi
|
|
\fi
|
|
\expandafter\reserved@a\expandafter{\reserved@b}
|
|
\RequirePackage{keyval}
|
|
\providecommand*\kernel@ifstar[1]{\kernel@ifnextchar*{\@firstoftwo{#1}}}
|
|
\newcommand{\rloop}[1]{}
|
|
\long\def\rloop#1\repeat{%
|
|
\ifdefined\iterate
|
|
\edef\iterate{\unexpanded{#1\relax\expandafter\iterate\fi\def\iterate}%
|
|
{\unexpanded\expandafter{\iterate}}}%
|
|
\else
|
|
\def\iterate{#1\relax\expandafter\iterate\fi\let\iterate\relax}%
|
|
\fi
|
|
\iterate
|
|
}
|
|
\newcommand{\scr@ifundefinedorrelax}[1]{%
|
|
\ifcsname #1\endcsname
|
|
\expandafter\ifx\csname #1\endcsname\relax
|
|
\expandafter\expandafter\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\expandafter\expandafter\@secondoftwo
|
|
\fi
|
|
\else
|
|
\expandafter\@firstoftwo
|
|
\fi
|
|
}
|
|
\newcommand*{\DefineFamily}[1]{%
|
|
\scr@ifundefinedorrelax{#1@key@familylist}{%
|
|
\@namedef{#1@key@familylist}{}%
|
|
}{}%
|
|
}
|
|
\newcommand*{\scr@if@family}[2]{%
|
|
\scr@ifundefinedorrelax{#1@key@familylist}{%
|
|
\PackageError{scrbase}{%
|
|
unknown family `#1'%
|
|
}{%
|
|
You've tried to #2 for family `#1'.\MessageBreak
|
|
This my be done only for previous defined families.\MessageBreak
|
|
You should call `\string\DefineFamily{#1}' first.%
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand*{\DefineFamilyMember}[2][.\@currname.\@currext]{%
|
|
\scr@if@family{#2}{define a family member}{%
|
|
\edef\reserved@a{%
|
|
\noexpand\in@{#2#1,}{\csname #2@key@familylist\endcsname}}%
|
|
\reserved@a
|
|
\ifin@\else
|
|
\expandafter\edef\csname #2@key@familylist\endcsname{%
|
|
\@nameuse{#2@key@familylist}#2#1,}%
|
|
\fi
|
|
}%
|
|
}
|
|
\newcommand*{\scr@if@familymember}[3]{%
|
|
\scr@if@family{#2}{#3}{%
|
|
\IfArgIsEmpty{#1}{%
|
|
\@firstofone
|
|
}{%
|
|
\edef\reserved@a{%
|
|
\noexpand\in@{#2#1,}{\csname #2@key@familylist\endcsname}}%
|
|
\reserved@a
|
|
\ifin@
|
|
\expandafter\@firstofone
|
|
\else
|
|
\PackageError{scrbase}{%
|
|
unknown member `#1' at family `#2'%
|
|
}{%
|
|
You've tried to #3 for member `#1' of family `#2'.\MessageBreak
|
|
This my be done only for previous defined family members.\MessageBreak
|
|
You should call `\string\DefineFamilyMember[{#1}]{#2}' first.%
|
|
}%
|
|
\expandafter\@gobble
|
|
\fi
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand*{\DefineFamilyKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar[%]
|
|
{%
|
|
\edef\reserved@a{#1}%
|
|
\expandafter\scr@define@family@key
|
|
\expandafter{\reserved@a}{#2}{#3}%
|
|
}{%
|
|
\edef\reserved@a{#1}%
|
|
\expandafter\scr@define@family@key@nodefault
|
|
\expandafter{\reserved@a}{#2}{#3}%
|
|
}%
|
|
}
|
|
\newcommand{\scr@define@family@key}{}
|
|
\long\def\scr@define@family@key#1#2#3[#4]#5{%
|
|
\scr@if@familymember{#1}{#2}{define a key}{%
|
|
\define@key{#2#1}{#3}[{#4}]{%
|
|
\def\FamilyOfKey{#2}\def\FamilyMemberOfKey{#1}%
|
|
\FamilyKeyStateUnknown
|
|
#5%
|
|
\def\FamilyOfKey{#2}\def\FamilyMemberOfKey{#1}%
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand{\scr@define@family@key@nodefault}[4]{%
|
|
\scr@if@familymember{#1}{#2}{define a key}{%
|
|
\define@key{#2#1}{#3}{%
|
|
\def\FamilyOfKey{#2}\def\FamilyMemberOfKey{#1}%
|
|
\FamilyKeyStateUnknown
|
|
#4%
|
|
\def\FamilyOfKey{#2}\def\FamilyMemberOfKey{#1}%
|
|
}%
|
|
\@namedef{KV@#2#1@#3@default}{%
|
|
\def\FamilyOfKey{#2}\def\FamilyMemberOfKey{#1}%
|
|
\FamilyKeyStateNeedValue
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand*{\RelaxFamilyKey}[3][.\@currname.\@currext]{%
|
|
\scr@ifundefinedorrelax{KV@#2#1@#3}{}{%
|
|
\expandafter\let\csname KV@#2#1@#3\endcsname\relax
|
|
}%
|
|
\scr@ifundefinedorrelax{KV@#2#1@#3@default}{}{%
|
|
\expandafter\let\csname KV@#2#1@#3@default\endcsname\relax
|
|
}%
|
|
}
|
|
\newcommand*{\FamilyKeyState}{}
|
|
\newcommand*{\FamilyKeyStateUnknown}{%
|
|
\let\FamilyKeyState\FamilyKeyStateUnknown
|
|
}
|
|
\newcommand*{\FamilyKeyStateUnknownValue}{%
|
|
\let\FamilyKeyState\FamilyKeyStateUnknownValue
|
|
}
|
|
\newcommand*{\FamilyKeyStateNeedValue}{%
|
|
\let\FamilyKeyState\FamilyKeyStateNeedValue
|
|
}
|
|
\newcommand*{\FamilyKeyStateProcessed}{%
|
|
\let\FamilyKeyState\FamilyKeyStateProcessed
|
|
}
|
|
\let\FamilyKeyState\FamilyKeyStateUnknown
|
|
\newcommand*{\FamilyOfKey}{}
|
|
\newcommand*{\FamilyMemberOfKey}{}
|
|
\newcommand*{\@globaloptionslist}{}
|
|
\newcommand*{\FamilyProcessOptions}[2][.\@currname.\@currext]{%
|
|
\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
|
|
\edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
|
|
\ifx\@currext\@clsextension\else
|
|
\let\@globaloptionslist\@classoptionslist
|
|
\scr@ifundefinedorrelax{XKV@classoptionslist}{%
|
|
}{%
|
|
\ifx\XKV@classoptionslist\@empty
|
|
\else
|
|
\let\@globaloptionslist\XKV@classoptionslist
|
|
\fi
|
|
}%
|
|
\scr@ifundefinedorrelax{@globaloptionslist}{}{%
|
|
\@for\CurrentOption:=\@globaloptionslist\do{%
|
|
\ifx\CurrentOption\@empty\else
|
|
\@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}%
|
|
\ifin@
|
|
\@use@ption
|
|
\expandafter\let\csname ds@\CurrentOption\endcsname\@empty
|
|
\else
|
|
\scr@ifprocess@curroption{#1}{#2}{%
|
|
\@expandtwoargs\@removeelement\CurrentOption
|
|
\@unusedoptionlist\@unusedoptionlist
|
|
}{}%
|
|
\fi
|
|
\fi
|
|
}%
|
|
}%
|
|
\fi
|
|
\@for\CurrentOption:=\@curroptions\do{%
|
|
\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
|
|
}%
|
|
\@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}%
|
|
\@nameuse{scr@after@options@#2@hook}%
|
|
}
|
|
\@onlypreamble\FamilyProcessOptions
|
|
\newcommand*{\BeforeFamilyProcessOptions}[3][.\@currname.\@currext]{%
|
|
\scr@ifundefinedorrelax{scr@before@process@options@#2#1@hook}{%
|
|
\@namedef{scr@before@process@options@#2#1@hook}{#3}%
|
|
}{%
|
|
\expandafter\g@addto@macro
|
|
\csname scr@before@process@options@#2#1@hook\endcsname{#3}%
|
|
}%
|
|
}
|
|
\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#1\endcsname
|
|
}
|
|
\newcommand*{\scr@AtEndOfFamilyOptions@immediate}{%
|
|
\kernel@ifstar {\@firstofone}{\@firstofone}%
|
|
}
|
|
\newcommand*{\AtEndOfFamilyOptions}{}
|
|
\let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate
|
|
\newcommand*\scr@ifprocess@curroption[2]{%
|
|
\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}{%
|
|
\let\FamilyKeyState\OptionNotUsed
|
|
}{%
|
|
\protected@edef\reserved@b{\noexpand\setkeys{#2#1}{{\CurrentOption}}%
|
|
\noexpand\def\noexpand\CurrentOption{\CurrentOption}}%
|
|
\reserved@b
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknown
|
|
\PackageInfo{scrbase}{Unknown processing state.\MessageBreak
|
|
Processing option `\CurrentOption'\MessageBreak
|
|
of member `#1' of family\MessageBreak
|
|
`#2' doesn't set\MessageBreak
|
|
a valid state. This will be interpreted\MessageBreak
|
|
as \string\FamilyKeyStateProcessed
|
|
}%
|
|
\FamilyKeyStateProcessed
|
|
\fi
|
|
}{%
|
|
\let\FamilyKeyState\OptionNotUsed
|
|
}%
|
|
}{%
|
|
\protected@edef\reserved@b{\noexpand\setkeys{#2}{{\CurrentOption}}%
|
|
\noexpand\def\noexpand\CurrentOption{\CurrentOption}}%
|
|
\reserved@b
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknown
|
|
\PackageInfo{scrbase}{Unknown processing state.\MessageBreak
|
|
Processing option `\CurrentOption'\MessageBreak
|
|
of family `#2'\MessageBreak
|
|
doesn't set a valid state.\MessageBreak
|
|
This will be interpreted\MessageBreak
|
|
as \string\FamilyKeyStateProcessed
|
|
}%
|
|
\FamilyKeyStateProcessed
|
|
\fi
|
|
\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}}%
|
|
\noexpand\def\noexpand\CurrentOption{\CurrentOption}}%
|
|
\ifx\FamilyKeyState\FamiliyKeyStateProcessed
|
|
\reserved@b
|
|
\FamilyKeyStateProcessed
|
|
\else
|
|
\reserved@b
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknown
|
|
\PackageInfo{scrbase}{Unknown processing state.\MessageBreak
|
|
Processing option `\CurrentOption'\MessageBreak
|
|
of member `#1' of family\MessageBreak
|
|
`#2' doesn't set\MessageBreak
|
|
a valid state. This will be interpreted\MessageBreak
|
|
as \string\FamilyKeyStateProcessed
|
|
}%
|
|
\FamilyKeyStateProcessed
|
|
\fi
|
|
\fi
|
|
}%
|
|
}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}
|
|
\def\@tempa#1{%
|
|
\long\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}%
|
|
\long\def\scr@sp@b#1##1 \@nil{\scr@sp@c##1}%
|
|
}
|
|
\@tempa{ }
|
|
\long\def\scr@sp@c#1\@nil#2\relax#3{\@temptokena{#1}\edef#3{\the\@temptokena}}
|
|
\newcommand{\IfArgIsEmpty}[1]{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}
|
|
\@ifundefined{l@addto@macro}{}{%
|
|
\begingroup
|
|
\long\def\reserved@a#1#2{%
|
|
\edef#1{\unexpanded\expandafter{#1#2}}%
|
|
}%
|
|
\ifx\reserved@a\l@addto@macro\else
|
|
\PackageWarning{scrbase}{%
|
|
Someone also uses macro name \string\l@addto@macro.\MessageBreak
|
|
When KOMA-Script author decided to use macro name\MessageBreak
|
|
\string\l@addto@macro\space first, there was no other
|
|
free\MessageBreak
|
|
LaTeX package using this macro name.\MessageBreak
|
|
In the meantime other package authers decided to use\MessageBreak
|
|
same macro name, but unfortunatly not all of those\MessageBreak
|
|
are compatible with KOMA-Script's definition, e.g.,\MessageBreak
|
|
while adding definitions with arguments to macros.\MessageBreak
|
|
Because of such potentially incompatible definitions,\MessageBreak
|
|
KOMA-Script will redefine the command now.\MessageBreak
|
|
Please ask the author of the other package to\MessageBreak
|
|
rename his macro, if a problem results in the\MessageBreak
|
|
redefinition%
|
|
}%
|
|
\fi
|
|
\endgroup
|
|
}
|
|
\long\def\l@addto@macro#1#2{%
|
|
\edef#1{\unexpanded\expandafter{#1#2}}%
|
|
}%
|
|
%%% From File: $Id: scrkernel-basics.dtx 3465 2020-03-07 10:23:56Z kohm $
|
|
%%% (run: option)
|
|
\DefineFamily{KOMA}
|
|
\DefineFamilyMember{KOMA}
|
|
\DefineFamilyKey{KOMA}{internalonly}[\relax]{%
|
|
\PackageInfo{scrbase}{Ignoring deprecated option `internalonly'}%
|
|
\FamilyKeyStateProcessed
|
|
}
|
|
\AtEndOfPackage{%
|
|
\RelaxFamilyKey[.scrbase.sty]{KOMA}{internalonly}%
|
|
}
|
|
\FamilyProcessOptions{KOMA}\relax
|
|
%%% From File: $Id: scrkernel-language.dtx 3480 2020-04-13 09:39:03Z kohm $
|
|
%%% (run: option)
|
|
%%% From File: $Id: scrlfile.dtx 3447 2020-01-06 16:40:47Z kohm $
|
|
\RequirePackage{scrlfile}[%
|
|
2020/07/22 v3.31 KOMA-Script
|
|
]
|
|
%%% From File: $Id: scrkernel-basics.dtx 3465 2020-03-07 10:23:56Z kohm $
|
|
%%% (run: body)
|
|
\newcommand*{\XdivY}[2]{%
|
|
\numexpr ( #1 + #2 / 2 ) / #2 - 1\relax
|
|
}
|
|
\newcommand*{\XmodY}[2]{%
|
|
\numexpr #1 - #2 * \XdivY{#1}{#2}\relax
|
|
}
|
|
\newcommand{\scr@ForEachTrimmedListElement}[2]{%
|
|
\begingroup
|
|
\def\reserved@a{\endgroup}%
|
|
\@for \reserved@b:=#1 \do {%
|
|
\scr@trim@spaces\reserved@b
|
|
\ifx\reserved@b\@empty\else
|
|
\edef\reserved@a{%
|
|
\unexpanded\expandafter{\reserved@a#2}%
|
|
{\unexpanded\expandafter{\reserved@b}}%
|
|
}%
|
|
\fi
|
|
}%
|
|
\reserved@a
|
|
}
|
|
\newcommand\scr@trim@spaces[1]{%
|
|
\expandafter\scr@sp@def\expandafter#1\expandafter{#1}%
|
|
}
|
|
\newif\if@atdocument
|
|
\AtBeginDocument{\@atdocumenttrue}
|
|
\@onlypreamble\@atdocumentrue
|
|
\@onlypreamble\@atdocumentfalse
|
|
\newcommand*{\Ifundefinedorrelax}{\scr@ifundefinedorrelax}%
|
|
\providecommand*{\ifnotundefined}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifnotundefined'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifnotundefined' by `\string\Ifnotundefined'%
|
|
}%
|
|
\Ifnotundefined
|
|
}
|
|
\newcommand{\Ifnotundefined}[1]{%
|
|
\ifcsname #1\endcsname
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}
|
|
\providecommand*{\ifstr}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifstr'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifstr' by `\string\Ifstr'%
|
|
}%
|
|
\Ifstr
|
|
}
|
|
\newcommand\Ifstr[2]{%
|
|
\begingroup\protected@edef\reserved@a{#1}\protected@edef\reserved@b{#2}%
|
|
\ifx\reserved@a\reserved@b
|
|
\endgroup\expandafter\@firstoftwo
|
|
\else
|
|
\endgroup\expandafter\@secondoftwo
|
|
\fi
|
|
}
|
|
\providecommand*{\ifstrstart}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifstrstart'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifstrstart' by `\string\Ifstrstart'%
|
|
}%
|
|
\Ifstrstart
|
|
}
|
|
\newcommand*{\Ifstrstart}[2]{%
|
|
\begingroup
|
|
\edef\reserved@a{\noexpand\@ifstrstart{#1}{#2}}%
|
|
\reserved@a{\aftergroup\@firstoftwo}{\aftergroup\@secondoftwo}%
|
|
\endgroup
|
|
}
|
|
\newcommand*{\@ifstrstart}[2]{%
|
|
\def\reserved@a ##1#2##2\@nil{%
|
|
\if\relax\detokenize{##1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}%
|
|
\reserved@a#1#2\@nil
|
|
}
|
|
\newcommand*{\ifislengthprimitive}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifislengthprimitive#1\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifislengthprimitive}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifislengthprimitive
|
|
}{%
|
|
\def\reserved@c{\aftergroup\scr@secondoftwoAfterNil}%
|
|
\@for\reserved@a:=\baselineskip,\dp,\hsize,\ht,\lineskip,%
|
|
\parindent,\parskip,\pdfpageheight,\pdfpagewidth,%
|
|
\wd,\vsize \do {%
|
|
\expandafter\Ifstr\expandafter{\expandafter\string\reserved@a}{%
|
|
\meaning #1%
|
|
}{%
|
|
\def\reserved@c{\aftergroup\scr@TestDimenAssignTillNil}%
|
|
}%
|
|
}%
|
|
\reserved@c
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\providecommand*{\ifisdimen}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisdimen'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisdimen' by `\string\Ifisdimen'%
|
|
}%
|
|
\Ifisdimen
|
|
}
|
|
\newcommand*{\Ifisdimen}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisdimen#1\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisdimen}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisdimen
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\dimen}{%
|
|
\aftergroup\scr@TestDimenAssignTillNil
|
|
}{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\newcommand*\scr@TestDimenAssignTillNil{}
|
|
\def\scr@TestDimenAssignTillNil#1\@nil{%
|
|
\begingroup
|
|
\afterassignment\scr@AfterEndGroupIfArgIsRelaxTillNnil
|
|
\@tempdima=#1\relax\@nnil
|
|
}
|
|
\newcommand*\scr@AfterEndGroupIfArgIsRelaxTillNnil{}
|
|
\def\scr@AfterEndGroupIfArgIsRelaxTillNnil#1\@nnil{%
|
|
\endgroup
|
|
\Ifstr{\detokenize{#1}}{\detokenize{\relax}}{\@firstoftwo}{%
|
|
\Ifstrstart{\detokenize{#1}}{\detokenize{\relax}}{%
|
|
\scr@IfArgIsRelaxAfterRelaxTillNnil #1\@nnil
|
|
}{\@secondoftwo}%
|
|
}%
|
|
}
|
|
\newcommand*\scr@IfArgIsRelaxAfterRelaxTillNnil{}
|
|
\def\scr@IfArgIsRelaxAfterRelaxTillNnil \relax#1\@nnil{%
|
|
\Ifstr{\detokenize{#1}}{\detokenize{\relax}}{\@firstoftwo}{%
|
|
\Ifstrstart{\detokenize{#1}}{\detokenize{\relax}}{%
|
|
\scr@IfArgIsRelaxAfterRelaxTillNnil #1\@nnil
|
|
}{\@secondoftwo}%
|
|
}%
|
|
}
|
|
\newcommand*{\scr@secondoftwoAfterNil}{\scr@@secondoftwoAfterNil\@empty}
|
|
\newcommand*{\scr@@secondoftwoAfterNil}{}
|
|
\def\scr@@secondoftwoAfterNil#1\@nil{\@secondoftwo}
|
|
\providecommand*{\ifisskip}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisskip'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisskip' by `\string\Ifisskip'%
|
|
}%
|
|
\Ifisskip
|
|
}
|
|
\newcommand*{\Ifisskip}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisskip#1\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisskip}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisskip
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\skip}{%
|
|
\aftergroup\scr@TestSkipAssignTillNil
|
|
}{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\newcommand*\scr@TestSkipAssignTillNil{}
|
|
\def\scr@TestSkipAssignTillNil#1\@nil{%
|
|
\begingroup
|
|
\afterassignment\scr@AfterEndGroupIfArgIsRelaxTillNnil
|
|
\@tempskipa=#1\relax\@nnil
|
|
}
|
|
\providecommand*{\ifiscount}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifiscount'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifiscount' by `\string\Ifiscount'%
|
|
}%
|
|
\Ifiscount
|
|
}
|
|
\newcommand*{\Ifiscount}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifiscount#1\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifiscount}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifiscount
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\count}{%
|
|
\aftergroup\scr@TestCountAssignTillNil
|
|
}{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\newcommand*\scr@TestCountAssignTillNil{}
|
|
\def\scr@TestCountAssignTillNil#1\@nil{%
|
|
\begingroup
|
|
\afterassignment\scr@AfterEndGroupIfArgIsRelaxTillNnil
|
|
\@tempcnta=#1\relax\@nnil
|
|
}
|
|
\providecommand*{\ifisdimexpr}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisdimexpr'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisdimexpr' by `\string\Ifisdimexpr'%
|
|
}%
|
|
\Ifisdimexpr
|
|
}
|
|
\newcommand*{\Ifisdimexpr}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisdimexpr#1\relax\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisdimexpr}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisdimexpr
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\dimexpr}{%
|
|
\aftergroup\scr@TestDimenAssignTillNil
|
|
}{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\providecommand*{\ifisglueexpr}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisglueexpr'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisglueexpr' by `\string\Ifisglueexpr'%
|
|
}%
|
|
\Ifisglueexpr
|
|
}
|
|
\newcommand*{\Ifisglueexpr}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisglueexpr#1\relax\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisglueexpr}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisglueexpr
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\glueexpr}{%
|
|
\aftergroup\scr@TestSkipAssignTillNil
|
|
}{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\providecommand*{\ifisnumexpr}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisnumexpr'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisnumexpr' by `\string\Ifisnumexpr'%
|
|
}%
|
|
\Ifisnumexpr
|
|
}
|
|
\newcommand*{\Ifisnumexpr}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisnumexpr#1\relax\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisnumexpr}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisnumexpr
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\numexpr}{%
|
|
\aftergroup\scr@TestCountAssignTillNil
|
|
}{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\newcommand*{\ifisdefchar}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisdefchar#1\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisdefchar}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisdefchar
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\char\string"}{%
|
|
\aftergroup\scr@TestCountAssignTillNil
|
|
}{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
}%
|
|
\endgroup
|
|
#1%
|
|
}
|
|
\providecommand*{\ifiscounter}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifiscounter'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifiscounter' by `\string\Ifiscounter'%
|
|
}%
|
|
\Ifiscounter
|
|
}
|
|
\newcommand*{\Ifiscounter}[1]{%
|
|
\begingroup
|
|
\scr@ifundefinedorrelax{c@#1}{%
|
|
\aftergroup\@secondoftwo
|
|
}{%
|
|
\aftergroup\@firstoftwo
|
|
}%
|
|
\endgroup
|
|
}
|
|
\providecommand*{\ifisinteger}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisinteger'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisinteger' by `\string\Ifisinteger'%
|
|
}%
|
|
\Ifisinteger
|
|
}
|
|
\newcommand*{\Ifisinteger}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisinteger#1\@nil}%
|
|
}
|
|
\def\scr@ifisinteger#1{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisinteger\aftergroup#1%
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\detokenize{the character}}{%
|
|
\if #1-\aftergroup\scr@ifisinteger
|
|
\else
|
|
\if #1+\aftergroup\scr@ifisinteger
|
|
\else
|
|
\ifnum 0=0\if #10\else\if #11\else\if #12\else\if #13\else
|
|
\if #14\else\if #15\else\if #16\else\if #17\else
|
|
\if #18\else\if #19\else 1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
|
|
\relax
|
|
\aftergroup\scr@TestCountAssignTillNil
|
|
\aftergroup#1%
|
|
\else
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
\aftergroup#1%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\char\string"}{%
|
|
\aftergroup\scr@TestCountAssignTillNil
|
|
}{%
|
|
\def\reserved@c{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
}%
|
|
\@for\reserved@a:=\abovedisplayskip,\abovedisplayshortskip,%
|
|
\adjdemerits,%
|
|
\baselineskip,\belowdisplayskip,%
|
|
\belowdisplayshortskip,\binoppenalty,\boxmaxdepth,%
|
|
\brokenpenalty,%
|
|
\clubpenalty,\count,%
|
|
\dimen,\dimexpr,\doublehyphendemerits,\dp,%
|
|
\emergenystretch,\exhyphenpenalty,%
|
|
\finalhyphendemerits,%
|
|
\glueexpr,%
|
|
\hbadness,\hfuzz,\hsize,\ht,\hyphenpenalty,%
|
|
\lastskip,\lastpenalty,\linepenalty,%
|
|
\lineskip,\lineskiplimit,%
|
|
\maxdepth,\numexpr,%
|
|
\overfullrule,%
|
|
\parfillskip,\parindent,\parskip,%
|
|
\pdfpageheight,\pdfpagewidth,%
|
|
\predisplaypenalty,\pretolerance,%
|
|
\relpenalty,\widowpenalty,%
|
|
\skip,\splitmaxdepth,\splittopskip,%
|
|
\tolerance,\topskip,%
|
|
\wd,\vbadness,\vfuzz,\vsize
|
|
\do {%
|
|
\expandafter\Ifstr\expandafter{\expandafter\string\reserved@a}{%
|
|
\meaning #1%
|
|
}{%
|
|
\def\reserved@c{\aftergroup\scr@TestCountAssignTillNil}%
|
|
}%
|
|
}%
|
|
\reserved@c
|
|
}%
|
|
\aftergroup#1%
|
|
}%
|
|
}%
|
|
\endgroup
|
|
}
|
|
\newcommand*{\scr@ifrelax@to@nnil}{}
|
|
\def\scr@ifrelax@to@nnil#1\@nnil{%
|
|
\begingroup
|
|
\def\reserved@a{#1}\def\reserved@b{\relax}%
|
|
\ifx\reserved@a\reserved@b
|
|
\aftergroup\@firstoftwo
|
|
\else
|
|
\aftergroup\@secondoftwo
|
|
\fi
|
|
\endgroup
|
|
}
|
|
\providecommand*{\ifisdimension}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisdimension'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisdimension' by `\string\Ifisdimension'%
|
|
}%
|
|
\Ifisdimension
|
|
}
|
|
\newcommand*{\Ifisdimension}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisdimension#1\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisdimension}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisdimension\aftergroup#1%
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\detokenize{the character}}{%
|
|
\if #1-\aftergroup\scr@ifisdimension
|
|
\else
|
|
\if #1+\aftergroup\scr@ifisdimension
|
|
\else
|
|
\if #1.%
|
|
\aftergroup\scr@TestDimensionAssignTillNil
|
|
\aftergroup#1%
|
|
\else
|
|
\if #1,%
|
|
\aftergroup\scr@TestDimensionAssignTillNil
|
|
\aftergroup#1%
|
|
\else
|
|
\ifnum 0=0\if #10\else\if #11\else\if #12\else\if #13\else
|
|
\if #14\else\if #15\else\if #16\else\if #17\else
|
|
\if #18\else\if #19\else 1\fi\fi
|
|
\fi\fi\fi\fi
|
|
\fi\fi\fi\fi
|
|
\relax
|
|
\aftergroup\scr@TestDimensionAssignTillNil
|
|
\aftergroup#1%
|
|
\else
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
\aftergroup#1%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\char\string"}{%
|
|
\aftergroup\scr@TestDimensionAssignTillNil
|
|
}{%
|
|
\def\reserved@c{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
\aftergroup\@empty
|
|
}%
|
|
\@for\reserved@a:=\abovedisplayskip,\abovedisplayshortskip,%
|
|
\adjdemerits,%
|
|
\baselineskip,\belowdisplayskip,%
|
|
\belowdisplayshortskip,\binoppenalty,\boxmaxdepth,%
|
|
\brokenpenalty,%
|
|
\clubpenalty,\count,%
|
|
\dimen,\dimexpr,\doublehyphendemerits,\dp,%
|
|
\emergenystretch,\exhyphenpenalty,%
|
|
\finalhyphendemerits,%
|
|
\glueexpr,%
|
|
\hbadness,\hfuzz,\hsize,\ht,\hyphenpenalty,%
|
|
\lastskip,\lastpenalty,\linepenalty,%
|
|
\lineskip,\lineskiplimit,%
|
|
\maxdepth,\numexpr,%
|
|
\overfullrule,%
|
|
\parfillskip,\parindent,\parskip,%
|
|
\pdfpageheight,\pdfpagewidth,%
|
|
\predisplaypenalty,\pretolerance,%
|
|
\relpenalty,\widowpenalty,%
|
|
\skip,\splitmaxdepth,\splittopskip,%
|
|
\tolerance,\topskip,%
|
|
\wd,\vbadness,\vfuzz,\vsize
|
|
\do {%
|
|
\expandafter\Ifstr\expandafter{\expandafter\string\reserved@a}{%
|
|
\meaning #1%
|
|
}{%
|
|
\def\reserved@c{\aftergroup\scr@TestDimensionAssignTillNil}%
|
|
}%
|
|
}%
|
|
\reserved@c
|
|
}%
|
|
\aftergroup#1%
|
|
}%
|
|
}%
|
|
\endgroup
|
|
}
|
|
\newcommand*\scr@TestDimensionAssignTillNil{}
|
|
\def\scr@TestDimensionAssignTillNil#1\@nil{%
|
|
\begingroup
|
|
\afterassignment\scr@AfterEndGroupIfArgIsRelaxTillptNnil
|
|
\@tempdima=#1pt\@nnil
|
|
}
|
|
\newcommand*\scr@AfterEndGroupIfArgIsRelaxTillptNnil{}
|
|
\def\scr@AfterEndGroupIfArgIsRelaxTillptNnil#1\@nnil{%
|
|
\endgroup
|
|
\Ifstr{\detokenize{#1}}{\detokenize{pt}}{\@firstoftwo}{%
|
|
\Ifstrstart{\detokenize{#1}}{\detokenize{\relax}}{%
|
|
\scr@IfArgIsRelaxAfterRelaxTillptNnil #1\@nnil
|
|
}{\@secondoftwo}%
|
|
}%
|
|
}
|
|
\newcommand*\scr@IfArgIsRelaxAfterRelaxTillptNnil{}
|
|
\def\scr@IfArgIsRelaxAfterRelaxTillptNnil \relax#1pt\@nnil{%
|
|
\Ifstr{\detokenize{#1}}{\detokenize{pt}}{\@firstoftwo}{%
|
|
\Ifstrstart{\detokenize{#1}}{\detokenize{\relax}}{%
|
|
\scr@IfArgIsRelaxAfterRelaxTillptNnil #1\@nnil
|
|
}{\@secondoftwo}%
|
|
}%
|
|
}
|
|
\providecommand*{\ifisglue}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifisglue'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifisglue' by `\string\Ifisglue'%
|
|
}%
|
|
\Ifisglue
|
|
}
|
|
\newcommand*{\Ifisglue}[1]{%
|
|
\IfArgIsEmpty{#1}{\@secondoftwo}{\scr@ifisglue#1\@nil}%
|
|
}
|
|
\newcommand*{\scr@ifisglue}[1]{%
|
|
\begingroup
|
|
\Ifstrstart{\meaning #1}{\detokenize{macro:}}{%
|
|
\aftergroup\expandafter\aftergroup\scr@ifisglue\aftergroup#1%
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\detokenize{the character}}{%
|
|
\if #1-\aftergroup\scr@ifisglue
|
|
\else
|
|
\if #1+\aftergroup\scr@ifisglue
|
|
\else
|
|
\if #1.%
|
|
\aftergroup\scr@TestGlueAssignTillNil
|
|
\aftergroup#1%
|
|
\else
|
|
\if #1,%
|
|
\aftergroup\scr@TestGlueAssignTillNil
|
|
\aftergroup#1%
|
|
\else
|
|
\ifnum 0=0\if #10\else\if #11\else\if #12\else\if #13\else
|
|
\if #14\else\if #15\else\if #16\else\if #17\else
|
|
\if #18\else\if #19\else 1\fi\fi
|
|
\fi\fi\fi\fi
|
|
\fi\fi\fi\fi
|
|
\relax
|
|
\aftergroup\scr@TestGlueAssignTillNil
|
|
\aftergroup#1%
|
|
\else
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
\aftergroup#1%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}{%
|
|
\Ifstrstart{\meaning #1}{\string\char\string"}{%
|
|
\aftergroup\scr@TestGlueAssignTillNil
|
|
}{%
|
|
\def\reserved@c{%
|
|
\aftergroup\scr@secondoftwoAfterNil
|
|
\aftergroup\@empty
|
|
}%
|
|
\@for\reserved@a:=\abovedisplayskip,\abovedisplayshortskip,%
|
|
\adjdemerits,%
|
|
\baselineskip,\belowdisplayskip,%
|
|
\belowdisplayshortskip,\binoppenalty,\boxmaxdepth,%
|
|
\brokenpenalty,%
|
|
\clubpenalty,\count,%
|
|
\dimen,\dimexpr,\doublehyphendemerits,\dp,%
|
|
\emergenystretch,\exhyphenpenalty,%
|
|
\finalhyphendemerits,%
|
|
\glueexpr,%
|
|
\hbadness,\hfuzz,\hsize,\ht,\hyphenpenalty,%
|
|
\lastskip,\lastpenalty,\linepenalty,%
|
|
\lineskip,\lineskiplimit,%
|
|
\maxdepth,\numexpr,%
|
|
\overfullrule,%
|
|
\parfillskip,\parindent,\parskip,%
|
|
\pdfpageheight,\pdfpagewidth,%
|
|
\predisplaypenalty,\pretolerance,%
|
|
\relpenalty,\widowpenalty,%
|
|
\skip,\splitmaxdepth,\splittopskip,%
|
|
\tolerance,\topskip,%
|
|
\wd,\vbadness,\vfuzz,\vsize
|
|
\do {%
|
|
\expandafter\Ifstr\expandafter{\expandafter\string\reserved@a}{%
|
|
\meaning #1%
|
|
}{%
|
|
\def\reserved@c{\aftergroup\scr@TestGlueAssignTillNil}%
|
|
}%
|
|
}%
|
|
\reserved@c
|
|
}%
|
|
\aftergroup#1%
|
|
}%
|
|
}%
|
|
\endgroup
|
|
}
|
|
\newcommand*\scr@TestGlueAssignTillNil{}
|
|
\def\scr@TestGlueAssignTillNil#1\@nil{%
|
|
\begingroup
|
|
\afterassignment\scr@AfterEndGroupIfArgIsRelaxTillptNnil
|
|
\@tempskipa=#1pt\@nnil
|
|
}
|
|
\providecommand*{\ifnumber}{%
|
|
\scr@ifundefinedorrelax{ver@babelbib.sty}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifnumber'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifnumber' by `\string\Ifnumber'%
|
|
}%
|
|
}{}%
|
|
\Ifnumber
|
|
}
|
|
\newcommand\Ifnumber[1]{%
|
|
\begingroup\@tempswafalse\let\scr@next\test@number
|
|
\IfArgIsEmpty{#1}{}{\expandafter\scr@next#1\scr@next}%
|
|
\if@tempswa
|
|
\aftergroup\@firstoftwo
|
|
\else
|
|
\aftergroup\@secondoftwo
|
|
\fi
|
|
\endgroup
|
|
}
|
|
\newcommand*{\test@number}[1]{%
|
|
\ifx \scr@next#1%
|
|
\let\scr@next\relax
|
|
\else
|
|
\@tempcnta=\expandafter\expandafter\expandafter\number
|
|
\expandafter`#1\relax
|
|
\ifnum \@tempcnta>47
|
|
\ifnum \@tempcnta<58
|
|
\@tempswatrue
|
|
\else\@tempswafalse\fi
|
|
\else\@tempswafalse\fi
|
|
\if@tempswa\else\let\scr@next\gobble@till@scr@next\fi
|
|
\fi
|
|
\scr@next
|
|
}
|
|
\newcommand*{\gobble@till@scr@next}{}
|
|
\def\gobble@till@scr@next#1\scr@next{}
|
|
\providecommand*{\ifintnumber}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifintnumber'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifintnumber' by `\string\Ifintnumber'%
|
|
}%
|
|
\Ifintnumber
|
|
}
|
|
\newcommand\Ifintnumber[1]{%
|
|
\begingroup\@tempswafalse\let\scr@next\scr@test@sign
|
|
\expandafter\scr@next#1\scr@next
|
|
\if@tempswa
|
|
\aftergroup\@firstoftwo
|
|
\else
|
|
\aftergroup\@secondoftwo
|
|
\fi
|
|
\endgroup
|
|
}
|
|
\newcommand*{\scr@test@sign}[1]{%
|
|
\ifx \scr@next#1
|
|
\let\scr@next\relax
|
|
\else
|
|
\if #1-%
|
|
\else
|
|
\ifx #1+%
|
|
\else
|
|
\def\scr@next{\let\scr@next\test@number\scr@next #1}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\scr@next
|
|
}
|
|
\providecommand*{\ifdimen}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifdimen'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifdimen' by `\string\Ifdimen'%
|
|
}%
|
|
\Ifdimen
|
|
}
|
|
\newcommand{\Ifdimen}[1]{%
|
|
\begingroup\@tempswatrue\let\scr@next\test@posdimen
|
|
\expandafter\test@dimen#1\scr@next
|
|
\if@tempswa
|
|
\endgroup\expandafter\@firstoftwo
|
|
\else
|
|
\endgroup\expandafter\@secondoftwo
|
|
\fi
|
|
}
|
|
\newcommand*{\test@dimen}[1]{%
|
|
\ifx -#1\else\ifx +#1\else
|
|
\def\scr@next{\let\scr@next\test@posdimen\scr@next#1}\fi\fi
|
|
\scr@next
|
|
}
|
|
\newcommand*{\test@posdimen}[1]{%
|
|
\ifx \scr@next#1%
|
|
\@tempswafalse\let\scr@next\relax
|
|
\else
|
|
\if .#1\else\if ,#1\else
|
|
\@tempcnta=%
|
|
\expandafter\expandafter\expandafter\number\expandafter`#1\relax
|
|
\ifnum \@tempcnta>47
|
|
\ifnum \@tempcnta<58
|
|
\else\def\scr@next{\test@dimunt#1}\fi
|
|
\else\def\scr@next{\test@dimunt#1}\fi
|
|
\fi\fi
|
|
\fi
|
|
\scr@next
|
|
}
|
|
\newcommand*{\test@dimunt}{}
|
|
\def\test@dimunt#1\scr@next{%
|
|
\expandafter\test@trueunt#1truetrue\test@trueunt
|
|
}
|
|
\newcommand*{\test@trueunt}{}
|
|
\def\test@trueunt#1true#2true#3\test@trueunt{%
|
|
\edef\reserved@a{#1}%
|
|
\ifx\reserved@a\@empty\test@@ifdimunt{#2}\else\test@@ifdimunt{#1}\fi
|
|
}
|
|
\newcommand*\test@@ifdimunt[1]{%
|
|
\@tempswafalse
|
|
\Ifstr{#1}{pt}{\@tempswatrue}{%
|
|
\Ifstr{#1}{pc}{\@tempswatrue}{%
|
|
\Ifstr{#1}{in}{\@tempswatrue}{%
|
|
\Ifstr{#1}{bp}{\@tempswatrue}{%
|
|
\Ifstr{#1}{cm}{\@tempswatrue}{%
|
|
\Ifstr{#1}{mm}{\@tempswatrue}{%
|
|
\Ifstr{#1}{dd}{\@tempswatrue}{%
|
|
\Ifstr{#1}{cc}{\@tempswatrue}{%
|
|
\Ifstr{#1}{sp}{\@tempswatrue}{%
|
|
\Ifstr{#1}{ex}{\@tempswatrue}{%
|
|
\Ifstr{#1}{em}{\@tempswatrue}{%
|
|
\scr@ifpdfoutput{%
|
|
\Ifstr{#1}{px}{\@tempswatrue}{}%
|
|
}{}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand{\scr@ifpdftex}{\Ifnotundefined{pdftexversion}}
|
|
\newcommand{\scr@ifluatex}{\Ifnotundefined{luatexversion}}
|
|
\newcommand*{\scr@ifpdforluatex}{%
|
|
\scr@ifpdftex{\@firstoftwo}{\scr@ifluatex{\@firstoftwo}{\@secondoftwo}}%
|
|
}
|
|
\newcommand{\scr@ifVTeX}{\Ifnotundefined{VTeXversion}}
|
|
\newcommand{\scr@ifpdfoutput}{%
|
|
\scr@ifundefinedorrelax{pdfoutput}{%
|
|
\scr@ifundefinedorrelax{outputmode}{%
|
|
\scr@ifundefinedorrelax{OpMode}{%
|
|
\expandafter\@secondoftwo%
|
|
}{%
|
|
\ifnum\OpMode=1
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}%
|
|
}{%
|
|
\ifnum\outputmode>0
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}%
|
|
}{%
|
|
\ifnum\pdfoutput>0
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}%
|
|
}%
|
|
\providecommand*{\ifpdfoutput}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifpdfoutput'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifpdfoutput' by `\string\Ifpdfoutput'%
|
|
}%
|
|
\Ifpdfoutput
|
|
}
|
|
\newcommand*{\Ifpdfoutput}{\scr@ifpdfoutput}
|
|
\newcommand*{\scr@ifpsoutput}{%
|
|
\Ifnotundefined{if@dvips}{%
|
|
\if@dvips
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}{%
|
|
\Ifnotundefined{OpMode}{%
|
|
\ifnum\OpMode=2
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}{%
|
|
\expandafter\@secondoftwo
|
|
}%
|
|
}%
|
|
}
|
|
\providecommand*{\ifpsoutput}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifpsoutput'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifpsoutput' by `\string\Ifpsoutput'%
|
|
}%
|
|
\Ifpsoutput
|
|
}
|
|
\newcommand*{\Ifpsoutput}{\scr@ifpsoutput}
|
|
\newcommand*{\scr@ifdvioutput}{%
|
|
\scr@ifundefinedorrelax{pdfoutput}{%
|
|
\scr@ifundefinedorrelax{outputmode}{%
|
|
\scr@ifundefinedorrelax{OpMode}{%
|
|
\expandafter\@firstoftwo
|
|
}{%
|
|
\ifnum\OpMode=0
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}%
|
|
}{%
|
|
\ifnum\outputmode>0
|
|
\expandafter\@secondoftwo
|
|
\else
|
|
\expandafter\@firstoftwo
|
|
\fi
|
|
}%
|
|
}{%
|
|
\ifnum\pdfoutput=0
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}%
|
|
}
|
|
\providecommand*{\ifdvioutput}{%
|
|
\PackageWarning{scrbase}{Usage of deprecated command
|
|
`\string\ifdvioutput'.\MessageBreak
|
|
The command has been renamed because of a\MessageBreak
|
|
recommendation of The LaTeX Project Team.\MessageBreak
|
|
Please replace `\string\ifdvioutput' by `\string\Ifdvioutput'%
|
|
}%
|
|
\Ifdvioutput
|
|
}
|
|
\newcommand*{\Ifdvioutput}{\scr@ifdvioutput}
|
|
\newcommand*{\scr@smashdp}[1]{%
|
|
\begingroup
|
|
\def\finsm@sh{\dp\z@\z@\box\z@}%
|
|
\ifmmode
|
|
\expandafter\mathpalette\expandafter\mathsm@sh
|
|
\else
|
|
\expandafter\makesm@sh
|
|
\fi
|
|
{#1}%
|
|
\endgroup
|
|
}
|
|
\newcommand*{\IfRTL}{%
|
|
\scr@ifundefinedorrelax{if@RTL}{\@secondoftwo}{%
|
|
\expandafter\ifx\csname if@RTL\expandafter\endcsname
|
|
\csname iftrue\endcsname
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}
|
|
}
|
|
\newcommand*{\IfLTR}{%
|
|
\scr@ifundefinedorrelax{if@RTL}{\@firstoftwo}{%
|
|
\expandafter\ifx\csname if@RTL\expandafter\endcsname
|
|
\csname iftrue\endcsname
|
|
\expandafter\@secondoftwo
|
|
\else
|
|
\expandafter\@firstoftwo
|
|
\fi
|
|
}
|
|
}
|
|
\providecommand*{\PackageInfoNoLine}[2]{%
|
|
\PackageInfo{#1}{#2\@gobble}%
|
|
}
|
|
\providecommand*{\ClassInfoNoLine}[2]{%
|
|
\ClassInfo{#1}{#2\@gobble}%
|
|
}
|
|
\providecommand*\@removefromreset[2]{%
|
|
{%
|
|
\expandafter\let\csname c@#1\endcsname\@removefromreset
|
|
\def\@elt##1{%
|
|
\expandafter\ifx\csname c@##1\endcsname\@removefromreset
|
|
\else\noexpand\@elt{##1}\fi
|
|
}%
|
|
\expandafter\xdef\csname cl@#2\endcsname{\csname cl@#2\endcsname}%
|
|
}%
|
|
}
|
|
\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}%
|
|
\def\marks##1##2{\scr@ActiveMkBothtrue}%
|
|
\scr@ActiveMkBothfalse
|
|
\setbox\@tempboxa\vbox{\@mkboth{}{}}%
|
|
\endgroup
|
|
\ifscr@ActiveMkBoth
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
}
|
|
\newcommand*{\FamilyExecuteOptions}[2][.\@currname.\@currext]{%
|
|
\@FamilyExecuteOptions[{#1}]{#2}%
|
|
}
|
|
\newcommand{\@FamilyExecuteOptions}[3][.\@currname.\@currext]{%
|
|
\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
|
|
\ifx\scr@key@name\space\else
|
|
\scr@ifundefinedorrelax{KV@#2@\scr@key@name}{%
|
|
\scr@ifundefinedorrelax{KV@#2#1@\scr@key@name}{%
|
|
\scr@ifundefinedorrelax{KV@#2#1@@else@}{%
|
|
\PackageError{scrbase}{%
|
|
unknown option
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
}{%
|
|
Member `#1' of family `#2'\MessageBreak
|
|
cannot handle option `\scr@key@name'.\MessageBreak
|
|
So it cannot be set%
|
|
\ifx\scr@key@value\@empty\else
|
|
\space to value
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}'%
|
|
\fi.%
|
|
}%
|
|
}{%
|
|
\scr@execute@elseoption{#2#1}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed\else
|
|
\PackageError{scrbase}{%
|
|
unknown option
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknownValue
|
|
value at
|
|
\fi
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
}{%
|
|
Member `#1' of family `#2'\MessageBreak
|
|
cannot handle option `\scr@key@name'.\MessageBreak
|
|
So it cannot be set%
|
|
\ifx\scr@key@value\@empty\else
|
|
\space to value
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}'%
|
|
\fi.%
|
|
}%
|
|
\fi
|
|
}%
|
|
}{%
|
|
\scr@execute@option{#2#1}%
|
|
}%
|
|
}{%
|
|
\scr@execute@option{#2}%
|
|
\Ifstr{#1}{}{}{%
|
|
\scr@ifundefinedorrelax{KV@#2#1@\scr@key@name}{%
|
|
\scr@ifundefinedorrelax{KV@#2#1@@else@}{}{%
|
|
\scr@execute@elseoption{#2#1}%
|
|
}%
|
|
}{%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\scr@execute@option{#2#1}%
|
|
\FamilyKeyStateProcessed
|
|
\else
|
|
\scr@execute@option{#2#1}%
|
|
\fi
|
|
}%
|
|
}%
|
|
}%
|
|
\scr@show@key@state@error
|
|
\fi
|
|
\fi
|
|
}%
|
|
\@nameuse{scr@after@options@#2@hook}%
|
|
}
|
|
\newcommand*{\scr@show@key@state@error}{%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed\else
|
|
\PackageError{scrbase}{%
|
|
unknown option
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknownValue
|
|
value at
|
|
\fi
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
}{%
|
|
Option
|
|
`\expandafter\detokenize\expandafter{\scr@key@name}'\MessageBreak
|
|
\ifx\FamilyMemberOfKey\@empty\else
|
|
of member `\FamilyMemberOfKey'\MessageBreak
|
|
\fi
|
|
\ifx\FamilyOfKey\@empty\else
|
|
of family `\FamilyOfKey'\MessageBreak
|
|
\fi
|
|
\ifx\FamilyKeyState\FamilyKeyStateNeedValue
|
|
expects a value, but has been used without any value.%
|
|
\else
|
|
cannot handle value\MessageBreak
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}',%
|
|
\MessageBreak
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknownValue
|
|
because this is an unsupported value.%
|
|
\else
|
|
because \FamilyKeyState.
|
|
\fi
|
|
\fi
|
|
}%
|
|
\fi
|
|
}
|
|
\newcommand{\FamilyOptions}[1]{\@FamilyOptions{#1}}
|
|
\newcommand{\@FamilyOptions}[2]{%
|
|
\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}%
|
|
}%
|
|
}%
|
|
}%
|
|
\scr@ifundefinedorrelax{scr@after@options@#1@hook@topmost}{%
|
|
\@namedef{scr@after@options@#1@hook@topmost}{}%
|
|
}{}%
|
|
\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
|
|
\@for\scr@key@atlist:=#2\do{%
|
|
\ifx\scr@key@atlist\@empty\else
|
|
\ifx\scr@key@atlist\space\else
|
|
\expandafter\scr@key@split@name@value\scr@key@atlist==\@nil
|
|
\let\scr@key@run@errors\@empty
|
|
\scr@key@found@false
|
|
\edef\reserved@a{#1,\csname #1@key@familylist\endcsname}%
|
|
\@for\reserved@a:=\reserved@a\do{%
|
|
\scr@ifundefinedorrelax{KV@\reserved@a @\scr@key@name}{%
|
|
\Ifstr{\reserved@a}{#1}{}{%
|
|
\scr@ifundefinedorrelax{KV@\reserved@a @@else@}{}{%
|
|
\expandafter\scr@execute@elseoption\expandafter{\reserved@a}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\scr@key@found@true
|
|
\let\scr@key@run@errors\relax
|
|
\fi
|
|
}%
|
|
}%
|
|
}{%
|
|
\expandafter\scr@execute@option\expandafter{\reserved@a}%
|
|
\scr@key@found@true
|
|
\ifx\scr@key@run@errors\relax\else
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\let\scr@key@run@errors\relax
|
|
\else
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknownValue
|
|
\edef\scr@key@run@errors{%
|
|
\unexpanded\expandafter{\scr@key@run@errors}%
|
|
\noexpand\MessageBreak
|
|
\space\space- `\FamilyMemberOfKey': unkown value
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}'%
|
|
}%
|
|
\else
|
|
\ifx\FamilyKeyState\FamilyKeyStateNeedValue
|
|
\edef\scr@key@run@errors{%
|
|
\unexpanded\expandafter{\scr@key@run@errors}%
|
|
\noexpand\MessageBreak
|
|
\space\space- `\FamilyMemberOfKey': value expected
|
|
}%
|
|
\else
|
|
\edef\scr@key@run@errors{%
|
|
\unexpanded\expandafter{\scr@key@run@errors}%
|
|
\noexpand\MessageBreak
|
|
\space\space- `\FamilyMemberOfKey': \FamilyKeyState
|
|
}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}%
|
|
}%
|
|
\ifscr@key@found@
|
|
\ifx\scr@key@run@errors\relax\else
|
|
\ifx\scr@key@run@errors\@empty\else
|
|
\scr@ifundefinedorrelax{KV@#1@@else@}{%
|
|
\PackageError{scrbase}{%
|
|
unknown option
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
}{%
|
|
The members of family `#1' cannot set option
|
|
`\scr@key@name'
|
|
\ifx\scr@key@value\@empty\else
|
|
\MessageBreak
|
|
to value
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}'%
|
|
\fi.\MessageBreak
|
|
Here's what each member says:
|
|
\scr@key@run@errors
|
|
}%
|
|
}{%
|
|
\scr@execute@elseoption{#1}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\PackageInfo{scrbase}{%
|
|
option
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
\MessageBreak
|
|
processed by `@else@' option of family\MessageBreak
|
|
`#1', after the members said:
|
|
\scr@key@run@errors\MessageBreak
|
|
o\expandafter\@gobble
|
|
}%
|
|
\let\scr@key@run@errors\relax
|
|
\else
|
|
\PackageError{scrbase}{%
|
|
unknown option
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknownValue
|
|
value at
|
|
\fi
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
}{%
|
|
The members of family `#1' cannot set option
|
|
`\scr@key@name'
|
|
\ifx\scr@key@value\@empty\else
|
|
\MessageBreak
|
|
to value
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}'%
|
|
\fi.\MessageBreak
|
|
Here's what each member says:
|
|
\scr@key@run@errors
|
|
}%
|
|
\fi
|
|
}%
|
|
\fi
|
|
\fi
|
|
\else
|
|
\scr@ifundefinedorrelax{KV@#1@@else@}{%
|
|
\PackageError{scrbase}{%
|
|
unknown option
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
}{%
|
|
No one of the members of family `#1'\MessageBreak
|
|
can handle option `\scr@key@name'.\MessageBreak
|
|
So it cannot be set%
|
|
\ifx\scr@key@value\@empty\else
|
|
\space to value
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}'%
|
|
\fi.%
|
|
}%
|
|
}{%
|
|
\scr@execute@elseoption{#1}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\else
|
|
\PackageError{scrbase}{%
|
|
unknown option
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknownValue
|
|
value at
|
|
\fi
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'%
|
|
}{%
|
|
No one of the members of family `#1'\MessageBreak
|
|
can handle option `\scr@key@name'.\MessageBreak
|
|
So it cannot be set%
|
|
\ifx\scr@key@value\@empty\else
|
|
\space to value
|
|
`\expandafter\detokenize\expandafter{\scr@key@value}'%
|
|
\fi.%
|
|
}%
|
|
\fi
|
|
}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}%
|
|
\@nameuse{scr@after@options@#1@hook}%
|
|
}
|
|
\newcommand*{\scr@execute@option}[1]{%
|
|
\protected@edef\reserved@a{%
|
|
\noexpand\let\noexpand\KV@err\noexpand\scr@KV@err
|
|
\noexpand\setkeys{#1}{%
|
|
\unexpanded\expandafter{\scr@key@atlist}}%
|
|
\noexpand\def\noexpand\scr@key@atlist{%
|
|
\unexpanded\expandafter{\scr@key@atlist}}%
|
|
\noexpand\def\noexpand\scr@key@name{%
|
|
\unexpanded\expandafter{\scr@key@name}}%
|
|
\noexpand\def\noexpand\scr@key@value{%
|
|
\unexpanded\expandafter{\scr@key@value}}%
|
|
\ifx\scr@key@run@errors\relax
|
|
\noexpand\let\noexpand\scr@key@run@errors\relax
|
|
\else
|
|
\noexpand\def\noexpand\scr@key@run@errors{%
|
|
\unexpanded\expandafter{\scr@key@run@errors}}%
|
|
\fi
|
|
\ifx\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions@immediate
|
|
\noexpand\let\noexpand\AtEndOfFamilyOptions
|
|
\noexpand\scr@AtEndOfFamilyOptions@immediate
|
|
\fi
|
|
}%
|
|
\let\AtEndOfFamilyOptions\scr@AtEndOfFamilyOptions
|
|
\reserved@a
|
|
\ifx\FamilyKeyState\FamilyKeyStateUnknown
|
|
\PackageInfo{scrbase}{Unknown processing state.\MessageBreak
|
|
Processing option
|
|
`\expandafter\detokenize\expandafter{\scr@key@atlist}'\MessageBreak
|
|
\ifx\FamilyMemberOfKey\@empty\else
|
|
of member `\FamilyMemberOfKey'\MessageBreak
|
|
\fi
|
|
of family `\FamilyOfKey'\MessageBreak
|
|
doesn't set a valid state.\MessageBreak
|
|
This will be interpreted\MessageBreak
|
|
as \string\FamilyKeyStateProcessed
|
|
}%
|
|
\FamilyKeyStateProcessed
|
|
\fi
|
|
}
|
|
\newcommand*{\scr@KV@err}[1]{%
|
|
\FamilyKeyStateNeedValue
|
|
}
|
|
\newcommand*{\scr@key@run@errors}{}
|
|
\newcommand*{\scr@execute@elseoption}[1]{%
|
|
\begingroup
|
|
\protected@edef\reserved@a{%
|
|
\unexpanded{%
|
|
\endgroup
|
|
\let\scr@key@name@else\scr@key@name
|
|
\let\scr@key@value@else\scr@key@value
|
|
\def\scr@key@name{@else@}%
|
|
}%
|
|
\noexpand\def\noexpand\scr@key@value{%
|
|
\unexpanded\expandafter{\scr@key@atlist}}%
|
|
\noexpand\def\noexpand\scr@key@atlist{%
|
|
@else@={\unexpanded\expandafter{\scr@key@atlist}}}%
|
|
\noexpand\scr@execute@option{#1}%
|
|
\noexpand\def\noexpand\scr@key@atlist{%
|
|
\unexpanded\expandafter{\scr@key@atlist}}%
|
|
\noexpand\def\noexpand\scr@key@name{%
|
|
\unexpanded\expandafter{\scr@key@name}}%
|
|
\noexpand\def\noexpand\scr@key@value{%
|
|
\unexpanded\expandafter{\scr@key@value}}%
|
|
\scr@ifundefinedorrelax{scr@key@name@else}{%
|
|
\unexpanded{\let\scr@key@name@else\relax}%
|
|
}{%
|
|
\noexpand\def\noexpand\scr@key@name@else{%
|
|
\unexpanded\expandafter{\scr@key@name@else}%
|
|
}%
|
|
}%
|
|
\scr@ifundefinedorrelax{scr@key@value@else}{%
|
|
\unexpanded{\let\scr@key@value@else\relax}%
|
|
}{%
|
|
\noexpand\def\noexpand\scr@key@value@else{%
|
|
\unexpanded\expandafter{\scr@key@value@else}%
|
|
}%
|
|
}%
|
|
}\reserved@a
|
|
}
|
|
\newif\ifscr@key@found@
|
|
\newcommand*{\scr@key@atlist}{}
|
|
\newcommand*{\scr@key@name}{}
|
|
\newcommand*{\scr@key@value}{}
|
|
\newcommand*{\scr@key@split@name@value}{}
|
|
\long\def\scr@key@split@name@value#1=#2=#3\@nil{%
|
|
\scr@sp@def\scr@key@name{#1}%
|
|
\scr@sp@def\scr@key@value{#2}%
|
|
}
|
|
\newcommand*{\FamilyOption}[2]{%
|
|
\begingroup
|
|
\def\reserved@a##1,##2\@nil{\IfArgIsEmpty{##2}{}{\@tempswatrue}}%
|
|
\@tempswafalse\expandafter\reserved@a#2,\@nil
|
|
\if@tempswa
|
|
\PackageError{scrbase}{%
|
|
syntax error in key `\detokenize{#2}'%
|
|
}{%
|
|
You've used `\string\...Option' to set the key
|
|
`\detokenize{#2}'\MessageBreak
|
|
to new value(s), but `,' is not allowed in the key of
|
|
an option\MessageBreak
|
|
(and `\string\...Option' does not use `,' to separate several
|
|
keys).\MessageBreak
|
|
Maybe you've meant \string\...Options\space instead of
|
|
\string\...Option.\MessageBreak
|
|
If you'll continue, I'll give it a try, but you should expect
|
|
further\MessageBreak
|
|
and even strange error messages.%
|
|
}%
|
|
\else
|
|
\def\reserved@a##1=##2\@nil{%
|
|
\IfArgIsEmpty{##2}{}{\@tempswatrue\def\reserved@a{=}}}%
|
|
\expandafter\reserved@a#2=\@nil
|
|
\if@tempswa
|
|
\PackageError{scrbase}{%
|
|
syntax error in key `\detokenize{#2}'%
|
|
}{%
|
|
You've used `\string\...Option' to set the key
|
|
`\detokenize{#2}'\MessageBreak
|
|
to new value(s), but `=' is not allowed in the key of
|
|
an option\MessageBreak
|
|
(and `\string\...Option' does not use `=' to separate key and
|
|
value).\MessageBreak
|
|
Maybe you've meant \string\...Options\space instead of
|
|
\string\...Option.\MessageBreak
|
|
If you'll continue, I'll give it a try, but you should expect
|
|
further\MessageBreak
|
|
and even strange error messages.%
|
|
}%
|
|
\fi
|
|
\fi
|
|
\endgroup
|
|
\@FamilyOption{#1}{#2}%
|
|
}
|
|
\newcommand{\@FamilyOption}[3]{%
|
|
\expandafter\scr@sp@def\expandafter\scr@key@name\expandafter{#2}%
|
|
\let\reserved@a\@empty
|
|
\@for\reserved@b:=#3\do{%
|
|
\ifx\reserved@b\@empty\else
|
|
\ifx\reserved@b\space\else
|
|
\edef\reserved@a{\unexpanded\expandafter{\reserved@a},%
|
|
\scr@key@name=\unexpanded\expandafter{\reserved@b}}%
|
|
\fi
|
|
\fi
|
|
}%
|
|
\def\reserved@b{\FamilyOptions{#1}}%
|
|
\expandafter\reserved@b\expandafter{\reserved@a}%
|
|
}
|
|
\begingroup
|
|
\catcode`\^^A=\catcode`\#
|
|
\@makeother\#
|
|
\gdef\l@addto@macro@a^^A1{%
|
|
\begingroup
|
|
\@makeother\#
|
|
\def\l@addto@macro@a@cmd{^^A1}%
|
|
\l@addto@macro@a@
|
|
}
|
|
\gdef\l@addto@macro@a@^^A1{%
|
|
\def\l@addto@macro@a@add{^^A1}%
|
|
\l@addto@macro@a@@
|
|
}
|
|
\endgroup
|
|
\begingroup
|
|
\@makeother\#
|
|
\gdef\l@addto@macro@a@@{%
|
|
\@makeother\#
|
|
\edef\reserved@a{%
|
|
\detokenize{\endgroup\def}%
|
|
\detokenize\expandafter{\l@addto@macro@a@cmd#1}%
|
|
{%
|
|
\expandafter\detokenize%
|
|
\expandafter\expandafter\expandafter{\l@addto@macro@a@cmd{#1}}%
|
|
\expandafter\detokenize\expandafter{\l@addto@macro@a@add}%
|
|
}%
|
|
}%
|
|
\expandafter\scantokens\expandafter{\reserved@a}%
|
|
}%
|
|
\endgroup
|
|
\newcommand\l@preto@macro[2]{%
|
|
\edef#1{\unexpanded{#2}\unexpanded\expandafter{#1}}%
|
|
}%
|
|
\begingroup
|
|
\catcode`\^^A=\catcode`\#
|
|
\@makeother\#
|
|
\gdef\l@preto@macro@a^^A1{%
|
|
\begingroup
|
|
\@makeother\#
|
|
\def\l@preto@macro@a@cmd{^^A1}%
|
|
\l@preto@macro@a@
|
|
}
|
|
\gdef\l@preto@macro@a@^^A1{%
|
|
\def\l@preto@macro@a@add{^^A1}%
|
|
\l@preto@macro@a@@
|
|
}
|
|
\endgroup
|
|
\begingroup
|
|
\@makeother\#
|
|
\gdef\l@preto@macro@a@@{%
|
|
\@makeother\#
|
|
\edef\reserved@a{%
|
|
\detokenize{\endgroup\def}%
|
|
\detokenize\expandafter{\l@preto@macro@a@cmd#1}%
|
|
{%
|
|
\expandafter\detokenize\expandafter{\l@preto@macro@a@add}%
|
|
\expandafter\detokenize%
|
|
\expandafter\expandafter\expandafter{\l@preto@macro@a@cmd{#1}}%
|
|
}%
|
|
}%
|
|
\expandafter\scantokens\expandafter{\reserved@a}%
|
|
}%
|
|
\endgroup
|
|
\newcommand{\FamilyUnknownKeyValue}[4]{%
|
|
\FamilyKeyStateUnknownValue
|
|
\ifx\FamilyElseValues\@empty\else
|
|
\PackageWarning{scrbase}{non empty \string\FamilyElseValue
|
|
ignored.\MessageBreak
|
|
Setting this command to a non empty\MessageBreak
|
|
value for option `#2' of\MessageBreak
|
|
family `#1' is deprecated,\MessageBreak
|
|
but has been found%
|
|
}%
|
|
\fi
|
|
}
|
|
\newcommand*{\FamilyElseValues}{}
|
|
\newcommand*{\FamilyBoolKey}[4][.\@currname.\@currext]{%
|
|
\@ifundefined{if#4}{%
|
|
\expandafter\newif\csname if#4\endcsname
|
|
}{}%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[true]{\FamilySetBool{#2}{#3}{#4}{##1}}%
|
|
}
|
|
\newcommand*{\FamilySetBool}[4]{%
|
|
\Ifstr{#4}{}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
|
|
\Ifstr{#4}{true}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
|
|
\Ifstr{#4}{on}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
|
|
\Ifstr{#4}{yes}{\@nameuse{#3true}\FamilyKeyStateProcessed}{%
|
|
\Ifstr{#4}{false}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
|
|
\Ifstr{#4}{off}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
|
|
\Ifstr{#4}{no}{\@nameuse{#3false}\FamilyKeyStateProcessed}{%
|
|
\FamilyUnknownKeyValue{#1}{#2}{#4}{%
|
|
`true', `on', `yes', `false', `off', `no'%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
\let\FamilyElseValues\@empty
|
|
}
|
|
\newcommand*{\FamilyInverseBoolKey}[4][.\@currname.\@currext]{%
|
|
\@ifundefined{if#4}{%
|
|
\expandafter\newif\csname if#4\endcsname
|
|
\@nameuse{#4true}%
|
|
}{}%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[true]{\FamilySetInverseBool{#2}{#3}{#4}{##1}}%
|
|
}
|
|
\newcommand*{\FamilySetInverseBool}[4]{%
|
|
\FamilySetBool{#1}{#2}{#3}{#4}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\expandafter\ifx\csname if#3\expandafter\endcsname\csname iftrue\endcsname
|
|
\@nameuse{#3false}%
|
|
\else
|
|
\@nameuse{#3true}%
|
|
\fi
|
|
\fi
|
|
}
|
|
\newcommand*{\FamilyCounterKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@@Counter@@Key{#1}{#2}{#3}}%
|
|
{\Family@Counter@Key{#1}{#2}{#3}}%
|
|
}
|
|
\newcommand*{\Family@@Counter@@Key}{}
|
|
\def\Family@@Counter@@Key#1#2#3[#4]#5{%
|
|
\@ifundefined{c@#5}{\newcounter{#5}}{}%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{\FamilySetCounter{#2}{#3}{#5}{##1}}%
|
|
}
|
|
\newcommand*{\Family@Counter@Key}[4]{%
|
|
\@ifundefined{c@#4}{\newcounter{#4}}{}%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetCounter{#2}{#3}{#4}{##1}}%
|
|
}
|
|
\newcommand*{\FamilySetCounter}[4]{%
|
|
\begingroup
|
|
\protected@edef\reserved@a{#4}%
|
|
\def\reserved@b{\endgroup\value{#3}=#4\relax\FamilyKeyStateProcessed}%
|
|
\expandafter\Ifiscount\expandafter{\reserved@a}{}{%
|
|
\expandafter\Ifisdimen\expandafter{\reserved@a}{}{%
|
|
\expandafter\Ifisskip\expandafter{\reserved@a}{}{%
|
|
\expandafter\Ifisnumexpr\expandafter{\reserved@a}{}{%
|
|
\expandafter\Ifisdimexpr\expandafter{\reserved@a}{}{%
|
|
\expandafter\Ifisinteger\expandafter{\reserved@a}{}{%
|
|
\expandafter\Ifiscounter\expandafter{\reserved@a}{%
|
|
\def\reserved@b{%
|
|
\endgroup\value{#3}=\value{#4}\FamilyKeyStateProcessed
|
|
}%
|
|
}{%
|
|
\def\reserved@b{%
|
|
\endgroup
|
|
\FamilyUnknownKeyValue{#1}{#2}{#4}{%
|
|
integer numbers, counters, lengths, skips, dimens
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
\reserved@b
|
|
}
|
|
\newcommand*{\FamilyCounterMacroKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@@Counter@@Macro@@Key{#1}{#2}{#3}}%
|
|
{\Family@Counter@Macro@Key{#1}{#2}{#3}}%
|
|
}
|
|
\newcommand*{\Family@@Counter@@Macro@@Key}{}
|
|
\def\Family@@Counter@@Macro@@Key#1#2#3[#4]#5{%
|
|
\ifdefined#4\else\let#4\z@\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{\FamilySetCounterMacro{#2}{#3}{#5}{##1}}%
|
|
}
|
|
\newcommand*{\Family@Counter@Macro@Key}[4]{%
|
|
\ifdefined#4\else\let#4\z@\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetCounterMacro{#2}{#3}{#4}{##1}}%
|
|
}
|
|
\newcommand*{\FamilySetCounterMacro}[4]{%
|
|
\begingroup
|
|
\FamilySetCounter{#1}{#2}{page}{#4}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\edef\reserved@a{%
|
|
\unexpanded{\endgroup\def#3}%
|
|
{\the\value{page}}%
|
|
\noexpand\FamilyKeyStateProcessed
|
|
}%
|
|
\else
|
|
\def\reserved@a{%
|
|
\endgroup
|
|
\FamilyUnknownKeyValue{#1}{#2}{#4}{%
|
|
integer numbers, counters, lengths, skips, dimens
|
|
}%
|
|
}%
|
|
\fi
|
|
\reserved@a
|
|
}
|
|
\newcommand*{\FamilyLengthKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@@Length@@Key{#1}{#2}{#3}}%
|
|
{\Family@Length@Key{#1}{#2}{#3}}%
|
|
}
|
|
\newcommand*{\Family@@Length@@Key}{}
|
|
\def\Family@@Length@@Key#1#2#3[#4]#5{%
|
|
\ifdefined#5\else\newlength{#5}\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{\FamilySetLength{#2}{#3}{#5}{##1}}%
|
|
}
|
|
\newcommand*{\Family@Length@Key}[4]{%
|
|
\ifdefined#4\else\newlength{#4}\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetLength{#2}{#3}{#4}{##1}}%
|
|
}
|
|
\newcommand*{\FamilySetLength}[4]{%
|
|
\begingroup
|
|
\protected@edef\reserved@a{#4}%
|
|
\expandafter\Ifisdimen\expandafter{\reserved@a}{%
|
|
\aftergroup\@firstoftwo
|
|
}{%
|
|
\expandafter\Ifisskip\expandafter{\reserved@a}{%
|
|
\aftergroup\@firstoftwo
|
|
}{%
|
|
\expandafter\Ifisdimexpr\expandafter{\reserved@a}{%
|
|
\aftergroup\@firstoftwo
|
|
}{%
|
|
\expandafter\Ifisglueexpr\expandafter{\reserved@a}{%
|
|
\aftergroup\@firstoftwo
|
|
}{%
|
|
\expandafter\Ifisglue\expandafter{\reserved@a}{%
|
|
\aftergroup\@firstoftwo
|
|
}{%
|
|
\aftergroup\@secondoftwo
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
}%
|
|
\endgroup
|
|
{#3=#4\FamilyKeyStateProcessed}%
|
|
{%
|
|
\FamilyUnknownKeyValue{#1}{#2}{#4}{%
|
|
length values,
|
|
lengths, skips, dimens
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand*{\FamilyLengthMacroKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@@Length@@Macro@@Key{#1}{#2}{#3}}%
|
|
{\Family@Length@Macro@Key{#1}{#2}{#3}}%
|
|
}
|
|
\newcommand*{\Family@@Length@@Macro@@Key}{}
|
|
\def\Family@@Length@@Macro@@Key#1#2#3[#4]#5{%
|
|
\ifdefined#5\else\let#5\z@\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{\FamilySetLengthMacro{#2}{#3}{#5}{##1}}%
|
|
}
|
|
\newcommand*{\Family@Length@Macro@Key}[4]{%
|
|
\ifdefined#4\else\let#4\z@\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetLengthMacro{#2}{#3}{#4}{##1}}%
|
|
}
|
|
\newcommand*{\FamilySetLengthMacro}[4]{%
|
|
\begingroup
|
|
\FamilySetLength{#1}{#2}{\@tempskipa}{#4}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\edef\reserved@a{%
|
|
\unexpanded{\endgroup\def#3}%
|
|
{\the\@tempskipa}%
|
|
\noexpand\FamilyKeyStateProcessed
|
|
}%
|
|
\else
|
|
\def\reserved@a{%
|
|
\endgroup
|
|
\FamilyUnknownKeyValue{#1}{#2}{#4}{%
|
|
length values, counters, lengths, skips, dimens
|
|
}%
|
|
}%
|
|
\fi
|
|
\reserved@a
|
|
}
|
|
\newcommand*{\FamilyUseLengthMacroKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@@UseLength@@Macro@@Key{#1}{#2}{#3}}%
|
|
{\Family@UseLength@Macro@Key{#1}{#2}{#3}}%
|
|
}
|
|
\newcommand*{\Family@@UseLength@@Macro@@Key}{}
|
|
\def\Family@@UseLength@@Macro@@Key#1#2#3[#4]#5{%
|
|
\ifdefined#5\else\let#5\z@\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{%
|
|
\FamilySetUseLengthMacro{#2}{#3}{#5}{##1}%
|
|
}%
|
|
}
|
|
\newcommand*{\Family@UseLength@Macro@Key}[4]{%
|
|
\ifdefined#4\else\let#4\z@\fi
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetUseLengthMacro{#2}{#3}{#4}{##1}}%
|
|
}
|
|
\newcommand*{\FamilySetUseLengthMacro}[4]{%
|
|
\begingroup
|
|
\FamilySetLength{#1}{#2}{\@tempskipa}{#4}%
|
|
\ifx\FamilyKeyState\FamilyKeyStateProcessed
|
|
\def\reserved@a{%
|
|
\endgroup\def#3{#4}%
|
|
\FamilyKeyStateProcessed
|
|
}%
|
|
\else
|
|
\def\reserved@a{%
|
|
\endgroup
|
|
\FamilyUnknownKeyValue{#1}{#2}{#4}{%
|
|
length values, counters, lengths, skips, dimens
|
|
}%
|
|
}%
|
|
\fi
|
|
\reserved@a
|
|
}
|
|
\newcommand*{\FamilyNumericalKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@Numerical@Key{#1}{#2}{#3}}{\Family@Numerical@Key{#1}{#2}{#3}[]}%
|
|
}
|
|
\newcommand*{\Family@Numerical@Key}{}
|
|
\def\Family@Numerical@Key#1#2#3[#4]#5#6{%
|
|
\@ifundefined{#5}{\@namedef{#5}{0}}{}%
|
|
\ifx\relax#4\relax
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\FamilySetNumerical{#2}{#3}{#5}{#6}{##1}}%
|
|
\else
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{%
|
|
\FamilySetNumerical{#2}{#3}{#5}{#6}{##1}}%
|
|
\fi
|
|
}
|
|
\newcommand*{\FamilySetNumerical}[5]{%
|
|
\begingroup
|
|
\edef\@searched{#5}%
|
|
\let\reserved@a=\@empty
|
|
\let\reserved@b=\@empty
|
|
\@tempswafalse
|
|
\@for\@valuelist:=#4\do{%
|
|
\ifx\@valuelist\@empty\else
|
|
\if@tempswa\else
|
|
\edef\reserved@c{\expandafter\@firstoftwo\@valuelist}%
|
|
\edef\reserved@a{\reserved@a\reserved@b`\reserved@c'}%
|
|
\edef\reserved@b{, }%
|
|
\ifx\reserved@c\@searched
|
|
\@tempswatrue
|
|
\edef\reserved@a{\expandafter\@secondoftwo\@valuelist}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}%
|
|
\if@tempswa
|
|
\edef\reserved@a{\endgroup
|
|
\noexpand\@namedef{#3}{\reserved@a}%
|
|
\noexpand\FamilyKeyStateProcessed
|
|
}%
|
|
\else
|
|
\edef\reserved@a{\endgroup
|
|
\noexpand\FamilyUnknownKeyValue{#1}{#2}{#5}{\reserved@a}%
|
|
}%
|
|
\fi
|
|
\reserved@a
|
|
\let\FamilyElseValues\@empty
|
|
}
|
|
\newcommand*{\FamilyStringKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@@String@@Key{#1}{#2}{#3}}{\Family@String@Key{#1}{#2}{#3}}%
|
|
}
|
|
\newcommand*{\Family@@String@@Key}{}
|
|
\long\def\Family@@String@@Key#1#2#3[#4]#5{%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{\def#5{##1}}%
|
|
}
|
|
\newcommand{\Family@String@Key}[4]{%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\def#4{##1}\FamilyKeyStateProcessed}%
|
|
}
|
|
\newcommand*{\FamilyCSKey}[3][.\@currname.\@currext]{%
|
|
\kernel@ifnextchar [%]
|
|
{\Family@@CS@@Key{#1}{#2}{#3}}{\Family@CS@Key{#1}{#2}{#3}}%
|
|
}
|
|
\newcommand*{\Family@@CS@@Key}{}
|
|
\long\def\Family@@CS@@Key#1#2#3[#4]#5{%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}[{#4}]{\@namedef{#5}{##1}}%
|
|
}
|
|
\newcommand{\Family@CS@Key}[4]{%
|
|
\DefineFamilyKey[{#1}]{#2}{#3}{\@namedef{#4}{##1}\FamilyKeyStateProcessed}%
|
|
}
|
|
\newcommand*{\ForDoHook}[2]{%
|
|
\Ifstr{#1}{}{%
|
|
\PackageError{scrbase}{empty do-hook specificator}{%
|
|
You've tried to use an empty do-hook specificator,\MessageBreak
|
|
but do-hook specificators must not be empty.%
|
|
}%
|
|
}{%
|
|
\begingroup
|
|
\def\scr@hookrun{\endgroup}%
|
|
\let\scr@hookname\relax
|
|
\edef\scr@hookargument{#1}%
|
|
\rloop
|
|
\scr@hooksplit@specificator\scr@hookname\scr@hookargument
|
|
\scr@hookargument
|
|
\edef\scr@hookrun{%
|
|
\unexpanded\expandafter{\scr@hookrun}%
|
|
\unexpanded{#2}{\scr@hookname}{\scr@hookargument}%
|
|
}%
|
|
\ifx\scr@hookargument\@empty\else
|
|
\repeat
|
|
\scr@hookrun
|
|
}%
|
|
}
|
|
\newcommand*{\SplitDoHook}[3]{%
|
|
\Ifstr{#1}{}{%
|
|
\PackageWarning{scrbase}{empty do-hook specificator}%
|
|
\let#2\@empty\let#3\@empty
|
|
}{%
|
|
\let#2\relax
|
|
\edef\reserved@a{%
|
|
\unexpanded{\scr@hooksplit@specificator{#2}{#3}}{#1}%
|
|
}\reserved@a
|
|
}%
|
|
}
|
|
\newcommand*{\scr@hooksplit@specificator}[3]{%
|
|
\expandafter\scr@@hooksplit@specificator\expandafter#1\expandafter#2#3/\@nil
|
|
}
|
|
\newcommand*{\scr@@hooksplit@specificator}{}
|
|
\def\scr@@hooksplit@specificator#1#2#3/#4\@nil{%
|
|
\scr@ifundefinedorrelax{scr@hookname}{\def#1{#3}}{%
|
|
\edef#1{#1/#3}%
|
|
}%
|
|
\def#2{#4}%
|
|
\ifx#2\@empty\else \scr@@hookargument#2#4\@nil\fi
|
|
}
|
|
\newcommand*{\scr@@hookargument}{}
|
|
\def\scr@@hookargument#1#2/\@nil{\def#1{#2}}%
|
|
\newcommand*{\ExecuteDoHook}[1]{%
|
|
\@ifundefined{scr@execute@dohook}{%
|
|
\def\scr@execute@dohook##1##2{%
|
|
\def\scr@hook@do####1{####1{##2}}%
|
|
\@nameuse{scr@dohook@##1}%
|
|
\@nameuse{scr@otdohook@##1}%
|
|
\expandafter\global\expandafter\let
|
|
\csname scr@otdohook@##1\endcsname\@empty
|
|
\let\scr@hook@do\relax
|
|
}%
|
|
\ForDoHook{#1}{\scr@execute@dohook}%
|
|
\let\scr@execute@dohook\relax
|
|
}{%
|
|
\PackageWarning{scrbase}{cascaded do-hook detected.\MessageBreak
|
|
It seems, that the do-hook `\detokenize{#1}'\MessageBreak
|
|
is be executed, while another do-hook is active.\MessageBreak
|
|
This is not allowed and therefore ignored%
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand*{\AddtoDoHook}[2]{%
|
|
\Ifstr{#1}{}{%
|
|
\PackageError{scrbase}{empty hook specificator}{%
|
|
As hook specificators can never be empty, the first argument\MessageBreak
|
|
of \string\AddtoDoHook\space must expand to an not empty string.%
|
|
}%
|
|
}{%
|
|
\scr@ifundefinedorrelax{scr@dohook@#1}{\@namedef{scr@dohook@#1}{}}{}%
|
|
\expandafter\l@addto@macro\csname scr@dohook@#1\endcsname{%
|
|
\scr@hook@do{#2}%
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand*{\AddtoOneTimeDoHook}[2]{%
|
|
\Ifstr{#1}{}{%
|
|
\PackageError{scrbase}{empty hook specificator}{%
|
|
As hook specificators can never be empty, the first argument\MessageBreak
|
|
of \string\AddtoDoHook\space must expand to an not empty string.%
|
|
}%
|
|
}{%
|
|
\scr@ifundefinedorrelax{scr@otdohook@#1}{\@namedef{scr@otdohook@#1}{}}{}%
|
|
\expandafter\l@addto@macro\csname scr@otdohook@#1\endcsname{%
|
|
\scr@hook@do{#2}%
|
|
}%
|
|
}%
|
|
}
|
|
%%% From File: $Id: scrkernel-language.dtx 3480 2020-04-13 09:39:03Z kohm $
|
|
%%% (run: body)
|
|
\newcommand*{\defcaptionname}{%
|
|
\kernel@ifstar\scr@def@scaptionname\scr@def@captionname
|
|
}
|
|
\newcommand*{\scr@def@scaptionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\def#2{#3}}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at \string\defcaptionname}%
|
|
\else
|
|
\expandafter\ifx\csname extras\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\gdef
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname extras\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
\newcommand*{\scr@def@activateactivelanguageaftergroup}[2]{%
|
|
\@onelevel@sanitize\languagename
|
|
\@tempswafalse
|
|
\ifx\languagename\scr@reserved@a
|
|
\@tempswatrue
|
|
\else
|
|
\edef\scr@reserved@b{\detokenize{german}}%
|
|
\ifx\languagename\scr@reserved@b
|
|
\edef\scr@reserved@b{%
|
|
\expandafter\ifx\csname if@german@oldspelling\expandafter\endcsname
|
|
\csname iffalse\endcsname n\fi
|
|
\expandafter\ifx\csname if@austrian@locale\expandafter\endcsname
|
|
\csname iftrue\endcsname austrian\else
|
|
\expandafter\ifx\csname if@swiss@locale\expandafter\endcsname
|
|
\csname iftrue\endcsname swiss\else german\fi\fi
|
|
}%
|
|
\@onelevel@sanitize\scr@reserved@b
|
|
\ifx\scr@reserved@a\scr@reserved@b \@tempswatrue\fi
|
|
\fi
|
|
\if@tempswa\else
|
|
\ifcsname l@\scr@reserved@a\endcsname
|
|
\expandafter\ifnum\csname l@\scr@reserved@a\endcsname=\language
|
|
\@tempswatrue
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\if@tempswa
|
|
\def\reserved@b{\endgroup
|
|
\PackageInfo{scrbase}{activating \languagename\space \string#1}%
|
|
\def#1{#2}%
|
|
}%
|
|
\fi
|
|
}
|
|
\newcommand*{\scr@ifactivelanguageisoneof}[1]{%
|
|
\begingroup
|
|
\@tempswafalse
|
|
\@onelevel@sanitize\languagename
|
|
\edef\reserved@a{#1}%
|
|
\@for \reserved@a:=\reserved@a\do{%
|
|
\scr@trim@spaces\reserved@a
|
|
\@onelevel@sanitize\reserved@a
|
|
\ifx\languagename\reserved@a
|
|
\@tempswatrue
|
|
\else
|
|
\edef\reserved@b{\detokenize{german}}%
|
|
\ifx\languagename\reserved@b
|
|
\edef\reserved@b{%
|
|
\expandafter\ifx\csname if@german@oldspelling\expandafter\endcsname
|
|
\csname iffalse\endcsname n\fi
|
|
\expandafter\ifx \csname if@austrian@locale\expandafter\endcsname
|
|
\csname iftrue\endcsname austrian\else
|
|
\expandafter\ifx\csname if@swiss@locale\expandafter\endcsname
|
|
\csname iftrue\endcsname swiss\else german\fi\fi
|
|
}%
|
|
\@onelevel@sanitize\reserved@b
|
|
\ifx\reserved@a\reserved@b \@tempswatrue\fi
|
|
\fi
|
|
\if@tempswa\else
|
|
\ifcsname l@\reserved@a\endcsname
|
|
\expandafter\ifnum \csname l@\reserved@a\endcsname=\language
|
|
\@tempswatrue
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}%
|
|
\if@tempswa
|
|
\aftergroup\@firstoftwo
|
|
\else
|
|
\aftergroup\@secondoftwo
|
|
\fi
|
|
\endgroup
|
|
}
|
|
\newcommand*{\scr@def@captionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\def#2{#3}}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at \string\defcaptionname}%
|
|
\else
|
|
\@tempswafalse
|
|
\begingroup
|
|
\@tempswafalse
|
|
\ifcsname extras\scr@reserved@a\endcsname
|
|
\let#2\relax
|
|
\expandafter\providecommand\expandafter*%
|
|
\csname abx@extras@\scr@reserved@a\endcsname{}%
|
|
\csname extras\scr@reserved@a\endcsname
|
|
\ifx #2\relax \else \aftergroup\@tempswatrue \fi
|
|
\fi
|
|
\endgroup
|
|
\if@tempswa
|
|
\expandafter\g@addto@macro\csname extras\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\else
|
|
\expandafter\ifx\csname captions\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\gdef
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname captions\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\fi
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
\AfterPackage*{polyglossia}{%
|
|
\scr@ifundefinedorrelax{init@extras@german}{%
|
|
\AfterFile{gloss-german.ldf}%
|
|
}{%
|
|
\@firstofone
|
|
}%
|
|
{%
|
|
\providecommand*\captionsngerman{}%
|
|
\providecommand*\captionsaustrian{}%
|
|
\providecommand*\captionsnaustrian{}%
|
|
\providecommand*\captionsswiss{}%
|
|
\providecommand*\captionsnswiss{}%
|
|
\csgappto{init@extras@german}{%
|
|
\if@austrian@locale
|
|
\csuse{captions\if@german@oldspelling\else n\fi austrian}%
|
|
\else
|
|
\if@swiss@locale
|
|
\csuse{captions\if@german@oldspelling\else n\fi swiss}%
|
|
\else
|
|
\if@german@oldspelling\else \csuse{captionsngerman}\fi
|
|
\fi
|
|
\fi
|
|
}%
|
|
}%
|
|
}
|
|
\newcommand*{\providecaptionname}{%
|
|
\kernel@ifstar\scr@provide@scaptionname\scr@provide@captionname
|
|
}
|
|
\newcommand*{\scr@provide@scaptionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\providecommand*{#2}{#3}}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at
|
|
\string\providecaptionname}%
|
|
\else
|
|
\begingroup
|
|
\let#2\relax
|
|
\expandafter\providecommand\expandafter*%
|
|
\csname abx@extras@\scr@reserved@a\endcsname{}%
|
|
\let\renewcommand\providecommand
|
|
\csname extras\scr@reserved@a\endcsname
|
|
\csname captions\scr@reserved@a\endcsname
|
|
\ifx #2\relax \aftergroup\@firstofone
|
|
\else
|
|
\aftergroup\@gobble
|
|
\fi
|
|
\endgroup
|
|
{%
|
|
\expandafter\ifx\csname extras\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\@gobbletwo
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname extras\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
\newcommand*{\scr@provide@captionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\providecommand*{#2}{#3}}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at
|
|
\string\providecaptionname}%
|
|
\else
|
|
\begingroup
|
|
\let#2\relax
|
|
\let\renewcommand\providecommand
|
|
\expandafter\providecommand\expandafter*%
|
|
\csname abx@extras@\scr@reserved@a\endcsname{}%
|
|
\csname captions\scr@reserved@a\endcsname
|
|
\csname extras\scr@reserved@a\endcsname
|
|
\ifx #2\relax \aftergroup\@firstofone
|
|
\else
|
|
\aftergroup\@gobble
|
|
\fi
|
|
\endgroup
|
|
{%
|
|
\expandafter\ifx\csname captions\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\@gobbletwo
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname captions\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
\newcommand*{\newcaptionname}{%
|
|
\kernel@ifstar\scr@new@scaptionname\scr@new@captionname
|
|
}
|
|
\newcommand*{\scr@new@scaptionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\providecommand*{#2}{#3}}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at \string\newcaptionname}%
|
|
\else
|
|
\begingroup
|
|
\let#2\relax
|
|
\let\renewcommand\providecommand
|
|
\expandafter\providecommand\expandafter*%
|
|
\csname abx@extras@\scr@reserved@a\endcsname{}%
|
|
\csname captions\scr@reserved@a\endcsname
|
|
\csname extras\scr@reserved@a\endcsname
|
|
\ifx #2\relax
|
|
\else
|
|
\PackageError{scrbase}{%
|
|
`\string#2' already defined\MessageBreak
|
|
for language `\scr@reserved@a'%
|
|
}{%
|
|
You've told me to define `\string#2' for language
|
|
`\scr@reserved@a',\MessageBreak
|
|
but is has already been defined.\MessageBreak
|
|
Nevertheless, if you'll continue it will be redefined.%
|
|
}%
|
|
\fi
|
|
\endgroup
|
|
\expandafter\ifx\csname extras\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\gdef
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname extras\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
\newcommand*{\scr@new@captionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\providecommand*{#2}{#3}}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at \string\newcaptionname}%
|
|
\else
|
|
\begingroup
|
|
\let#2\relax
|
|
\let\renewcommand\providecommand
|
|
\expandafter\providecommand\expandafter*%
|
|
\csname abx@extras@\scr@reserved@a\endcsname{}%
|
|
\csname captions\scr@reserved@a\endcsname
|
|
\csname extras\scr@reserved@a\endcsname
|
|
\ifx #2\relax
|
|
\else
|
|
\PackageError{scrbase}{%
|
|
`\string#2' already defined\MessageBreak
|
|
for language `\scr@reserved@a'%
|
|
}{%
|
|
You've told me to define `\string#2' for language
|
|
`\scr@reserved@a',\MessageBreak
|
|
but is has already been defined.\MessageBreak
|
|
Nevertheless, if you'll continue it will be redefined.%
|
|
}%
|
|
\fi
|
|
\endgroup
|
|
\expandafter\ifx\csname captions\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\gdef
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname captions\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
\newcommand*{\renewcaptionname}{%
|
|
\kernel@ifstar\scr@renew@scaptionname\scr@renew@captionname
|
|
}
|
|
\newcommand*{\scr@renew@scaptionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\ifdefined#2\renewcommand*{#2}{#3}\fi}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at \string\renewcaptionname}%
|
|
\else
|
|
\begingroup
|
|
\let#2\relax
|
|
\let\renewcommand\providecommand
|
|
\expandafter\providecommand\expandafter*%
|
|
\csname abx@extras@\scr@reserved@a\endcsname{}%
|
|
\csname captions\scr@reserved@a\endcsname
|
|
\csname extras\scr@reserved@a\endcsname
|
|
\ifx #2\relax
|
|
\PackageError{scrbase}{%
|
|
`\string#2' not defined at language `\scr@reserved@a'%
|
|
}{%
|
|
You've told me to redefine `\string#2' at language
|
|
`\scr@reserved@a',\MessageBreak
|
|
but is hasn't been defined before.\MessageBreak
|
|
Nevertheless, if you'll continue I'll define it at
|
|
`\expandafter\string\csname extras\scr@reserved@a\endcsname'%
|
|
}%
|
|
\fi
|
|
\endgroup
|
|
\expandafter\ifx\csname extras\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\gdef
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname extras\scr@reserved@a\endcsname{%
|
|
\def#2{#3}%
|
|
}%
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
\newcommand*{\scr@renew@captionname}[3]{%
|
|
\if@atdocument
|
|
\expandafter\@firstofone
|
|
\else
|
|
\scr@ifactivelanguageisoneof{#1}{\ifdefined#2\renewcommand*{#2}{#3}\fi}{}%
|
|
\expandafter\AtBeginDocument
|
|
\fi
|
|
{%
|
|
\begingroup
|
|
\let\reserved@b\endgroup
|
|
\edef\scr@reserved@a{#1}%
|
|
\@onelevel@sanitize\scr@reserved@a
|
|
\@for\scr@reserved@a:=\scr@reserved@a\do{%
|
|
\scr@trim@spaces\scr@reserved@a
|
|
\ifx\scr@reserved@a\@empty
|
|
\PackageWarning{scrbase}{empty language at \string\renewcaptionname}%
|
|
\else
|
|
\begingroup
|
|
\let#2\relax
|
|
\let\renewcommand\providecommand
|
|
\expandafter\providecommand\expandafter*%
|
|
\csname abx@extras@\scr@reserved@a\endcsname{}%
|
|
\csname extras\scr@reserved@a\endcsname
|
|
\ifx #2\relax
|
|
\csname captions\scr@reserved@a\endcsname
|
|
\ifx #2\relax
|
|
\PackageError{scrbase}{%
|
|
`\string#2' not defined at language `\scr@reserved@a'%
|
|
}{%
|
|
You've told me to redefine `\string#2' at language
|
|
`\scr@reserved@a',\MessageBreak
|
|
but it hasn't been defined before.\MessageBreak
|
|
Nevertheless, if you'll continue I'll define it at
|
|
`\expandafter\string
|
|
\csname captions\scr@reserved@a\endcsname'%
|
|
}%
|
|
\fi
|
|
\expandafter\ifx\csname captions\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\gdef
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname captions\scr@reserved@a\endcsname{\def#2{#3}}%
|
|
\else
|
|
\expandafter\ifx\csname extras\scr@reserved@a\endcsname\relax
|
|
\expandafter\expandafter\expandafter\gdef
|
|
\else
|
|
\expandafter\expandafter\expandafter\g@addto@macro
|
|
\fi
|
|
\csname extras\scr@reserved@a\endcsname{\def#2{#3}}%
|
|
\fi
|
|
\endgroup
|
|
\scr@def@activateactivelanguageaftergroup{#2}{#3}%
|
|
\fi
|
|
}%
|
|
\reserved@b
|
|
}%
|
|
}
|
|
%%% From File: $Id: scrlogo.dtx 2640 2017-05-08 09:36:55Z kohm $
|
|
\@ifundefined{KOMAScript}{%
|
|
\DeclareRobustCommand{\KOMAScript}{\textsf{K\kern.05em O\kern.05em%
|
|
M\kern.05em A\kern.1em-\kern.1em Script}}}{}
|
|
\endinput
|
|
%%
|
|
%% End of file `scrbase.sty'.
|
|
|