MMCT TEAM
Server IP : 111.118.215.189  /  Your IP : 216.73.216.27
Web Server : Apache
System : Linux md-in-83.webhostbox.net 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
User : a1673wkz ( 2475)
PHP Version : 8.2.25
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /usr/share/texlive/texmf-dist/tex/latex/koma-script/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : //usr/share/texlive/texmf-dist/tex/latex/koma-script/scrbase.sty
%%
%% This is file `scrbase.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% scrkvers.dtx  (with options: `package,scrbase')
%% scrkbase.dtx  (with options: `package,option,base')
%% scrklang.dtx  (with options: `package,option,base')
%% scrlfile.dtx  (with options: `load')
%% scrkbase.dtx  (with options: `package,body,base')
%% scrklang.dtx  (with options: `package,body,base')
%% scrlogo.dtx  (with options: `logo')
%% 
%% Copyright (c) 1994-2012
%% Markus Kohm and any individual authors listed elsewhere in this file.
%% 
%% 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 may
%% find a complete unmodified copy of LaTeX2e at
%% <http://www.ctan.org/pub/tex-archive/macros/latex/base/>.
%% 
%%% From File: scrkvers.dtx
\begingroup
  \makeatletter
  \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{2012/07/29 v3.11b KOMA-Script}%
\endgroup
%%% From File: scrkbase.dtx
\ProvidesPackage{%
  scrbase%
}[%
  \KOMAScriptVersion\space package
  (KOMA-Script-independent basics and keyval usage)]
\begingroup
  \def\@tempb{}%
  \def\@tempa{%
    \PackageError{scrbase}{seems you are not running e-TeX\@tempb}{%
      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\@tempb.\MessageBreak
      Not using e-TeX\@tempb\space 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\@tempb{ V 2}%
    \else
      \let\@tempa\endgroup
    \fi
  \fi
\@tempa
\RequirePackage{keyval}
\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}{%
    \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}[2][.\@currname.\@currext]{%
  \scr@if@familymember{#1}{#2}{define a key}{%
    \define@key{#2#1}%
  }%
}
\newcommand*{\@globaloptionslist}{}
\let\@globaloptionslist\@classoptionslist
\scr@ifundefinedorrelax{XKV@classoptionslist}{}{%
  \ifx\XKV@classoptionslist\@empty\else
    \let\@globaloptionslist\XKV@classoptionslist
  \fi
}
\newcommand*{\scr@removeunused}{}
\newcommand*{\FamilyProcessOptions}[2][.\@currname.\@currext]{%
  \let\ds@\@empty
  \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
  \ifx\@currext\@clsextension\else
    \@for\CurrentOption:=\@globaloptionslist\do{%
      \ifx\CurrentOption\@empty\else
        \@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}%
        \ifin@
          \@use@ption
          \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
        \else
          \expandafter\def\expandafter\scr@removeunused\expandafter{%
            \expandafter\def\expandafter\CurrentOption\expandafter{%
              \CurrentOption}\@use@ption}%
          \scr@optiontest{#2}\CurrentOption{}{%
            \@expandtwoargs\setkeys{#2}%
            \CurrentOption
            \scr@removeunused
          }%
          \scr@optiontest{#2#1}\CurrentOption{}{%
            \@expandtwoargs\setkeys{#2#1}%
            \CurrentOption
            \scr@removeunused
          }%
          \let\scr@removeunused\@empty
        \fi
      \fi
    }%
  \fi
  \@for\CurrentOption:=\@curroptions\do{%
    \@use@ption
    \scr@ifundefinedorrelax{ds@\CurrentOption}{%
      \scr@optiontest{#2}\CurrentOption{%
        \scr@optiontest{#2#1}\CurrentOption{%
          \default@ds
        }{%
          \let\scr@removeunused\relax
          \edef\reserved@a{%
            \noexpand\setkeys{#2#1}{\CurrentOption}%
            \noexpand\def\noexpand\CurrentOption{\CurrentOption}%
          }\reserved@a
          \ifx\scr@removeunused\relax\else\default@ds\fi
        }%
      }{%
        \let\scr@removeunused\relax
        \edef\reserved@a{%
          \noexpand\setkeys{#2}{\CurrentOption}%
          \noexpand\def\noexpand\CurrentOption{\CurrentOption}%
        }\reserved@a
        \if\scr@removeunused\relax\else\default@ds\fi
        \scr@optiontest{#2#1}\CurrentOption{}{%
          \let\scr@removeunused\relax
          \@expandtwoargs\setkeys{#2#1}%
          \CurrentOption
          \ifx\scr@removeunused\relax\else\default@ds\fi
        }%
      }%
    }{%
    }%
  }%
  \@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}%
}
\@onlypreamble\FamilyProcessOptions
\newcommand*{\scr@optiontest}[2]{%
  \edef\reserved@a{\noexpand\scr@pti@ntest{#1}#2=\noexpand\@nil}%
  \reserved@a
}
\newcommand*{\scr@pti@ntest}{}
\def\scr@pti@ntest#1#2=#3\@nil{\scr@ifundefinedorrelax{KV@#1@#2}}
\newcommand*{\dont@let@as@internal@defined}{/}
\newif\if@let@as@internalonly@defined\@let@as@internalonly@definedfalse
\DefineFamily{KOMA}
\DefineFamilyMember{KOMA}
\DefineFamilyKey{KOMA}{internalonly}[\relax]{%
  \ifx\relax#1\relax
    \@let@as@internalonly@definedtrue
  \else
    \@let@as@internalonly@definedfalse
    \begingroup
      \@expandtwoargs\in@{#1}\dont@let@as@internal@defined
    \expandafter\endgroup
    \ifin@\else\g@addto@macro\dont@let@as@internal@defined{#1/}\fi
  \fi
}
\FamilyProcessOptions{KOMA}\relax
%%% From File: scrklang.dtx
%%% From File: scrlfile.dtx
\def\scrlfileversion{2012/06/15 v3.12}
\edef\@tempa{\noexpand\RequirePackage{scrlfile}[\scrlfileversion]}
\@tempa
%%% From File: scrkbase.dtx
\newcommand*{\XdivY}[2]{%
  \numexpr ( #1 + #2 / 2 ) / #2 - 1\relax
}
\newcommand*{\XmodY}[2]{%
  \numexpr #1 - #2 * \XdivY{#1}{#2}\relax
}
\newif\if@atdocument
\AtBeginDocument{\@atdocumenttrue}
\@onlypreamble\@atdocumentrue
\@onlypreamble\@atdocumentfalse
\newcommand*{\let@as@internal@defined}[1]{%
  \begingroup
    \if@let@as@internalonly@defined
      \in@true
    \else
      \@expandtwoargs\in@{/#1/}\dont@let@as@internal@defined
    \fi
  \expandafter\endgroup
  \ifin@
    \PackageInfo{%
      scrbase%
    }{%
      \expandafter\string\csname #1\endcsname\space excluded from being
      defined%
    }%
  \else
    \@ifundefined{#1}{%
      \begingroup
        \expandafter\def\expandafter\@tempa
          \expandafter{\csname scr@#1\endcsname}
        \expandafter\def\expandafter\@tempb
          \expandafter{\csname #1\endcsname}
      \expandafter\expandafter\expandafter\endgroup
      \expandafter\expandafter\expandafter\let\expandafter\@tempb\@tempa
      \if@atdocument\else
        \g@addto@macro\document{%
          \expandafter\ifx\csname #1\expandafter\endcsname
          \csname scr@#1\endcsname
          \else
            \PackageWarning{scrbase}{%
              \expandafter\string\csname #1\endcsname\space was
              redefined\MessageBreak
              at the document preamble.\MessageBreak
              If you did not redefine it by yourself, have a\MessageBreak
              a look at the description of this command at\MessageBreak
              the manual of every package you are using\@gobble
            }%
          \fi
          \ignorespaces
        }%
      \fi
    }{%
      \PackageInfo{%
        scrbase%
      }{%
        \expandafter\string\csname #1\endcsname\space already
        defined.\MessageBreak
        If \expandafter\string\csname #1\endcsname\space does not behave
        like\MessageBreak
        it was described at the KOMA-Script manual, try to\MessageBreak
        load `scrbase.sty' earlier or find out at which\MessageBreak
        package or class \expandafter\string\csname #1\endcsname\space
        was defined before\@gobble
      }%
    }%
  \fi
}
\let@as@internal@defined{ifundefinedorrelax}
\newcommand{\ifnotundefined}[1]{%
  \ifcsname #1\endcsname
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\newcommand\ifstr[2]{%
  \begingroup\protected@edef\@tempa{#1}\protected@edef\@tempb{#2}%
  \ifx\@tempa\@tempb
    \endgroup\expandafter\@firstoftwo
  \else
    \endgroup\expandafter\@secondoftwo
  \fi
}
\newcommand\ifnumber[1]{%
  \begingroup\@tempswafalse\let\scr@next\test@number
  \expandafter\scr@next#1\scr@next
  \if@tempswa
    \endgroup\expandafter\@firstoftwo
  \else
    \endgroup\expandafter\@secondoftwo
  \fi
}
\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{}
\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\@tempa{#1}
  \ifx\@tempa\@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}{}%
                }%
              }%
            }%
          }%
        }%
      }%
    }%
  }%
}
\newcommand{\scr@ifpdftex}{\ifnotundefined{pdftexversion}}
\let@as@internal@defined{ifpdftex}
\BeforePackage{pdfcprot}{\let\ifpdftex\relax}
\AfterPackage{pdfcprot}{\let@as@internal@defined{ifpdftex}}
\newcommand{\scr@ifVTeX}{\ifnotundefined{VTeXversion}}
\let@as@internal@defined{ifVTeX}
\newcommand{\scr@ifpdfoutput}{%
  \scr@ifundefinedorrelax{pdfoutput}{%
    \scr@ifundefinedorrelax{OpMode}{%
      \expandafter\@secondoftwo%
    }{%
      \ifnum\OpMode=1
        \expandafter\@firstoftwo
      \else
        \expandafter\@secondoftwo
      \fi
    }%
  }{%
    \ifnum\pdfoutput>0
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
  }%
}%
\let@as@internal@defined{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
    }%
  }%
}
\let@as@internal@defined{ifpsoutput}
\newcommand*{\scr@ifdvioutput}{%
  \scr@ifundefinedorrelax{pdfoutput}{%
    \scr@ifundefinedorrelax{OpMode}{%
      \expandafter\@firstoftwo
    }{%
      \ifnum\OpMode=0
        \expandafter\@firstoftwo
      \else
        \expandafter\@secondoftwo
      \fi
    }%
  }{%
    \ifnum\pdfoutput=0
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
  }%
}
\let@as@internal@defined{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
}
\providecommand*{\PackageInfoNoLine}[2]{%
  \PackageInfo{#1}{#2\@gobble}%
}
\providecommand*{\ClassInfoNoLine}[2]{%
  \ClassInfo{#1}{#2\@gobble}%
}
\newcommand*{\FamilyExecuteOptions}[3][.\@currname.\@currext]{%
  \def\reserved@a##1\@nil{%
    \@for\scr@key@atlist:=#3\do{%
      \expandafter\scr@key@split@name@value\scr@key@atlist==\@nil
      \scr@ifundefinedorrelax{KV@#2@\scr@key@name}{}{%
        \protected@edef\reserved@a{\noexpand\setkeys{#2}{\scr@key@atlist}%
          \noexpand\def\noexpand\scr@key@atlist{\scr@key@atlist}%
          \noexpand\def\noexpand\scr@key@name{\scr@key@name}%
        }%
        \reserved@a
      }%
      \scr@ifundefinedorrelax{KV@#2#1@\scr@key@name}{}{%
        \protected@edef\reserved@a{%
          \noexpand\setkeys{#2#1}{\scr@key@atlist}%
          \noexpand\def\noexpand\scr@key@atlist{\scr@key@atlist}%
          \noexpand\def\noexpand\scr@key@name{\scr@key@name}%
        }%
        \reserved@a
      }%
      \let\CurrentOption\scr@key@atlist
      \csname ds@\CurrentOption\endcsname
    }%
    \edef\CurrentOption{##1}%
  }%
  \expandafter\reserved@a\CurrentOption\@nil
}
\@onlypreamble\FamilyExecuteOptions
\newcommand*{\FamilyOptions}[2]{%
  \Family@Options{#1}{#2}{%
    \PackageError{scrbase}{%
      option `\scr@key@name' unknown at family `#1'%
    }{%
      You have used \string\FamilyOptions{#1} to set
      `\scr@key@atlist',\MessageBreak
      but family `#1' does not know any option named
      `\scr@key@name'.\MessageBreak
      See the manual for the package or class using family `#1' for
      more\MessageBreak
      informations about options and their values.%
    }%
  }%
}
\newcommand*{\Family@Options}[3]{%
  \@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
        \scr@key@found@false
        \edef\@tempa{\csname #1@key@familylist\endcsname}%
        \@for\@tempa:=\@tempa\do{%
          \scr@ifundefinedorrelax{KV@\@tempa @\scr@key@name}{}{%
            \scr@key@found@true
            \protected@edef\reserved@a{%
              \noexpand\setkeys{\@tempa}{%
                \unexpanded\expandafter{\scr@key@atlist}}%
              \noexpand\def\noexpand\@tempa{%
                \unexpanded\expandafter{\@tempa}}%
              \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}}%
            }%
            \reserved@a
          }%
        }%
        \ifscr@key@found@\else#3\fi
      \fi
    \fi
  }%
}
\newif\ifscr@key@found@
\newcommand*{\scr@key@atlist}{}
\newcommand*{\scr@key@name}{}
\newcommand*{\scr@key@value}{}
\newcommand*{\scr@key@split@name@value}{}
\def\scr@key@split@name@value#1=#2=#3\@nil{%
  \KV@@sp@def\scr@key@name{#1}%
  \KV@@sp@def\scr@key@value{#2}%
}
\newcommand*{\FamilyOption}[3]{%
  \Family@Option{#1}{#2}{#3}{%
    \PackageError{scrbase}{%
      unknown option `\scr@key@name' for familie `#1'%
    }{%
      You have used \string\FamilyOption{#1} to set
      `\scr@key@name',\MessageBreak
      but family '#1' does not know any option named
      `\scr@key@name'.\MessageBreak
      See the the manual of the class or package, that provides
      family\MessageBreak
      `#1' for more informations about options and their values.%
    }%
  }%
}
\newcommand*{\Family@Option}[4]{%
  \expandafter\KV@@sp@def\expandafter\scr@key@name\expandafter{#2}%
  \scr@key@found@false
  \edef\@tempa{\csname #1@key@familylist\endcsname}%
  \@for\@tempa:=\@tempa\do{%
    \scr@ifundefinedorrelax{KV@\@tempa @\scr@key@name}{}{%
      \scr@key@found@true
      \let\@tempb\@tempa
    }%
  }%
  \ifscr@key@found@
    \let\reserved@a\@empty
    \@for\@tempa:=#3\do{%
      \expandafter\KV@@sp@def\expandafter\@tempa\expandafter{\@tempa}%
      \ifx\@tempa\@empty\else
        \protected@edef\reserved@a{\reserved@a,\scr@key@name=\@tempa}%
      \fi
    }%
    \ifx\reserved@a\@empty
      \protected@edef\reserved@a{\noexpand\setkeys{\@tempb}{\scr@key@name}}%
    \else
      \protected@edef\reserved@a{%
        \noexpand\setkeys{\@tempb}{\expandafter\@gobble\reserved@a}}%
    \fi
    \reserved@a
  \else
    #4
  \fi
}
\scr@ifundefinedorrelax{unexpanded}{%
  \newcommand*{\g@addto@macro@temp}{}%
  \newcommand{\l@addto@macro}[2]{%
    \begingroup%
      \toks@\expandafter{#1#2}%
      \xdef\g@addto@macro@temp{\the\toks@}%
    \endgroup
    \let#1\g@addto@macro@temp
  }%
}{%
  \newcommand{\l@addto@macro}[2]{%
    \edef#1{\unexpanded\expandafter{#1#2}}%
  }%
}
\newcommand*{\FamilyUnknownKeyValue}[4]{%
  \ifx\scr@removeunused\@empty
    \PackageError{%
      scrbase%
    }{%
      option `#2' of family `#1' has no value `#3'%
    }{%
      You've tried to set option `#2' of family '#1' to value `#3'.\MessageBreak
      But allowed values are only:\MessageBreak
      #4\FamilyElseValues.\MessageBreak
      See the manual of the class or package, that provides family
      `#1'\MessageBreak
      for more information about options and their values.%
    }%
  \else
    \global\let\scr@removeunused\@empty
    \PackageInfo{%
      scrbase%
    }{%
      option `#2' of family `#1' has no value `#3'.\MessageBreak
      Allowed values for option `#2' of family `#1'\MessageBreak
      would be:\MessageBreak
      #4\FamilyElseValues.\MessageBreak
      Maybe another class or package provides this option.\MessageBreak
      Global option ignored
    }%
  \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}{true}{\@nameuse{#3true}}{%
    \ifstr{#4}{on}{\@nameuse{#3true}}{%
      \ifstr{#4}{yes}{\@nameuse{#3true}}{%
        \ifstr{#4}{false}{\@nameuse{#3false}}{%
          \ifstr{#4}{off}{\@nameuse{#3false}}{%
            \ifstr{#4}{no}{\@nameuse{#3false}}{%
              \FamilyUnknownKeyValue{#1}{#2}{#4}{%
                `true', `on', `yes', `false', `off', `no'%
              }%
            }%
          }%
        }%
      }%
    }%
  }%
  \let\FamilyElseValues\@empty
}
\newcommand*{\FamilyNumericalKey}[3][.\@currname.\@currext]{%
  \@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\@tempa=\@empty
    \let\@tempb=\@empty
    \@tempswafalse
    \@for\@valuelist:=#4\do{%
      \if@tempswa\else
        \edef\@tempc{\expandafter\@firstoftwo\@valuelist}%
        \edef\@tempa{\@tempa\@tempb`\@tempc'}%
        \edef\@tempb{, }%
        \ifx\@tempc\@searched
          \@tempswatrue
          \edef\@tempa{\expandafter\@secondoftwo\@valuelist}%
        \fi
      \fi
    }%
    \if@tempswa
      \edef\@tempa{\endgroup
        \noexpand\@namedef{#3}{\@tempa}%
      }%
    \else
      \edef\@tempa{\endgroup
        \noexpand\FamilyUnknownKeyValue{#1}{#2}{#5}{\@tempa}%
      }%
    \fi
  \@tempa
  \let\FamilyElseValues\@empty
}
\newcommand*{\FamilyStringKey}[3][.\@currname.\@currext]{%
  \@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}}%
}
%%% From File: scrklang.dtx
\newcommand*{\providecaptionname}[3]{%
  \@ifundefined{captions#1}{%
    \@ifundefined{cap@info@#1@done}{%
      \PackageInfo{scrbase}{%
        No captions found for `#1'\MessageBreak
        --> skipped%
      }%
      \expandafter\let\csname cap@info@#1@done\endcsname\@empty
    }{}%
  }{%
    \begingroup
      \let\@tempa\endgroup
      \def\@tempb{\relax\undefined\relax}%
      \let #2\@tempb\relax
      \csname captions#1\endcsname
      \ifx #2\@tempb\relax
        \edef\@tempb{#1}%
        \@onelevel@sanitize\@tempb
        \@onelevel@sanitize\languagename
        \ifx\@tempb\languagename
          \def\@tempa{\endgroup%
            \expandafter\g@addto@macro\csname captions#1\endcsname{%
              \def#2{#3}}%
            \csname captions#1\endcsname
          }%
        \else
          \def\@tempa{\endgroup%
            \expandafter\g@addto@macro\csname captions#1\endcsname{%
              \def#2{#3}}%
          }%
        \fi
      \else
        \PackageInfo{scrbase}{%
          `\string#2' at language `#1' already
          defined\MessageBreak
          --> skipped%
        }%
      \fi
    \@tempa
  }%
}
\newcommand*{\newcaptionname}[3]{%
  \@ifundefined{captions#1}{%
    \PackageInfo{scrbase}{%
      No captions found for `#1' --> defining%
    }%
    \@namedef{captions#1}{}%
  }{}%
  \begingroup
    \def\@tempb{\relax\undefined\relax}%
    \let #2\@tempb\relax
    \csname captions#1\endcsname
    \ifx #2\@tempb\relax\else
      \PackageError{scrbase}{%
        `\string#2' at language `#1' already defined%
      }{%
        You've told me to define `\string#2' at language
        `#1',\MessageBreak
        but it is already defined.\MessageBreak
        It will be redefined, if you'll continue.%
      }%
    \fi
  \endgroup
  \expandafter\g@addto@macro\csname captions#1\endcsname{%
    \def#2{#3}%
  }%
  \begingroup
    \edef\@tempb{#1}%
    \@onelevel@sanitize\@tempb
    \@onelevel@sanitize\languagename
    \ifx\@tempb\languagename
      \def\@tempa{\endgroup\csname captions#1\endcsname}%
    \else
      \let\@tempa\endgroup
    \fi
  \@tempa
}
\newcommand*{\renewcaptionname}[3]{%
  \@ifundefined{captions#1}{%
    \PackageError{scrbase}{%
      No captions found for `#1'%
    }{%
      You've told me to redefine the caption `\string#2' at language
      `#1',\MessageBreak
      but `\expandafter\string\csname captions#1\endcsname' is not
      defined.\MessageBreak
      If you'll continue it will be defined.%
    }
    \@namedef{captions#1}{}%
  }{}%
  \begingroup
    \def\@tempb{\relax\undefined\relax}%
    \let #2\@tempb\relax
    \csname captions#1\endcsname
    \ifx #2\@tempb\relax
      \PackageError{scrbase}{%
        `\string#2' not defined at language `#1'%
      }{%
        You've told me to redefine `\string#2' at language
        `#1',\MessageBreak
        but it is not defined.\MessageBreak
        If you'll continue it will be defined.%
      }%
    \fi
  \endgroup
  \expandafter\g@addto@macro\csname captions#1\endcsname{%
    \def#2{#3}%
  }%
  \begingroup
    \edef\@tempb{#1}%
    \@onelevel@sanitize\@tempb
    \@onelevel@sanitize\languagename
    \ifx\@tempb\languagename
      \def\@tempa{\endgroup\csname captions#1\endcsname}%
    \else
      \let\@tempa\endgroup
    \fi
  \@tempa
}
%%% From File: scrlogo.dtx
\@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'.

MMCT - 2023