summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/scrkernel-tocstyle.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-tocstyle.dtx')
-rw-r--r--macros/latex/contrib/koma-script/scrkernel-tocstyle.dtx2712
1 files changed, 2712 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-tocstyle.dtx b/macros/latex/contrib/koma-script/scrkernel-tocstyle.dtx
new file mode 100644
index 0000000000..6a78b38364
--- /dev/null
+++ b/macros/latex/contrib/koma-script/scrkernel-tocstyle.dtx
@@ -0,0 +1,2712 @@
+% \iffalse meta-comment
+% ======================================================================
+% scrkernel-tocstyle.dtx
+% Copyright (c) Markus Kohm, 2015-2022
+%
+% 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-tocstyle.dtx 3874 2022-06-05 10:38:02Z kohm $
+% The runs of run-time file generation:
+%<preidentify>%%% (run: preidentify)
+% - everything that is needed before selfidentification of resulting files
+% (unused)
+%<identify>%%% (run: identify)
+% - everything that is needed for selfidentification of resulting files
+% (unused)
+%<prepare>%%% (run: prepare)
+% - everything that is needed to define options
+%<option>%%% (run: option)
+% - definition of options (unused)
+%<execoption>%%% (run: execoption)
+% - initial option executions up to \KOMAProcessOptions
+% (unused)
+%<body>%%% (run: body)
+% - everything, that should be done after \KOMAProcessOptions
+%<exit>%%% (run: exit)
+% - everything, that should be done immediately before leaving the file
+% (unused)
+%<*dtx>
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\begingroup
+ \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
+ \filedate$Date: 2022-06-05 12:38:02 +0200 (So, 05. Jun 2022) $
+ \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
+ \filerevision$Revision: 3874 $
+ \edef\reserved@a{%
+ \noexpand\endgroup
+ \noexpand\ProvidesFile{scrkernel-tocstyle.dtx}%
+ [\filedate\space\filerevision\space
+ KOMA-Script source (TOC styles)]
+ }%
+\reserved@a
+\documentclass[USenglish]{koma-script-source-doc}
+\usepackage{babel}
+\setcounter{StandardModuleDepth}{3}
+\begin{document}
+\DocInput{scrkernel-tocstyle.dtx}
+\end{document}
+%</dtx>
+% \fi
+%
+% \changes{v3.20}{2015/11/13}{new}
+% \changes{v3.36}{2022/02/14}{switch over from \cls*{scrdoc} to
+% \cls*{koma-script-source-doc}}
+% \changes{v3.36}{2022/02/14}{whole implementation documentation in English}
+%
+% \GetFileInfo{scrkernel-tocstyle.dtx}
+% \title{The Predifined Directory Styles of
+% \href{https://komascript.de}{\KOMAScript} Package \pkg*{tocbasic} and 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-tocstyle.dtx} provides the predefined directory (or ToC)
+% styles. The basic styles of \pkg*{tocbasic} are defined independent from
+% the \KOMAScript{} classes. However, the \KOMAScript{} classes define their
+% own styles depending on the styles of \pkg*{tocbasic}.
+% \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} or the English
+% \file{scrguien}.
+%
+% \MaybeStop{\PrintIndex}
+%
+% \section{Implementation of the Basic ToC Styles of Package
+% \pkg*{tocbasic} and the Specific ToC Styles of the \KOMAScript{} classes}
+%
+% \subsection{Settings independent from directories but nevertheless basis for
+% them}
+%
+% Before \KOMAScript~3.20 the commands here were part of the \KOMAScript{}
+% classes. But now they are part of package \pkg*{tocbasic}, because they
+% are more basic than only to be used by the \KOMAScript{} classes.
+%
+%
+% \begin{command}{\numberline}
+% \changes{v3.20}{2016/03/10}{\cs{numberline} defined indirectly by
+% \cs{scr@numberline}}
+% \begin{macro}{\scr@numberline}
+% \changes{v2.3c}{1995/08/06}{\cs{numberline} redefined}
+% \changes{v3.06}{2010/05/18}{Usage of\cs{numberline@prefix} and
+% \cs{numberline@postfix}}
+% \changes{v3.12}{2013/11/22}{use \cs{numberline@numberformat} only, if the
+% argument expands to a non-empty string}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed into \cs{Ifstr}}
+% This macro is used indirectly in the ToC and has to be redefined to fulfil
+% rules~5 and 6 of DUDDEN, 20th edition.
+% \begin{macrocode}
+%<*package&body>
+\newcommand*{\scr@numberline}[1]{%
+ \numberline@box{%
+ \numberline@prefix
+ \Ifstr{#1}{}{#1}{%
+ \numberline@numberformat{#1}%
+ }%
+ \numberline@postfix
+ }%
+}
+% \end{macrocode}
+% \begin{command}{\usetocbasicnumberline}
+% \changes{v3.20}{2016/03/15}{added}
+% The macro tests, whether \cs{numberline} used \cs{scr@numberline}. If not,
+% the optional argument is executed and a afterwards \cs{numberline} is
+% redefined.
+% \begin{macrocode}
+\newcommand*{\usetocbasicnumberline}[1][%
+ \PackageInfo{tocbasic}{Using my definition of `\string\numberline'}%
+]{%
+ \@tempswatrue
+ \begingroup
+ \def\scr@numberline##1{\global\@tempswafalse}%
+% \end{macrocode}
+% For \cs{numberline} \cs{@tempdima} usually is the width reserved for the
+% number. To avoid problems with to low values, we use the maximum value for
+% the test.
+% \begin{macrocode}
+ \@tempdima\maxdimen
+ \sbox\@tempboxa{\numberline{0}}%
+ \endgroup
+ \if@tempswa #1\renewcommand*{\numberline}[1]{\scr@numberline{##1}}\fi
+}
+% \end{macrocode}
+% \end{command}^^A \usetocbasicnumberline
+% \begin{macro}{\numberline@prefix}
+% \changes{v3.06}{2010/05/18}{added}
+% The default is just empty. It can be used, e.g., to print something before
+% the number or to make the number right aligned.
+% \begin{macrocode}
+\newcommand*{\numberline@prefix}{}
+% \end{macrocode}
+% \end{macro}^^A \numberline@prefix
+% \begin{macro}{\numberline@postfix}
+% \changes{v3.06}{2010/05/18}{added}
+% The default is \cs{hfil} to make the number left aligned.
+% \begin{macrocode}
+\newcommand*{\numberline@postfix}{\hfil}
+% \end{macrocode}
+% \end{macro}^^A \numberline@postfix
+% \begin{macro}{\numberline@numberformat}
+% \changes{v3.06}{2010/05/18}{added}
+% \changes{v3.12}{2013/11/22}{don't output anything, if argument expands to
+% an empty string}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed into \cs{Ifstr}}
+% Used to fulfil rules~5 and 6 of DUDEN, 20th edition.
+% \begin{macrocode}
+\newcommand*{\numberline@numberformat}[1]{%
+ \Ifstr{#1}{}{}{\numberline@numberprefix#1\numberline@numberpostfix}%
+}
+% \end{macrocode}
+% \begin{macro}{\numberline@numberprefix}
+% \changes{v3.20}{2016/03/15}{added}
+% Used to prefix the number inside \cs{numberline@numberformat}. In opposite
+% to \cs{numberline@prefix} it is only used, if the argument of
+% \cs{numberline@numberformat} and therefore the argument of \cs{numberline}
+% is not empty.
+% \begin{macrocode}
+\newcommand*{\numberline@numberprefix}{}
+% \end{macrocode}
+% \end{macro}^^A \numberline@numberprefix
+% \begin{macro}{\numberline@numberpostfix}
+% \changes{v3.20}{2016/03/15}{added}
+% Used to postfix the number inside \cs{numberline@numberformat}. In opposite
+% to \cs{numberline@prefix} it is only used, if the argument of
+% \cs{numberline@numberformat} and therefore the argument of \cs{numberline}
+% is not empty.
+% \begin{macrocode}
+\newcommand*{\numberline@numberpostfix}{}
+% \end{macrocode}
+% \end{macro}^^A \numberline@numberpostfix
+% \end{macro}^^A \numberline@numberformat
+% \begin{macro}{\numberline@box}
+% \changes{v3.06}{2010/05/18}{added}
+% Is used to put the sectioning number into a box.
+% \begin{macrocode}
+\newcommand*{\numberline@box}[1]{\hb@xt@\@tempdima{#1}}
+%</package&body>
+% \end{macrocode}
+% \end{macro}^^A \numberline@box
+% \end{macro}^^A \scr@numberline
+%
+% \begin{macrocode}
+%<*class&body>
+\let\numberline\scr@numberline
+%</class&body>
+% \end{macrocode}
+% \end{command}^^A \numberline
+%
+%
+% \subsection{The basics of the styles}
+%
+% From \KOMAScript~3.20 styles are a new basic feature for the entries into
+% the table of contents and other directories. Each style consists of a
+% command that defines the entry command and the corresponding options. The
+% options are used to provide configuration features.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \changes{v3.20}{2015/11/17}{ToC styles have the \texttt{KOMAarg} member
+% \texttt{.dte}}
+% \begin{macrocode}
+%<*body>
+\DefineFamily{KOMAarg}
+\DefineFamilyMember[.dte]{KOMAarg}
+%</body>
+% \end{macrocode}
+%
+% \begin{macro}{\@DefineTOCEntryOption}
+% \changes{v3.20}{2015/04/10}{added}
+% The definition of the options is done by a general interface. Important is,
+% that the definition of the option is done indirectly, which means: Here we
+% define a command, that defines the options when needed. Note, not only the
+% entry command interface itself but also the sectioning command interface may
+% and should be able to setup options of the entry commands.
+% The parameters:
+% \begin{description}
+% \item[\marg{style}: \meta{string},] name of the entry style
+% \item[\marg{option}: \meta{string},] name of the option
+% \item[\oarg{value}:] default value of the option depending on the
+% \meta{definition}
+% \item[\marg{definition}: \meta{code},] definition of the option
+% \end{description}
+% \begin{macro}{\@DefineTOCEntryOptionWithoutDefault,\@DefineTOCEntryOptionWithDefault}
+% \changes{v3.20}{2015/11/10}{added}
+% Because of the options argument at position 3 (and because we've made this
+% before \pkg{xparse} became part of the \LaTeX{} kernel), we need two
+% auxiliary macros.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@DefineTOCEntryOption}[2]{%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2}%
+ }%
+ \kernel@ifnextchar [%]
+ {\@DefineTOCEntryOptionWithDefault{#1}{#2}}%
+ {\@DefineTOCEntryOptionWithoutDefault{#1}{#2}}%
+}
+\newcommand*{\@DefineTOCEntryOptionWithoutDefault}[3]{%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2}{#3}%
+}
+\newcommand*{\@DefineTOCEntryOptionWithDefault}{}
+\def\@DefineTOCEntryOptionWithDefault#1#2[#3]#4{%
+ \l@addto@macro\scr@dte@doopts{[{#3}]}%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2}[{#3}]{#4}%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@DefineTOCEntryOptionWithoutDefault,\@DefineTOCEntryOptionWithDefault
+% \end{macro}^^A \@DefineTOCEntryOption
+%
+% \begin{macro}{\@RelaxTOCEntryOptions}
+% \changes{v3.20}{2015/04/10}{added}
+% Reset all options of the current do-list back to \cs{relax}.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@RelaxTOCEntryOptions}{%
+ \begingroup
+ \def\do@endgroup{\endgroup}%
+ \def\do##1{%
+ \l@addto@macro\do@endgroup{%
+ \RelaxFamilyKey[.dte]{KOMAarg}{##1}%
+ }%
+ \scr@dte@gobbleopt
+ }%
+ \scr@dte@doopts
+ \do@endgroup
+}
+\newcommand{\scr@dte@gobbleopt}[1][]{}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@RelaxTOCEntryOptions
+%
+% \begin{macro}{\@DefineTOCEntryListOption}
+% \changes{v3.31}{2020/06/11}{added}
+% Use \cs{DefineTOCEntryOption} to define an option that represents a list.
+% It has following parameters:
+% \begin{description}
+% \item[\marg{style}: \meta{string},] name of the entry style
+% \item[\marg{option}: \meta{string},] name of the option
+% \item[\oarg{default}: \meta{string},] default value of the option
+% \item[\marg{prefix}: \meta{string},] prefix of the macro to be defined
+% \item[\marg{postfix}: \meta{string},] postfix of the macro to be defined
+% \item[\marg{description}: \meta{String},] short description of the option
+% \item[\oarg{init}: \meta{code},] initialization of the option
+% \end{description}
+% Between the \meta{prefix} and \meta{postfix} automatically
+% \cs{scr@dte@current} will be added. A copy option using ``\opt{:=}''
+% instead of ``\opt{=}'' and an add (append) option using ``\opt{+=}''
+% instead of ``\opt{=}'' is also defined.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@DefineTOCEntryListOption}[2]{%
+ \kernel@ifnextchar [%]
+ {\@DefineTOCEntryListOptionWithDefault{#1}{#2}}
+ {\@DefineTOCEntryListOptionWithoutDefault{#1}{#2}}%
+}
+% \end{macrocode}
+% \begin{macro}{\@DefineTOCEntryListOptionWithoutDefault}
+% \changes{v3.31}{2020/06/11}{added}
+% This is the case without default value. So we only have to define
+% the three internal options, that manipulate a macro.
+% \begin{macrocode}
+\newcommand*{\@DefineTOCEntryListOptionWithoutDefault}[5]{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#3}{#4}{#2}{#5}%
+ \@DefineTOCEntryOption{#1}{#2}{%
+ \expandafter\protected@edef\csname #3\scr@dte@current#4\endcsname{##1}%
+ \FamilyKeyStateProcessed
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#3##1#4}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #3\scr@dte@current#4\expandafter\endcsname
+ \csname #3##1#4\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2+}{%
+ \expandafter\protected@edef\csname #2\scr@dte@current#4\endcsname{%
+ \csname #2\scr@dte@current#4\endcsname,##1}%
+ \FamilyKeyStateProcessed
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}\noexpand\do{#2+}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \@DefineTOCEntryListOptionWithoutDefault
+% \begin{macro}{\@DefineTOCEntryListOptionWithDefault}
+% \changes{v3.31}{2020/06/11}{added}
+% This is the case with a default value. It's almost the same, but the
+% argument numbers and using \cs{DefineFamilyKey} with optional argument.
+% \begin{macrocode}
+\newcommand*{\@DefineTOCEntryListOptionWithDefault}{}
+\def\@DefineTOCEntryListOptionWithDefault#1#2[#3]#4#5#6{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#4}{#5}{#2}{#6}%
+ \@DefineTOCEntryOption{#1}{#2}[{#3]}{%
+ \expandafter\protected@edef\csname #4\scr@dte@current#5\endcsname{##1}%
+ \FamilyKeyStateProcessed
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #4\scr@dte@current#5\expandafter\endcsname
+ \csname #4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2+}{%
+ \expandafter\protected@edef\csname #4\scr@dte@current#5\endcsname{%
+ \csname #4\scr@dte@current#5\endcsname,##1}%
+ \FamilyKeyStateProcessed
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}\noexpand\do{#2+}%
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@DefineTOCEntryListOptionWithDefault
+% \end{macro}^^A \@DefineTOCEntryListOption
+%
+% \begin{macro}{\@DefineTOCEntryLengthOption}
+% \changes{v3.20}{2015/12/04}{added}
+% Use \cs{DefineTOCEntryOption} to define an option that represents a length
+% macro. The parameters are:
+% \begin{description}
+% \item[\marg{style}: \meta{string},] name of the entry style
+% \item[\marg{option}: \meta{string},] name of the option
+% \item[\oarg{value}: \meta{length},] default value of the option
+% \item[\marg{prefix}: \meta{string},] prefix of the name of the macro
+% \item[\marg{postfix}: \meta{string},] postfix of the name of the macro
+% \item[\marg{explanation}: \meta{string},] short description of the option
+% \item[\oarg{init}: \meta{code},] initialisation code for the option
+% \end{description}
+% Later, when the option is defines, between \meta{prefix} and \meta{postfix}
+% will be added \cs{scr@dte@current} automatically. This is the name of the
+% entry level, e.g., |subsection| or |figure|. Additionally to
+% the option \marg{option} itself a copy option \marg{option}\opt{:} will
+% be defined. So it seems, that for the copy option a colon is before the
+% equal sign. The value of the copy option has to be the name of another entry
+% level and it copies the value of the same option of that entry
+% level. Additionally an additive option with appended plus sign is
+% defined. It adds the new value to the existing one.
+% \begin{macro}{\@DefineTOCEntryLengthOptionWithoutDefault,
+% \@DefineTOCEntryLengthOptionWithDefault}
+% \changes{v3.20}{2015/11/10}{added}
+% \changes{v3.27}{2019/10/02}{automatic definition of copy option}
+% \changes{v3.27}{2019/10/03}{automatic definition of add option}
+% \begin{macro}{\@DefineTOCEntryLengthOptionMacro,\@DefineTOCEntryAddLengthOptionMacro}
+% \changes{v3.27}{2019/10/03}{added}
+% Because of the options argument at position 3 (and because we've made this
+% before \pkg{xparse} became part of the \LaTeX{} kernel), we need three
+% auxiliary macros.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@DefineTOCEntryLengthOption}[2]{%
+ \kernel@ifnextchar [%]
+ {\@DefineTOCEntryLengthOptionWithDefault{#1}{#2}}
+ {\@DefineTOCEntryLengthOptionWithoutDefault{#1}{#2}}%
+}
+\newcommand*{\@DefineTOCEntryLengthOptionWithoutDefault}[5]{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#3}{#4}{#2}{#5}%
+ \@DefineTOCEntryOption{#1}{#2}{%
+ \@DefineTOCEntryLengthOptionMacro{#2}{#3}{#4}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#3##1#4}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #3\scr@dte@current#4\expandafter\endcsname
+ \csname #3##1#4\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2+}{%
+ \@DefineTOCEntryAddLengthOptionMacro{#2+}{#3}{#4}{##1}%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}%
+ \noexpand\do{#2:}\noexpand\do{#2+}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryLengthOptionWithDefault}{}
+\def\@DefineTOCEntryLengthOptionWithDefault#1#2[#3]#4#5#6{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#4}{#5}{#2}{#6}%
+ \@DefineTOCEntryOption{#1}{#2}[{#3}]{%
+ \@DefineTOCEntryLengthOptionMacro{#2}{#4}{#5}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #4\scr@dte@current#5\expandafter\endcsname
+ \csname #4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2+}{%
+ \@DefineTOCEntryAddLengthOptionMacro{#2+}{#4}{#5}{##1}%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}%
+ \noexpand\do{#2:}\noexpand\do{#2+}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryLengthOptionMacro}[4]{%
+ \protected@edef\reserved@a{%
+ \noexpand\FamilySetLength{KOMAarg}{#1}{\noexpand\@tempskipa}{#4}%
+ }\reserved@a
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \ifscr@dte@expandtopt
+ \expandafter\edef\csname #2\scr@dte@current#3\endcsname{%
+ \the\@tempskipa}%
+ \else
+ \expandafter\protected@edef\csname #2\scr@dte@current#3\endcsname{#4}%
+ \fi
+ \fi
+}
+\newcommand*{\@DefineTOCEntryAddLengthOptionMacro}[4]{%
+ \@ifundefined{#2\scr@dte@current#3}{%
+ \FamilyKeyStateUnknownValue
+ }{%
+ \protected@edef\reserved@a{%
+ \noexpand\FamilySetLength{KOMAarg}{#1}{\noexpand\@tempskipa}{#4}%
+ }\reserved@a
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \ifscr@dte@expandtopt
+ \expandafter\edef\csname #2\scr@dte@current#3\endcsname{%
+ \the\glueexpr\@tempskipa
+ +\csname #2\scr@dte@current#3\endcsname\relax}%
+ \else
+ \expandafter\protected@edef\csname #2\scr@dte@current#3\endcsname{%
+ \the\glueexpr #4%
+ +\csname #2\scr@dte@current#3\endcsname\relax}%
+ \fi
+ \fi
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@DefineTOCEntryAddLengthOptionMacro,\@DefineTOCEntryLengthOptionMacro
+% \end{macro}^^A \@DefineTOCEntryLengthOptionWithDefault,\@DefineTOCEntryLengthOptionWithoutDefault
+% \end{macro}^^A \@DefineTOCEntryLengthOption
+%
+% \begin{macro}{\@DefineTOCEntryNumberOption}
+% \changes{v3.20}{2015/12/04}{added}
+% Use \cs{DefineTOCEntryOption} to define an option that represents a number
+% macro. The parameters are:
+% \begin{description}
+% \item[\marg{style}: \meta{string},] name of the entry style
+% \item[\marg{option}: \meta{string},] name of the option
+% \item[\oarg{value}: \meta{length},] default value of the option
+% \item[\marg{prefix}: \meta{string},] prefix of the name of the macro
+% \item[\marg{postfix}: \meta{string},] postfix of the name of the macro
+% \item[\marg{explanation}: \meta{string},] short description of the option
+% \item[\oarg{init}: \meta{code},] initialisation code for the option
+% \end{description}
+% Later, when the option is defines, between \meta{prefix} and \meta{postfix}
+% will be added \cs{scr@dte@current} automatically. This is the name of the
+% entry level, e.g., |subsection| or |figure|. Additionally to
+% the option \marg{option} itself a copy option \marg{option}\opt{:} will
+% be defined. So it seems, that for the copy option a colon is before the
+% equal sign. The value of the copy option has to be the name of another entry
+% level and it copies the value of the same option of that entry
+% level. Additionally an additive option with appended plus sign is
+% defined. It adds the new value to the existing one.
+% \begin{macro}{\@DefineTOCEntryNumberOptionWithoutDefault,
+% \@DefineTOCEntryNumberOptionWithDefault}
+% \changes{v3.20}{2015/11/12}{added}
+% \changes{v3.27}{2019/10/02}{automatic definition of copy option}
+% \changes{v3.27}{2019/10/03}{automatic definition of add option}
+% \begin{macro}{\@DefineTOCEntryNumberOptionMacro,\@DefineTOCEntryAddNumberOptionMacro}
+% \changes{v3.27}{2019/10/03}{added}
+% Because of the options argument at position 3 (and because we've made this
+% before \pkg{xparse} became part of the \LaTeX{} kernel), we need three
+% auxiliary macros.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@DefineTOCEntryNumberOption}[2]{%
+ \kernel@ifnextchar [%]
+ {\@DefineTOCEntryNumberOptionWithDefault{#1}{#2}}
+ {\@DefineTOCEntryNumberOptionWithoutDefault{#1}{#2}}%
+}
+\newcommand*{\@DefineTOCEntryNumberOptionWithoutDefault}[5]{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#3}{#4}{#2}{#5}%
+ \@DefineTOCEntryOption{#1}{#2}{%
+ \@DefineTOCEntryNumberOptionMacro{#2}{#3}{#4}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#3##1#4}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #3\scr@dte@current#4\expandafter\endcsname
+ \csname #3##1#4\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2+}{%
+ \@DefineTOCEntryAddNumberOptionMacro{#2+}{#3}{#4}{##1}%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}%
+ \noexpand\do{#2:}\noexpand\do{#2+}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryNumberOptionWithDefault}{}
+\def\@DefineTOCEntryNumberOptionWithDefault#1#2[#3]#4#5#6{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#4}{#5}{#2}{#6}%
+ \@DefineTOCEntryOption{#1}{#2}[{#3}]{%
+ \@DefineTOCEntryNumberOptionMacro{#2}{#4}{#5}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #4\scr@dte@current#5\expandafter\endcsname
+ \csname #4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2+}{%
+ \@DefineTOCEntryAddNumberOptionMacro{#2+}{#4}{#5}{##1}%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}%
+ \noexpand\do{#2:}\noexpand\do{#2+}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryNumberOptionMacro}[4]{%
+ \protected@edef\reserved@a{%
+ \noexpand\FamilySetCounterMacro{KOMAarg}{#1}{%
+ \expandafter\noexpand\csname #2\scr@dte@current#3\endcsname
+ }{#4}%
+ }\reserved@a
+}
+\newcommand*{\@DefineTOCEntryAddNumberOptionMacro}[4]{%
+ \@ifundefined{#2\scr@dte@current#3}{%
+ \FamilyKeyStateUnknownValue
+ }{%
+ \FamilySetCounterMacro{KOMAarg}{#1}{%
+ \reserved@a
+ }{#4}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \expandafter\edef\csname #2\scr@dte@current#3\endcsname{%
+ \the\numexpr \reserved@a+\csname #2\scr@dte@current#3\endcsname\relax
+ }%
+ \fi
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@DefineTOCEntryAddNumberOptionMacro,\@DefineTOCEntryNumberOptionMacro
+% \end{macro}^^A \@DefineTOCEntryNumberOptionWithDefault,\@DefineTOCEntryNumberOptionWithoutDefault
+% \end{macro}^^A \@DefineTOCEntryNumberOption
+%
+% \begin{macro}{\@DefineTOCEntryBooleanOption}
+% \changes{v3.20}{2015/12/04}{added}
+% Use \cs{DefineTOCEntryOption} to define an option that represents a boolean
+% switch. The parameters are:
+% \begin{description}
+% \item[\marg{style}: \meta{string},] name of the entry style
+% \item[\marg{option}: \meta{string},] name of the option
+% \item[\oarg{value}: \meta{length},] default value of the option
+% \item[\marg{prefix}: \meta{string},] prefix of the name of the macro
+% \item[\marg{postfix}: \meta{string},] postfix of the name of the macro
+% \item[\marg{explanation}: \meta{string},] short description of the option
+% \item[\oarg{init}: \meta{code},] initialisation code for the option
+% \end{description}
+% Later, when the option is defines, between \meta{prefix} and \meta{postfix}
+% will be added \cs{scr@dte@current} automatically. This is the name of the
+% entry level, e.g., |subsection| or |figure|. Additionally to
+% the option \marg{option} itself a copy option \marg{option}\opt{:} will
+% be defined. So it seems, that for the copy option a colon is before the
+% equal sign. The value of the copy option has to be the name of another entry
+% level and it copies the value of the same option of that entry
+% level.
+% \begin{macro}{\@DefineTOCEntryBoolOptionWithoutDefault,
+% \@DefineTOCEntryBoolOptionWithDefault}
+% \changes{v3.20}{2015/11/12}{added}
+% \changes{v3.27}{2019/10/02}{automatic definition of copy option}
+% \begin{macro}{\@DefineTOCEntryBoolOptionMacro}
+% \changes{v3.20}{2015/11/12}{added}
+% Because of the options argument at position 3 (and because we've made this
+% before \pkg{xparse} became part of the \LaTeX{} kernel), we need three
+% auxiliary macros.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@DefineTOCEntryBooleanOption}[2]{%
+ \kernel@ifnextchar [%]
+ {\@DefineTOCEntryBoolOptionWithDefault{#1}{#2}}
+ {\@DefineTOCEntryBoolOptionWithoutDefault{#1}{#2}}%
+}
+\newcommand*{\@DefineTOCEntryBoolOptionWithoutDefault}[5]{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{if#3}{#4}{#2}{#5}%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#3}{#4false}{#2}{#5}%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#3}{#4false}{#2}{#5}%
+ \@DefineTOCEntryOption{#1}{#2}[true]{%
+ \@DefineTOCEntryBoolOptionMacro{#2}{#3}{#4}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{if#3##1#4}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname if#3\scr@dte@current#4\expandafter\endcsname
+ \csname if#3##1#4\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryBoolOptionWithDefault}{}
+\def\@DefineTOCEntryBoolOptionWithDefault#1#2[#3]#4#5#6{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{if#4}{#5}{#2}{#6}%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#4}{#5true}{#2}{#6}%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#4}{#5false}{#2}{#6}%
+ \@DefineTOCEntryOption{#1}{#2}[{#3}]{%
+ \@DefineTOCEntryBoolOptionMacro{#2}{#4}{#5}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{if#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname if#4\scr@dte@current#5\expandafter\endcsname
+ \csname if#4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryBoolOptionMacro}[4]{%
+ \@ifundefined{if#2\scr@dte@current#3}{%
+ \expandafter\newif\csname if#2\scr@dte@current#3\endcsname
+ }{}%
+ \FamilySetBool{KOMAarg}{#1}{#2\scr@dte@current#3}{#4}%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@DefineTOCEntryBoolOptionMacro
+% \end{macro}^^A \@DefineTOCEntryBoolOptionWithDefault,\@DefineTOCEntryBoolOptionWithoutDefault
+% \end{macro}^^A \@DefineTOCEntryBooleanOption
+%
+% \begin{macro}{\@DefineTOCEntryIfOption}
+% \changes{v3.20}{2015/12/06}{added}
+% Use \cs{DefineTOCEntryOption} to define an option that represents an if
+% command. The option itself is a boolean option. The parameters are:
+% \begin{description}
+% \item[\marg{style}: \meta{string},] name of the entry style
+% \item[\marg{option}: \meta{string},] name of the option
+% \item[\oarg{value}: \meta{length},] default value of the option
+% \item[\marg{prefix}: \meta{string},] prefix of the name of the macro
+% \item[\marg{postfix}: \meta{string},] postfix of the name of the macro
+% \item[\marg{explanation}: \meta{string},] short description of the option
+% \end{description}
+% Later, when the option is defines, between \meta{prefix} and \meta{postfix}
+% will be added \cs{scr@dte@current} automatically. This is the name of the
+% entry level, e.g., |subsection| or |figure|. Additionally to
+% the option \marg{option} itself a copy option \marg{option}\opt{:} will
+% be defined. So it seems, that for the copy option a colon is before the
+% equal sign. The value of the copy option has to be the name of another entry
+% level and it copies the value of the same option of that entry
+% level.
+% \begin{macro}{\@DefineTOCEntryIfOptionWithoutDefault,
+% \@DefineTOCEntryIfOptionWithDefault}
+% \changes{v3.20}{2015/11/12}{added}
+% \changes{v3.27}{2019/10/02}{automatic definition of copy option}
+% \begin{macro}{\@DefineTOCEntryIfOptionMacro}
+% \changes{v3.20}{2015/11/12}{added}
+% Because of the options argument at position 3 (and because we've made this
+% before \pkg{xparse} became part of the \LaTeX{} kernel), we need three
+% auxiliary macros.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@DefineTOCEntryIfOption}[2]{%
+ \kernel@ifnextchar [%]
+ {\@DefineTOCEntryIfOptionWithDefault{#1}{#2}}
+ {\@DefineTOCEntryIfOptionWithoutDefault{#1}{#2}}%
+}
+\newcommand*{\@DefineTOCEntryIfOptionWithoutDefault}[5]{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{If#3}{#4}{#2}{#5}%
+ \@DefineTOCEntryOption{#1}{#2}[true]{%
+ \@DefineTOCEntryIfOptionMacro{#2}{#3}{#4}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{If#3##1#4}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname If#3\scr@dte@current#4\expandafter\endcsname
+ \csname If#3##1#4\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryIfOptionWithDefault}{}
+\def\@DefineTOCEntryIfOptionWithDefault#1#2[#3]#4#5#6{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{If#4}{#5}{#2}{#6}%
+ \@DefineTOCEntryOption{#1}{#2}[{#3}]{%
+ \@DefineTOCEntryIfOptionMacro{#2}{#4}{#5}{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{If#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname If#4\scr@dte@current#5\expandafter\endcsname
+ \csname If#4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+}
+\newcommand*{\@DefineTOCEntryIfOptionMacro}[4]{%
+ \FamilySetBool{KOMAarg}{#1}{@tempswa}{#4}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \if@tempswa
+ \expandafter\let\csname If#2\scr@dte@current#3\endcsname\@firstoftwo
+ \else
+ \expandafter\let\csname If#2\scr@dte@current#3\endcsname\@secondoftwo
+ \fi
+ \fi
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@DefineTOCEntryIfOptionMacro
+% \end{macro}^^A \@DefineTOCEntryIfOptionWithDefault,\@DefineTOCEntryIfOptionWithoutDefault
+% \end{macro}^^A \@DefineTOCEntryIfOption
+%
+% \begin{macro}{\@DefineTOCEntryCommandOption}
+% \changes{v3.20}{2015/11/17}{added}
+% Use \cs{DefineTOCEntryOption} to define an option that represents a
+% macro. The parameters are:
+% \begin{description}
+% \item[\marg{style}: \meta{string},] name of the entry style
+% \item[\marg{option}: \meta{string},] name of the option
+% \item[\oarg{value}: \meta{length},] default value of the option
+% \item[\marg{prefix}: \meta{string},] prefix of the name of the macro
+% \item[\marg{postfix}: \meta{string},] postfix of the name of the macro
+% \item[\marg{explanation}: \meta{string},] short description of the option
+% \item[\oarg{init}: \meta{code},] initialisation code for the option
+% \end{description}
+% Later, when the option is defines, between \meta{prefix} and \meta{postfix}
+% will be added \cs{scr@dte@current} automatically. This is the name of the
+% entry level, e.g., |subsection| or |figure|. Additionally to
+% the option \marg{option} itself a copy option \marg{option}\opt{:} will
+% be defined. So it seems, that for the copy option a colon is before the
+% equal sign. The value of the copy option has to be the name of another entry
+% level and it copies the value of the same option of that entry
+% level. Additionally an appending option with appended plus sign is
+% defined. It appends the new code to the existing one.
+% \begin{macro}{\@DefineTOCEntryCommandOptionWithoutDefault}
+% \changes{v3.20}{2015/11/12}{added}
+% \begin{macro}{\@@DefineTOCEntryCommandOptionWithoutDefault}
+% \changes{v3.20}{2015/11/12}{added}
+% \changes{v3.27}{2019/10/02}{automatic definition of copy option}
+% \changes{v3.27}{2019/10/03}{automatic definition of add option}
+% \begin{macro}{\@DefineTOCEntryCommandOptionWithDefault}
+% \changes{v3.20}{2015/11/12}{added}
+% \begin{macro}{\@@DefineTOCEntryCommandOptionWithDefault}
+% \changes{v3.20}{2015/11/12}{added}
+% \changes{v3.27}{2019/10/02}{automatic definition of copy option}
+% \changes{v3.27}{2019/10/03}{automatic definition of add option}
+% \begin{macro}{\@DefineTOCEntryCommandOptionMacro,\@@DefineTOCEntryCommandOptionMacro}
+% \changes{v3.20}{2015/11/26}{added}
+% Because of the options argument at position 3 (and because we've made this
+% before \pkg{xparse} became part of the \LaTeX{} kernel), we need three
+% auxiliary macros.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@DefineTOCEntryCommandOption}[2]{%
+ \kernel@ifnextchar [%]
+ {\@DefineTOCEntryCommandOptionWithDefault{#1}{#2}}
+ {\@DefineTOCEntryCommandOptionWithoutDefault{#1}{#2}}%
+}
+\newcommand*{\@DefineTOCEntryCommandOptionWithoutDefault}[4]{%
+ \@testopt{\@@DefineTOCEntryCommandOptionWithoutDefault{#1}{#2}{#3}{#4}}0%
+}
+\newcommand*{\@@DefineTOCEntryCommandOptionWithoutDefault}{}%
+\def\@@DefineTOCEntryCommandOptionWithoutDefault#1#2#3#4[#5]#6{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#3}{#4}{#2}{#6}%
+ \ifcase #5
+ \@DefineTOCEntryOption{#1}{#2}{%
+ \@DefineTOCEntryCommandOptionMacro{#2}{#3}{#4}[#5]{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#3##1#4}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #3\scr@dte@current#4\expandafter\endcsname
+ \csname #3##1#4\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+ \or
+ \@DefineTOCEntryOption{#1}{#2}{%
+ \@DefineTOCEntryCommandOptionMacro{#2}{#3}{#4}[#5]{##1{####1}}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#3##1#4}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #3\scr@dte@current#4\expandafter\endcsname
+ \csname #3##1#4\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+ \else
+ \PackageError{tocbasic}{only one argument supported}{%
+ \string\DefineTOCEntryCommandOption\space currently supports only
+ commands with\MessageBreak
+ at most one argument not #5}%
+ \fi
+}
+\newcommand*{\@DefineTOCEntryCommandOptionWithDefault}{}
+\def\@DefineTOCEntryCommandOptionWithDefault#1#2[#3]#4#5{%
+ \@testopt{\@@DefineTOCEntryCommandOptionWithDefault{#1}{#2}{#3}{#4}{#5}}0%
+}
+\def\@@DefineTOCEntryCommandOptionWithDefault#1#2#3#4#5[#6]#7{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}{#4}{#5}{#2}{#7}%
+ \ifcase #6
+ \@DefineTOCEntryOption{#1}{#2}[{#3}]{%
+ \@DefineTOCEntryCommandOptionMacro{#2}{#4}{#5}[#6]{##1}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #4\scr@dte@current#5\expandafter\endcsname
+ \csname #4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+ \or
+ \@DefineTOCEntryOption{#1}{#2}[{#3}]{%
+ \@DefineTOCEntryCommandOptionMacro{#2}{#4}{#5}[#6]{##1{####1}}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #4\scr@dte@current#5\expandafter\endcsname
+ \csname #4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+ \or
+ \@DefineTOCEntryOption{#1}{#2}[{#3}]{%
+ \@DefineTOCEntryCommandOptionMacro{#2}{#4}{#5}[#6]{##1{####1}{####2}}%
+ }%
+ \DefineFamilyKey[.dte]{KOMAarg}{#2:}{%
+ \scr@ifundefinedorrelax{#4##1#5}{\FamilyKeyStateUnknownValue}{%
+ \expandafter\let
+ \csname #4\scr@dte@current#5\expandafter\endcsname
+ \csname #4##1#5\endcsname
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ \edef\scr@dte@doopts{%
+ \unexpanded\expandafter{\scr@dte@doopts}\noexpand\do{#2:}%
+ }%
+ \else
+ \PackageError{tocbasic}{only one argument supported}{%
+ \string\DefineTOCEntryCommandOption\space currently supports only
+ commands with\MessageBreak
+ at most two argument not #6}%
+ \fi
+}
+\newcommand*{\@DefineTOCEntryCommandOptionMacro}[3]{%
+ \@testopt{\@@DefineTOCEntryCommandOptionMacro{#1}{#2}{#3}}0%
+}
+\newcommand*{\@@DefineTOCEntryCommandOptionMacro}{}
+\long\def\@@DefineTOCEntryCommandOptionMacro#1#2#3[#4]#5{%
+ \let\l@ngrel@x\long
+ \expandafter\@yargdef\csname #2\scr@dte@current#3\endcsname\@ne{#4}{#5}%
+ \FamilyKeyStateProcessed
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@@DefineTOCEntryCommandOptionMacro,\@DefineTOCEntryCommandOptionMacro
+% \end{macro}^^A \@@DefineTOCEntryCommandOptionWithDefault
+% \end{macro}^^A \@DefineTOCEntryCommandOptionWithDefault
+% \end{macro}^^A \@@DefineTOCEntryCommandOptionWithoutDefault
+% \end{macro}^^A \@DefineTOCEntryCommandOptionWithoutDefault
+% \end{macro}^^A \@DefineTOCEntryCommandOption
+%
+% \begin{macro}{\@AddToDeclareTOCStyleEntryPreCheckNeeds,
+% \@PreToDeclareTOCStyleEntryPreCheckNeeds}
+% \changes{v3.20}{2015/12/06}{added}
+% Before the existence of the mandatory commands can be tested in
+% \cs{DeclareTOCStyleEntry}, a hook will be executed. To add code to this hook
+% we have this command with the following parameter:
+% \begin{description}
+% \item[\marg{code}: \meta{code},] code to be executed.
+% \end{description}
+% Please note, this command is used inside the init code of styles, which
+% means inside \cs{DeclareTOCEntryStyle}, but the hook is inside
+% \cs{DeclareTOCStyleEntry}. The code of the hook has exactly one argument,
+% the name of the ToC entry level.
+% \begin{macrocode}
+%<*body>
+\newcommand{\@AddToDeclareTOCEntryStylePreCheckNeeds}[1]{%
+ \expandafter\providecommand\csname scr@dte@precheck\endcsname[1]{}%
+ \expandafter\l@addto@macro@a\csname scr@dte@precheck\endcsname
+}
+\newcommand{\@PreToDeclareTOCEntryStylePreCheckNeeds}[1]{%
+ \expandafter\providecommand\csname scr@dte@precheck\endcsname[1]{}%
+ \expandafter\l@preto@macro@a\csname scr@dte@precheck\endcsname
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@AddToDeclareTOCStyleEntryPreCheckNeeds,\@PreToDeclareTOCStyleEntryPreCheckNeeds
+%
+% \begin{macro}{\@TOCEntryStyleNeedsCommandByOption}
+% \changes{v3.20}{2015/12/04}{added}
+% Adds one or more commands to the list of mandatory commands. The parameters
+% are:
+% \begin{description}
+% \item[\marg{style}:] The style \meta{string}, that needs the command(s).
+% \item[\marg{prefix}:] Prefix \meta{string} of the mandatory command(s).
+% \item[\marg{postfix}:] Postfix \meta{string} of the mandatory command(s).
+% \item[\marg{Option}:] Option \meta{string}, that defines the command(s).
+% \item[\marg{explanation}:] Short description.
+% \end{description}
+% Between \meta{prefix} and \meta{postfix} will be added the name of the entry
+% level automatically.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\@TOCEntryStyleNeedsCommandByOption}[5]{%
+ \expandafter\providecommand\expandafter*\csname scr@dte@#1@needs\endcsname{}%
+ \expandafter\l@addto@macro\csname scr@dte@#1@needs\endcsname{%
+ \do{#2}{#3}{#4}{#5}%
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@TOCEntryStyleNeedsCommandByOption
+%
+% \begin{command}{\TOCEntryStyleInitCode,\TOCEntryStyleStartInitCode}
+% \changes{v3.20}{2015/11/25}{added}
+% Executes commands before a ToC entry level command of this style is defined
+% and before the \emph{needs} list will be executed. The parameters are:
+% \begin{description}
+% \item[\marg{style}:] The style \meta{string} that should be initialised.
+% \item[\marg{code}:] The code that should be executed to initialise the
+% style. The code has one argument \texttt{\#1} which is the name of the ToC
+% entry level.
+% \end{description}
+% \begin{macrocode}
+%<*body>
+\newcommand{\TOCEntryStyleInitCode}[1]{%
+ \scr@ifundefinedorrelax{scr@dte@#1@init}{%
+ \expandafter\providecommand\expandafter*%
+ \csname scr@dte@#1@init\endcsname[1]%
+ }{%
+ \expandafter\l@addto@macro@a\csname scr@dte@#1@init\endcsname
+ }%
+}
+\newcommand{\TOCEntryStyleStartInitCode}[1]{%
+ \scr@ifundefinedorrelax{scr@dte@#1@init}{%
+ \expandafter\providecommand\expandafter*%
+ \csname scr@dte@#1@init\endcsname[1]%
+ }{%
+ \expandafter\l@preto@macro@a\csname scr@dte@#1@init\endcsname
+ }%
+}
+% \end{macrocode}
+% \end{command}^^A \TOCEntryStyleInitCode,\TOCEntryStyleStartInitCode
+% \begin{macro}{\@ExecuteTOCEntryStyleInitCode}
+% \changes{v3.20}{2015/12/04}{added}
+% Executes the init code of one style. The first argument is the name of the
+% style, the second the name of the ToC entry level, which will be used as
+% argument of the init code (see above).
+% \begin{macrocode}
+\newcommand*{\@ExecuteTOCEntryStyleInitCode}[2]{%
+ \let\scr@dte@doopts\@empty
+% \end{macrocode}
+% \changes{v3.27}{2019/10/02}{init \cs{scr@dte@\meta{Stil}@init}}
+% Because the definition which options or which macros are needed for a style
+% takes place via the declaration of the options and this declaration does not
+% take place with the definition of the style but with the assignment of the
+% style to an entry, the do list of this information must also be deleted
+% here. Otherwise it would constantly grow over all entries of the same style
+% and thus contain various entries several times. Probably it would be better
+% to actually create a list per entry here instead of one per style, but
+% that's just not how it is. So the same list is always rebuilt here and must
+% therefore be reset at the beginning.
+% \begin{macrocode}
+ \expandafter\let\csname scr@dte@#1@needs\endcsname\relax
+ \scr@ifundefinedorrelax{scr@dte@#1@init}{}{%
+ \def\DefineTOCEntryBooleanOption{\@DefineTOCEntryBooleanOption{#1}}%
+ \def\DefineTOCEntryCommandOption{\@DefineTOCEntryCommandOption{#1}}%
+ \def\DefineTOCEntryIfOption{\@DefineTOCEntryIfOption{#1}}%
+ \def\DefineTOCEntryLengthOption{\@DefineTOCEntryLengthOption{#1}}%
+ \def\DefineTOCEntryListOption{\@DefineTOCEntryListOption{#1}}%
+ \def\DefineTOCEntryNumberOption{\@DefineTOCEntryNumberOption{#1}}%
+ \def\DefineTOCEntryOption{\@DefineTOCEntryOption{#1}}%
+ \def\AddToDeclareTOCEntryStylePreCheckNeeds{%
+ \@AddToDeclareTOCEntryStylePreCheckNeeds{#1}}%
+ \def\PreToDeclareTOCEntryStylePreCheckNeeds{%
+ \@PreToDeclareTOCEntryStylePreCheckNeeds{#1}}%
+ \def\TOCEntryStyleNeedsCommandByOption{%
+ \@TOCEntryStyleNeedsCommandByOption{#1}}%
+ \@nameuse{scr@dte@#1@init}{#2}%
+ \let\TOCEntryStyleNeedsCommandByOption\relax
+ \let\PreToDeclareTOCEntryStylePreCheckNeeds\relax
+ \let\AddToDeclareTOCEntryStylePreCheckNeeds\relax
+ \let\DefineTOCEntryOption\relax
+ \let\DefineTOCEntryNumberOption\relax
+ \let\DefineTOCEntryListOption\relax
+ \let\DefineTOCEntryLengthOption\relax
+ \let\DefineTOCEntryIfOption\relax
+ \let\DefineTOCEntryCommandOption\relax
+ \let\DefineTOCEntryBooleanOption\relax
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@ExecuteTOCEntryStyleInitCode
+%
+%
+% \begin{command}{\DeclareTOCStyleEntry}
+% \changes{v3.20}{2015/11/13}{added}
+% This user command defines a new ToC entry command. It tests, if all needed
+% style macros are already defined. Otherwise an error will be shown and the
+% ToC entry command will not be defined. The arguments are:
+% \begin{description}
+% \item[\oarg{options}:] comma-separated list of options to specify the entry;
+% \item[\marg{style}:] a string, that specifies the style of the ToC entry;
+% \item[\marg{level name}:] a string, that specifies the name of the
+% sectioning level (or float environment), related to the ToC entry;
+% \end{description}
+% The real macro to define a ToC entry command is
+% \cs{scr@dte@def@l@\meta{style}}. That needs exactly one argument, the
+% \meta{level name}.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\DeclareTOCStyleEntry}[3][]{%
+ \scr@ifundefinedorrelax{scr@dte@def@l@#2}{%
+ \PackageError{tocbasic}{toc entry style `#2' undefined}{%
+ Somebody told me to define toc entry `#3' with style `#2',\MessageBreak
+ but I do not know style `#2'.\MessageBreak
+ You should first define the style then define the entry.\MessageBreak
+ If you'll continue, I'll ignore the command. This could result
+ in\MessageBreak
+ further error messages.%
+ }%
+ }{%
+ \let\scr@dte@precheck\@gobble
+ \def\scr@dte@current{#3}%
+ \@ExecuteTOCEntryStyleInitCode{#2}{#3}%
+ \IfArgIsEmpty{#1}{}{%
+ \FamilyBoolKey[.dte]{KOMAarg}{expandtopt}{scr@dte@expandtopt}%
+ \scr@dte@expandtoptfalse
+ \FamilyExecuteOptions[.dte]{KOMAarg}{#1}%
+ \RelaxFamilyKey[.dte]{KOMAarg}{expandtopt}%
+ }%
+ \@RelaxTOCEntryOptions
+ \let\scr@dte@doopts\relax
+ \let\scr@dte@current\relax
+ \scr@ifundefinedorrelax{#3tocdepth}{%
+ \expandafter\let\csname #3tocdepth\expandafter\endcsname
+ \csname #3numdepth\endcsname
+ }{}%
+ \scr@dte@precheck{#3}%
+ \let\scr@dte@precheck\relax
+ \begingroup
+ \aftergroup\@tempswatrue
+ \def\do##1##2##3##4{%
+ \scr@ifundefinedorrelax{##1#3##2}{%
+ \PackageError{tocbasic}{toc style `#2' needs ##4}{%
+ Usually the ##4 is defined using option `##3'.\MessageBreak
+ In some cases it may be set defining command
+ `\expandafter\string\csname ##1#3##2\endcsname'.\MessageBreak
+ If you'll continue, I'll ignore the command. This could result
+ in\MessageBreak
+ further error messages.%
+ }%
+ \aftergroup\@tempswafalse
+ }{}%
+ }%
+ \do{}{tocdepth}{level}{toc style level}%
+ \@nameuse{scr@dte@#2@needs}%
+ \endgroup
+ \if@tempswa
+ \@nameuse{scr@dte@def@l@#2}{#3}%
+% \end{macrocode}
+% \changes{v3.27}{2019/10/02}{macro name prefix for style information changed}
+% Note: Before \KOMAScript~3.27 the style name of an entry was stored in
+% \cs{scr@dte@\meta{level name}@style}. But this war wrong, because the prefix
+% |scr@dte| is used for attributes of the style (while declaring an
+% entry), but the style is an attribute of the entry. So usage of the prefix
+% |scr@tso| would be much better. This means usage of
+% \cs{scr@dte@\meta{level name}@style} is deprecated and should be replaced by
+% \cs{scr@tso@\meta{level name}@style}.
+% \begin{macrocode}
+ \expandafter\edef\csname scr@dte@#3@style\endcsname{#2}%
+ \expandafter\edef\csname scr@tso@#3@style\endcsname{#2}%
+% \end{macrocode}
+% \changes{v3.21}{2016/06/09}{\cs{toclevel@\emph{level}} added for \pkg{hyperref}}
+% At least \pkg{hyperref}, but several other packages too, depend on a
+% \pkg{hyperref} compatible storage of the level number. So we define it here
+% additionally. Unfortunately \pkg{hyperref} overwrites this definition, so we
+% do so after loading the package and sometimes also at |\begin{document}|.
+% \begin{macrocode}
+ \expandafter\let\csname toclevel@#3\expandafter\endcsname
+ \csname #3tocdepth\endcsname
+ \if@atdocument\else
+ \scr@ifundefinedorrelax{AfterPackage}{%
+ \AtBeginDocument
+ }{%
+ \AfterPackage*{hyperref}%
+ }%
+ {%
+ \expandafter\let\csname toclevel@#3\expandafter\endcsname
+ \csname #3tocdepth\endcsname
+ }%
+ \fi
+ \fi
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{command}^^A \DeclareTOCStyleEntry
+%
+% \begin{command}{\DeclareTOCStyleEntries}
+% \changes{v3.26}{2018/08/27}{added}
+% Use \cs{DeclareTOCStyleEntry} to define a list of entries, all with the same
+% options and style.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\DeclareTOCStyleEntries}[3][]{%
+ \edef\reserved@a{#3}%
+ \@for \reserved@a:=\reserved@a \do {%
+ \scr@trim@spaces\reserved@a
+ \ifx\reserved@a\@empty\else
+ \IfArgIsEmpty{#1}{%
+ \edef\reserved@a{%
+ \unexpanded{\DeclareTOCStyleEntry{#2}}{\reserved@a}}%
+ }{%
+ \edef\reserved@a{%
+ \unexpanded{\DeclareTOCStyleEntry[{#1}]{#2}}{\reserved@a}}%
+ }%
+ \reserved@a
+ \fi
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{command}^^A \DeclareTOCStyleEntries
+%
+% \begin{command}{\DeclareTOCEntryStyle}
+% \changes{v3.20}{2015/11/17}{added}
+% \begin{macro}{\@DeclareTOCEntryStyle}
+% \changes{v3.20}{2015/11/17}{added}
+% The user command is used to define a new style for ToC entries. The
+% arguments are:
+% \begin{description}
+% \item[\marg{style}:] a string, that represents the name of the style;
+% \item[\oarg{initialization code}:] code, e.g., to initialize the options,
+% that will be used to define the ToC entry command (note: this code can be
+% executed more than once);
+% \item[\marg{code}:] code, that will be used to generate a ToC entry while
+% loading the auxiliary file of the ToC;
+% \end{description}
+% Independent from the \meta{initialization code}, \opt{level} is always
+% defined, because a numerical ToC level is always needed.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\DeclareTOCEntryStyle}[1]{%
+ \kernel@ifnextchar [%]
+ {\@DeclareTOCEntryStyle{#1}}%
+ {\@DeclareTOCEntryStyle{#1}[]}%
+}
+\newcommand{\@DeclareTOCEntryStyle}{}
+\long\def\@DeclareTOCEntryStyle#1[#2]#3{%
+ \@namedef{scr@dte@def@l@#1}##1{%
+ \@namedef{l@##1}####1####2{%
+ \TOC@EntryStartHook{##1}%
+ #3%
+ \TOC@EntryEndHook{##1}%
+ }%
+ }%
+ \TOCEntryStyleInitCode{#1}{%
+ \DefineTOCEntryNumberOption{level}{}{tocdepth}{toc entry level}%
+ #2%
+ }%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@DeclareTOCEntryStyle
+% \end{command}^^A \DeclareTOCEntryStyle
+%
+%
+% \begin{macro}{\TOC@EntryStartHook,\TOC@EntryEndHook}
+% \changes{v3.20}{2016/01/12}{added}
+% For every ToC entry, that has been defined by \KOMAScript{}, there is one
+% \emph{hook}, that will be executed before the corresponding ToC entry, and
+% another \emph{hook}, that will executed after the corresponding ToC entry. Inside
+% the \emph{hook} commands \texttt{\#1} is the name of the ToC level. Generally
+% the \emph{hook} commands should not do any output and should neither change
+% \cs{lastpenalty} nor \len{lastskip}. The user is responsible for this!
+% However, because this \emph{hook} is very dangerous, we only have two
+% internal macros for it but no user command to add new commands to the
+% hook. So it is a kind of last chance mechanism.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\TOC@EntryStartHook}[1]{}
+\newcommand*{\TOC@EntryEndHook}[1]{}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \TOC@EntryStartHook,\TOC@EntryEndHook
+%
+%
+% \begin{command}{\CloneTOCEntryStyle}
+% \changes{v3.20}{2015/11/25}{added}
+% The user command clones the style from \texttt{\#1} to style
+% \texttt{\#2}. After cloning you can change the new style.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\CloneTOCEntryStyle}[2]{%
+% \end{macrocode}
+% First of all copy the ToC entry command.
+% \begin{macrocode}
+ \expandafter\let\csname scr@dte@def@l@#2\expandafter\endcsname
+ \csname scr@dte@def@l@#1\endcsname
+% \end{macrocode}
+% Then copy the \meta{initialization code}.
+% \begin{macrocode}
+ \expandafter\let\csname scr@dte@#2@init\expandafter\endcsname
+ \csname scr@dte@#1@init\endcsname
+}
+%</body>
+% \end{macrocode}
+% \end{command}
+%
+%
+% \begin{macro}{\@pnumwidth,\@tocrmarg,\@dotsep}
+% \changes{v3.27}{2019/05/11}{moved from the classes to the package}
+% \begin{description}
+% \item[\cs{@pnumwidth}] is the space of the page number.
+% \item[\cs{@tocrmarg}] is the right margin of entries with more than one
+% line. Usually this should be larger than \cs{@pnumwidth}.
+% \item[\cs{\@dotsep}] is the space between the dots of a dotted connecting line.
+% \end{description}
+% \begin{macrocode}
+%<*body>
+\providecommand*\@pnumwidth{1.55em}
+\providecommand*\@tocrmarg {2.55em}
+\providecommand*\@dotsep {4.5}
+%</body>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Predefined ToC entry styles}
+%
+% You can read this code as examples for defining ToC entry styles using the
+% commands from the previous sections. Some of them are very basic. Others are
+% extensions of the basic styles. \file{scrdocstrip.tex} has to process this
+% code several times to generate all the styles.
+%
+% \begin{macrocode}
+%<*style>
+% \end{macrocode}
+%
+% \begin{macro}{\scr@dte@def@l@gobble}
+% \changes{v3.20}{2015/11/20}{ToC style \texttt{gobble} added}
+% Der aller einfachste Verzeichniseintragsstil ist |gobble|. Er nimmt
+% die beiden Argumente für den Verzeichniseintrag und die Seitenzahl und
+% vergisst sie unabhängig von der Ebene des Eintrags einfach. Daher benötigt
+% dieser Stil auch keinerlei Optionen oder Initialisierung.
+% \begin{macrocode}
+%<*gobble>
+%%% (run: style,gobble)
+\DeclareTOCEntryStyle{gobble}{}%
+%</gobble>
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@def@l@gobble
+%
+% \begin{macro}{\scr@dte@def@l@dottedtocline}
+% \changes{v3.20}{2015/11/20}{ToC style \texttt{dottedtocline} added}
+% The most simple real ToC entry style is |dottedtocline|. It used the
+% \LaTeX{} kernel macro \cs{@dottedtocline}. You should not use this style for
+% \KOMAScript. But it may be useful to be used with the standard
+% classes. However, in my opinion style |tocline| would always be the better one.
+% \begin{macro}{\scr@dte@def@l@undottedtocline}
+% \changes{v3.20}{2015/11/20}{ToC style \texttt{undottedtocline} added}
+% Style |undottedtocline| corresponds to the style, that is used for chapter
+% entries of the standard class \cls*{book} or \cls*{report}. In opposite to
+% that, it also supports an horizontal indent. So you can alternatively
+% interpret it as a variant of |dottedtocline| without dots.
+% \begin{macro}{\scr@dte@def@l@largetocline}
+% \changes{v3.20}{2015/11/20}{ToC style \texttt{largetocline} added}
+% Style |largetocline| corresponds to the style, that is used for part entries
+% of the standard classes. Once again and in opposite to the original code of
+% the standard classes, this style supports an entry indent. But an additional
+% number width is not supported. Instead the entries will be printed hanging.
+% \begin{macro}{\scr@dte@def@l@tocline}
+% \changes{v3.20}{2015/11/22}{ToC style \texttt{tocline} added}
+% |tocline| is a very flexible style. It is intended to be used for entries with
+% one or more line. It is used for all the ToC entries of the \KOMAScript{}
+% classes. The classes also clone this style several times.
+% \begin{macro}{\scr@dte@def@l@toctext}
+% \changes{3.27}{2019/07/08}{ToC style \texttt{toctext} added}
+% So far all mentioned styles are intended to generate one paragraph per
+% entry. Style |toctext| generated only one paragraph for all consecutive
+% entries. So it prints \emph{text inside} a paragraph.
+% \begin{macrocode}
+%<*dottedtocline|undottedtocline|largetocline|tocline|toctext>
+%<*dottedtocline>
+%%% (run: style,dottedtocline)
+\DeclareTOCEntryStyle{dottedtocline}[{%
+%</dottedtocline>
+%<*undottedtocline>
+%%% (run: style,undottedtocline)
+\DeclareTOCEntryStyle{undottedtocline}[{%
+%</undottedtocline>
+%<*largetocline>
+%%% (run: style, largetocline)
+\DeclareTOCEntryStyle{largetocline}[{%
+%</largetocline>
+%<*toctext>
+%%% (run: style,toctext)
+\DeclareTOCEntryStyle{toctext}[{%
+%</toctext>
+%<*tocline>
+%%% (run: style,tocline)
+\DeclareTOCEntryStyle{tocline}[{%
+%</tocline>
+% \end{macrocode}
+% \changes{v3.31}{2020/06/09}{style \texttt{toctext} also provides option
+% \opt{beforeskip}}
+% \begin{macrocode}
+%<*tocline|toctext>
+ \DefineTOCEntryLengthOption{beforeskip}%
+ {scr@tso@}{@beforeskip}{vertical skip before the entry}%
+%</tocline|toctext>
+%<*tocline>
+ \DefineTOCEntryIfOption{breakafternumber}%
+ {scr@tso@}{@breakafternumber}{line break after number flag}%
+ \DefineTOCEntryIfOption{dynnumwidth}%
+ {scr@tso@}{@dynnumwidth}{dynamic number width flag}%
+% \end{macrocode}
+% \changes{v3.31}{2020/06/08}{option for indent follows list}
+% \begin{macrocode}
+ \DefineTOCEntryListOption{indentfollows}%
+ {scr@tso@}{@indentfollows}{list of levels that define the indent}%
+ \DefineTOCEntryIfOption{dynindent}%
+ {scr@tso@}{@dynindent}{dynamic indent width flag}%
+%</tocline>
+%<*tocline|toctext>
+ \DefineTOCEntryCommandOption{entryformat}%
+ {scr@tso@}{@entryformat}[1]{entry format}%
+ \DefineTOCEntryCommandOption{entrynumberformat}%
+ {scr@tso@}{@numberformat}[1]{entry number format}%
+%</tocline|toctext>
+%<*tocline>
+ \DefineTOCEntryCommandOption{linefill}[\TOCLineLeaderFill]%
+ {scr@tso@}{@linefill}{filling between text and page number}%
+%</tocline>
+%<*toctext>
+ \DefineTOCEntryCommandOption{prepagenumber}%
+ {scr@tso@}{@prepagenumber}{separator between text and page number}%
+%</toctext>
+%<*tocline|toctext>
+ \DefineTOCEntryLengthOption{numsep}%
+ {scr@tso@}{@numsep}{entry number separation}%
+%</tocline|toctext>
+%<*tocline>
+ \DefineTOCEntryCommandOption{onstarthigherlevel}%
+ {scr@tso@}{@LastTOCLevelWasLower}{start higher level entry hook}%
+ \DefineTOCEntryCommandOption{onstartlowerlevel}%
+ {scr@tso@}{@LastTOCLevelWasHigher}{start lower level entry hook}%
+ \DefineTOCEntryCommandOption{onstartsamelevel}%
+ {scr@tso@}{@LastTOCLevelWasSame}{start same level entry hook}%
+%</tocline>
+%<*toctext>
+ \DefineTOCEntryCommandOption{onstartfirstentry}%
+ {scr@tso@}{@onstartfirstentry}{output at start of paragraph}%
+ \DefineTOCEntryCommandOption{onstartentry}%
+ {scr@tso@}{@onstartentry}{output at start of all entries but the first}%
+ \DefineTOCEntryCommandOption{onendlastentry}%
+ {scr@tso@}{@onendlastentry}{output at end of paragraph}%
+ \DefineTOCEntryCommandOption{afterpar}%
+ {scr@tso@}{@afterpar}{settings after end of paragraph}%
+ \DefineTOCEntryCommandOption{onendentry}%
+ {scr@tso@}{@onendentry}{output at end of all entries but the last}%
+%</toctext>
+%<*tocline>
+ \DefineTOCEntryCommandOption{pagenumberbox}%
+ {scr@tso@}{@pagenumberbox}[1]{page number box}%
+%</tocline>
+%<*tocline|toctext>
+ \DefineTOCEntryCommandOption{pagenumberformat}%
+ {scr@tso@}{@pagenumberformat}[1]{page number format}%
+%</tocline|toctext>
+% \end{macrocode}
+% \changes{v3.27}{2019/05/24}{new option \opt{pagenumberwidth}}
+% \changes{v3.27}{2019/05/24}{new option \opt{rightindent}}
+% Die Optionen \opt{pagenumberwidth} und \opt{rightindent} ersetzen
+% innerhalb des Stils |tocline| die Makros \cs{@pnumwidth} und
+% \cs{@tocrmarg}.
+% \begin{macrocode}
+%<*tocline>
+ \DefineTOCEntryLengthOption{pagenumberwidth}%
+ {scr@tso@}{@pagenumberwidth}{width of page number box}%
+%</tocline>
+%<*tocline|toctext>
+ \DefineTOCEntryLengthOption{rightindent}%
+ {scr@tso@}{@rightindent}{entry's text right indent}%
+%</tocline|toctext>
+% \end{macrocode}
+% \changes{v3.21}{2016/06/06}{new option \opt{raggedentrytext}}
+% Unfortunately definition of option \opt{raggedentrytext} is somehow
+% cumbersome, to be more or less compatible with former definition of
+% \cs{raggedchapterentry}.
+% \begin{macrocode}
+%<*tocline>
+ \DefineTOCEntryOption{raggedentrytext}[true]{%
+ \FamilySetBool{KOMAarg}{raggedentrytext}{@tempswa}{##1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \if@tempswa
+ \expandafter\let\csname ragged\scr@dte@current entry\endcsname
+ \raggedright
+ \else
+ \expandafter\let\csname ragged\scr@dte@current entry\endcsname
+ \relax
+ \fi
+ \fi
+ }%
+ \DefineTOCEntryIfOption{raggedpagenumber}%
+ {scr@tso@}{@raggedpage}{page number ragged flag}%
+%</tocline>
+%<*toctext>
+ \DefineTOCEntryIfOption{raggedright}%
+ {scr@tso@}{@raggedright}{use raggedright for the whole paragraph}%
+%</toctext>
+ \DefineTOCEntryLengthOption{indent}%
+ {scr@tso@}{@indent}{entry indent}%
+%<*dottedtocline|undottedtocline|tocline>
+ \DefineTOCEntryLengthOption{numwidth}%
+ {scr@tso@}{@numwidth}{entry number width}%
+%</dottedtocline|undottedtocline|tocline>
+% \end{macrocode}
+% Automatic setting of the numerical level of option \opt{level} resp. command
+% \cs{\meta{entry name}tocdepth} can be done either by increasing the parent
+% level number of a sub level, if the parent level has already be defined:
+% \changes{v3.21}{2016/06/09}{\cs{the} inserted}
+% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}}
+% \begin{macrocode}
+%<*tocline|toctext>
+ \scr@ifundefinedorrelax{#1tocdepth}{%
+ \Ifstrstart{#1}{sub}{%
+ \scr@ifundefinedorrelax{\scr@dte@nosub{#1}tocdepth}{}{%
+ \expandafter\edef\csname #1tocdepth\endcsname{%
+ \the\numexpr \noexpand\@nameuse{\scr@dte@nosub{#1}tocdepth}+\@ne\relax
+ }%
+ }%
+ }{}%
+ }{}%
+%</tocline|toctext>
+% \end{macrocode}
+% or, if this cannot be used, by using a standard value analogues to the
+% values of the standard classes and the \KOMAScript{} classes.
+% \begin{macrocode}
+ \@ifundefined{#1tocdepth}{%
+ \Ifstr{#1}{part}{\@namedef{#1tocdepth}{-1}}{%
+ \Ifstr{#1}{chapter}{\@namedef{#1tocdepth}{0}}{%
+ \Ifstr{#1}{section}{\@namedef{#1tocdepth}{1}}{%
+ \Ifstr{#1}{subsection}{\@namedef{#1tocdepth}{2}}{%
+ \Ifstr{#1}{subsubsection}{\@namedef{#1tocdepth}{3}}{%
+ \Ifstr{#1}{paragraph}{\@namedef{#1tocdepth}{4}}{%
+ \Ifstr{#1}{subparagraph}{\@namedef{#1tocdepth}{5}}{%
+ \Ifstr{#1}{figure}{\@namedef{#1tocdepth}{1}}{%
+ \Ifstr{#1}{table}{\@namedef{#1tocdepth}{1}}{%
+% \end{macrocode}
+% As last chance, we can use the same number already used for a headings level
+% with the same name.
+% \begin{macrocode}
+ \expandafter\let\csname #1tocdepth\expandafter\endcsname
+ \csname #1numdepth\endcsname
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }{}%
+% \end{macrocode}
+% The indent can also be defined automatically by a parent level.
+% \begin{macrocode}
+%<*tocline|toctext>
+ \scr@ifundefinedorrelax{scr@tso@#1@indent}{%
+ \@ifundefined{scr@#1@tocindent}{%
+ \Ifstrstart{#1}{sub}{%
+ \scr@ifundefinedorrelax{scr@tso@\scr@dte@nosub{#1}@indent}{%
+ \scr@ifundefinedorrelax{scr@tso@\scr@dte@nosub{#1}@numwidth}{}{%
+ \expandafter\edef\csname scr@tso@#1@indent\endcsname{%
+ \glueexpr \noexpand\@nameuse{scr@tso@\scr@dte@nosub{#1}@numwidth}%
+ \relax
+ }%
+ }%
+ }{%
+ \scr@ifundefinedorrelax{scr@tso@\scr@dte@nosub{#1}@numwidth}{%
+ \expandafter\edef\csname scr@tso@#1@indent\endcsname{%
+ \glueexpr \noexpand\@nameuse{scr@tso@\scr@dte@nosub{#1}@indent}%
+ \relax
+ }%
+ }{%
+ \expandafter\edef\csname scr@tso@#1@indent\endcsname{%
+ \glueexpr \noexpand\@nameuse{scr@tso@\scr@dte@nosub{#1}@indent}%
+ +\noexpand\@nameuse{scr@tso@\scr@dte@nosub{#1}@numwidth}%
+ \relax
+ }%
+ }%
+ }%
+ }{}%
+ }{%
+% \end{macrocode}
+% Former \KOMAScript{} versions use another macro name, that is also defined
+% for compatibility.
+% \begin{macrocode}
+ \@namedef{scr@tso@#1@indent}{\@nameuse{scr@#1@tocindent}}%
+ }%
+ }{}%
+%</tocline|toctext>
+% \end{macrocode}
+% The width of the page number box and the right margin can simply be copied
+% from a parent level.
+% \begin{macrocode}
+%<*tocline>
+ \scr@ifundefinedorrelax{scr@tso@#1@pagenumberwidth}{%
+ \Ifstrstart{#1}{sub}{%
+ \scr@ifundefinedorrelax{scr@tso@\scr@dte@nosub{#1}@pagenumberwidth}{%
+ \@namedef{scr@tso@#1@pagenumberwidth}{\@pnumwidth}%
+ }{%
+ \expandafter\let
+ \csname scr@tso@#1@pagenumberwidth\expandafter\endcsname
+ \csname scr@tso@\scr@dte@nosub{#1}@pagenumberwidth\endcsname
+ }%
+ }{%
+ \@namedef{scr@tso@#1@pagenumberwidth}{\@pnumwidth}%
+ }%
+ }{}%
+%</tocline>
+%<*tocline|toctext>
+ \scr@ifundefinedorrelax{scr@tso@#1@rightindent}{%
+ \Ifstrstart{#1}{sub}{%
+ \scr@ifundefinedorrelax{scr@tso@\scr@dte@nosub{#1}@rightindent}{%
+ \@namedef{scr@tso@#1@rightindent}{\@tocrmarg}%
+ }{%
+ \expandafter\let
+ \csname scr@tso@#1@rightindent\expandafter\endcsname
+ \csname scr@tso@\scr@dte@nosub{#1}@rightindent\endcsname
+ }%
+ }{%
+ \@namedef{scr@tso@#1@rightindent}{\@tocrmarg}%
+ }%
+ }{}%
+%</tocline|toctext>
+% \end{macrocode}
+% If all the automatic setting methods were not successful, we try standard
+% values used from the standard classes or older versions of the \KOMAScript{}
+% classes.
+% \begin{macrocode}
+ \@ifundefined{scr@tso@#1@indent}{%
+%<*dottedtocline|undottedtocline|largetocline>
+ \@ifundefined{scr@#1@tocindent}{%
+%</dottedtocline|undottedtocline|largetocline>
+ \Ifstr{#1}{figure}{\@namedef{scr@tso@#1@indent}{1.5em}}{%
+ \Ifstr{#1}{table}{\@namedef{scr@tso@#1@indent}{1.5em}}{%
+ \Ifstr{#1}{part}{\@namedef{scr@tso@#1@indent}{0em}}{%
+ \Ifstr{#1}{chapter}{\@namedef{scr@tso@#1@indent}{0em}}{%
+% \end{macrocode}
+% The follow code needs information about the existence of the chapter
+% level. So the chapter level should already be defined, before the first
+% usage!
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{l@chapter}{%
+ \Ifstr{#1}{section}{\@namedef{scr@tso@#1@indent}{0pt}}{%
+ \Ifstr{#1}{subsection}{\@namedef{scr@tso@#1@indent}{1.5em}}{%
+ \Ifstr{#1}{subsubsection}{%
+ \@namedef{scr@tso@#1@indent}{3.8em}%
+ }{%
+ \Ifstr{#1}{paragraph}{%
+ \@namedef{scr@tso@#1@indent}{7em}%
+ }{%
+ \Ifstr{#1}{subparagraph}{%
+ \@namedef{scr@tso@#1@indent}{10em}%
+ }{%
+% \end{macrocode}
+% If nothing helps, the user has to define the values.
+% \begin{macrocode}
+ }%
+ }%
+ }%
+ }%
+ }%
+ }{%
+ \Ifstr{#1}{section}{\@namedef{scr@tso@#1@indent}{1.5em}}{%
+ \Ifstr{#1}{subsection}{\@namedef{scr@tso@#1@indent}{3.8em}}{%
+ \Ifstr{#1}{subsubsection}{%
+ \@namedef{scr@tso@#1@indent}{7.0em}%
+ }{%
+ \Ifstr{#1}{paragraph}{%
+ \@namedef{scr@tso@#1@indent}{10em}%
+ }{%
+ \Ifstr{#1}{subparagraph}{%
+ \@namedef{scr@tso@#1@indent}{12em}%
+ }{%
+% \end{macrocode}
+% Once more: if nothing helps, the user has to define the values.
+% \begin{macrocode}
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+%<*dottedtocline|undottedtocline|largetocline>
+ }{%
+% \end{macrocode}
+% Once again, for compatibility with former versions of \KOMAScript:
+% \begin{macrocode}
+ \@namedef{scr@tso@#1@indent}{\@nameuse{scr@#1@tocindent}}%
+ }%
+%</dottedtocline|undottedtocline|largetocline>
+ }{}%
+% \end{macrocode}
+% Almost the same for the number width:
+% \begin{macrocode}
+%<*dottedtocline|undottedtocline|tocline>
+%<*tocline>
+ \scr@ifundefinedorrelax{scr@tso@#1@numwidth}{%
+ \scr@ifundefinedorrelax{scr@#1@tocnumwidth}{%
+ \Ifstrstart{#1}{sub}{%
+ \scr@ifundefinedorrelax{scr@tso@\scr@dte@nosub{#1}@numwidth}{}{%
+ \expandafter\edef\csname scr@tso@#1@numwidth\endcsname{%
+ \glueexpr \noexpand\@nameuse{scr@tso@\scr@dte@nosub{#1}@numwidth}%
+ +.9em%
+ \relax
+ }%
+ }%
+ }{}%
+ }{%
+ \@namedef{scr@tso@#1@numwidth}{\@nameuse{scr@#1@tocnumwidth}}%
+ }%
+ }{}%
+%</tocline>
+ \@ifundefined{scr@tso@#1@numwidth}{%
+%<*dottedtocline|undottedtocline>
+ \@ifundefined{scr@#1@tocnumwidth}{%
+%</dottedtocline|undottedtocline>
+ \Ifstr{#1}{figure}{\@namedef{scr@tso@#1@numwidth}{2.3em}}{%
+ \Ifstr{#1}{table}{\@namedef{scr@tso@#1@numwidth}{2.3em}}{%
+ \Ifstr{#1}{chapter}{\@namedef{scr@tso@#1@numwidth}{1.5em}}{%
+% \end{macrocode}
+% Depending on existence of the chapter level:
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{chapter}{%
+ \Ifstr{#1}{section}{\@namedef{scr@tso@#1@numwidth}{1.5em}}{%
+ \Ifstr{#1}{subsection}{\@namedef{scr@tso@#1@numwidth}{2.3em}}{%
+ \Ifstr{#1}{subsubsection}{%
+ \@namedef{scr@tso@#1@numwidth}{3.2em}%
+ }{%
+ \Ifstr{#1}{paragraph}{%
+ \@namedef{scr@tso@#1@numwidth}{4.1em}%
+ }{%
+ \Ifstr{#1}{subparagraph}{%
+ \@namedef{scr@tso@#1@numwidth}{5m}%
+ }{%
+% \end{macrocode}
+% Need option to be set.
+% \begin{macrocode}
+ }%
+ }%
+ }%
+ }%
+ }%
+ }{%
+ \Ifstr{#1}{section}{\@namedef{scr@tso@#1@numwidth}{2.3em}}{%
+ \Ifstr{#1}{subsection}{\@namedef{scr@tso@#1@numwidth}{3.2em}}{%
+ \Ifstr{#1}{subsubsection}{%
+ \@namedef{scr@tso@#1@numwidth}{3.1em}%
+ }{%
+ \Ifstr{#1}{paragraph}{%
+ \@namedef{scr@tso@#1@numwidth}{5em}%
+ }{%
+ \Ifstr{#1}{subparagraph}{%
+ \@namedef{scr@tso@#1@numwidth}{6em}%
+ }{%
+% \end{macrocode}
+% Need option to be set.
+% \begin{macrocode}
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+%<*dottedtocline|undottedtocline>
+ }{%
+% \end{macrocode}
+% Compatibility with old \KOMAScript{} versions.
+% \begin{macrocode}
+ \@namedef{scr@tso@#1@numwidth}{\@nameuse{scr@#1@tocnumwidth}}%
+ }%
+%</dottedtocline|undottedtocline>
+ }{}%
+%</dottedtocline|undottedtocline|tocline>
+%<*tocline>
+% \end{macrocode}
+% The three penalty hooks. Here simply the default commands are used by
+% default.
+% \begin{macrocode}
+ \expandafter\providecommand%
+ \csname scr@tso@#1@LastTOCLevelWasLower\endcsname{\LastTOCLevelWasLower}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@LastTOCLevelWasSame\endcsname{\LastTOCLevelWasSame}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@LastTOCLevelWasHigher\endcsname{\LastTOCLevelWasHigher}%
+% \end{macrocode}
+% The default of the vertical distance of entries is 0 plus some glue. But
+% this is enough only for at least one line, if needed for vertical
+% justification. For the higher levels (part and chapter resp. section) the
+% defaults of the standard classes are used. These have some more glue.
+% \begin{macrocode}
+ \@ifundefined{scr@tso@#1@beforeskip}{%
+ \Ifstr{#1}{part}{%
+ \@namedef{scr@tso@#1@beforeskip}{\glueexpr 2.25em \@plus\p@\relax}%
+ }{%
+ \Ifstr{#1}{chapter}{%
+ \@namedef{scr@tso@#1@beforeskip}{\glueexpr 1.0em \@plus\p@\relax}%
+ }{%
+ \Ifstr{#1}{section}{%
+ \scr@ifundefinedorrelax{l@chapter}{%
+ \@namedef{scr@tso@#1@beforeskip}{\glueexpr 1.0em \@plus\p@\relax}%
+ }{}%
+ }{}%
+ }%
+ }%
+ \expandafter\providecommand\expandafter*%
+ \csname scr@tso@#1@beforeskip\endcsname{\glueexpr \z@ plus .2\p@\relax}%
+ }{}%
+%</tocline>
+% \end{macrocode}
+% \changes{v3.31}{2020/06/09}{\opt{beforeskip} default also for style \texttt{toctext}}
+% For style |toctext| a default without glue is used to stay compatible.
+% \begin{macrocode}
+%<*toctext>
+ \expandafter\providecommand\expandafter*%
+ \csname scr@tso@#1@beforeskip\endcsname{\z@}%
+%</toctext>
+%<*tocline>
+% \end{macrocode}
+% It would be good to know the width of the widest number. We will use this to
+% test several conditions.
+% \begin{macrocode}
+ \@ifundefined{scr@dte@#1@maxnumwidth}{%
+ \expandafter\newlength\csname scr@dte@#1@maxnumwidth\endcsname
+ \setlength{\@nameuse{scr@dte@#1@maxnumwidth}}{\z@}%
+ }{}%
+ \providecommand*{\scr@dte@donumwidth}{}%
+ \g@addto@macro{\scr@dte@donumwidth}{\do{#1}}%
+%</tocline>
+% \end{macrocode}
+% One condition is a minimum distance between number and text.
+% \begin{macrocode}
+%<*tocline|toctext>
+ \expandafter\providecommand\expandafter*%
+ \csname scr@tso@#1@numsep\endcsname{.4em}%
+%</tocline|toctext>
+% \end{macrocode}
+% The |toctext| style support the output of some text before the first entry
+% of a paragraph, between the entries and after the last entry of a paragraph.
+% \begin{macrocode}
+%<*toctext>
+ \expandafter\providecommand%
+ \csname scr@tso@#1@onstartfirstentry\endcsname{}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@onstartentry\endcsname{}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@onendlastentry\endcsname{}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@onendentry\endcsname{\quad}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@afterpar\endcsname{}%
+%</toctext>
+% \end{macrocode}
+% Formatting for only the number and formatting for number and text are
+% provided. For part we use the formatting of the standard classes as default.
+% \begin{macrocode}
+%<*tocline|toctext>
+ \expandafter\providecommand%
+ \csname scr@tso@#1@numberformat\endcsname[1]{##1}%
+%<*tocline>
+ \Ifstr{#1}{part}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@entryformat\endcsname[1]{\large\bfseries ##1}%
+ }{%
+ \Ifstr{#1}{chapter}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@entryformat\endcsname[1]{\bfseries ##1}%
+ }{%
+ \scr@ifundefinedorrelax{l@chapter}{%
+ \Ifstr{#1}{section}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@entryformat\endcsname[1]{\bfseries ##1}%
+ }{}%
+ }{}%
+%</tocline>
+ \expandafter\providecommand%
+ \csname scr@tso@#1@entryformat\endcsname[1]{##1}%
+%<*tocline>
+ }%
+ }%
+%</tocline>
+%</tocline|toctext>
+% \end{macrocode}
+% After the number a line break is optional. In this case the text starts
+% again at the horizontal position of the number and not behind it. The
+% default is, not to break after the number.
+% \begin{macrocode}
+%<*tocline>
+ \expandafter\providecommand
+ \csname Ifscr@tso@#1@breakafternumber\endcsname[2]{##2}%
+% \end{macrocode}
+% The default of the connection between the end of the text and the page
+% number column is a simple \cs{hfill}. Here you can optionally use dots as usual.
+% \begin{macrocode}
+ \@ifundefined{scr@tso@#1@linefill}{%
+ \Ifstr{#1}{part}{%
+ \@namedef{scr@tso@#1@linefill}{\hfill}%
+ }{%
+ \Ifstr{#1}{chapter}{%
+ \@namedef{scr@tso@#1@linefill}{\hfill}%
+ }{%
+ \scr@ifundefinedorrelax{l@chapter}{%
+ \Ifstr{#1}{section}{%
+ \@namedef{scr@tso@#1@linefill}{\hfill}%
+ }{}%
+ }{}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@linefill\endcsname{\TOCLineLeaderFill\relax}%
+ }%
+ }%
+ }{}%
+% \end{macrocode}
+% If you don't want a connection, this does not automatically mean, that the
+% page number moves forwards to the end of the text. This only happens, if the
+% entry is set ragged.
+% \begin{macrocode}
+ \expandafter\providecommand\csname Ifscr@tso@#1@raggedpage\endcsname[2]{##2}%
+% \end{macrocode}
+% Optionally you can use a formatting for the page number.
+% \begin{macrocode}
+ \Ifstr{#1}{part}{%
+% \end{macrocode}
+% With parts this is usually large and bold.
+% \begin{macrocode}
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberformat\endcsname[1]{\large\bfseries ##1}%
+ }{%
+% \end{macrocode}
+% \changes{v3.25}{2017/11/23}{default of page numbers of chapter entries is bold}
+% With chapters it is bold.
+% \begin{macrocode}
+ \Ifstr{#1}{chapter}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberformat\endcsname[1]{\bfseries ##1}%
+ }{%
+ \scr@ifundefinedorrelax{l@chapter}{%
+ \Ifstr{#1}{section}{%
+% \end{macrocode}
+% \changes{v3.25}{2017/11/23}{default of page numbers of section entries maybe
+% bold}
+% With sections sometimes bold.
+% \begin{macrocode}
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberformat\endcsname[1]{\bfseries ##1}%
+ }{}%
+ }{}%
+% \end{macrocode}
+% All others in normal font and normal color.
+% \begin{macrocode}
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberformat\endcsname[1]{%
+ \normalfont\normalcolor ##1}%
+ }%
+ }%
+% \end{macrocode}
+% Sometimes the page number has a box with defined width.
+% \changes{v3.27}{2019/10/02}{consequent use of width of page number box}
+% \begin{macrocode}
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberbox\endcsname[1]{%
+ \hb@xt@\@nameuse{scr@dte@pagenumberwidth}{\hfil ##1}}%
+ \expandafter\providecommand\csname Ifscr@tso@#1@dynnumwidth\endcsname[2]{##2}%
+% \end{macrocode}
+% \changes{v3.31}{2020/06/08}{init indent follows list}
+% This command defines a list of levels that specify the indent (if not empty).
+% \begin{macrocode}
+ \expandafter\providecommand\csname Ifscr@tso@#1@dynindent\endcsname[2]{##2}%
+ \scr@ifundefinedorrelax{scr@tso@#1@indentfollows}{%
+ \Ifstrstart{#1}{sub}{%
+ \expandafter\edef\csname scr@tso@#1@indentfollows\endcsname{%
+ \scr@dte@nosub{#1}%
+ }%
+ }{%
+ \expandafter\let\csname scr@tso@#1@indentfollows\endcsname\@empty
+ }%
+ }{}%
+%</tocline>
+% \end{macrocode}
+% \changes{v3.27}{2019/07/08}{initialization of \opt{raggedentry}}
+% \changes{v3.27}{2019/07/08}{initialization of \opt{prepagenumber}}
+% With style |toctext| we have to initialize ragged or justified text and what
+% to print immediately before the page number (\opt{linefill} wouldn't have
+% been a suitable term).
+% \begin{macrocode}
+%<*toctext>
+ \expandafter\providecommand%
+ \csname Ifscr@tso@#1@raggedright\endcsname[2]{##2}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@prepagenumber\endcsname{\nobreakspace}%
+%</toctext>
+}]{%
+% \end{macrocode}
+% \changes{v3.27}{2019/05/12}{support for \opt{noindent}}
+% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by
+% \cs{Iftocfeature}}
+% Initialization complete. Next we have the output code or macro.
+% \begin{macrocode}
+%<*dottedtocline>
+ \Iftocfeature{\@currext}{noindent}{%
+ \@dottedtocline{\@nameuse{#1tocdepth}}{\z@}%
+ {\@nameuse{scr@tso@#1@numwidth}}{##1}{##2}%
+ }{%
+ \@dottedtocline{\@nameuse{#1tocdepth}}{\@nameuse{scr@tso@#1@indent}}%
+ {\@nameuse{scr@tso@#1@numwidth}}{##1}{##2}%
+ }%
+%</dottedtocline>
+%<*undottedtocline|largetocline>
+ \ifnum \c@tocdepth >\numexpr \@nameuse{#1tocdepth}-\@ne\relax
+% \end{macrocode}
+% Here we have a little difference between chapters and the sections of
+% \cls*{article}. We do this by the level. So if you change the levels, the
+% result would change too.
+% \begin{macrocode}
+ \ifnum \@nameuse{#1tocdepth}<\@ne
+ \scr@ifundefinedorrelax{chapter}{%
+ \addpenalty\@secpenalty
+%<undottedtocline> \addvspace{1.0em \@plus\p@}%
+%<largetocline> \addvspace{2.25em \@plus\p@}%
+ }{%
+ \addpenalty{-\@highpenalty}%
+%<undottedtocline> \vskip 1.0em \@plus\p@
+%<largetocline> \addvspace{2.25em \@plus\p@}%
+ }%
+ \else
+ \addpenalty\@secpenalty
+%<undottedtocline> \addvspace{1.0em \@plus\p@}%
+%<largetocline> \addvspace{2.25em \@plus\p@}%
+ \fi
+%<undottedtocline> \setlength\@tempdima{\@nameuse{scr@tso@#1@numwidth}}%
+%<largetocline> \setlength\@tempdima{3em}%
+ \begingroup
+% \end{macrocode}
+% Note: Here we should use two \cs{@tocrmarg} correctly. I've reported this
+% bug in the standard classes years ago without any change. So for
+% compatibility I've decided to accept it as feature and two times
+% \cs{@pnumwith} like the standard classes.
+% \begin{macrocode}
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+% \end{macrocode}
+% The standard classes use a group at this point. This group ends before the
+% final \cs{par}. This can result in wrong baseline skip for multi line
+% entries. It was a hard decision, but I've decided to avoid this bug, because
+% it was much too strange. Moreover, with the bug, the setting of
+% \len{leftskip} would have to be changed, because here also the value at the
+% end of the paragraph is used.
+% \begin{macrocode}
+ \leavevmode
+%<largetocline> \large
+ \bfseries
+% \end{macrocode}
+% Note, here we also should use \cs{@tempdima} with style |largetocline|. But
+% we cannot do so, only because the standard classes do not use
+% \cs{numberline} for parts. Because of this, multi line entries are not
+% correctly indented. To do this same is also because of compatibility.
+% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by \cs{Iftocfeature}}
+% \begin{macrocode}
+%<undottedtocline> \advance\leftskip\@tempdima
+ \Iftocfeature{\@currext}{noindent}{%
+%<undottedtocline> \hskip -\leftskip
+ }{%
+ \advance\leftskip\@nameuse{scr@tso@#1@indent}%
+%<*undottedtocline>
+ \hskip -\dimexpr \leftskip-\@nameuse{scr@tso@#1@indent}\relax
+%</undottedtocline>
+ }%
+ ##1%
+%<undottedtocline> \nobreak
+% \end{macrocode}
+% Here \cs{@pnumwidth} is not the same absolute value for entries with
+% \cs{large} as for entries without \cs{large}. So correctly, e.g., the value
+% should be transferred via \len{@temdimb}. But because of compatibility this
+% bug hat also been interpreted as feature.
+% \begin{macrocode}
+ \hfil \nobreak\hb@xt@\@pnumwidth{\hss ##2}%
+ \par
+%<undottedtocline> \penalty\@highpenalty
+%<*largetocline>
+ \nobreak
+ \ifnum 0=
+ \scr@ifundefinedorrelax{chapter}{\if@compatibility 1\else 0\fi}{1}\relax
+ \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}%
+ \fi
+%</largetocline>
+ \endgroup
+ \fi
+%</undottedtocline|largetocline>
+%<*tocline>
+ \scr@dte@tocline{#1}{##1}{##2}%
+%</tocline>
+%<*toctext>
+ \scr@dte@toctext{#1}{##1}{##2}%
+%</toctext>
+}
+%</dottedtocline|undottedtocline|largetocline|tocline|toctext>
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@def@l@toctext
+% \end{macro}^^A \scr@dte@def@l@tocline
+% \end{macro}^^A \scr@dte@def@l@largetocline
+% \end{macro}^^A \scr@dte@def@l@undottedtocline
+% \end{macro}^^A \scr@dte@def@l@dottedtocline
+%
+% Style |tocline| needs several additional settings and macros:
+% \begin{macrocode}
+%<*tocline>
+\AtBeginDocument{%
+ \BeforeClosingMainAux{%
+ \begingroup
+ \def\do#1{%
+ \relax
+ \scr@ifundefinedorrelax{scr@dte@#1@maxnumwidth}{}{%
+ \ifdim \@nameuse{scr@dte@#1@maxnumwidth}>\z@
+ \if@filesw
+ \protected@write\@mainaux{}{%
+ \string\global\string\@namedef{scr@dte@#1@lastmaxnumwidth}%
+ {\the\@nameuse{scr@dte@#1@maxnumwidth}}%
+ }%
+ \fi
+ \@nameuse{scr@dte@#1@maxnumwidth}\z@
+ \fi
+ }%
+ }%
+ \@nameuse{scr@dte@donumwidth}%
+ \endgroup
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\scr@dte@nosub,\@scr@dte@nosub}
+% \changes{v3.20}{2015/11/23}{added}
+% These helper macros are used to recognize the |sub| prefix at the start of
+% an argument and remove it. If there isn't a |sub| at the very beginning, we
+% report an error, because of wrong usage of \cs{@scr@de@nusub}.
+% \begin{macrocode}
+\newcommand*{\scr@dte@nosub}[1]{\@scr@dte@nosub #1\relax}
+\newcommand*{\@scr@dte@nosub}{}
+\def\@scr@dte@nosub sub#1\relax{#1}
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@nosub,\@scr@dte@nosub
+% \begin{macro}{\scr@dte@tocline}
+% \changes{v3.20}{2015/11/22}{added}
+% \changes{v3.27}{2019/05/12}{support for \opt{noindent}}
+% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by \cs{Iftocfeature}}
+% This is somehow like the \LaTeX{} kernel macro \cs{@dottedtocline}. But it
+% supports a lot of more attributes, not only the level, the numberwidth, the
+% indent and the text. The attributes are handled by options. So we need only
+% three arguments:
+% \begin{description}
+% \item[\marg{level name}:] the name of the ToC entry level;
+% \item[\marg{entry}:] the ToC entry;
+% \item[\marg{page number}:] the page number of the ToC entry.
+% \end{description}
+% \begin{length}{\scr@dte@tocline@numberwidth}
+% \changes{v3.20}{2016/01/15}{added}
+% Sometimes the real width of a formatted number is of interest. So we store
+% it in \len{scr@dte@tocline@numberwidth}.
+% \begin{macrocode}
+\newlength\scr@dte@tocline@numberwidth
+\newcommand*{\scr@dte@tocline}[3]{%
+ \ifnum \@nameuse{#1tocdepth}>\c@tocdepth
+ \else
+ \tocbasic@DependOnPenaltyAndTOCLevel{#1}%
+ \addvspace{\@nameuse{scr@tso@#1@beforeskip}}\relax
+% \end{macrocode}
+% \changes{v3.31}{2020/06/08}{code for indent following list processing}
+% If a indent following list exists and the depth of an entry is lower than
+% the depth of the current entry, use the maximum of the ident + number width
+% for the indent of this entry.
+% \begin{macrocode}
+ \@nameuse{Ifscr@tso@#1@dynindent}{%
+ \expandafter\ifx\csname scr@tso@#1@indentfollows\endcsname\@empty
+ \PackageWarning{tocbasic}{`dynindent' for `#1' not available}%
+ \else
+ \edef\reserved@a{\@nameuse{scr@tso@#1@indentfollows}}%
+ \@for \reserved@a:=\reserved@a\do {%
+ \scr@trim@spaces\reserved@a
+ \ifx\reserved@a\@empty\else
+ \scr@ifundefinedorrelax{\reserved@a tocdepth}{%
+ }{%
+ \ifnum \@nameuse{\reserved@a tocdepth}<\@nameuse{#1tocdepth}%
+ \@tempdima\@nameuse{scr@tso@\reserved@a @indent}\relax
+ \@nameuse{Ifscr@tso@\reserved@a @dynnumwidth}{%
+ \scr@ifundefinedorrelax
+ {scr@dte@\reserved@a @lastmaxnumwidth}{%
+ \advance\@tempdima
+ \@nameuse{scr@tso@\reserved@a @numwidth}\relax
+ }{%
+ \advance\@tempdima
+ \@nameuse{scr@dte@\reserved@a @lastmaxnumwidth}\relax
+ }%
+ }{%
+ \advance\@tempdima
+ \@nameuse{scr@tso@\reserved@a @numwidth}\relax
+ }%
+ \ifdim \@tempdima>\@nameuse{scr@tso@#1@indent}\relax
+ \expandafter\edef\csname scr@tso@#1@indent\endcsname
+ {\the\@tempdima}%
+ \fi
+ \fi
+ }%
+ \fi
+ }%
+ \fi
+ }{}%
+ {%
+ \Iftocfeature{\@currext}{noindent}{%
+ \leftskip \z@
+ }{%
+ \leftskip \@nameuse{scr@tso@#1@indent}\relax
+ }%
+ \rightskip \@nameuse{scr@tso@#1@rightindent}\relax
+ \parfillskip -\rightskip
+ \@nameuse{Ifscr@tso@#1@raggedpage}{%
+ \addtolength{\parfillskip}{\z@ \@plus 1fil}%
+ }{}%
+ \Iftocfeature{\@currext}{noindent}{%
+ \parindent \z@
+ }{%
+ \parindent \@nameuse{scr@tso@#1@indent}\relax
+ }%
+ \@afterindenttrue
+ \interlinepenalty\@M
+% \end{macrocode}
+% \changes{v3.21}{2016/06/06}{\cs{ragged\dots entry} is supported (again)}
+% \begin{macrocode}
+ \expandafter\ifx\csname ragged#1entry\endcsname\raggedright
+ \addtolength\rightskip\@flushglue
+ \else
+ \def\reserved@a{\raggedright}%
+ \expandafter\ifx\csname ragged#1entry\endcsname\reserved@a
+ \addtolength\rightskip\@flushglue
+ \else
+ \renewcommand\reserved@a{\raggedright}%
+ \expandafter\ifx\csname ragged#1entry\endcsname\reserved@a
+ \addtolength\rightskip\@flushglue
+ \fi
+ \fi
+ \fi
+ \leavevmode
+ \@tempdima \@nameuse{scr@tso@#1@numwidth}\relax
+ \@nameuse{Ifscr@tso@#1@dynnumwidth}{%
+ \scr@ifundefinedorrelax{scr@dte@#1@lastmaxnumwidth}{}{%
+ \ifdim \@nameuse{scr@dte@#1@lastmaxnumwidth}>\@tempdima
+ \@tempdima\@nameuse{scr@dte@#1@lastmaxnumwidth}\relax
+ \fi
+ }%
+ }{}%
+ \advance\leftskip \@tempdima
+ \null\nobreak\hskip -\leftskip
+ {%
+% \end{macrocode}
+% Here we use a trick to detect the width of an eventually existing number
+% while printing it. For this it is a must to use the internal definition of
+% \cs{numberline}.
+% \begin{macrocode}
+ \usetocbasicnumberline
+ \let\scr@dte@numberline@box\numberline@box
+ \def\numberline@box##1{%
+ \sbox\scr@dte@tocline@numbox{\@nameuse{scr@tso@#1@numberformat}{##1}}%
+% \end{macrocode}
+% We are inside a group, so we have to set the length globally.
+% \begin{macrocode}
+ \global\scr@dte@tocline@numberwidth
+ \dimexpr\wd\scr@dte@tocline@numbox+\@nameuse{scr@tso@#1@numsep}\relax
+% \end{macrocode}
+% \changes{v3.22}{2016/12/02}{missing second \cs{relax} added}
+% Attention: We need two \cs{relax}, because the first one is eaten by
+% \cs{dimexpr}.
+% \begin{macrocode}
+ \relax
+ \ifdim \scr@dte@tocline@numberwidth
+ >\@nameuse{scr@dte@#1@maxnumwidth}\relax
+ \global\@nameuse{scr@dte@#1@maxnumwidth}\scr@dte@tocline@numberwidth
+ \fi
+ \@nameuse{Ifscr@tso@#1@dynnumwidth}{}{%
+ \ifdim \scr@dte@tocline@numberwidth
+ >\dimexpr \@nameuse{scr@tso@#1@numwidth}%
+ +\@nameuse{scr@tso@#1@numsep}\relax\relax
+ \PackageWarning{tocbasic}{%
+ number width of #1 toc entries should be
+ increased!\MessageBreak
+ Currently used number width =
+ \the\wd\scr@dte@tocline@numbox,\MessageBreak
+ Wanted number separation
+ \space\space\space =
+ \the\dimexpr\@nameuse{scr@tso@#1@numsep}\relax,\MessageBreak
+ Reserved number width \space\space\space\space\space\space =
+ \the\dimexpr\@nameuse{scr@tso@#1@numwidth}\relax%
+ }%
+ \fi
+ }%
+ \scr@dte@numberline@box{\@nameuse{scr@tso@#1@numberformat}{##1}}%
+ \@nameuse{Ifscr@tso@#1@breakafternumber}{%
+ {\parfillskip\@flushglue\par}\nobreak\hskip-\leftskip
+ }{}%
+ }%
+ \@nameuse{scr@tso@#1@entryformat}{%
+ #2%
+ \nobreak
+ {%
+ \normalfont\normalsize\@nameuse{scr@tso@#1@linefill}%
+ \nobreak
+% \end{macrocode}
+% \changes{v3.27}{2019/10/02}{\cs{scr@dte@pagenumberwidth} is defined}
+% We don't want a dependency of entry variable from entry variables. So
+% locally \cs{scr@dte@pagenumberwidth} will become
+% \cs{scr@tso@\meta{Eintragsname}@pagenumberwidth} and in the definition of
+% \cs{scr@tso@\meta{Eintragsname}@pagenumberbox} we use this local macro.
+% \begin{macrocode}
+ \expandafter\let\expandafter\scr@dte@pagenumberwidth
+ \csname scr@tso@#1@pagenumberwidth\endcsname
+ \@nameuse{scr@tso@#1@pagenumberbox}{%
+ \@nameuse{scr@tso@#1@pagenumberformat}{#3}%
+ }%
+ }%
+ \@par
+ }%
+ }%
+ }%
+ \tocbasic@SetPenaltyByTOCLevel{#1}%
+ \fi
+}
+% \end{macrocode}
+% \end{length}^^A \scr@dte@tocline@numberwidth
+% \begin{macro}{\scr@dte@tocline@numbox}
+% \changes{v3.20}{2015/11/25}{new (\emph{box})}
+% Needed to measure the width of the number and use the number later.
+% \begin{macrocode}
+\newsavebox\scr@dte@tocline@numbox
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@tocline@numbox
+% \begin{macro}{\tocbasic@DependOnPenaltyAndTOCLevel,
+% \tocbasic@SetPenaltyByTOCLevel}
+% \changes{v3.20}{2015/11/23}{added}
+% \changes{v3.20}{2016/03/12}{changed for \pkg*{tocbasic} syntax of package
+% author macros}
+% \cs{tocbasic@DepenedOnPenaltyAndTOCLevel} executes a saved action depending
+% on whether the current penalty value stands for an entry with higher, same,
+% or lower entry level.
+% \cs{tocbasic@SetPenaltyByTOCLevel} sets the penalty for the page break
+% depending on the current entry level.
+% \begin{command}{\LastTOCLevelWasHigher,\LastTOCLevelWasSame,
+% \LastTOCLevelWasLower}
+% \changes{v3.20}{2015/11/23}{added}
+% Standard action, if the previous entry level was higher (allow page break),
+% same (allow page break), or lower (keep penalty and therefore prevent page
+% break).
+% \begin{macrocode}
+\newcommand*{\tocbasic@DependOnPenaltyAndTOCLevel}[1]{%
+ \ifnum \lastpenalty<\numexpr 20009-\@nameuse{#1tocdepth}\relax
+ \@nameuse{scr@tso@#1@LastTOCLevelWasHigher}%
+ \else\ifnum \lastpenalty=\numexpr 20009-\@nameuse{#1tocdepth}\relax
+ \@nameuse{scr@tso@#1@LastTOCLevelWasSame}%
+ \else
+ \@nameuse{scr@tso@#1@LastTOCLevelWasLower}%
+ \fi
+ \fi
+}
+\newcommand*{\tocbasic@SetPenaltyByTOCLevel}[1]{%
+ \penalty \numexpr 20009-\@nameuse{#1tocdepth}\relax
+}
+\newcommand*{\LastTOCLevelWasHigher}{\ifvmode\addpenalty{\@lowpenalty}\fi}
+\newcommand*{\LastTOCLevelWasSame}{\ifvmode\addpenalty{\@lowpenalty}\fi}
+\newcommand*{\LastTOCLevelWasLower}{}
+% \end{macrocode}
+% \end{command}^^A \LastTOCLevelWasHigher … \LastTOCLevelWasLower
+% \end{macro}^^A \tocbasic@SetPenaltyByTOCLevel,\tocbasic@DependOnPenaltyAndTOCLevel
+% \begin{command}{\TOCLineLeaderFill}
+% \changes{v3.20}{2015/11/14}{added}
+% Filler between the last text line and the page number. The optional argument
+% \texttt{\#1} is the character used for filling.
+% \begin{macrocode}
+\newcommand*{\TOCLineLeaderFill}[1][.]{%
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{#1}\mkern \@dotsep
+ mu$}\hfill
+}
+%</tocline>
+% \end{macrocode}
+% \end{command}^^A \TOCLineLeaderFill
+% \end{macro}^^A \scr@dte@tocline
+%
+% \begin{macro}{\scr@dte@toctext}
+% \changes{v3.27}{2019/07/08}{added}
+% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by
+% \cs{Iftocfeature}}
+% This is the command to format entries that will be accumalted into a single
+% paragraph. This is somehow special, because the settings of one entrie can
+% influence another one. The three arguments are:
+% \begin{description}
+% \item[\marg{level}:] The name \meta{string} of the entry level.
+% \item[\marg{entry}:] The ToC entry \meta{string}.
+% \item[\marg{pagenumber}:] The page number \meta{string} of the ToC entry.
+% \end{description}
+% \begin{macrocode}
+%<*toctext>
+\newcommand*{\scr@dte@toctext}[3]{%
+ \ifnum \@nameuse{#1tocdepth}>\c@tocdepth
+ \else
+ \ifhmode
+% \end{macrocode}
+% In h-mode their is already output of a previous text entry. So the end code
+% of that previous text entry has to be output before the initial output of
+% the new text entry has to be done.
+% \begin{macrocode}
+ \scr@dte@toctext@lastend
+ \@nameuse{scr@tso@#1@onstartentry}%
+ \else
+% \end{macrocode}
+% \changes{v3.31}{2020/06/09}{use of option \opt{beforeskip}}
+% In v-mode it is a new text entry. Before leaving v-mode the vertical space
+% is added.
+% \begin{macrocode}
+ \addvspace{\@nameuse{scr@tso@#1@beforeskip}}%
+ \leavevmode
+% \end{macrocode}
+% The paragraph end has to be prepared to eventually change the right
+% skip, to do the final output, and after all destroy these commands.
+% \begin{macrocode}
+ \def\par{%
+ \scr@dte@toctext@raggedright
+ \scr@dte@toctext@parend
+ \@par
+ \scr@dte@toctext@afterpar
+ \global\let\scr@dte@toctext@afterpar\relax
+ \global\let\scr@dte@toctext@parend\relax
+ \global\let\scr@dte@toctext@raggedright\relax
+ }%
+ \global\let\scr@dte@toctext@afterpar\@empty
+% \end{macrocode}
+% Also the left skip and the right skip has to be setup (these are the
+% margins) and if any of the text entries has to be printed ragged right, all
+% of them should be ragged right.
+% \begin{macrocode}
+ \Iftocfeature{\@currext}{noindent}{%
+ \leftskip \z@
+ }{%
+ \leftskip \@nameuse{scr@tso@#1@indent}\relax
+ }%
+ \rightskip \@nameuse{scr@tso@#1@rightindent}\relax
+ \parfillskip \z@ \@plus 1fill\relax
+% \end{macrocode}
+% \changes{v3.31}{2020/06/09}{redefinition of \cs{addvspace}}
+% \changes{v3.31}{2020/06/09}{redefinition of \cs{addpenalty}}
+% Now, make sure, that the first non-|toctext| entry does do a \cs{par}
+% before it uses \cs{addpenalty} or \cs{addvspace}. Before version~3.31 this
+% has been done by redefining \cs{@noitemerr} but this does not work, because
+% it ignores the argument of \cs{addpenalty} or \cs{addvspace}. So, this more
+% dangerous solution has been made, that redefines \cs{addvspace} and
+% \cs{addpenalty} locally.
+% \begin{macrocode}
+ \ifx\addvspace\scr@dte@xaddvspace\else
+ \let\scr@dte@saddvspace\addvspace
+ \def\scr@dte@xaddvspace{%
+ \let\addvspace\scr@dte@saddvspace\par\addvspace}%
+ \let\addvspace\scr@dte@xaddvspace
+ \fi
+ \ifx\addpenalty\scr@dte@xaddpenalty\else
+ \let\scr@dte@saddpenalty\addpenalty
+ \def\scr@dte@xaddpenalty{%
+ \let\addpenalty\scr@dte@saddpenalty\par\addpenalty}%
+ \fi
+% \end{macrocode}
+% Finally the init code of the first entry has to be used.
+% \begin{macrocode}
+ \@nameuse{scr@tso@#1@onstartfirstentry}%
+ \fi
+% \end{macrocode}
+% Also some settings are independend from beeing the first entry in the
+% paragraph or not.
+% \begin{macrocode}
+ \@nameuse{Ifscr@tso@#1@raggedright}{%
+ \let\\\@centercr
+ \gdef\scr@dte@toctext@raggedright{%
+ \@rightskip\@flushglue
+ \addtolength\rightskip\@rightskip
+ }%
+ }{}%
+ \l@addto@macro\scr@dte@toctext@afterpar{\@nameuse{scr@tso@#1@afterpar}}%
+% \end{macrocode}
+% The end codes have to be changed. These are used either at the start of the
+% next entry with this style or at the end of the paragraph.
+% \begin{macrocode}
+ \expandafter\global\expandafter\let\expandafter\scr@dte@toctext@lastend
+ \csname scr@tso@#1@onendentry\endcsname
+ \expandafter\global\expandafter\let\expandafter\scr@dte@toctext@parend
+ \csname scr@tso@#1@onendlastentry\endcsname
+% \end{macrocode}
+% Last but not least, the output has to be done.
+% \begin{macrocode}
+ {%
+ \usetocbasicnumberline
+ \def\numberline@box##1{%
+ \mbox{%
+ \@nameuse{scr@tso@#1@numberformat}{\ignorespaces ##1\unskip}%
+ \hskip\@nameuse{scr@tso@#1@numsep}\relax
+ }%
+ }%
+ \@nameuse{scr@tso@#1@entryformat}{%
+ \ignorespaces#2\unskip
+ \@nameuse{scr@tso@#1@prepagenumber}%
+ \@nameuse{scr@tso@#1@pagenumberformat}{\ignorespaces #3\unskip}%
+ }%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \begin{macro}{\scr@dte@toctext@raggedright,\scr@dte@toctext@parend,
+% \scr@dte@toctext@lastend}
+% Helper macros to store some information for later usage.
+% \begin{macrocode}
+\newcommand*{\scr@dte@toctext@raggedright}{}
+\newcommand*{\scr@dte@toctext@parend}{}
+\newcommand*{\scr@dte@toctext@lastend}{}
+%</toctext>
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@toctext@raggedright … \scr@dte@toctext@lastend
+% \end{macro}^^A \scr@dte@toctext
+%
+%
+% \begin{macro}{\scr@dte@def@l@default}
+% \changes{v3.20}{2015/12/16}{new for the package}
+% The package \pkg*{tocbasic} already has a standard style. Other packages
+% should not change the standard style. But classes are allowed to clone (or
+% define) another standard style for documents made with that class.
+% \begin{macrocode}
+%<*default>
+%%% (run: style,dottedtocline)
+\CloneTOCEntryStyle{dottedtocline}{default}
+%</default>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</style>
+%</package>
+% \end{macrocode}
+%
+%
+% \subsubsection{The styles used by the \KOMAScript{} classes}
+%
+% \begin{macrocode}
+%<*class>
+%<*style>
+% \end{macrocode}
+%
+% Some styles are defined by the classes only. They are only defined for the
+% classes, that use them. So not all styles are available by all classes and
+% even not all styles are the same with every class.
+%
+% \begin{macro}{\scr@dte@def@l@part}
+% \changes{v3.20}{2015/12/07}{ToC entry style \texttt{part} added}
+% This style exists with \cls*{scrbook}, \cls*{scrreprt} and
+% \cls*{scrartcl}. The formatting of the entry and the page number is defined
+% by the font elements \fnt{partentry} and \fnt{partentrypagenumber}.
+% \begin{macrocode}
+%<*part>
+%%% (run: class,style,part)
+\CloneTOCEntryStyle{tocline}{part}
+\TOCEntryStyleStartInitCode{part}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@linefill\endcsname{\hfill}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@entryformat\endcsname[1]{\usekomafont{partentry}{##1}}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberformat\endcsname[1]{%
+ \usekomafont{partentry}{\usekomafont{partentrypagenumber}{##1}}}%
+ \expandafter\providecommand\expandafter*%
+ \csname scr@tso@#1@beforeskip\endcsname{2.25em \@plus\p@}%
+}
+%</part>
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@def@l@part
+%
+% \begin{macro}{\scr@dte@def@l@chapter}
+% \changes{v3.20}{2015/12/07}{ToC entry style \texttt{chapter} added}
+% \changes{v3.27}{2019/10/28}{using font element \fnt{chapterentrydots}}
+% This style exists with \cls*{scrbook} and \cls*{scrreprt} only.
+% \begin{macrocode}
+%<*chapter>
+%%% (run: class,style,chapter)
+\CloneTOCEntryStyle{tocline}{chapter}
+\TOCEntryStyleStartInitCode{chapter}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@linefill\endcsname{%
+ \if@chapterentrywithdots
+ {\usekomafont{chapterentrydots}{\TOCLineLeaderFill}}\relax
+ \else
+ \hfill
+ \fi
+ }%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@entryformat\endcsname{\usekomafont{chapterentry}}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberformat\endcsname[1]{%
+ \usekomafont{chapterentry}{\usekomafont{chapterentrypagenumber}{##1}}}%
+ \expandafter\providecommand\expandafter*%
+ \csname scr@tso@#1@beforeskip\endcsname{1.0em \@plus\p@}%
+}
+%</chapter>
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@def@l@chapter
+%
+% \begin{macro}{\scr@dte@def@l@section}
+% \changes{v3.20}{2015/12/07}{ToC entry style \texttt{section} added}
+% \changes{v3.27}{2019/10/28}{using font element \fnt{sectionentrydots}}
+% With classes \cls*{scrbook} and \cls*{scrreprt} this is the style of the
+% \emph{minor} entry level. With \cls*{scrartcl} this is the style of the top
+% entry level (below the part level). So with \cls*{scrartcl} it is similar
+% to the chapter style of \cls*{scrbook} or \cls*{scrreprt}.
+% \begin{macrocode}
+%<*section>
+%%% (run: class,style,section)
+\CloneTOCEntryStyle{tocline}{section}
+%<*book|report>
+\TOCEntryStyleStartInitCode{section}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@linefill\endcsname{\TOCLineLeaderFill\relax}%
+}
+%</book|report>
+%<*article>
+\TOCEntryStyleStartInitCode{section}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@linefill\endcsname{%
+ \if@sectionentrywithdots
+ {\usekomafont{sectionentrydots}{\TOCLineLeaderFill}}\relax
+ \else
+ \hfill
+ \fi
+ }%
+% \end{macrocode}
+% Für die Einträge die Schrift von Element sectionentry verwenden.
+% \begin{macrocode}
+ \expandafter\providecommand%
+ \csname scr@tso@#1@entryformat\endcsname{\usekomafont{sectionentry}}%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@pagenumberformat\endcsname[1]{\usekomafont{sectionentry}{\usekomafont{sectionentrypagenumber}{##1}}}%
+ \expandafter\providecommand\expandafter*%
+ \csname scr@tso@#1@beforeskip\endcsname{1.0em \@plus\p@}%
+}
+%</article>
+%</section>
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@def@l@section
+%
+% \begin{macro}{\scr@dte@def@l@subsection}
+% \changes{v3.20}{2015/12/07}{ToC entry style \texttt{subsection} added}
+% This style exists with \cls*{scrartcl} only. It is the minor level style
+% similar to the section style with \cls*{scrbook} and \cls*{scrreprt}.
+% \begin{macrocode}
+%<*subsection&article>
+%%% (run: class,style,subsection)
+\CloneTOCEntryStyle{tocline}{subsection}
+\TOCEntryStyleStartInitCode{subsection}{%
+ \expandafter\providecommand%
+ \csname scr@tso@#1@linefill\endcsname{\TOCLineLeaderFill\relax}%
+}
+%</subsection&article>
+% \end{macrocode}
+% \end{macro}^^A \scr@dte@def@l@subsection
+%
+% \begin{macro}{\scr@dte@def@l@default}
+% \changes{v3.20}{2015/12/07}{ToC entry style \texttt{default} added}
+% With classes \cls*{scrbook} and \cls*{scrreprt} this is a clone of the
+% section style. With \cls*{scrartcl} this is a clone of the subsection style.
+% \begin{macrocode}
+%<*default>
+%%% (run: class,style,default)
+%<book|report>\CloneTOCEntryStyle{section}{default}
+%<article>\CloneTOCEntryStyle{subsection}{default}
+%</default>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</style>
+%</class>
+% \end{macrocode}
+%
+% \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:
+