Current File : //usr/share/texlive/texmf-dist/tex/latex/koma-script/scrbase.sty |
%%
%% 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')
%% 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 3586 2021-03-17 13:57:48Z 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{2021/03/17 v3.33 KOMA-Script}%
\endgroup
\providecommand*{\scr@pkgextension}{\@pkgextension}
\AtBeginDocument{%
\let\scr@pkgextension\@pkgextension
}
%%% From File: $Id: scrkernel-basics.dtx 3578 2021-03-12 16:50:00Z kohm $
%%% (run: prepare)
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
\ProvidesPackage{%
scrbase%
}[%
2021/03/17 v3.33 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{scrlfile}
\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*{\IfLTXAtLeastTF}{\@ifl@t@r\fmtversion}
\ifcsname IfFormatAtLeastTF\endcsname
\let\IfLTXAtLeastTF\IfFormatAtLeastTF
\fi
\@onlypreamble\IfLTXAtLeastTF
\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}{}
\IncludeInRelease{2021/05/01}{\FamilyProcessOptions}{%
Usage of raw option list}
\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
\@ifundefined{@raw@opt@\@currname.\@currext}{%
\let\@curroptions\@empty
}{%
\expandafter\let\expandafter\@curroptions
\csname @raw@opt@\@currname.\@currext\endcsname
}%
\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
\@for\CurrentOption:=\@curroptions\do{%
\scr@trim@spaces\CurrentOption
\@ifundefined{ds@\CurrentOption}{%
\@use@ption
\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{\expandafter\let
\csname unprocessedoptions-\@currname.\@currext\endcsname
\relax}%
\@nameuse{scr@after@options@#2@hook}%
}
\EndIncludeInRelease
\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
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
\IfLTXAtLeastTF{2020/10/01}{%
\AtEndOfPackage{\expandafter\let
\csname unprocessedoptions-\@currname.\@currext\endcsname
\relax}%
}{%
\AtEndOfPackage{\let\@unprocessedoptions\relax}%
}%
\@nameuse{scr@after@options@#2@hook}%
}
\EndIncludeInRelease
\@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\scr@trim@spaces[1]{%
\expandafter\scr@sp@def\expandafter#1\expandafter{#1}%
}
\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 3578 2021-03-12 16:50:00Z 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: scrkernel-basics.dtx 3578 2021-03-12 16:50:00Z 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
}
\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 3527 2020-09-11 09:44:32Z 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'.