% \iffalse meta-comment
% ======================================================================
% scrkernel-fonts.dtx
% Copyright (c) Markus Kohm, 2002-2023
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3c of the license.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX 
% version 2005/12/01 or later and of this work.
%
% This work has the LPPL maintenance status "author-maintained".
%
% The Current Maintainer and author of this work is Markus Kohm.
%
% This work consists of all files listed in MANIFEST.md.
% ======================================================================
%%% From File: $Id: scrkernel-fonts.dtx 4034 2023-04-20 08:03:46Z kohm $
%<identify>%%%            (run: identify)
%<option>%%%            (run: option)
%<body>%%%            (run: body)
%<10pt>%%%            (run: 10pt)
%<11pt>%%%            (run: 11pt)
%<11pt>%%%            (run: 12pt)
%<*dtx>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\begingroup
  \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
  \filedate$Date: 2023-04-20 10:03:46 +0200 (Do, 20. Apr 2023) $
  \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
  \filerevision$Revision: 4034 $
  \edef\reserved@a{%
    \noexpand\endgroup
    \noexpand\ProvidesFile{scrkernel-fonts.dtx}%
                          [\filedate\space\filerevision\space
                           KOMA-Script source
                           (font size)]
  }%
\reserved@a
% \changes{v3.09}{2011/02/23}{new package \pkg*{scrfontsizes}}
%</dtx>
%<*package&generator&identify>
%<package&generator&identify>\ProvidesPackage{scrfontsizes}[%
%!KOMAScriptVersion
%<package&generator&identify>  package (font size file generator)]
%</package&generator&identify>
%<*dtx>
\documentclass[USenglish]{koma-script-source-doc}
\usepackage{babel}
\usepackage{hvlogos}
\setcounter{StandardModuleDepth}{2}
\begin{document}
\DocInput{scrkernel-fonts.dtx}
\end{document}
%</dtx>
% \fi
%
%
% \changes{v2.95}{2002/06/25}{new by splitting \file{scrclass.dtx}}
% \changes{v3.36}{2022/02/22}{switch over from \cls*{scrdoc} to
%   \cls*{koma-script-source-doc}}
% \changes{v3.36}{2022/02/22}{implementation documentation in English}
% \changes{v3.40}{2023/04/17}{guide names changed}
%
% \GetFileInfo{scrkernel-fonts.dtx}
% \title{Code for the Foats of the
%   \href{https://komascript.de}{\KOMAScript} Classes}
% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}}
% \date{Revision \fileversion{} of \filedate}
% \maketitle
% \begin{abstract}
%   \file{scrkernel-fonts.dtx} mainly implements the font selection of
%   \KOMAScript{}. This is not only the selection of the font sizes but also
%   the implementation of font elements. Additionally it provides package
%   \pkg*{scrfontsizes} to generate new font size files.
% \end{abstract}
% \tableofcontents
%
% \section{User Manual}
%
% You can find the user documentation the commands implemented here in the
% \KOMAScript{} manual, either the German \file{scrguide-de.pdf} or the
% English \file{scrguide-en.pdf}. The user documentation of alpha package
% \pkg*{scrfontsizes} is still missing.
%
%
% \MaybeStop{\PrintIndex}
%
%
% \section{Implementation of Options of the Font Fize Files Fenerator Package}
%
% From version 3.09 there exist package \pkg*{scrfontsizes}, which is currently
% very rudimentary. However it can used to generate font size files that can
% be modified by the user afterwards. Currently it does not provide any options.
%
%    \begin{macrocode}
%<*generator&option>
\ProcessOptions\relax
%</generator&option>
%    \end{macrocode}
%
% \section{Implementation of Font Size Options of the \KOMAScript{} Classes}
%
% \begin{option}{10pt,11pt,12pt}
% These options do not exist as explicit options but are handled by
% \cs{DeclareOption*} via \cs{@pt@scan}.
% \end{option}
%
% \begin{macro}{\@ptsize}
% \changes{v2.96}{2006/08/11}{\cs{@ptsize} different temporary meaning}
% \changes{v3.27}{2019/03/25}{\cs{providecommand} instead of \cs{newcommand}}
% The main meaning of \cs{@ptsize} is the base font size minus 10\,pt, or in
% other words: base font size = \cs{@ptsize} + 10\,pt. But, until the final
% font size has been set, we use it for the default size. \cs{providecommand}
% is used to define it, so a wrapper class can define a different default size
% before loading the final class.
%    \begin{macrocode}
%<*class&option>
\providecommand*\@ptsize{%
%<!letter>  11%
%<letter>  12%
}
%</class&option>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@pt@scan}
% \changes{v2.6}{2000/01/04}{added}
% \begin{macro}{\@pt@@scan}
% \changes{v2.6}{2000/01/04}{added}
% \changes{v2.97c}{2007/05/12}{\cs{KOMA@UseObsolete} replaced by
%   \cs{KOMA@UseObsoleteOption}}
% \changes{v2.98c}{2008/03/22}{Usage of \cs{KOMA@UseObsoleteOption} fixed}
% \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} replaced by \cs{PackageInfoNoLine}}
% \changes{v3.12}{2013/03/04}{other font size options than \opt{10pt},
%   \opt{11pt}, \opt{12pt} are deprecated}
% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
% \changes{v3.28}{2019/11/18}{\cs{ifnumber} renamed to \cs{Ifnumber}}
% This macro scans the current option and recognizes classic font size
% options. It is used with \cs{DeclareOption*}.
%    \begin{macrocode}
%<*class&option>
\newcommand*{\@pt@scan}{%
  \expandafter\@pt@@scan\CurrentOption pt\@pt@@scan%
}
\newcommand*{\@pt@@scan}{}
\def\@pt@@scan #1pt#2\@pt@@scan{%
  \Ifstr{#2}{pt}{%
    \Ifnumber{#1}{%
      \Ifstr{#1}{10}{%
        \KOMA@UseStandardOption{\PackageInfoNoLine{\KOMAClassName}}%
                               {#1#2}{fontsize=#1#2}%
      }{%
        \Ifstr{#1}{11}{%
          \KOMA@UseStandardOption{\PackageInfoNoLine{\KOMAClassName}}%
                                 {#1#2}{fontsize=#1#2}%
        }{%
          \Ifstr{#1}{12}{%
            \KOMA@UseStandardOption{\PackageInfoNoLine{\KOMAClassName}}%
                                   {#1#2}{fontsize=#1#2}%
          }{%
            \KOMA@UseDeprecatedOption{\PackageWarningNoLine{\KOMAClassName}}%
                                     {#1#2}{fontsize=#1#2}%
          }%
        }%
      }
    }{\@headlines}%
  }{\@headlines}%
}
%</class&option>
%    \end{macrocode}
% \end{macro}^^A \@pt@@scan
% \end{macro}^^A \@pt@scan
%
% \begin{macro}{\@fontsizefilebase}
% \changes{v2.96}{2006/08/11}{added}
% \changes{v3.00}{2008/05/01}{definition earlier because of \pkg*{scrextend}}
% This is the prefix for the \KOMAScript{} font size files. Wrapper classes
% are allowed to change it to use their own font size files.
%    \begin{macrocode}
%<*option&(class|extend)>
\providecommand*{\@fontsizefilebase}{scrsize}
%    \end{macrocode}
% \end{macro}
%
% \changes{v3.17}{2015/03/10}{saving option values in internal list}
% \begin{option}{fontsize}
% \changes{v2.96}{2006/08/11}{function rewritten}
% \changes{v2.98c}{2008/03/26}{loading font size file if available}
% \changes{v3.12}{2013/03/05}{signaling using \cs{FamilyKeyStateProcessed}}
% \changes{v3.38}{2022/10/06}{error message in horizontal mode added}
% \changes{v3.39}{2022/11/11}{initial dot removed from member argument of
%   option storage commands}
% The option itself. Note, that it supports also font sizes like
% \texttt{10.3pt}.
%    \begin{macrocode}
\KOMA@key{fontsize}{%
%<*!extend>
  \scr@ifundefinedorrelax{changefontsizes}{%
    \@defaultunits\@tempdima#1pt\relax\@nnil
    \edef\@ptsize{#1}%
  }{%
%</!extend>
    \ifvmode\else
      \par
%<class>      \ClassError{\KOMAClassName}{%
%<extend>      \PackageError{scrextend}{%
        Option `fontsize' inside paragraph not allowed%
      }{%
        Option `fontsize' has been designed to change the base font size of
        a\MessageBreak
        document. It has not been made to change the current font
        size. Moreover\MessageBreak
        using it inside a paragraph mostly will not have the intended result,
        because\MessageBreak
        TeX always uses the setting of `\string\baselineskip' and other
        parameters from the\MessageBreak
        end of a paragraph for the whole paragraph. Therefore using option
        `fontsize'\MessageBreak
        in TeX's horizontal mode does not make sense and is not
        permitted.\MessageBreak
        You should use font size commands like `\string\Huge'…`\string\tiny'
        or `\string\fontsize' here.\MessageBreak
        See a LaTeX introduction for more information.\MessageBreak
        But maybe you've just forgotten to make a paragraph. So if you'd
        continue,\MessageBreak
        I'll add `\expandafter\string\csname par\endcsname'.%
      }%
    \fi
    \expandafter\@defaultunits\expandafter\@tempdima#1 pt\relax\@nnil
    \edef\@tempa{#1}%
    \setlength{\@tempdimb}{\@tempdima}%
    \edef\@tempb{\strip@pt\@tempdimb}%
    \addtolength{\@tempdimb}{-10\p@}%
    \edef\@ptsize{\strip@pt\@tempdimb}%
    \edef\@tempa{%
      \noexpand\makeatletter
      \noexpand\InputIfFileExists{\@fontsizefilebase\@tempa.clo}{%
%<!extend>        \noexpand\ClassInfo{\KOMAClassName}{%
%<extend>        \noexpand\PackageInfo{scrextend}{%
          File `\@fontsizefilebase\@tempa.clo' used to setup font sizes}%
      }{%
        \noexpand\InputIfFileExists{\@fontsizefilebase\@tempb pt.clo}{%
%<!extend>          \noexpand\ClassInfo{\KOMAClassName}{%
%<extend>          \noexpand\PackageInfo{scrextend}{%
            File `\@fontsizefilebase\@tempb pt.clo' used instead of%
            \noexpand\MessageBreak
            file `\@fontsizefilebase\@tempa.clo' to setup font sizes}%
        }{%
          \noexpand\changefontsizes{#1}%
        }%
      }%
      \noexpand\catcode`\noexpand\@=\the\catcode`\@
    }%
%<extend>  \scr@ifundefinedorrelax{changefontsizes}{%
%<extend>    \expandafter\AtEndOfPackage\expandafter{\@tempa}%
%<extend>  }{%
    \@tempa
  }%
  \FamilyKeyStateProcessed
  \KOMA@kav@xreplacevalue{%
%<class>    \KOMAClassFileName
%<extend>    scrextend.\scr@pkgextension
  }{fontsize}{#1}%
}
%</option&(class|extend)>
%    \end{macrocode}
% \end{option}
%
%
% \section{Loading Packages Required by the Font Size File Generator Package}
%
% \pkg*{scrfontsizes} needs command \cs{changefontsizes}. This can either be
% provided by a \KOMAScript{} class or package \pkg*{scrextend}.
%    \begin{macrocode}
%<*generator&body>
\@ifundefined{changefontsizes}{\RequirePackage{scrextend}}{}
%</generator&body>
%    \end{macrocode}
%
%
% \section{Implementation of The Font Size Files}
%
% \changes{v2.6}{2000/01/04}{reading font size files works independent from size}
% \changes{v2.98c}{2008/03/26}{using my own \file{scrsize\dots.clo} files}
%
% We need at least the font size files for the three base sizes 10\,pt, 11\,pt
% and 12\,pt. From version 2.98c \KOMAScript{} prefers to use its own files,
% because these can be loaded without problems after |\begin{document}| and
% after another font size file has already been loaded. Nevertheless the base
% sizes are more or less from the standard classes.
%
%    \begin{macrocode}
%<*10pt|11pt|12pt>
\ProvidesFile{%
%<10pt>  scrsize10pt.clo%
%<11pt>  scrsize11pt.clo%
%<12pt>  scrsize12pt.clo%
}[\KOMAScriptVersion\space font size class option %
%<10pt>  (10pt)%
%<11pt>  (11pt)%
%<12pt>  (12pt)%
]
%    \end{macrocode}
%
% \begin{command}{\normalsize,\small,\footnotesize,\scriptsize,\tiny,\large,
%                 \Large,\LARGE,\huge,\Huge}
% \changes{v2.98c}{2008/03/26}{defined in the \file{scrsize\dots.clo} files}
% \changes{v3.38}{2022/07/30}{define the macros robust as the \file{clo} files
%   from 2021/10/04}
%    \begin{macrocode}
\let\normalsize\@undefined
\DeclareRobustCommand\normalsize{%
%<*10pt>
  \@setfontsize\normalsize\@xpt\@xiipt
  \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
  \abovedisplayshortskip \z@ \@plus3\p@
  \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
%</10pt>
%<*11pt>
  \@setfontsize\normalsize\@xipt{13.6}%
  \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
  \abovedisplayshortskip \z@ \@plus3\p@
  \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
%</11pt>
%<*12pt>
  \@setfontsize\normalsize\@xiipt{14.5}%
  \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
  \abovedisplayshortskip \z@ \@plus3\p@
  \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
%</12pt>
  \belowdisplayskip \abovedisplayskip
  \let\@listi\@listI
}
\let\small\@undefined
\DeclareRobustCommand\small{%
%<*10pt>
  \@setfontsize\small\@ixpt{11}%
  \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
  \abovedisplayshortskip \z@ \@plus2\p@
  \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
  \def\@listi{\leftmargin\leftmargini
    \topsep 4\p@ \@plus2\p@ \@minus2\p@
    \parsep 2\p@ \@plus\p@ \@minus\p@
    \itemsep \parsep}%
%</10pt>
%<*11pt>
  \@setfontsize\small\@xpt\@xiipt
  \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
  \abovedisplayshortskip \z@ \@plus3\p@
  \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
  \def\@listi{\leftmargin\leftmargini
    \topsep 6\p@ \@plus2\p@ \@minus2\p@
    \parsep 3\p@ \@plus2\p@ \@minus\p@
    \itemsep \parsep}%
%</11pt>
%<*12pt>
  \@setfontsize\small\@xipt{13.6}%
  \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
  \abovedisplayshortskip \z@ \@plus3\p@
  \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
  \def\@listi{\leftmargin\leftmargini
    \topsep 9\p@ \@plus3\p@ \@minus5\p@
    \parsep 4.5\p@ \@plus2\p@ \@minus\p@
    \itemsep \parsep}%
%</12pt>
  \belowdisplayskip \abovedisplayskip
}
\let\footnotesize\@undefined
\DeclareRobustCommand\footnotesize{%
%<*10pt>
  \@setfontsize\footnotesize\@viiipt{9.5}%
  \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
  \abovedisplayshortskip \z@ \@plus\p@
  \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
  \def\@listi{\leftmargin\leftmargini
    \topsep 3\p@ \@plus\p@ \@minus\p@
    \parsep 2\p@ \@plus\p@ \@minus\p@
    \itemsep \parsep}%
%</10pt>
%<*11pt>
  \@setfontsize\footnotesize\@ixpt{11}%
  \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
  \abovedisplayshortskip \z@ \@plus\p@
  \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
  \def\@listi{\leftmargin\leftmargini
    \topsep 4\p@ \@plus2\p@ \@minus2\p@
    \parsep 2\p@ \@plus\p@ \@minus\p@
    \itemsep \parsep}%
%</11pt>
%<*12pt>
   \@setfontsize\footnotesize\@xpt\@xiipt
   \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
   \abovedisplayshortskip \z@ \@plus3\p@
   \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
   \def\@listi{\leftmargin\leftmargini
               \topsep 6\p@ \@plus2\p@ \@minus2\p@
               \parsep 3\p@ \@plus2\p@ \@minus\p@
               \itemsep \parsep}%
%</12pt>
  \belowdisplayskip \abovedisplayskip
}
%<*10pt>
\let\scriptsize\@undefined
\DeclareRobustCommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}
\let\tiny\@undefined
\DeclareRobustCommand\tiny{\@setfontsize\tiny\@vpt\@vipt}
\let\large\@undefined
\DeclareRobustCommand\large{\@setfontsize\large\@xiipt{14}}
\let\Large\@undefined
\DeclareRobustCommand\Large{\@setfontsize\Large\@xivpt{18}}
\let\LARGE\@undefined
\DeclareRobustCommand\LARGE{\@setfontsize\LARGE\@xviipt{22}}
\let\huge\@undefined
\DeclareRobustCommand\huge{\@setfontsize\huge\@xxpt{25}}
\let\Huge\@undefined
\DeclareRobustCommand\Huge{\@setfontsize\Huge\@xxvpt{30}}
%</10pt>
%<*11pt>
\let\scriptsize\@undefined
\DeclareRobustCommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}}
\let\tiny\@undefined
\DeclareRobustCommand\tiny{\@setfontsize\tiny\@vipt\@viipt}
\let\large\@undefined
\DeclareRobustCommand\large{\@setfontsize\large\@xiipt{14}}
\let\Large\@undefined
\DeclareRobustCommand\Large{\@setfontsize\Large\@xivpt{18}}
\let\LARGE\@undefined
\DeclareRobustCommand\LARGE{\@setfontsize\LARGE\@xviipt{22}}
\let\huge\@undefined
\DeclareRobustCommand\huge{\@setfontsize\huge\@xxpt{25}}
\let\Huge\@undefined
\DeclareRobustCommand\Huge{\@setfontsize\Huge\@xxvpt{30}}
%</11pt>
%<*12pt>
\let\scriptsize\@undefined
\DeclareRobustCommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}}
\let\tiny\@undefined
\DeclareRobustCommand\tiny{\@setfontsize\tiny\@vipt\@viipt}
\let\large\@undefined
\DeclareRobustCommand\large{\@setfontsize\large\@xivpt{18}}
\let\Large\@undefined
\DeclareRobustCommand\Large{\@setfontsize\Large\@xviipt{22}}
\let\LARGE\@undefined
\DeclareRobustCommand\LARGE{\@setfontsize\LARGE\@xxpt{25}}
\let\huge\@undefined
\DeclareRobustCommand\huge{\@setfontsize\huge\@xxvpt{30}}
\@ifundefined{DeclareCommandCopy}{%
  \let\Huge\huge
}{%
  \DeclareCommandCopy\Huge\huge
}
%</12pt>
\normalsize
%    \end{macrocode}
% \end{command}
%
% \begin{length}{\footnotesep,\footins,\floatsep,\textfloatsep,\intextsep,
%                \dblfloatsep,\sbltextfloatsep,\partopsep}
% \changes{v2.98c}{2008/03/26}{defined in the \file{scrsize\dots.clo} files}
% \begin{ilength}{\@fptop,\@fpsep,\@fpbot,\@dblfptop,\@dblfpsep,\@dblfpbot}
% \changes{v2.98c}{2008/03/26}{defined in the \file{scrsize\dots.clo} files}
% The values are same as with the standard classes.
%    \begin{macrocode}
%<*10pt>
\setlength\footnotesep    {6.65\p@}
\setlength{\skip\footins} {9\p@ \@plus 4\p@ \@minus 2\p@}
\setlength\floatsep       {12\p@ \@plus 2\p@ \@minus 2\p@}
\setlength\textfloatsep   {20\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\intextsep      {12\p@ \@plus 2\p@ \@minus 2\p@}
\setlength\dblfloatsep    {12\p@ \@plus 2\p@ \@minus 2\p@}
\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\partopsep      {2\p@ \@plus 1\p@ \@minus 1\p@}
\setlength\@fptop         {0\p@ \@plus 1fil}
\setlength\@fpsep         {8\p@ \@plus 2fil}
\setlength\@fpbot         {0\p@ \@plus 1fil}
\setlength\@dblfptop      {0\p@ \@plus 1fil}
\setlength\@dblfpsep      {8\p@ \@plus 2fil}
\setlength\@dblfpbot      {0\p@ \@plus 1fil}
%</10pt>
%<*11pt>
\setlength\footnotesep    {7.7\p@}
\setlength{\skip\footins} {10\p@ \@plus 4\p@ \@minus 2\p@}
\setlength\floatsep       {12\p@ \@plus 2\p@ \@minus 2\p@}
\setlength\textfloatsep   {20\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\intextsep      {12\p@ \@plus 2\p@ \@minus 2\p@}
\setlength\dblfloatsep    {12\p@ \@plus 2\p@ \@minus 2\p@}
\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\partopsep      {3\p@ \@plus 1\p@ \@minus 1\p@}
\setlength\@fptop         {0\p@ \@plus 1fil}
\setlength\@fpsep         {8\p@ \@plus 2fil}
\setlength\@fpbot         {0\p@ \@plus 1fil}
\setlength\@dblfptop      {0\p@ \@plus 1fil}
\setlength\@dblfpsep      {8\p@ \@plus 2fil}
\setlength\@dblfpbot      {0\p@ \@plus 1fil}
%</11pt>
%<*12pt>
\setlength\footnotesep    {8.4\p@}
\setlength{\skip\footins} {10.8\p@ \@plus 4\p@ \@minus 2\p@}
\setlength\floatsep       {12\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\textfloatsep   {20\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\intextsep      {14\p@ \@plus 4\p@ \@minus 4\p@}
\setlength\dblfloatsep    {14\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
\setlength\partopsep      {3\p@ \@plus 2\p@ \@minus 2\p@}
\setlength\@fptop         {0\p@ \@plus 1fil}
\setlength\@fpsep         {10\p@ \@plus 2fil}
\setlength\@fpbot         {0\p@ \@plus 1fil}
\setlength\@dblfptop      {0\p@ \@plus 1fil}
\setlength\@dblfpsep      {10\p@ \@plus 2fil}
\setlength\@dblfpbot      {0\p@ \@plus 1fil}
%</12pt>
%    \end{macrocode}
% \begin{macro}{\@listi,\@listii,\@listiii,\@listiv,\@listv,\@listvi}
% \changes{v2.98c}{2008/03/26}{defined in the \file{scrsize\dots.clo} files}
% The definitions are the same as with the standard classes.
%    \begin{macrocode}
\def\@listi{\leftmargin\leftmargini
%<*10pt>
            \parsep 4\p@ \@plus2\p@ \@minus\p@
            \topsep 8\p@ \@plus2\p@ \@minus4\p@
            \itemsep4\p@ \@plus2\p@ \@minus\p@}
%</10pt>
%<*11pt>
            \parsep 4.5\p@ \@plus2\p@ \@minus\p@
            \topsep 9\p@   \@plus3\p@ \@minus5\p@
            \itemsep4.5\p@ \@plus2\p@ \@minus\p@}
%</11pt>
%<*12pt>
            \parsep 5\p@  \@plus2.5\p@ \@minus\p@
            \topsep 10\p@ \@plus4\p@   \@minus6\p@
            \itemsep5\p@  \@plus2.5\p@ \@minus\p@}
%</12pt>
\let\@listI\@listi
\def\@listii {\leftmargin\leftmarginii
              \labelwidth\leftmarginii
              \advance\labelwidth-\labelsep
%<*10pt>
              \topsep    4\p@ \@plus2\p@ \@minus\p@
              \parsep    2\p@ \@plus\p@  \@minus\p@
%</10pt>
%<*11pt>
              \topsep    4.5\p@ \@plus2\p@ \@minus\p@
              \parsep    2\p@   \@plus\p@  \@minus\p@
%</11pt>
%<*12pt>
              \topsep    5\p@   \@plus2.5\p@ \@minus\p@
              \parsep    2.5\p@ \@plus\p@    \@minus\p@
%</12pt>
              \itemsep   \parsep}
\def\@listiii{\leftmargin\leftmarginiii
              \labelwidth\leftmarginiii
              \advance\labelwidth-\labelsep
%<10pt>              \topsep    2\p@ \@plus\p@\@minus\p@
%<11pt>              \topsep    2\p@ \@plus\p@\@minus\p@
%<12pt>              \topsep    2.5\p@\@plus\p@\@minus\p@
              \parsep    \z@
              \partopsep \p@ \@plus\z@ \@minus\p@
              \itemsep   \topsep}
\def\@listiv {\leftmargin\leftmarginiv
              \labelwidth\leftmarginiv
              \advance\labelwidth-\labelsep}
\def\@listv  {\leftmargin\leftmarginv
              \labelwidth\leftmarginv
              \advance\labelwidth-\labelsep}
\def\@listvi {\leftmargin\leftmarginvi
              \labelwidth\leftmarginvi
              \advance\labelwidth-\labelsep}
%</10pt|11pt|12pt>
%    \end{macrocode}
% \end{macro}^^A \@listi … \@listvi
% \end{ilength}^^A \@fptop … \@dblfpbot
% \end{length}^^A \footnotesep … \partopsep
%
% \begin{command}{\changefontsizes}
% \changes{v2.96}{2006/08/11}{added}
% \changes{v3.08b}{2011/02/22}{three \cs{def} replaced by \cs{edef}}
% \changes{v3.17}{2015/02/23}{define if undefined only}
% \changes{v3.17}{2015/02/23}{indirect definition for Falk}
% \begin{macro}{\simple@changefontsizes}
% \changes{v3.17}{2015/02/23}{added}
% \changes{v3.17}{2015/03/25}{\cs{par@updaterelative} added}
% \changes{v3.39}{2022/11/11}{initial dot removed from member argument of
%   option storage commands}
% Fallback calculation of font size settings relative to known 10\,pt values:
% \begin{quote}
%   \cs{changefontsizes}\oarg{baseline skip}\marg{font size}
% \end{quote}
% If the \meta{baseline skip} is given, it is used as \len{baselineskip} for
% \cs{normalsize} and all other baseline skips are relative to it. If it is
% not give, it is also calculated.
% \begin{macro}{\scr@setlength}
% \changes{v3.12}{2013/10/08}{added}
% Command
% \begin{quote}
%   \cs{scr@setlength}\marg{\LaTeX length}\marg{base dimension}\marg{plus
%   dimension}\marg{minus dimension}
% \end{quote}
% sets \meta{\LaTeX length} to \meta{base dimension} \texttt{plus} \meta{plus
% dimension} \texttt{minus} \meta{minus dimension}. Minimum value for
% \meta{plus dimension} and \meta{minus dimension} is 1\,pt.
%    \begin{macrocode}
%<*body&(class|extend)>
\newcommand*\scr@setlength[4]{%
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{#1}{#2 \@plus#3 \@minus#4}%
%<!v4>  \else
    \ifdim #2<\ifdim #2=\z@ \z@ \else \p@\fi
      \ifdim #3<\ifdim #3=\z@ \z@ \else \p@\fi
        \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi
          \setlength{#1}{\p@ \@plus\p@ \@minus\p@}%
        \else
          \setlength{#1}{\p@ \@plus\p@ \@minus#4}%
        \fi
      \else
        \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi
          \setlength{#1}{\p@ \@plus#3 \@minus\p@}%
        \else
          \setlength{#1}{\p@ \@plus#3 \@minus#4}%
        \fi
      \fi
    \else
      \ifdim #3<\ifdim #3=\z@ \z@ \else \p@\fi
        \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi
          \setlength{#1}{#2 \@plus\p@ \@minus\p@}%
        \else
          \setlength{#1}{#2 \@plus\p@ \@minus#4}%
        \fi
      \else
        \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi
          \setlength{#1}{#2 \@plus#3 \@minus\p@}%
        \else
          \setlength{#1}{#2 \@plus#3 \@minus#4}%
        \fi
      \fi
    \fi
%<!v4>  \fi
}
%    \end{macrocode}
% \end{macro}
% \changes{v3.17}{2015/03/10}{\eTeX{} warning removed}
% \changes{v3.38}{2022/07/30}{define the macros robust as the \file{clo} files
%   from 2021/10/04}
%    \begin{macrocode}
\providecommand*{\simple@changefontsizes}[2][1.2\@tempdima]{%
  \KOMA@kav@removekey{%
%<class>    \KOMAClassFileName
%<extend>    scrextend.\scr@pkgextension
  }{fontsize}%
  \@defaultunits\@tempdima#2pt\relax\@nnil
  \setlength{\@tempdimc}{\@tempdima}%
  \addtolength{\@tempdimc}{-10\p@}%
  \edef\@ptsize{\strip@pt\@tempdimc}%
  \@defaultunits\@tempdimb#1pt\relax\@nnil
  \setlength{\@tempdimc}{\dimexpr (100\@tempdimb / \@tempdima * \p@)}%
  \edef\@tempb{\the\@tempdimc}%
  \setlength{\@tempdimc}{\@tempdima}%
  \def\@tempa##1##2##3##4##5\@nnil{\def##1{##2.##3##4}}%
  \expandafter\@tempa\expandafter\@tempb\@tempb\@nnil%
%    \end{macrocode}
% Now, \len{@temdimc} is the wanted basic font size in pt. \cs{@tempb} is the
% factor of the baseline skip rounded to two decimals. \len{@tempdima} is also
% the basic font size and \len{@tempdimb} the \len{baselineskip}. But
% \len{@tempdima} and \len{tempdimb} will change in further calculations
% depending on the wanted font size command.
%
% Calculation and definition of \cs{normalsize}:
%    \begin{macrocode}
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\abovedisplayskip}{%
%<!v4>      \@tempdima \@plus .25\@tempdima \@minus .58\@tempdima}%
%<!v4>    \setlength{\abovedisplayshortskip}{\z@ \@plus .25\@tempdima}%
%<!v4>    \setlength{\belowdisplayshortskip}{%
%<!v4>      .55\@tempdima \@plus .3\@tempdima \@minus .25\@tempdima}%
%<!v4>  \else
    \scr@setlength{\abovedisplayskip}%
                  {.8333\@tempdimb}{.1667\@tempdimb}{.5\@tempdimb}%
    \scr@setlength{\abovedisplayshortskip}{\z@}{.25\@tempdimb}{\z@}%
    \scr@setlength{\belowdisplayshortskip}%
                  {.5\@tempdimb}{.25\@tempdimb}{.25\@tempdimb}%
%<!v4>  \fi
  \setlength{\belowdisplayskip}{\abovedisplayskip}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\normalsize
    {\the\@tempdima}{\the\@tempdimb}%
    \abovedisplayskip \the\abovedisplayskip
    \abovedisplayshortskip \the\abovedisplayshortskip
    \belowdisplayskip \the\belowdisplayskip
    \belowdisplayshortskip \the\belowdisplayshortskip
    \let\noexpand\@listi\noexpand\@listI
  }%
  \let\normalsize\@undefined
  \expandafter\DeclareRobustCommand\expandafter\normalsize\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{small}:
%    \begin{macrocode}
  \setlength{\@tempdima}{0.9125\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\abovedisplayskip}{%
%<!v4>      \@tempdima \@plus .25\@tempdima \@minus .58\@tempdima}%
%<!v4>    \setlength{\abovedisplayshortskip}{\z@ \@plus .25\@tempdima}%
%<!v4>    \setlength{\belowdisplayshortskip}{%
%<!v4>      .55\@tempdima \@plus .3\@tempdima \@minus .25\@tempdima}%
%<!v4>  \else
    \scr@setlength{\abovedisplayskip}%
                  {.8333\@tempdimb}{.1667\@tempdimb}{.5\@tempdimb}%
    \scr@setlength{\abovedisplayshortskip}{\z@}{.25\@tempdimb}{\z@}%
    \scr@setlength{\belowdisplayshortskip}%
                  {.5\@tempdimb}{.25\@tempdimb}{.25\@tempdimb}%
%<!v4>  \fi
  \setlength{\belowdisplayskip}{\abovedisplayskip}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\small
    {\the\@tempdima}{\the\@tempdimb}%
    \abovedisplayskip \the\abovedisplayskip
    \abovedisplayshortskip \the\abovedisplayshortskip
    \belowdisplayskip \the\belowdisplayskip
    \belowdisplayshortskip \the\belowdisplayshortskip
    \let\noexpand\@listi\noexpand\@listi@small
  }%
  \let\small\@undefined
  \expandafter\DeclareRobustCommand\expandafter\small\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{footnotesize}:
%    \begin{macrocode}
  \setlength{\@tempdima}{.83334\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\abovedisplayskip}{%
%<!v4>      \@tempdima \@plus .25\@tempdima \@minus .58\@tempdima}%
%<!v4>    \setlength{\abovedisplayshortskip}{\z@ \@plus .25\@tempdima}%
%<!v4>    \setlength{\belowdisplayshortskip}{%
%<!v4>      .55\@tempdima \@plus .3\@tempdima \@minus .25\@tempdima}%
%<!v4>  \else
    \scr@setlength{\abovedisplayskip}%
                  {.8333\@tempdimb}{.1667\@tempdimb}{.5\@tempdimb}%
    \scr@setlength{\abovedisplayshortskip}{\z@}{.25\@tempdimb}{\z@}%
    \scr@setlength{\belowdisplayshortskip}%
                  {.5\@tempdimb}{.25\@tempdimb}{.25\@tempdimb}%
%<!v4>  \fi
  \setlength{\belowdisplayskip}{\abovedisplayskip}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\footnotesize
    {\the\@tempdima}{\the\@tempdimb}%
    \abovedisplayskip \the\abovedisplayskip
    \abovedisplayshortskip \the\abovedisplayshortskip
    \belowdisplayskip \the\belowdisplayskip
    \belowdisplayshortskip \the\belowdisplayshortskip
    \let\noexpand\@listi\noexpand\@listi@footnotesize
  }%
  \let\footnotesize\@undefined
  \expandafter\DeclareRobustCommand\expandafter\footnotesize\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{scriptsize}:
%    \begin{macrocode}
  \setlength{\@tempdima}{.66667\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\scriptsize
    {\the\@tempdima}{\the\@tempdimb}%
  }%
  \let\scriptsize\@undefined
  \expandafter\DeclareRobustCommand\expandafter\scriptsize\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{tiny}:
%    \begin{macrocode}
  \setlength{\@tempdima}{.5\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\tiny
    {\the\@tempdima}{\the\@tempdimb}%
  }%
  \let\tiny\@undefined
  \expandafter\DeclareRobustCommand\expandafter\tiny\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{large}:
%    \begin{macrocode}
  \setlength{\@tempdima}{1.2\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\large
    {\the\@tempdima}{\the\@tempdimb}%
  }%
  \let\large\@undefined
  \expandafter\DeclareRobustCommand\expandafter\large\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{Large}:
%    \begin{macrocode}
  \setlength{\@tempdima}{1.44\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\Large
    {\the\@tempdima}{\the\@tempdimb}%
  }%
  \let\Large\@undefined
  \expandafter\DeclareRobustCommand\expandafter\Large\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{LARGE}:
%    \begin{macrocode}
  \setlength{\@tempdima}{1.728\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\LARGE
    {\the\@tempdima}{\the\@tempdimb}%
  }%
  \let\LARGE\@undefined
  \expandafter\DeclareRobustCommand\expandafter\LARGE\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{huge}:
%    \begin{macrocode}
  \setlength{\@tempdima}{2.074\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\huge
    {\the\@tempdima}{\the\@tempdimb}%
  }%
  \let\huge\@undefined
  \expandafter\DeclareRobustCommand\expandafter\huge\expandafter{\reserved@a}%
%    \end{macrocode}
% Calculation and definition of \cs{Huge}:
%    \begin{macrocode}
  \setlength{\@tempdima}{2.488\@tempdimc}%
  \setlength{\@tempdimb}{\@tempb\@tempdima}%
  \edef\reserved@a{%
    \noexpand\@setfontsize\noexpand\Huge
    {\the\@tempdima}{\the\@tempdimb}%
  }%
  \let\Huge\@undefined
  \expandafter\DeclareRobustCommand\expandafter\Huge\expandafter{\reserved@a}%
%    \end{macrocode}
% Activation of \cs{normalsize} and calculation of additional font size
% depending sized.
%    \begin{macrocode}
  \normalsize
%<!extend&!v4>  \expandafter\ifnum\scr@v@is@ge{3.17}
%<!extend>    \@nameuse{par@updaterelative}%
%<!extend&!v4>  \fi
%    \end{macrocode}
% After the activation of \cs{normalsize} above, we can use \cs{f@size} and
% \cs{f@baselineskip}. We cannot use \cs{baselineskip}, because this would be
% influenced by \cs{baselinestretch}.
%    \begin{macrocode}
%<*!v4>
  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
    \setlength{\footnotesep}{.7\@tempdimc}%
    \setlength{\skip\footins}{.9\@tempdimc \@plus .3333\@tempdimc \@minus
      .6\@tempdimc}%
    \setlength{\floatsep}{\@tempdimc \@plus .1667\@tempdimc \@minus
      .3333\@tempdimc}%
    \setlength{\textfloatsep}{1.6667\@tempdimc \@plus .1667\@tempdimc \@minus
      .3333\@tempdimc}%
    \setlength{\intextsep}{\@tempb\@tempdimc \@plus .3333\@tempdimc \@minus
      .3333\@tempdimc}%
    \setlength{\dblfloatsep}{\@tempb\@tempdimc \@plus .1667\@tempdimc \@minus
      .3333\@tempdimc}%
    \setlength{\dbltextfloatsep}{\textfloatsep}%
    \setlength{\@fptop}{0\p@ \@plus 1fil}%
    \setlength{\@fpsep}{.8333\@tempdimc \@plus 2fil}%
    \setlength{\@fpbot}{\@fptop}%
    \setlength{\@dblfptop}{0\p@ \@plus 1fil}%
    \setlength{\@dblfpsep}{.8333\@tempdimc \@plus 2fil}%
    \setlength{\@dblfpbot}{\@fptop}%
  \fi
%</!v4>  
%    \end{macrocode}
% Calculation and definition of \cs{@listi} and \cs{@listI}:
%    \begin{macrocode}
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\topsep}{.8333\@tempdimc \@plus .3333\@tempdimc \@minus
%<!v4>      .5\@tempdimc}%
%<!v4>    \setlength{\parsep}{.4167\@tempdimc \@plus .2083\@tempdimc \@minus \p@}%
%<!v4>  \else
    \setlength{\@tempdimb}{\f@baselineskip}%
    \scr@setlength{\parsep}%
                  {.3333\@tempdimb}{.1667\@tempdimb}{.0833\@tempdimb}%
    \scr@setlength{\topsep}%
                  {.6667\@tempdimb}{.1667\@tempdimb}{.3333\@tempdimb}%
%<!v4>  \fi
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listi\endcsname
  \endgroup
  \edef\@listi{\leftmargin\leftmargini
    \topsep \the\topsep
    \parsep \the\parsep
    \itemsep \parsep
    \if@tempswa\noexpand\@list@extra\fi
  }%
  \let\@listI\@listi
%    \end{macrocode}
% Calculation and definition of \cs{@listi@small}:
%    \begin{macrocode}
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\topsep}{.75\@tempdimc \@plus .25\@tempdimc \@minus
%<!v4>      .41667\@tempdimc}%
%<!v4>    \setlength{\parsep}{.375\@tempdimc \@plus .16667\@tempdimc \@minus \p@}%
%<!v4>  \else
    \scr@setlength{\parsep}%
                  {.1667\@tempdimb}{.0833\@tempdimb}{.0833\@tempdimb}%
    \scr@setlength{\topsep}%
                  {.3333\@tempdimb}{.1667\@tempdimb}{.1667\@tempdimb}%
%<!v4>  \fi
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listi\endcsname
  \endgroup
  \edef\@listi@small{\leftmargin\leftmargini
    \topsep \the\topsep
    \parsep \the\parsep
    \itemsep \parsep
    \if@tempswa\noexpand\@list@extra\fi
  }%
%    \end{macrocode}
% Calculation and definition of \cs{@listi@footnotesize}:
%    \begin{macrocode}
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\topsep}{.5\@tempdimc \@plus .16667\@tempdimc \@minus
%<!v4>      .16667\@tempdimc}%
%<!v4>    \setlength{\parsep}{.25\@tempdimc \@plus .16667\@tempdimc \@minus \p@}%
%<!v4>  \else
    \scr@setlength{\parsep}%
                  {.125\@tempdimb}{.0625\@tempdimb}{.0625\@tempdimb}%
    \scr@setlength{\topsep}%
                  {.25\@tempdimb}{.125\@tempdimb}{.125\@tempdimb}%
%<!v4>  \fi
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listi\endcsname
  \endgroup
  \edef\@listi@footnotesize{\leftmargin\leftmargini
    \topsep \the\topsep
    \parsep \the\parsep
    \itemsep \parsep
    \if@tempswa\noexpand\@list@extra\fi
  }%
%    \end{macrocode}
% Calculation and definition of \cs{@listii}:
%    \begin{macrocode}
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\topsep}{.4167\@tempdimc \@plus .2083\@tempdimc \@minus \p@}%
%<!v4>    \setlength{\parsep}{.2083\@tempdimc \@plus \p@ \@minus \p@}%
%<!v4>  \else
    \scr@setlength{\parsep}%
                  {.1667\@tempdimb}{.0833\@tempdimb}{.0833\@tempdimb}%
    \scr@setlength{\topsep}%
                  {.3333\@tempdimb}{.1667\@tempdimb}{.0833\@tempdimb}%
%<!v4>  \fi
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listii\endcsname
  \endgroup
  \edef\@listii{\leftmargin\leftmarginii
    \labelwidth=\dimexpr \leftmargin-\labelsep
    \topsep \the\topsep
    \parsep \the\parsep
    \itemsep \parsep
    \if@tempswa\noexpand\@list@extra\fi
  }%
%    \end{macrocode}
% Calculation and definition of \cs{@listiii}:
%    \begin{macrocode}
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\topsep}{.2083\@tempdimc \@plus \p@ \@minus \p@}%
%<!v4>  \else
    \scr@setlength{\topsep}%
                  {.1667\@tempdimb}{.0833\@tempdimb}{.0833\@tempdimb}%
%<!v4>  \fi
  \setlength{\partopsep}{\z@ \@plus\z@ \@minus\p@}%
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listiii\endcsname
  \endgroup
  \edef\@listiii{\leftmargin\leftmarginiii
    \labelwidth=\dimexpr \leftmargin-\labelsep
    \topsep \the\topsep
    \parsep \z@
    \partopsep \the\partopsep
    \itemsep \topsep
    \if@tempswa\noexpand\@list@extra\fi
  }%
%    \end{macrocode}
% Calculation and definition of \cs{@listiv}:
%    \begin{macrocode}
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listiv\endcsname
  \endgroup
  \edef\@listiv{\leftmargin\leftmarginiv
    \labelwidth=\dimexpr \leftmargin-\labelsep\relax
    \if@tempswa\noexpand\@list@extra\fi
  }%
%    \end{macrocode}
% Calculation and definition of \cs{@listv}:
%    \begin{macrocode}
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listv\endcsname
  \endgroup
  \edef\@listv{\leftmargin\leftmarginv
    \labelwidth=\dimexpr \leftmargin-\labelsep\relax
    \if@tempswa\noexpand\@list@extra\fi
  }%
%    \end{macrocode}
% Calculation and definition of \cs{@listvi}:
%    \begin{macrocode}
  \@tempswafalse
  \begingroup
    \def\@list@extra{\aftergroup\@tempswatrue}%
    \csname @listvi\endcsname
  \endgroup
  \edef\@listvi{\leftmargin\leftmarginvi
    \labelwidth=\dimexpr \leftmargin-\labelsep\relax
    \if@tempswa\noexpand\@list@extra\fi
  }%
  \@listi
%    \end{macrocode}
% \changes{v2.97c}{2007/07/04}{setting \cs{intextsep}}
% \changes{v2.97c}{2007/07/04}{setting \cs{dblfloatsep}}
% \changes{v2.97c}{2007/07/04}{setting \cs{partopsep}}
% \changes{v3.12}{2013/10/08}{calculation of some lengths changed}
% Calculation and setting of \len{intextsep}, \len{dblfloatsep},
% \len{partopsep}, \len{footnotesep}, \cs{skip}\len{footins}, \len{footsep},
% \len{textfloatsep}, \len{@fptop}, \len{@fpsep}, \len{@fpbot},
% \len{@dblfptop}, \len{@dblfpsep}, \len{@dblfpbot}. Setting of \len{topsep}
% and \len{parsep} is not needed because part of \cs{@listi}.
%    \begin{macrocode}
%<!v4>  \expandafter\ifnum\scr@v@is@lt{3.12}\relax
%<!v4>    \setlength{\@tempdimb}{\@tempb\@tempdima}%
%<!v4>    \setlength{\@tempdima}{\dimexpr \@tempdimb-\@tempdimc}%
%<!v4>    \setlength\intextsep{\@tempdimb \@plus.2\@tempdima \@minus.2\@tempdima}%
%<!v4>    \setlength\dblfloatsep\intextsep
%<!v4>    \setlength\partopsep{.2\@tempdimc \@plus.1\@tempdimc \@minus.1\@tempdimc}%
%<!v4>  \else
    \setlength{\@tempdimb}{\f@baselineskip}%
    \setlength{\footnotesep}{.555\@tempdimb}%
    \scr@setlength{\skip\footins}%
                  {.75\@tempdimb}{.3333\@tempdimb}{.1667\@tempdimb}%
    \scr@setlength{\floatsep}%
                  {\@tempdimb}{.1667\@tempdimb}{.1667\@tempdimb}%
    \scr@setlength{\textfloatsep}%
                  {1.6667\@tempdimb}{.1667\@tempdimb}{.3333\@tempdimb}%
    \setlength{\intextsep}{\floatsep}%
    \setlength{\dblfloatsep}{\floatsep}%
    \setlength{\dbltextfloatsep}{\textfloatsep}%
    \setlength{\@fptop}{\z@ \@plus 1fil}%
    \setlength{\@fpsep}{.6667\@tempdimb \@plus 2fil}%
    \setlength{\@fpbot}{\@fptop}%
    \setlength{\@dblfptop}{\@fptop}%
    \setlength{\@dblfpsep}{\@fpsep}%
    \setlength{\@dblfpbot}{\@fptop}%
    \scr@setlength{\partopsep}{.2\@tempdimb}{.1\@tempdimb}{.1\@tempdimb}%
%<!v4>  \fi
}
\scr@ifundefinedorrelax{changefontsizes}{%
  \let\changefontsizes\simple@changefontsizes
}{%
%<class>  \ClassWarning{\KOMAClassName}{%
%<package&extend>  \PackageWarning{scrextend}{%
    \string\changefontsizes\space already defined.\MessageBreak
    I hope, the definition is compatible,\MessageBreak
    because I do not change it%
  }%
}
%</body&(class|extend)>
%    \end{macrocode}
% \end{macro}^^A \simple@changefontsizes
% \end{command}^^A \changefontsizes
%
%
% \begin{command}{\generatefontfile}
% \changes{v3.09}{2011/02/23}{added}
% \changes{v3.17}{2015/03/26}{\cs{par@updaterelative} added}
% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
% The main command of the generator:
% \begin{quote}
%   \cs{generatefontfile}\marg{base name}\oarg{baseline skip}\marg{font size}
% \end{quote}
% It writes a font size file ``\meta{base name}\meta{font
% size}.clo''. \meta{base name} ``\texttt{scrbase}'' is protected and results
% in an error message.
%    \begin{macrocode}
%<*generator&body>
\newcommand*{\generatefontfile}[1]{%
  \Ifstr{#1}{scrsize}{%
    \ClassError{\KOMAClassName}{%
      Font file name `scrsize' not allowed%
    }{%
      Font files with name `scrsize<fontsize>.clo' are reserved for
      KOMA-Script.\MessageBreak
      You should use another prefix and rename \string\@fontsizefilebase\space
      either before\MessageBreak
      loading a KOMA-Script class using one of \string\documentclass,
      \string\LoadClass,\MessageBreak
      or \string\LoadClassWithOptions\space or before loading package
      `scrextend' using another\MessageBreak
      class.}%
    \@@@generatefontfile
  }{%
%    \end{macrocode}
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by \cs{kernel@ifnextchar}}
% Test for optional argument and use proper helper.
%    \begin{macrocode}
    \kernel@ifnextchar [{\@generatefontfile{#1}}{\@@generatefontfile{#1}}%
  }%
}
%    \end{macrocode}
% \begin{macro}{\@generatefontfile,\@@generatefontfile}
% \changes{v3.09}{2011/02/23}{added}
% The helper macros are needed, because we are not using \pkg{xparse} currently.
%    \begin{macrocode}
\newcommand*{\@generatefontfile}{}
\def\@generatefontfile#1[#2]#3{%
  \begingroup
    \@ifundefined{setparsizes}{\setlength{\parskip}{0pt}}%
                              {\setparsizes{0pt}{0pt}{0pt}}%
    \changefontsizes[{#2}]{#3}%
    \generate@fontfile{#1}{#3}%
  \endgroup
}
\newcommand\@@generatefontfile[2]{%
  \begingroup
    \@ifundefined{setparsizes}{\setlength{\parskip}{0pt}}%
                              {\setparsizes{0pt}{0pt}{0pt}}%
    \changefontsizes{#2}%
    \generate@fontfile{#1}{#2}%
  \endgroup
}
%    \end{macrocode}
% \end{macro}^^A \@generatefontfile,\@@generatefontfile
% \begin{macro}{\@@@generatefontfile}
% \changes{v3.09}{2011/02/23}{added}
% Dummy used in error case to eat an optional and a mandatory argument.
%    \begin{macrocode}
\newcommand*{\@@@generatefontfile}[2][]{}
%    \end{macrocode}
% \end{macro}^^A \@@@generatefontfile
% \begin{macro}{\@fontfile}
% \changes{v3.09}{2011/02/23}{added}
% Because \cs{generatefontfile} is allowed in the document preamble only, when
% the main aux file is not yet opened, we can use \cs{@mainaux} as temporary
% file handle.
%    \begin{macrocode}
\newcommand*{\@fontfile}{}
\let\@fontfile\@mainaux
%    \end{macrocode}
% \begin{macro}{\generate@fontfile}
% \changes{v3.09}{2011/02/23}{added}
% \changes{v3.16a}{2015/02/11}{\cs{footnotesize} fixed}
% \changes{v3.38}{2022/07/30}{define the macros robust as the \file{clo} files
%   from 2021/10/04}
% Output of the font size file using the current font setting. It has to be
% used inside a local group!
%    \begin{macrocode}
\newcommand*{\generate@fontfile}[2]{%
  \def\@ind{\space\space}%
  \immediate\openout\@fontfile #1#2.clo
  \immediate\write\@fontfile{\@percentchar^^J%
    \@percentchar\space This is file `#1#2.clo', generated with^^J%
    \@percentchar\space scrfontsizes
    \csname ver@scrfontsizes.\scr@pkgextension\endcsname,^^J%
    \@percentchar\space Copyright (c) Markus Kohm.^^J%
    \@percentchar^^J%
    \string\ProvidesFile{#1#2.clo}[%
    \the\year/\ifnum\month<10 0\fi\the\month/\ifnum\day<10 0\fi\the\day%
    \space generated font size class option (#2)]}%
  \immediate\write\@fontfile{%
    \string\let\string\normalsize\string\@undefined
    \string\DeclareRobustCommand\string\normalsize{\@percentchar^^J%
      \@ind\string\@setfontsize\string\normalsize{\f@size}{\f@baselineskip}%
      \@percentchar^^J%
      \@ind\string\abovedisplayskip\space \the\abovedisplayskip^^J%
      \@ind\string\abovedisplayshortskip\space \the\abovedisplayshortskip^^J%
      \@ind\string\belowdisplayskip\space \the\belowdisplayskip^^J%
      \@ind\string\belowdisplayshortskip\space \the\belowdisplayshortskip^^J%
      \@ind\string\let\string\@listi\string\@listI^^J%
    }\@percentchar%
  }%
  \begingroup\small\@listi
    \immediate\write\@fontfile{%
      \string\let\string\small\string\@undefined
      \string\DeclareRobustCommand\string\small{\@percentchar^^J%
        \@ind\string\@setfontsize\string\small{\f@size}{\f@baselineskip}%
        \@percentchar^^J%
        \@ind\string\abovedisplayskip\space \the\abovedisplayskip^^J%
        \@ind\string\abovedisplayshortskip\space \the\abovedisplayshortskip^^J%
        \@ind\string\belowdisplayskip\space \the\belowdisplayskip^^J%
        \@ind\string\belowdisplayshortskip\space \the\belowdisplayshortskip^^J%
        \@ind\string\def\string\@listi{\@percentchar^^J%
          \@ind\@ind\string\leftmargin\string\leftmargini^^J%
          \@ind\@ind\string\topsep \the\topsep^^J%
          \@ind\@ind\string\parsep \the\parsep^^J%
          \@ind\@ind\string\itemsep \string\parsep^^J%
        \@ind}\@percentchar^^J%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\footnotesize\@listi
    \immediate\write\@fontfile{%
      \string\let\string\footnotesize\string\@undefined
      \string\DeclareRobustCommand\string\footnotesize{\@percentchar^^J%
        \@ind\string\@setfontsize\string\footnotesize{\f@size}{\f@baselineskip}%
        \@percentchar^^J%
        \@ind\string\abovedisplayskip\space \the\abovedisplayskip^^J%
        \@ind\string\abovedisplayshortskip\space \the\abovedisplayshortskip^^J%
        \@ind\string\belowdisplayskip\space \the\belowdisplayskip^^J%
        \@ind\string\belowdisplayshortskip\space \the\belowdisplayshortskip^^J%
        \@ind\string\def\string\@listi{\@percentchar^^J%
          \@ind\@ind\string\leftmargin\string\leftmargini^^J%
          \@ind\@ind\string\topsep \the\topsep^^J%
          \@ind\@ind\string\parsep \the\parsep^^J%
          \@ind\@ind\string\itemsep \string\parsep^^J%
        \@ind}\@percentchar^^J%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\scriptsize
    \immediate\write\@fontfile{%
      \string\let\string\scriptsize\string\@undefined
      \string\DeclareRobustCommand\string\scriptsize{%
        \string\@setfontsize\string\scriptsize{\f@size}{\f@baselineskip}%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\tiny
    \immediate\write\@fontfile{%
      \string\let\string\tiny\string\@undefined
      \string\DeclareRobustCommand\string\tiny{%
        \string\@setfontsize\string\tiny{\f@size}{\f@baselineskip}%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\large
    \immediate\write\@fontfile{%
      \string\let\string\large\string\@undefined
      \string\DeclareRobustCommand\string\large{%
        \string\@setfontsize\string\large{\f@size}{\f@baselineskip}%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\Large
    \immediate\write\@fontfile{%
      \string\let\string\Large\@undefined
      \string\DeclareRobustCommand\string\Large{%
        \string\@setfontsize\string\Large{\f@size}{\f@baselineskip}%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\LARGE
    \immediate\write\@fontfile{%
      \string\let\string\LARGE\@undefined
      \string\DeclareRobustCommand\string\LARGE{%
        \string\@setfontsize\string\LARGE{\f@size}{\f@baselineskip}%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\huge
    \immediate\write\@fontfile{%
      \string\let\string\huge\@undefined
      \string\DeclareRobustCommand\string\huge{%
        \string\@setfontsize\string\huge{\f@size}{\f@baselineskip}%
      }\@percentchar%
    }%
  \endgroup
  \begingroup\Huge
    \immediate\write\@fontfile{%
      \string\let\string\Huge\@undefined
      \string\DeclareRobustCommand\string\Huge{%
        \string\@setfontsize\string\Huge{\f@size}{\f@baselineskip}%
      }\@percentchar%
    }%
  \endgroup
  \immediate\write\@fontfile{\string\normalsize}%
  \immediate\write\@fontfile{%
    \string\setlength{\string\footnotesep}{\the\footnotesep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\skip\string\footins}{\the\skip\footins}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\floatsep}{\the\floatsep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\textfloatsep}{\the\textfloatsep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\intextsep}{\the\intextsep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\dblfloatsep}{\the\dblfloatsep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\dbltextfloatsep}{\the\dbltextfloatsep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\@fptop}{\the\@fptop}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\@fpsep}{\the\@fpsep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\@fpbot}{\the\@fpbot}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\@dblfptop}{\the\@dblfptop}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\@dblfpsep}{\the\@dblfpsep}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\@dblfpbot}{\the\@dblfpbot}\@percentchar
  }%
  \immediate\write\@fontfile{%
    \string\setlength{\string\partopsep}{\the\partopsep}\@percentchar
  }%
  \begingroup
    \@listi
    \immediate\write\@fontfile{%
      \string\def\string\@listi{\@percentchar^^J%
        \@ind\string\leftmargin\string\leftmargini^^J%
        \@ind\string\topsep \the\topsep^^J%
        \@ind\string\parsep \the\parsep^^J%
        \@ind\string\itemsep \string\parsep^^J%
      }\@percentchar
    }%
  \endgroup
  \immediate\write\@fontfile{%
    \string\let\string\@listI\string\@listi
  }%
  \begingroup
    \@listii
    \immediate\write\@fontfile{%
      \string\def\string\@listii{\@percentchar^^J%
        \@ind\string\leftmargin\string\leftmarginii^^J%
        \@ind\string\labelwidth\string\leftmarginii^^J%
        \@ind\string\advance\string\labelwidth-\string\labelsep^^J%
        \@ind\string\topsep \the\topsep^^J%
        \@ind\string\parsep \the\parsep^^J%
        \@ind\string\itemsep \string\parsep^^J%
      }\@percentchar
    }%
  \endgroup
  \begingroup
    \@listiii
    \immediate\write\@fontfile{%
      \string\def\string\@listiii{\@percentchar^^J%
        \@ind\string\leftmargin\string\leftmarginiii^^J%
        \@ind\string\labelwidth\string\leftmarginiii^^J%
        \@ind\string\advance\string\labelwidth-\string\labelsep^^J%
        \@ind\string\topsep \the\topsep^^J%
        \@ind\string\parsep \the\parsep^^J%
        \@ind\string\partopsep \the\partopsep^^J%
       \@ind\string\itemsep \string\topsep^^J%
      }\@percentchar
    }%
  \endgroup
  \begingroup
    \@listiv
    \immediate\write\@fontfile{%
      \string\def\string\@listiv{\@percentchar^^J%
        \@ind\string\leftmargin\string\leftmarginiv^^J%
        \@ind\string\labelwidth\string\leftmarginiv^^J%
        \@ind\string\advance\string\labelwidth-\string\labelsep^^J%
      }\@percentchar
    }%
  \endgroup
  \begingroup
    \@listv
    \immediate\write\@fontfile{%
      \string\def\string\@listv{\@percentchar^^J%
        \@ind\string\leftmargin\string\leftmarginv^^J%
        \@ind\string\labelwidth\string\leftmarginv^^J%
        \@ind\string\advance\string\labelwidth-\string\labelsep^^J%
      }\@percentchar
    }%
  \endgroup
  \begingroup
    \@listvi
    \immediate\write\@fontfile{%
      \string\def\string\@listvi{\@percentchar^^J%
        \@ind\string\leftmargin\string\leftmarginvi^^J%
        \@ind\string\labelwidth\string\leftmarginvi^^J%
        \@ind\string\advance\string\labelwidth-\string\labelsep^^J%
      }\@percentchar
    }%
  \endgroup
  \immediate\write\@fontfile{%
    \string\@ifundefined{@list@extra}{}{\@percentchar^^J%
%<!v4>      \string\expandafter\string\ifnum\string\scr@v@is@ge{3.17}^^J%
        \string\par@updaterelative^^J%
%<!v4>      \string\fi^^J%
      \@ind\string\l@addto@macro{\string\@listi}{\string\@list@extra}%
      \@percentchar^^J%
      \@ind\string\let\string\@listI=\string\@listi^^J%
      \@ind\string\l@addto@macro{\string\@listii}{\string\@list@extra}%
      \@percentchar^^J%
      \@ind\string\l@addto@macro{\string\@listiii}{\string\@list@extra}%
      \@percentchar^^J%
      \@ind\string\l@addto@macro{\string\footnotesize}{\string\protect
        \string\add@extra@listi{ftns}}\@percentchar^^J%
      \@ind\string\l@addto@macro{\string\small}{\string\protect
        \string\add@extra@listi{sml}}\@percentchar^^J%
    }\@percentchar^^J%
    \string\@listi^^J%
    \string\endinput^^J%
    \@percentchar^^J%
    \@percentchar\space End of file `#1#2.clo'.
  }
  \immediate\closeout\@fontfile
}
\@onlypreamble\generatefontfile
%</generator&body>
%    \end{macrocode}
% \end{macro}^^A \generate@fontfile
% \end{macro}^^A \@fontfile
% \end{command}^^A \generatefontfile
%
% Now, we want to initially load the font size file into the class. First we
% have to convert the \cs{@ptsize} to a length. Note, \cs{@ptsize} can already
% have a unit or the unit is \texttt{pt}. The original value is stored in
% \cs{@tempa} to be able to use a font size files with the original
% unit. \cs{@tempb} is the size in \texttt{pt} without the \texttt{pt} to be
% able to use a standard font size file. After this, \cs{@ptsize} is reduced
% by 10\,pt and the unit is cut off.
%    \begin{macrocode}
%<*class&body>
\expandafter\@defaultunits\expandafter\@tempdima\@ptsize pt\relax\@nnil
\edef\@tempa{\@ptsize}%
\setlength{\@tempdimb}{\@tempdima}%
\edef\@tempb{\strip@pt\@tempdimb}%
\addtolength{\@tempdimb}{-10\p@}%
\edef\@ptsize{\strip@pt\@tempdimb}%
%    \end{macrocode}
% Now, let's try to input a file
% ``\file{\cs{fontsizefilebase}\cs{@tempa}.clo}''. This is a file with the
% original unit.
%    \begin{macrocode}
\InputIfFileExists{\@fontsizefilebase\@tempa.clo}{%
  \ClassInfo{\KOMAClassName}{%
    File `\@fontsizefilebase\@tempa.clo' used to setup font sizes}%
  \KOMA@kav@removekey{\KOMAClassFileName}{fontsize}%
  \KOMA@kav@xadd{\KOMAClassFileName}{fontsize}{\@tempa}%
}{%
%    \end{macrocode}
% If this is not successful, try
% ``\file{\cs{fontsizefilebase}\cs{@tempb}pt.clo}''.
%    \begin{macrocode}
  \InputIfFileExists{\@fontsizefilebase\@tempb pt.clo}{%
    \ClassInfo{\KOMAClassName}{%
      File `\@fontsizefilebase\@tempb pt.clo' used instead of\MessageBreak
      file `\@fontsizefilebase\@tempa.clo' to setup font sizes}%
    \KOMA@kav@removekey{\KOMAClassFileName}{fontsize}%
    \KOMA@kav@xadd{\KOMAClassFileName}{fontsize}{\@tempb pt}%
  }{%
%    \end{macrocode}
% If this is still not successful try a font size file of the standard
% classes.
%    \begin{macrocode}
%<*book>
    \InputIfFileExists{bk\@tempb.clo}{%
      \ClassInfo{\KOMAClassName}{%
        File `bk\@tempb.clo' used to setup font sizes}%
      \KOMA@kav@removekey{\KOMAClassFileName}{fontsize}%
      \KOMA@kav@xadd{\KOMAClassFileName}{fontsize}{\@tempb}%
    }{%
%</book>
      \InputIfFileExists{size\@tempb.clo}{%
        \ClassInfo{\KOMAClassName}{%
          File `size\@tempb.clo' used to setup font sizes}%
        \KOMA@kav@removekey{\KOMAClassFileName}{fontsize}%
        \KOMA@kav@xadd{\KOMAClassFileName}{fontsize}{\@tempb}%
      }{%
%    \end{macrocode}
% If this is still not successful, use the fallback calculation.
%    \begin{macrocode}
        \edef\@tempa{%
          \noexpand\changefontsizes{\@tempa}%
          \noexpand\KOMA@kav@xadd{\KOMAClassFileName}{fontsize}{\@tempa}%
        }\@tempa
      }%
%<book>    }%
  }%
}
%</class&body>
%    \end{macrocode}
% 
%
% \section{Implementation of Deprecated Old Font Selection Commands}
%
% \begin{option}{enabledeprecatedfontcommands}
% \changes{v3.20}{2015/10/14}{added}
% \changes{v3.20}{2015/10/14}{deprecated}
% This option is deprecated by specification already when it has been defined
% first, because it is used to define deprecated old font selection commands,
% that should not be used any longer. So the usage of this options always
% results in a warning. It can be used at load time only.
% \begin{macro}{\scr@defineobsoletefonts}
% \changes{v3.20}{2015/10/14}{added}
% \changes{v3.20}{2015/10/14}{deprecated}
% Depending on this command
% \begin{itemize}
% \item[0] an internal error message,
% \item[1] a warning,
% \item[2] an info message,
% \item[3] no message
% \end{itemize}
% is added to the usage of any deprecated font command. Values less than 0
% result in not defining the commands anyhow.
%    \begin{macrocode}
%<*class&option>
\DeclareOption{enabledeprecatedfontcommands}{%
  \ClassWarningNoLine{\KOMAClassName}{%
    deprecated option `enabledeprecatedfontcommands'.\MessageBreak
    Note, that this option was already depreacted when\MessageBreak
    it has been defined. Support for old font commands\MessageBreak
    has been removed from KOMA-Script more than one\MessageBreak
    decade ago. It is not recommended to use them any\MessageBreak
    longer. Therefore usage of this class option also\MessageBreak
    is not recommended%
  }%
  \let\scr@defineobsoletefonts\@ne
}
\scr@ifundefinedorrelax{scr@defineobsoletefonts}{%
  \let\scr@defineobsoletefonts\z@
}{}
\BeforePackage{tex4ht}{%
  \let\scr@defineobsoletefonts\thr@@
}
%</class&option>
%    \end{macrocode}
% \end{macro}^^A \scr@degineobsoletefonts
% \end{option}^^A enabledeprecatedfontcommands
%
% \begin{macro}{\scr@DeclareOldFontCommand}
% \changes{v3.12}{2013/10/31}{added}
% \changes{v3.20}{2015/10/14}{deprecated escalation}
% \changes{v3.38}{2022/08/28}{deprecated definition delayed}
% The command is similar to \cs{DeclareOldFontCommand} but adds a warning,
% info, error to the commands and delays the definition until
% |\begin{document}|. The delay is done to allow users or package authors to
% define the commands in the document preamble if they are not yet defined. So
% (package) authors do not need to detect \KOMAScript{} but only existence.
%    \begin{macrocode}
%<*class&body>
\newcommand*{\scr@DeclareOldFontCommand}[3]{%
  \ifnum\scr@defineobsoletefonts<\z@\else
    \ifnum\scr@defineobsoletefonts>\tw@
      \DeclareOldFontCommand{#1}{#2}{#3}%
    \else
      \AtBeginDocument{%
        \ifdefined#1\else
          \DeclareOldFontCommand{#1}{%
            \scr@ErrorWarningInfo{#1}{#2}#2%
          }{%
            \scr@ErrorWarningInfo{#1}{#3}#3%
          }%
        \fi
      }%
    \fi
  \fi
}
%    \end{macrocode}
% \begin{macro}{\scr@ErrorWarningInfo}
% \changes{v3.20}{2015/10/14}{added}
% \changes{v3.22}{2016/09/28}{message fixed}
%    \begin{macrocode}
\DeclareRobustCommand*{\scr@ErrorWarningInfo}[2]{%
%    \end{macrocode}
% \cs{scr@defineobsoletefonts} = 0 means an error message:
%    \begin{macrocode}
  \ifnum \scr@defineobsoletefonts=\z@
    \ClassError{\KOMAClassName}{undefined old font command `\string#1'}{%
      You should note that since 1994 LaTeX2e provides a new font selection
      scheme\MessageBreak
      called NFSS2 with several new, combinable font commands.
      KOMA-Script\MessageBreak
      classes had defined the old font commands like `\string#1'
      only for compatibility\MessageBreak
      with old LaTeX 2.09 document styles of Script 2.0. Nevertheless,
      these\MessageBreak
      commands are deprecated and undocumented at least since 2003. Since
      2013\MessageBreak
      KOMA-Script classes warned about soon removement of these deprecated
      commands.\MessageBreak
      Now, after two decades of LaTeX2e and NFSS2, these commands will not
      work any\MessageBreak
      more. If loading a package results in this error message, you should
      contact\MessageBreak
      the author of that package and ask him to replace the deprecated font
      command\MessageBreak
      `\string#1', e.g., by `\detokenize{#2}`. Otherwise you should
      reconfigure\MessageBreak
      or replace the package. If you have used the old font command
      `\string#1' yourself,\MessageBreak
      you should replace it, e.g., by `\detokenize{#2}'.\MessageBreak
      To make it work for now, you can use the already also deprecated class
      option\MessageBreak
      `enabledeprecatedfontcommands'.%
    }%
  \else
    \ifcase \scr@defineobsoletefonts
%    \end{macrocode}
% \cs{scr@defineobsoletefonts} = 0 means a warning:
%    \begin{macrocode}
    \or
      \expandafter\ClassWarning
%    \end{macrocode}
% \cs{scr@defineobsoletefonts} = 0 means an info message:
%    \begin{macrocode}
    \or
      \expandafter\ClassInfo
%    \end{macrocode}
% All other values mean no message:
%    \begin{macrocode}
    \else
      \expandafter\@gobbletwo
    \fi
    {\KOMAClassName}{deprecated old font command `\string#1' used.\MessageBreak
      You should note, that since 1994 LaTeX2e provides a\MessageBreak
      new font selection scheme called NFSS2 with several\MessageBreak
      new, combinable font commands. New KOMA-Script classes\MessageBreak
      defined the old font commands like `\string#1' only for\MessageBreak
      compatibility with LaTeX 2.09 document styles of\MessageBreak
      Script 2.0. These commands are deprecated and\MessageBreak
      undocumented at least since 2003. Since 2013,\MessageBreak
      KOMA-Script classes warned about soon removement of\MessageBreak
      these deprecated commands. Now, after two decades of\MessageBreak
      LaTeX2e, NFSS2, and KOMA-Script these commands will\MessageBreak
      not work any longer. If loading a package results in\MessageBreak
      this message you should contact the author of that\MessageBreak
      package and ask him to replace the depracted font\MessageBreak
      command `\string#1', e.g., by `\detokenize{#2}'.\MessageBreak
      Otherwise you should reconfigure or replace the\MessageBreak
      package. If you have used the old font command\MessageBreak
      `\string #1' yourself you should replace it, e.g., by\MessageBreak
      `\detokenize{#2}'%
    }%
  \fi
}
%</class&body>
%    \end{macrocode}
% \end{macro}^^A \scr@OldFontErrorWarningInfo
% \end{macro}^^A \scr@DeclareOldFontCommand
%
% \begin{command}{\rm,\sf,\tt,\bf,\it,\sl,\sc}
% \changes{v3.12}{2013/10/13}{deprecated}
% \begin{command}{\sfb}
% \changes{v2.2c}{1995/05/25}{not in math mode}
% \changes{v2.3a}{1995/07/08}{independent from compatibility mode}
% \changes{v3.12}{2013/10/13}{deprecated}
% The old font selection commands from \LaTeX~2.09. They are not supported any
% more. The same for the \pkg*{Script 2.0} command \cs{sfb}.
%    \begin{macrocode}
%<*class&body>
\scr@DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\scr@DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\scr@DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\scr@DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\scr@DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\scr@DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\scr@DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
\scr@DeclareOldFontCommand{\sfb}{\normalfont\sffamily\bfseries}{%
  \@nomath\sfb}
%</class&body>
%    \end{macrocode}
% \end{command}
% \end{command}
%
% \begin{command}{\cal,\mit}
% \changes{v2.3}{1995/06/25}{here instead in the \LaTeX{} kernel}
% \changes{v2.3g}{1996/01/14}{not needed braces removed}
%    \begin{macrocode}
%<*class&body>
\DeclareRobustCommand*{\cal}{\@fontswitch\relax\mathcal}
\DeclareRobustCommand*{\mit}{\@fontswitch\relax\mathnormal}
%</class&body>
%    \end{macrocode}
% \end{command}
%
%
% \section{Implementation of Special Handling of Sans-Serif Defaults}
%
% \changes{v3.39}{2022/11/19}{moved from \file{scrkernel-miscellaneous.dtx}}
%
% Some users do not like the sans-serif defaults of \KOMAScript. Though each
% of these defaults could be changed easily using \cs{setkomafont} and
% \cs{addtokomafont}, one user requested an option to be able to do the change
% already when loading the classes resp. package \pkg*{scrextend}. He even
% pointed out that the lack of such an option is one reason for him not to use
% \KOMAScript. Although or just because such a statement of a renowned \LaTeX{}
% expert could almost be interpreted as a clear recommendation against
% \KOMAScript, a corresponding option was created immediately.
%
% \begin{option}{sfdefaults}
% Boolean option to change behave of \cs{maybesffamily}.
% \begin{command}{\textmaybesf,\maybesffamily}
% \changes{v3.39}{2023/04/04}{new}
% \begin{macro}{\@gr@gsffamily,\if@sfdefaults,
%               \@sfdefaultfalse,\@sfdefaultstrue}
% \changes{v3.20}{2016/01/29}{added}
% \changes{v3.20a}{2016/05/19}{also for \cls*{scrlttr2}}
% \changes{v3.39}{2023/04/04}{\cs{@gr@gsffamily} renamed to \cs{maybesffamily}}
% \changes{v3.39}{2023/04/04}{\cs{if@egregdoesnotlikesansseriftitles} replaced
%   by \cs{if@sfdefaults}}
% \changes{v3.40}{2023/04/20}{default to true}
% Used to switch on or off all the sans-serif defaults.
%    \begin{macrocode}
%<*(class|extend)&option>
\newif\if@sfdefaults\@sfdefaultstrue
\KOMA@ifkey{sfdefaults}{@sfdefaults}
\newcommand*{\maybesffamily}{\if@sfdefaults \sffamily \fi}
\newcommand*{\textmaybesf}{%
  \if@sfdefaults \expandafter\textsf \else \expandafter\@firstofone \fi
}
%    \end{macrocode}
% \end{macro}^^A \if@sfdefaults, …
% \end{command}^^A \textmaybesf, \maybesffamily
% \end{option}^^A sfdefaults
%% \begin{option}{egegdoesnotlikesansseriftitles}
% \changes{v3.20}{2016/01/29}{added}
% \changes{v3.20a}{2016/05/19}{also for \cls*{scrlttr2}}
% \changes{v3.39}{2022/11/19}{deprecated}
% \changes{v3.39}{2023/04/04}{replaced by new option \opt{sfdefaults}}
% \begin{description}
% \item[Note:] Although the description found earlier at this place was never
%   meant to be offensive, it was taken as offensive. Therefore, I expressly
%   apologize for the earlier wording.
% \end{description}
%    \begin{macrocode}
\KOMA@key{egregdoesnotlikesansseriftitles}[true]{%
%<class>  \ClassWarningNoLine{\KOMAClassName}%
%<extend>  \PackageWarningNoLine{scrextend}%
  {%
    You've used deprecated option `egregdoesnotlikesansseriftitles'.\MessageBreak
    In 2016 this option has been implemented as a joke\MessageBreak
    answer to egreg's comment:\MessageBreak
    \space\space ``In my opinion there should be a document class\MessageBreak
    \space\space option for it, instead of the
      \string\setkomafont\MessageBreak
    \space\space statement. And yes, I find imposing sans serif
      for\MessageBreak
    \space\space titles is not the best choice (one of the
      reasons\MessageBreak
    \space\space why I don't use Koma-script classes).''\MessageBreak
    to question https://tex.stackexchange.com/q/289853\MessageBreak
    at TeX.SX.\MessageBreak
    The option has never been documented in the official\MessageBreak
    user manuals and therefore should never have been\MessageBreak
    used in real live documents. It was intended to be\MessageBreak
    removed after some month.\MessageBreak
    However, it has been used and also almost forgotten\MessageBreak
    by the author.\MessageBreak
    For this the author apologizes both to users but\MessageBreak
    especially to egreg.\MessageBreak
    Rightly, egreg has criticized the permanent retention\MessageBreak
    of the option as unfunny to inappropriate and has\MessageBreak
    asked that it be removed or replaced.\MessageBreak
    It will be removed soon!\MessageBreak
    You should use `sfdefaults=false` instead%
  }%
  \KOMA@set@ifkey{egregdoesnotlikesansseriftitles}%
                 {@sfdefaults}%
                 {#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed
    \if@sfdefault \@sfdefaultsfalse \else \@sfdefaulttrue \fi
%<class>    \KOMA@kav@xreplacevalue{\KOMAClassFileName}%
%<extend>    \KOMA@kav@xreplacevalue{scrextend.\scr@pkgextension}%
                           {sfdefaults}{\if@sfdefaults true\else false\fi}%
  \fi
}
%</(class|extend)&option>
%    \end{macrocode}
% \end{option}^^A egegdoesnotlikesansseriftitles
%
% \section{Implementation of Font Elements}
%
%
% \begin{command}{\IfExistskomafont}
% \changes{v3.15}{2014/11/21}{added}
% Command
% \begin{quote}
%   \cs{IfExistskomafont}\marg{font element}\marg{then code}\marg{else code}
% \end{quote}
% executes \meta{then code} if the font element \meta{font element} exists
% either as a real font element or an alias. Otherwise \meta{else code} is used.
%    \begin{macrocode}
%<*scrkbase&body>
\newcommand*{\IfExistskomafont}[1]{%
  \scr@ifundefinedorrelax{scr@fnt@#1}{%
    \scr@ifundefinedorrelax{scr@fnt@instead@#1}{\@secondoftwo}{\@firstoftwo}%
  }{%
    \@firstoftwo
  }%
}
%    \end{macrocode}
% \end{command}^^A \IfExistskomafont
%
% \begin{command}{\IfIsAliaskomafont}
% \changes{v3.25}{2017/12/08}{added}
% Command
% \begin{quote}
%   \cs{IfIsAliaskomafont}\marg{font element}\marg{then code}\marg{else code}
% \end{quote}
% executes \meta{then code} if the font element \meta{font element} is an alias.
% Otherwise \meta{else code} is used.
%    \begin{macrocode}
\newcommand*{\IfIsAliaskomafont}[1]{%
  \scr@ifundefinedorrelax{scr@fnt@#1}{%
    \scr@ifundefinedorrelax{scr@fnt@instead@#1}{\@secondoftwo}{\@firstoftwo}%
  }{%
    \@secondoftwo
  }%
}
%    \end{macrocode}
% \end{command}^^A \IfIsAliaskomafont
%
% \begin{command}{\setkomafont}
% \changes{v2.8o}{2001/09/14}{added}
% \changes{v3.05a}{2010/03/24}{moved to \pkg*{scrkbase}}
% Command
% \begin{quote}
%   \cs{setkomafont}\marg{element}\marg{font settings}
% \end{quote}
% sets the \meta{font settings} of font element \meta{element}. Setting of an
% unknown font element results in an error. Setting of an alias font element
% results in an info an the setting of the real element. Note: \meta{font
% settings} should be only font selection commands.
%    \begin{macrocode}
\newcommand*{\setkomafont}[2]{%
  \@ifundefined{scr@fnt@#1}{%
    \@ifundefined{scr@fnt@instead@#1}{%
      \PackageError{scrkbase}{%
        font of element `#1' can't be set}{%
        You've told me to redefine the font selection of the
        element,\MessageBreak%
        but either no such element is known by
        KOMA-Script\MessageBreak%
        or the element does not use a special font selection%
      }%
    }{%
      \PackageInfo{scrkbase}{%
        You've told me to redefine the font selection of the\MessageBreak
        element `#1' that is an alias of element\MessageBreak
        `\csname scr@fnt@instead@#1\endcsname'%
      }%
      \expandafter\setkomafont\expandafter{%
        \csname scr@fnt@instead@#1\endcsname}{#2}%
    }%
  }{%
    \expandafter\expandafter\expandafter\def\csname scr@fnt@#1\endcsname{#2}%
  }%
  \@ifundefined{scr@fnt@wrn@#1}{}{%
    \PackageWarning{scrkbase}{%
      \csname scr@fnt@wrn@#1\endcsname{#1}%
    }%
  }%
}
%    \end{macrocode}
% \end{command}^^A \setkomafont
%
% \begin{command}{\addtokomafont}
% \changes{v2.8p}{2001/09/22}{added}
% \changes{v3.05a}{2010/03/24}{moved to \pkg*{scrkbase}}
% Command
% \begin{quote}
%   \cs{addtokomafont}\marg{element}\marg{font settings}
% \end{quote}
% adds the \meta{font settings} to the settings of font element
% \meta{element}. Setting of an unknown font element results in an
% error. Setting of an alias font element results in an info an the setting of
% the real element.
%    \begin{macrocode}
\newcommand*{\addtokomafont}[2]{%
  \@ifundefined{scr@fnt@#1}{%
    \@ifundefined{scr@fnt@instead@#1}{%
      \PackageError{scrkbase}{%
        font of element `#1' can't be extended%
      }{%
        You've told me to extend the font selection of the
        element,\MessageBreak
        but either no such element is known by
        KOMA-Script\MessageBreak
        or the element does not use a special font selection%
      }%
    }{%
      \PackageInfo{scrkbase}{%
        You've told me to extend the font selection of the\MessageBreak
        element `#1' that is an alias of element\MessageBreak
        `\csname scr@fnt@instead@#1\endcsname'%
      }%
      \expandafter\addtokomafont\expandafter{%
        \csname scr@fnt@instead@#1\endcsname}{#2}%
    }%
  }{%
    \expandafter\expandafter\expandafter\l@addto@macro
    \csname scr@fnt@#1\endcsname{#2}%
  }%
  \@ifundefined{scr@fnt@wrn@#1}{}{%
    \PackageWarning{scrkbase}{%
      \csname scr@fnt@wrn@#1\endcsname{#1}%
    }%
  }%
}
%    \end{macrocode}
% \end{command}^^A \addtokomafont
%
% \begin{command}{\usekomafont}
% \changes{v2.8p}{2001/09/28}{added}
% \changes{v2.96}{2006/08/18}{alias usage fixed}
% \changes{v3.05a}{2010/03/24}{moved to \pkg*{scrkbase}}
% Command
% \begin{quote}
%   \cs{usekomafont}\marg{element}
% \end{quote}
% activates the font settings of the font \meta{element}.
%    \begin{macrocode}
\newcommand*{\usekomafont}[1]{%
  \@ifundefined{scr@fnt@#1}{%
    \@ifundefined{scr@fnt@instead@#1}{%
      \PackageError{scrkbase}{%
        font of element `#1' can't be used%
      }{%
        You've told me to use the font selection of the
        element,\MessageBreak
        but either no such element is known by
        KOMA-Script\MessageBreak
        or the element does not use a special font selection%
      }%
    }{%
      \PackageInfo{scrkbase}{%
        You've told me to use the font selection of the
        element\MessageBreak
        `#1' that is an alias of element `\csname
        scr@fnt@instead@#1\endcsname'\MessageBreak
      }%
      \expandafter\expandafter\expandafter\usekomafont
      \expandafter\expandafter\expandafter{%
        \csname scr@fnt@instead@#1\endcsname}%
    }%
  }{%
    \@nameuse{scr@fnt@#1}%
  }%
}
%    \end{macrocode}
% \end{command}^^A \usekomafont
%
%
% \begin{command}{\usesizeofkomafont}
% \changes{v3.12}{2013/03/30}{new}
% \changes{v3.17}{2015/04/03}{new more robust implementation}
% \changes{v3.24}{2017/05/06}{new more robust implementation}
% \changes{v3.34}{2021/05/17}{new implementation due to \LaTeX{} kernel change}
% \begin{command}{\usefamilyofkomafont,\useseriesofkomafont}
% \changes{v3.12}{2013/03/30}{new}
% \changes{v3.17}{2015/04/03}{new more robust implementation}
% \changes{v3.24}{2017/05/06}{new more robust implementation}
% \begin{command}{\useshapeofkomafont}
% \changes{v3.12}{2013/03/30}{new}
% \changes{v3.16a}{2015/02/20}{fix of macro name}
% \changes{v3.17}{2015/04/03}{new more robust implementation}
% \changes{v3.24}{2017/05/06}{new more robust implementation}
% \begin{command}{\useencodingofkomafont}
% \changes{v3.12}{2013/03/30}{new}
% \changes{v3.17}{2015/04/03}{new more robust implementation}
% \changes{v3.24}{2017/05/06}{new more robust implementation}
% \begin{command}{\usefontofkomafont}
% \changes{v3.12}{2013/03/30}{new}
% \changes{v3.17}{2015/04/03}{new more robust implementation}
% \changes{v3.24}{2017/05/06}{new more robust implementation}
% \changes{v3.34}{2021/05/17}{new implementation due to \LaTeX{} kernel change}
% Sometimes not the whole font but only single elements of a font is
% wanted.
%    \begin{macrocode}
\newcommand*{\usesizeofkomafont}[1]{%
  \begingroup
    \scr@prepareforkomafont
    \sbox\@tempboxa{%
      \usekomafont{#1}{%
        \selectfont
        \global\let\g@scr@f@size\f@size
        \global\let\g@scr@f@baselineskip\f@baselineskip
        \global\let\g@scr@f@linespread\f@linespread
      }%
    }%
  \endgroup
  \linespread{\g@scr@f@linespread}%
  \fontsize{\g@scr@f@size}{\g@scr@f@baselineskip}%
  \selectfont
}
\newcommand*{\usefamilyofkomafont}{\use@ofkomafont{family}}
\newcommand*{\useseriesofkomafont}{\use@ofkomafont{series}}
\newcommand*{\useshapeofkomafont}{\use@ofkomafont{shape}}
\newcommand*{\useencodingofkomafont}{\use@ofkomafont{encoding}}
\newcommand*{\usefontofkomafont}[1]{%
  \begingroup
    \scr@prepareforkomafont
    \sbox\@tempboxa{%
      \usekomafont{#1}{%
        \selectfont
        \global\let\g@scr@f@encoding\f@encoding
        \global\let\g@scr@f@family\f@family
        \global\let\g@scr@f@series\f@series
        \global\let\g@scr@f@shape\f@shape
        \global\let\g@scr@f@size\f@size
        \global\let\g@scr@f@baselineskip\f@baselineskip
        \global\let\g@scr@f@linespread\f@linespread
      }%
    }%
  \endgroup
  \linespread{\g@scr@f@linespread}%
  \fontsize{\g@scr@f@size}{\g@scr@f@baselineskip}%
  \usefont{\g@scr@f@encoding}{\g@scr@f@family}{\g@scr@f@series}{\g@scr@f@shape}%
}%
%    \end{macrocode}
% \begin{macro}{\use@ofkomafont}
% \changes{v3.12}{2013/03/30}{new (internal)}
% \changes{v3.17}{2015/04/03}{new more robust implementation}
% \changes{v3.24}{2017/05/06}{new more robust implementation}
% \changes{v3.34}{2021/05/17}{new implementation due to \LaTeX{} kernel change}
% Helper macro for all commands above despite the first and the last one.
%    \begin{macrocode}
\newcommand*{\use@ofkomafont}[2]{%
  \begingroup
    \scr@prepareforkomafont
    \sbox\@tempboxa{%
      \usekomafont{#2}{%
        \selectfont
        \global\expandafter\let\csname g@scr@f@#1\expandafter\endcsname
                               \csname f@#1\endcsname
      }%
    }%
  \endgroup
  \@nameuse{font#1}{\csname g@scr@f@#1\endcsname}%
  \selectfont
}
%    \end{macrocode}
% \begin{macro}{\g@scr@usefont}
% \changes{v3.17}{2015/04/03}{added}
% \changes{v3.24}{2017/05/06}{removed}
% \end{macro}^^A \g@scr@usefont
% \begin{macro}{\g@scr@f@encoding,\g@scr@f@family,\g@scr@f@series,\g@scr@f@shape,
%               \g@scr@f@size,\g@scr@f@baselineskip,\g@scr@f@linespread}
% \changes{v3.24}{2017/05/06}{added}
%    \begin{macrocode}
\newcommand*{\g@scr@f@encoding}{}\let\g@scr@f@encoding\f@encoding
\newcommand*{\g@scr@f@family}{}\let\g@scr@f@family\f@family
\newcommand*{\g@scr@f@series}{}\let\g@scr@f@series\f@series
\newcommand*{\g@scr@f@shape}{}\let\g@scr@f@shape\f@shape
\newcommand*{\g@scr@f@size}{}\let\g@scr@f@size\f@size
\newcommand*{\g@scr@f@baselineskip}{}\let\g@scr@f@baselineskip\f@baselineskip
\newcommand*{\g@scr@f@linespread}{}\let\g@scr@f@linespread\f@linespread
%    \end{macrocode}
% \end{macro}^^A \g@scr@f@encoding … \g@scr@f@linespread
% \begin{macro}{\scr@komafontrelaxlist}
% \changes{v3.17}{2015/04/03}{added}
% \changes{v3.24}{2017/05/05}{\cs{uppercase} and \cs{lowercase} removed}
% \changes{v3.24}{2017/05/05}{\cs{MakeUppercase} and \cs{MakeLowercase} moved to
%     \cs{scr@komafontonearglist}}
% A \cs{do} list of all macros, that should become \cs{relax} in the previous
% commands.
%    \begin{macrocode}
\newcommand*{\scr@komafontrelaxlist}{%
  \do\normalcolor 
}
%    \end{macrocode}
% \end{macro}^^A \scr@komafontrelaxlist
% \begin{macro}{\scr@komafontgobblelist}
% \changes{v3.19}{2015/08/20}{added}
% Like \cs{scr@komafontrelaxlist} but with \cs{@gobble} instead of \cs{relax}.
%    \begin{macrocode}
\newcommand*{\scr@komafontgobblelist}{%
  \do\color
}
%    \end{macrocode}
% \end{macro}^^A \scr@komafontgobblelist
% \begin{macro}{\scr@komafontonearglist}
% \changes{v3.24}{2017/05/05}{added}
% Like \cs{scr@komafontgobblelist} but with \cs{@firstofone} instead of
% \cs{@gobble}.
%    \begin{macrocode}
\newcommand*{\scr@komafontonearglist}{%
  \do\MakeUppercase \do\MakeLowercase
}
%    \end{macrocode}
% \end{macro}^^A \scr@komafontonearglist
% \begin{macro}{\scr@prepareforkomafont}
% \changes{v3.17}{2015/04/03}{added}
% \changes{v3.19}{2015/08/20}{using \cs{scr@komafontgobblelist}}
% \changes{v3.24}{2017/05/05}{using \cs{scr@komafontonearglist}}
% Process all the \cs{do} lists. Note: Should be encapsulated into a local group.
%    \begin{macrocode}
\newcommand*{\scr@prepareforkomafont}{%
  \long\def\do##1{\let##1\relax}\scr@komafontrelaxlist
  \long\def\do##1{\let##1\@gobble}\scr@komafontgobblelist
  \long\def\do##1{\let##1\@firstofone}\scr@komafontonearglist
}
%    \end{macrocode}
% \end{macro}^^A \scr@prepareforkomafont
% \begin{command}{\addtokomafontrelaxlist}
% \changes{v3.17}{2015/04/03}{added}
% Adds exactly one macro/command to \cs{scr@komafontrelaxlist}.
%    \begin{macrocode}
\newcommand*{\addtokomafontrelaxlist}[1]{%
  \l@addto@macro\scr@komafontrelaxlist{\do#1}%
}
%    \end{macrocode}
% \end{command}^^A \addtokomafontrelaxlist
% \begin{command}{\addtokomafontgobblelist}
% \changes{v3.19}{2015/08/20}{added}
% Adds exactly one macro/command to \cs{scr@komafontgobblelist}.
%    \begin{macrocode}
\newcommand*{\addtokomafontgobblelist}[1]{%
  \l@addto@macro\scr@komafontgobblelist{\do#1}%
}
%    \end{macrocode}
% \end{command}^^A \addtokomafontgobblelist
% \begin{command}{\addtokomafontonearglist}
% \changes{v3.24}{2017/05/05}{added}
% Adds exactly one macro/command to \cs{scr@komafontonearglist}.
%    \begin{macrocode}
\newcommand*{\addtokomafontonearglist}[1]{%
  \l@addto@macro\scr@komafontonearglist{\do#1}%
}
%    \end{macrocode}
% \end{command}^^A \addtokonafontonearglist
% \end{macro}^^A \use@ofkomafont
% \end{command}^^A \usefontofkomafont
% \end{command}^^A \useencodingofkomafont
% \end{command}^^A \useshapeofkomafont
% \end{command}^^A \usefamilyofkomafont,\useseriesofkomafont
% \end{command}^^A \usesizeofkomafont
%
%
% \begin{command}{\newkomafont}
% \changes{v2.95}{2004/07/21}{added}
% \changes{v3.05a}{2010/03/24}{moved to \pkg*{scrkbase}}
% \changes{v3.11c}{2013/02/18}{the warning needs an argument}
% \changes{v3.25}{2017/12/08}{warn if already exists as an alias}
% Command
% \begin{quote}
%   \cs{newkomafont}\oarg{warning}\marg{element}\marg{font settings}
% \end{quote}
% defines a new font \meta{element} with the given \meta{font settings} as
% default. The optional \meta{warning} is shown whenever the font setting of
% the element is changed, but not when the element is used. Internally a macro
% \cs{@\meta{element}font} is defined with the \meta{font settings}. An
% additional macro \cs{scr@fnt@\meta{element}} is defined to just execute
% \cs{@meta{element}font}. But you also can define \cs{scr@fnt@\meta{element}}
% to use another internal font storage macro. So several elements can share
% the same font settings.
%    \begin{macrocode}
\newcommand*{\newkomafont}[3][\relax]{%
  \scr@ifundefinedorrelax{scr@fnt@instead@#2}{}{%
    \PackageWarning{scrkbase}{%
      Making stand-alone element `#2' from\MessageBreak
      alias to `\@nameuse{scr@fnt@instead@#2}'
    }%
    \expandafter\let\csname scr@fnt@instead@#2\endcsname\relax
  }%
  \expandafter\newcommand\expandafter*\csname @#2font\endcsname{#3}%
  \expandafter\expandafter\expandafter\newcommand
  \expandafter\expandafter\expandafter*%
  \expandafter\csname scr@fnt@#2\expandafter\endcsname\expandafter{%
    \csname @#2font\endcsname%
  }%
  \ifx\relax#1\relax\else
    \expandafter\newcommand\expandafter*\csname scr@fnt@wrn@#2\endcsname[1]{#1}%
  \fi
}
%    \end{macrocode}
% \begin{command}{\aliaskomafont}
% \changes{v2.95}{2004/07/21}{added}
% \changes{v3.05a}{2010/03/24}{moved to \pkg*{scrkbase}}
% \changes{v3.25}{2017/12/08}{warning if element is already defined}
% Another possibility to share fonts is to define an
% alias by defining \cs{scr@fnt@instead@\meta{element}} with the name of
% another element. This can be done using
% \begin{quote}
%   \cs{aliaskomafont}\marg{alias}\marg{element}
% \end{quote}
% It defines \marg{alias} to be an alias of \meta{element}.
%    \begin{macrocode}
\newcommand*{\aliaskomafont}[2]{%
  \scr@ifundefinedorrelax{scr@fnt@#1}{}{%
    \PackageWarning{scrkbase}{%
      Redefining stand alone element `#1' as\MessageBreak
      alias to `#2'%
    }
    \expandafter\let\csname scr@fnt@#1\endcsname\relax
  }%
  \scr@ifundefinedorrelax{scr@fnt@wrn@#1}{}{%
    \expandafter\let\csname scr@fnt@wrn@#1\encsname\relax
  }
  \expandafter\newcommand\expandafter*\csname scr@fnt@instead@#1\endcsname{%
    #2%
  }%
}
%</scrkbase&body>
%    \end{macrocode}
% \end{command}
% \end{command}
%
% \Finale
% \PrintChanges
% 
\endinput
% Local Variables:
% mode: doctex
% ispell-local-dictionary: "en_US"
% eval: (flyspell-mode 1)
% TeX-master: t
% TeX-engine: luatex-dev
% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx"))
% End:
