%% %% 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 %% . %% %%% From File: $Id: scrkernel-version.dtx 3481 2020-04-19 09:52:23Z 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/04/19 v3.30 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/04/19 v3.30 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/04/19 v3.30 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'.