summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/koma-script/source/scrkernel-sections.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/koma-script/source/scrkernel-sections.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/koma-script/source/scrkernel-sections.dtx')
-rw-r--r--macros/latex/contrib/koma-script/source/scrkernel-sections.dtx6304
1 files changed, 6304 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/source/scrkernel-sections.dtx b/macros/latex/contrib/koma-script/source/scrkernel-sections.dtx
new file mode 100644
index 0000000000..ab6314b290
--- /dev/null
+++ b/macros/latex/contrib/koma-script/source/scrkernel-sections.dtx
@@ -0,0 +1,6304 @@
+% \CheckSum{4526}
+% \iffalse meta-comment
+% ======================================================================
+% scrkernel-sections.dtx
+% Copyright (c) Markus Kohm, 2002-2019
+%
+% 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.txt.
+% ----------------------------------------------------------------------
+% scrkernel-sections.dtx
+% Copyright (c) Markus Kohm, 2002-2019
+%
+% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
+% Version 1.3c, verteilt und/oder veraendert werden.
+% Die neuste Version dieser Lizenz ist
+% http://www.latex-project.org/lppl.txt
+% und Version 1.3c ist Teil aller Verteilungen von LaTeX
+% Version 2005/12/01 oder spaeter und dieses Werks.
+%
+% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
+% (allein durch den Autor verwaltet).
+%
+% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
+%
+% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
+% ======================================================================
+% \fi
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse
+%%% From File: $Id: scrkernel-sections.dtx 3063 2019-02-01 07:39:11Z 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
+%<execoption>%%% (run: execoption)
+% - initial option executions up to \KOMAProcessOptions
+%<body>%%% (run: body)
+% - everything, that should be done after \KOMAProcessOptions
+%<exit>%%% (run: exit)
+% - everything, that should be done immediately before leaving the file
+%<*dtx>
+% \fi
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\begingroup
+ \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}}
+ \filedate$Date: 2019-02-01 08:39:11 +0100 (Fri, 01 Feb 2019) $
+ \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}}
+ \filerevision$Revision: 3063 $
+ \edef\reserved@a{%
+ \noexpand\endgroup
+ \noexpand\ProvidesFile{scrkernel-sections.dtx}%
+ [\filedate\space\filerevision\space
+ KOMA-Script source (disposition)]
+ }%
+\reserved@a
+% \iffalse
+\documentclass[parskip=half-]{scrdoc}
+\usepackage[english,ngerman]{babel}
+\usepackage[latin1]{inputenc}
+\CodelineIndex
+\RecordChanges
+\GetFileInfo{scrkernel-sections.dtx}
+\title{\KOMAScript{} \partname\ \texttt{\filename}%
+ \footnote{Dies ist Version \fileversion\ von Datei
+ \texttt{\filename}.}}
+\date{\filedate}
+\author{Markus Kohm}
+
+\begin{document}
+ \maketitle
+ \tableofcontents
+ \DocInput{\filename}
+\end{document}
+%</dtx>
+% \fi
+%
+% \selectlanguage{ngerman}
+%
+% \changes{v2.3h}{1996/01/20}{Größenbefehle in den Überschriften
+% variabilisiert}^^A
+% \changes{v2.95}{2002/06/26}{erste Version aus der Aufteilung von
+% \texttt{scrclass.dtx}}^^A
+% \changes{v3.15}{2014/12/09}{Code in Datei \texttt{scrkernel-section} komplett
+% umsortiert}^^A
+%
+% \section{Gliederung}
+%
+% Zur Gliederung gehören neben den üblichen Gliederungsbefehlen
+% \cs{chapter} \dots \cs{subparagraph} auch alle Optionen und Befehle,
+% die diese Gliederung beeinflussen. Eingeschränkt gehören auch die
+% Befehle dazu, die Inhaltsverzeichniseinträge zu den
+% Gliederungsbefehlen erzeugen oder unmittelbar formatieren. Diese
+% Entscheidung wurde getroffen, weil die Zusammengehörigkeit eher hier
+% gesehen wird, als bei den Verzeichnissen selbst.
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \changes{v2.8e}{2001/07/10}{\cs{@maybeasf} entfernt}
+%
+% Die Briefklasse hat keine derartige Gliederung. Beim Briefpaket wird die
+% Gliederung über die verwendete Klasse bestimmt.
+% \iffalse
+%<*!letter>
+% \fi
+%
+% \subsection{Vakatseiten}
+%
+% Bei \textsf{scrbook} und \textsf{scrreprt} gibt es im doppelseitigen Modus
+% ggf. Vakatseiten.
+%
+% \begin{option}{open}
+% \changes{v2.98c}{2008/03/06}{Neue Option}^^A
+% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit
+% \cs{FamilyKeyState}}^^A
+% \changes{v3.17}{2015/03/09}{interne Speicherung des Wert}^^A
+% Bei \textsf{scrreprt} und \textsf{scrbook} kann per Option eingestellt
+% werden, ob beispielsweise Kapitel nur auf linken oder rechten Seiten
+% beginnen dürfen oder auf jeder Seite.
+% \begin{macro}{\if@openright}
+% \begin{macro}{\@openrighttrue}
+% \begin{macro}{\@openrightfalse}
+% Der Zustand wird dann in einem Schalter und durch umdefinieren von
+% \cs{cleardoublestandardpage} gespeichert. Die Voreinstellungen sind je nach
+% Klasse unterschiedlich.
+% \begin{macrocode}
+%<*class>
+%<*book|report>
+%<*prepare>
+\newif\if@openright
+%<report>\@openrightfalse
+%<book>\@openrighttrue
+%</prepare>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+%<*option>
+\KOMA@key{open}{%
+ \KOMA@set@ncmdkey{open}{@tempa}{%
+ {any}{0},%
+ {right}{1},%
+ {left}{2}%
+ }{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \KOMA@kav@xreplacevalue{.\KOMAClassFileName}{open}{#1}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{openany}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{openright}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{openleft}%
+ \ifcase \@tempa\relax
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{openany}%
+ \@openrightfalse
+ \renewcommand*{\cleardoublestandardpage}{\cleardoubleoddstandardpage}%
+ \or
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{openright}%
+ \@openrighttrue
+ \renewcommand*{\cleardoublestandardpage}{\cleardoubleoddstandardpage}%
+ \or
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{openleft}%
+ \@openrighttrue
+ \renewcommand*{\cleardoublestandardpage}{\cleardoubleevenstandardpage}%
+ \fi
+ \fi
+}
+%</option>
+% \end{macrocode}
+% \changes{v3.18}{2015/05/22}{indirekte Initialisierung}
+% Die Initialisierung erfolgt indirekt über Option \texttt{headings}.
+% \begin{macrocode}
+%<*execoption>
+%<book>\KOMAExecuteOptions{headings=openright}
+%<report>\KOMAExecuteOptions{headings=openany}
+%</execoption>
+% \end{macrocode}
+% \end{option}
+%
+% \begin{option}{openright}
+% \changes{v2.98c}{2008/03/05}{obsolet}^^A
+% \changes{v3.01a}{2008/11/21}{standard statt obsolet}^^A
+% \begin{option}{openany}
+% \changes{v2.98c}{2008/03/05}{obsolet}^^A
+% \changes{v3.01a}{2008/11/21}{standard statt obsolet}^^A
+% Zusätzlich gibt es einige Standardoptionen, die natürlich auch mit
+% \KOMAScript{} funktionieren sollen.
+% \begin{macrocode}
+%<*option>
+\KOMA@DeclareStandardOption{openright}{open=right}
+\KOMA@DeclareStandardOption{openany}{open=any}
+%</option>
+%</book|report>
+%</class>
+% \end{macrocode}
+% \end{option}
+% \end{option}
+%
+%
+% \subsection{Behandlung von Gliederungsnummern}
+%
+% Die Möglichkeit der Nummerierung ist allen Ebenen bis auf \cs{minisec}
+% gemeinsam.
+%
+% \begin{option}{numbers}
+% \changes{v2.98c}{2008/03/07}{Neue Option}^^A
+% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit
+% \cs{FamilyKeyState}}^^A
+% \changes{v3.17}{2015/03/09}{interne Speicherung des Wert}^^A
+% Dies ist die zentrale Option zur Konfiguration der Nummerierung. Dabei geht
+% es primär um die Gliederungsnummern, es sind jedoch auch davon abgeleitete
+% Nummern betroffen.
+% \begin{macro}{\scr@dotchangeatdocument}
+% \changes{v2.98c}{2008/03/07}{Neu (intern)}^^A
+% Da die Umschaltung zwischen automatischem Endpunkt, immer Endpunkt und kein
+% Endpunkt unbedingt \emph{vor} \cs{begin{document}} erfolgen muss, wird eine
+% Fehlermeldung ausgegeben, falls das jemand zu einem späteren Zeitpunkt
+% probiert. Umschaltmöglichkeiten sind auf die Klassen beschränkt.
+% \begin{macrocode}
+%<*class>
+%<*prepare>
+\newcommand*{\scr@dotchangeatdocument}[1]{%
+ \ClassError{\KOMAClassName}{%
+ change of end dot feature after \string\begin{document}%
+ }{%
+ You've tried to set `numbers=#1' after \string\begin{document},\MessageBreak
+ but this option is only allowed at the document preamble.\MessageBreak
+ See KOMA-Script manual for more information about.%
+ }%
+}
+%</prepare>
+% \end{macrocode}
+% \end{macro}
+% Normalerweise wird automatisch entschieden, ob Nummern mit einem
+% Punkt enden müssen oder nicht. Um dies abzuschalten, muss nur der
+% gewünschte Zustand eingeschaltet und die Umschaltmöglichkeit
+% entfernt werden. Die Umschaltung kann jedoch nicht direkt erfolgen, sondern
+% erfolgt zeitverzögert in \cs{begin{document}}. Hier wird nur das Makro
+% umgeschaltet, das dort verwendet wird.
+% \begin{macrocode}
+%<*option>
+\KOMA@key{numbers}{%
+ \KOMA@set@ncmdkey{numbers}{@tempa}{%
+ {autoendperiod}{0},{autoenddot}{0},{auto}{0},%
+ {endperiod}{1},{withendperiod}{1},{periodatend}{1},%
+ {enddot}{1},{withenddot}{1},{dotatend}{1},%
+ {noendperiod}{2},{noperiodatend}{2},%
+ {noenddot}{2},{nodotatend}{2}%
+ }{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \KOMA@kav@xreplacevalue{.\KOMAClassFileName}{numbers}{#1}%
+ \ifcase \@tempa\relax
+ \if@atdocument\scr@dotchangeatdocument{#1}\else
+ \let\scr@altsecnumhook\@empty
+ \fi
+ \or
+ \if@atdocument\scr@dotchangeatdocument{#1}\else
+ \let\scr@altsecnumhook\scr@altsecnumhooktrue
+ \fi
+ \or
+ \if@atdocument\scr@dotchangeatdocument{#1}\else
+ \let\scr@altsecnumhook\scr@altsecnumhookfalse
+ \fi
+ \fi
+ \fi
+}
+%</option>
+%<execoption>\KOMAExecuteOptions{numbers=autoendperiod}
+% \end{macrocode}
+% \end{option}
+%
+% \begin{option}{pointednumbers}
+% \changes{v2.3h}{1995/01/19}{neue Option}^^A
+% \changes{v2.4g}{1996/11/04}{die Option heißt nun wirklich so,
+% bei \texttt{pointednumber} wird explizit ein Fehler gemeldet}
+% \changes{v2.4g}{1996/11/04}{\cs{@altsecnumformatfalse} wird
+% direkt auf \cs{@altsecnumformattrue} gesetzt}
+% \changes{v2.98c}{2008/03/07}{obsolet}^^A
+% \changes{v3.01a}{2008/11/20}{deprecated}^^A
+% \begin{option}{pointlessnumbers}
+% \changes{v2.3h}{1995/01/19}{neue Option}^^A
+% \changes{v2.4g}{1996/11/04}{die Option heißt nun wirklich so,
+% bei \texttt{pointlessnumber} wird explizit ein Fehler gemeldet}
+% \changes{v2.4g}{1996/11/04}{\cs{@altsecnumformattrue} wird direkt
+% auf \cs{@altsecnumformatfalse} gesetzt}
+% \changes{v2.98c}{2008/03/07}{obsolet}^^A
+% \changes{v3.01a}{2008/11/20}{deprecated}^^A
+% Diese Optionens sind nun wirklich veraltet und sollten nicht mehr verwendet
+% werden!
+% \begin{macrocode}
+%<*option>
+\KOMA@DeclareDeprecatedOption{pointednumbers}{numbers=enddot}
+\KOMA@DeclareDeprecatedOption{pointlessnumbers}{numbers=noenddot}
+%</option>
+% \end{macrocode}
+% Übrigens weiß ich, wie blödsinnig die Namen der Optionen sind. Aber
+% das ist nun nicht mehr zu ändern.
+% \end{option}
+% \end{option}
+%
+% \begin{Counter}{secnumdepth}
+% Dieser Zähler gibt an, bis zu welcher Ebene die Gliederungsüberschriften
+% nummeriert werden.
+% \begin{macrocode}
+%<*body>
+%<book|report>\setcounter{secnumdepth}{2}
+%<article>\setcounter{secnumdepth}{3}
+%</body>
+% \end{macrocode}
+% \end{Counter}
+%
+%
+% \begin{macro}{\ifnumbered}
+% \changes{v3.12}{2013/12/16}{new command}^^A
+% \begin{macro}{\ifunnumbered}
+% \changes{v3.12}{2013/12/16}{new command}^^A
+% Test, ob eine Gliederungsebene (\texttt{\#1}) nummeriert wird. Falls das der
+% Fall ist, wird das zweite Argument verwendet, sonst das dritte. Bei
+% \cs{ifunnumbered} ist die Logik genau vertauscht.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\ifnumbered}[1]{%
+ \scr@ifundefinedorrelax{#1numdepth}{%
+ \@secondoftwo
+ }{%
+ \expandafter\ifnum \@nameuse{#1numdepth}>\c@secnumdepth
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+}
+\newcommand*{\ifunnumbered}[1]{%
+ \scr@ifundefinedorrelax{#1numdepth}{%
+ \@firstoftwo
+ }{%
+ \expandafter\ifnum \@nameuse{#1numdepth}>\c@secnumdepth
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }%
+}
+%</body>
+%</class>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{\KOMAScript-eigene Befehle zur Definition von
+% Gliederungsbefehlen}
+%
+% Die Funktionalität des \LaTeX-Kerns genügt \KOMAScript{} bei der Definition
+% von Gliederungsebenen nicht.
+%
+% \begin{macro}{\scr@activate@xsection}
+% \changes{v3.10}{2011/08/30}{neu (intern)}^^A
+% Hiermit wird die Erweiterung für das optionale Argument der
+% Gliederungsbefehle eingeschaltet.
+% \begin{macro}{\scr@osectarg}^^A
+% Für die nicht per \cs{@startsection} implementierten Befehle geht das
+% einfach durch Umschaltung von \cs{scr@osectarg}. Bei 0 ist die Aktivierung
+% nicht aktiv. Bei 1 landet das optionale Argument hingegen im Kopf, bei 2
+% im Inhaltsverzeichnis und bei 3 in beiden. Die Voreinstellung ist deshalb
+% ebenfalls 0.
+%
+% Da Option \texttt{headings} darauf zurückgreift, müssen die beiden Makros
+% bereits vorab definiert werden.
+% \begin{macrocode}
+%<*class>
+%<*prepare>
+\newcommand*{\scr@osectarg}{0}
+\newcommand*{\scr@activate@xsection}[1]{%
+ \renewcommand*{\scr@osectarg}{#1}%
+}
+%</prepare>
+%</class>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\if@altsecnumformat}
+% \changes{v2.3c}{1995/08/06}{neuer Schalter}^^A
+% \begin{macro}{\@altsecnumformattrue}
+% \begin{macro}{\@altsecnumformatfalse}
+% Dieses Schalter wird für die Umschaltung auf Duden-Regel~6 bei der
+% Numerierung benötigt.
+% \begin{macro}{\if@autodot}
+% \changes{v2.8e}{2001/07/10}{neuer Schalter}^^A
+% \begin{macro}{\@autodottrue}
+% \changes{v3.00}{2008/10/07}{arbeitet nun gobal}^^A
+% \begin{macro}{\@autodotfalse}
+% \changes{v3.00}{2008/10/07}{arbeitet nun gobal}^^A
+% Nach Duden 20.~Auflage, Regel~5 wird in der Gliederung kein Punkt gesetzt,
+% wenn diese rein mit arabischen Zahlen erfolgt. Nach Regel~6 folgt jedoch ein
+% Punkt, wenn die Gliederung auch römische Zahlen oder Großbuchstaben
+% enthält. Aus Konsistenzgründen muss der Punkt in diesem Fall immer gesetzt
+% werden. \KOMAScript{} bietet dafür einen Automatismus.
+%
+% Damit die Umschaltung auch wieder zurück auf Regel~5 automatisch erfolgen
+% kann, wird ein zweiter Schalter benötigt.
+% \begin{macrocode}
+%<*class>
+%<*prepare>
+\newif\if@altsecnumformat\@altsecnumformatfalse
+\newif\if@autodot
+\renewcommand*{\@autodottrue}{\global\let\if@autodot\iftrue}
+\renewcommand*{\@autodotfalse}{\global\let\if@autodot\iffalse}
+\@autodotfalse
+%</prepare>
+% \end{macrocode}
+% Dabei soll die Umstellung des Punktes beim zweiten TeX-Lauf bereits am
+% Anfang aktiv sein. Deshalb wird die Information am Ende in die aux-Datei
+% geschrieben.
+% \changes{v2.9k}{2003/01/12}{es wird direkt in \cs{@mainaux} geschrieben}^^A
+% \changes{v2.95}{2004/01/15}{es wird erst unmittelbar vor dem Schließen
+% der Haupt-aux-Datei in diese geschrieben}^^A
+% \changes{v2.96a}{2006/12/07}{es wird \cs{immediate} geschrieben}^^A
+% \changes{v3.20}{2016/03/25}{es wird \cs{csname}\dots\cs{endcsname}
+% verwendet}^^A
+% \begin{macrocode}
+%<*body>
+\BeforeClosingMainAux{%
+ \if@autodot\if@filesw\immediate\write\@mainaux{%
+ \string\global\string\csname\space @altsecnumformattrue\string\endcsname}%
+ \fi\fi}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@autodotfalse
+% \end{macro}^^A \@autodottrue
+% \end{macro}^^A \if@autodot
+% \end{macro}^^A \@altsecnumformatfalse
+% \end{macro}^^A \@altsecnumformattrue
+% \end{macro}^^A \if@altsecnumformat
+%
+% \begin{macro}{\scr@altsecnumhook}
+% \changes{v2.98c}{2008/03/07}{Neu (intern)}^^A
+% \begin{macro}{\scr@altsecnumhooktrue}
+% \changes{v2.98c}{2008/03/07}{Neu (intern)}^^A
+% \begin{macro}{\scr@altsecnumhookfalse}
+% \changes{v2.98c}{2008/03/07}{Neu (intern)}^^A
+% Es werden drei Hilfsmakros benötigt. Das erste davon wird bei
+% \cs{begin{document}} ausgeführt (nachdem die \texttt{aux}-Datei gelesen
+% wurde!) und schaltet den gewünschten Zustand ein. Dazu wird es per Option
+% ggf. auf die eine oder andere Bedeutung umgeschaltet. Im Auto-Fall ist es
+% übrigens \cs{@empty}.
+% \begin{macrocode}
+%<*prepare>
+\newcommand*{\scr@altsecnumhook}{}
+\AtBeginDocument{\scr@altsecnumhook}
+\newcommand*{\scr@altsecnumhooktrue}{%
+ \@altsecnumformattrue\global\let\@altsecnumformatfalse\@altsecnumformattrue
+}
+\newcommand*{\scr@altsecnumhookfalse}{%
+ \@altsecnumformatfalse\global\let\@altsecnumformattrue\@altsecnumformatfalse
+}
+%</prepare>
+% \end{macrocode}
+% \end{macro}^^A \scr@altsecnumhooktrue
+% \end{macro}^^A \scr@altsecnumhookfalse
+% \end{macro}^^A \scr@altsecnumhook
+%
+% \begin{macro}{\@maybeautodot}
+% \changes{v2.8e}{2001/07/10}{neu (intern)}^^A
+% Ob der automatische Punkt aktiviert werden muss, wird aufgrund der
+% Darstellung eines Zählers entschieden. Diese wird dem Makro als Argument
+% übergeben (\cs{thepart}, \cs{thechapter} etc.). Durch Verwendung einer
+% Gruppe, werden alle Definitionen lokal gehalten.
+% \begin{macrocode}
+%<*body>
+\newcommand{\@maybeautodot}[1]{\if@autodot\else\begingroup%
+ \expandafter\@@maybeautodot #1\@stop\endgroup\fi
+}
+% \end{macrocode}
+% \begin{macro}{\@@maybeautodot}
+% \changes{v2.8e}{2001/07/10}{neu (intern)}^^A
+% \changes{v3.00}{2008/10/07}{neuerdings überflüssige \cs{aftergroup}^^A
+% entfernt}^^A
+% Die expandierte Darstellung wird dann auf Darstellungsbefehle für
+% Zähler gescannt.
+% \begin{macrocode}
+\newcommand*{\@@maybeautodot}[1]{%
+ \ifx #1\@stop\let\@@maybeautodot\relax
+ \else
+ \ifx #1\Alph \@autodottrue\fi
+ \ifx #1\alph \@autodottrue\fi
+ \ifx #1\Roman \@autodottrue\fi
+ \ifx #1\roman \@autodottrue\fi
+ \ifx #1\@Alph \@autodottrue\fi
+ \ifx #1\@alph \@autodottrue\fi
+ \ifx #1\@Roman \@autodottrue\fi
+ \ifx #1\@roman \@autodottrue\fi
+ \ifx #1\romannumeral \@autodottrue\fi
+ \fi
+ \@@maybeautodot
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@@maybeautodot
+% \end{macro}^^A \@maybeautodot
+%
+% \begin{macro}{\autodot}
+% \changes{v2.7}{2001/01/03}{neu}^^A
+% Dieses Makro setzt dann den Punkt nach Bedarf.
+% \begin{macrocode}
+%<*body>
+\newcommand*\autodot{\if@altsecnumformat.\fi}
+%</body>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@startsection}
+% \changes{v3.13a}{2014/09/11}{Vollständige Neudefinition zur Optimierung
+% der Erweiterung für das optionale Argument}^^A
+% \begin{macro}{\scr@startsection}
+% \changes{v3.13a}{2014/09/11}{Neue interne Anweisung}^^A
+% \changes{v3.18}{2015/05/22}{verwende \cs{numexpr} für Argument 2}
+% \changes{v3.18}{2015/05/22}{verwende \cs{glueexpr} für Argument 3--5}
+% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
+% ersetzt}^^A
+% \changes{v3.26}{2018/09/18}{\texttt{afterindent}-Einstellung wird
+% beachtet}^^A
+% \begin{macro}{\scr@saved@startsection}
+% \changes{v3.13a}{2014/09/11}{Neue interne Anweisung}^^A
+% \changes{v3.20}{2016/04/12}{Tests funktionieren jetzt auch mit
+% \textsf{amsgen}}^^A
+% \KOMAScript{} benötigt ein eigenes \cs{@startsection}, weil die
+% Funktionalität des \cs{@startsection} aus dem \LaTeX-Kern nicht
+% genügt. Bevor allerdings die eigene Definition in Angriff genommen wird,
+% muss kontrolliert werden, ob die aufgefundene Definition noch den
+% Erwartungen entspricht. Alles andere wäre ein deutlicher Hinweis, dass
+% eventuell in \KOMAScript{} ebenfalls eine Anpassung vorzunehmen wäre.
+% Da es offenbar Leute gibt, die bei der Umdefinierung von \cs{section}
+% etc. mit Hilfe von \cs{@startsection} Leerzeichen zwischen die Argumente
+% packen und gleichzeitig \textsf{amsgen} verwenden, sorgen wir hier dafür,
+% dass dann trotzdem noch die Warnungen funktionieren und nebenbei der Code
+% mit etwas Glück sogar ebenfalls. Dazu ist es notwendig, dass die Version von
+% \cs{@startsection} gespeichert wird, die \cs{kernel@ifstar} verwendet.
+% \begin{macro}{\startsection@sectionname}
+% \changes{v3.26}{2018/05/14}{Neue Anweisung für Paketautoren}^^A
+% \begin{macro}{\startsection@secnumdepth}
+% \changes{v3.26}{2018/05/14}{Neue Anweisung für Paketautoren}^^A
+% \begin{macro}{\startsection@indent}
+% \changes{v3.26}{2018/05/14}{Neue Anweisung für Paketautoren}^^A
+% \begin{macro}{\startsection@beforeskip}
+% \changes{v3.26}{2018/05/14}{Neue Anweisung für Paketautoren}^^A
+% \begin{macro}{\startsection@afterskip}
+% \changes{v3.26}{2018/05/14}{Neue Anweisung für Paketautoren}^^A
+% \begin{macro}{\if@startsection@runin}
+% \changes{v3.26}{2018/05/14}{Neue Anweisung für Paketautoren}^^A
+% \begin{macro}{\startsection@afterindent}
+% \changes{v3.26}{2018/09/18}{Neue Anweisung für Paketautoren}^^A
+% Ab dem Zeitpunkt des Aufrufs des Hooks \cs{scr@startsection@hook} sind die
+% Makros \cs{startsection@sectionname}, \cs{startsection@secnumdepth},
+% \cs{startsection@indent}, \cs{startsection@beforeskip},
+% \cs{if@startsection@indentafter}, \cs{startsection@afterskip},
+% \cs{if@startsection@runin} und \cs{startsection@afterindent} gültig. Die
+% \cs{\dots indent}- und \cs{\dots skip}-Makros sind dabei skips (oder
+% \cs{glueexpr}) und somit wie Längen verwendbar. Bei den beiden \cs{\dots
+% skip}-Makros handelt es sich bereits um effektive Abstände, es wurden also
+% etwaige Fallunterscheidungen bezüglich des Vorzeichens des Arguments für
+% \cs{scr@startsection} bereits aufgelöst. Das \cs{if\dots}-Makro ist entweder
+% \cs{iftrue} oder \cs{iffalse}. Ein \cs{if@startsection@afterindent}
+% existiert nicht, weil \cs{if@afterindent} zu dem Zeitpunkt bereits gültig
+% ist. Außerhalb von \cs{scr@startsection} ist die Verwendung dieser Macros
+% unzulässig, bzw. das Ergebnis unspezifiziert. Ebenso sind diese Macros als
+% \emph{read-only} zu betrachten!
+% \begin{macrocode}
+%<*body>
+\newcommand*{\scr@saved@startsection}[6]{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \kernel@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
+}
+\def\reserved@a#1#2#3#4#5#6{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
+}
+\ifcase \ifx\@startsection\scr@saved@startsection 0
+ \else
+ \ifx\@startsection\reserved@a 0
+ \else 1
+ \fi
+ \fi
+ \newcommand*{\scr@startsection}[6]{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa \glueexpr #4\relax
+ \@ifundefined{scr@#1@afterindent}{%
+ \def\startsection@afterindent##1##2##3{##3}%
+ }{%
+ \expandafter\let\expandafter\startsection@afterindent
+ \csname scr@#1@afterindent\endcsname
+ }%
+ \startsection@afterindent{\@afterindenttrue}{\@afterindentfalse}{%
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ }%
+ \def\startsection@sectionname{#1}%
+ \def\startsection@secnumdepth{\numexpr #2\relax}%
+ \def\startsection@indent{\glueexpr #3\relax}%
+ \let\startsection@beforeskip\@tempskipa
+ \@ifundefined{scr@#1@runin}{%
+ \def\scr@sect@runin##1##2##3{##3}%
+ }{%
+ \expandafter\let\expandafter\scr@sect@runin
+ \csname scr@#1@runin\endcsname
+ }%
+ \scr@sect@runin{%
+ \def\startsection@afterskip{\glueexpr #3\relax}%
+ \expandafter\let\csname if@startsection@runin\expandafter\endcsname
+ \csname iftrue\endcsname
+ }{%
+ \def\startsection@afterskip{\glueexpr #3\relax}%
+ \expandafter\let\csname if@startsection@runin\expandafter\endcsname
+ \csname iffalse\endcsname
+ }{%
+ \ifdim \glueexpr #5\relax <\z@
+ \def\startsection@afterskip{\glueexpr (#3)*\m@ne\relax}%
+ \expandafter\let\csname if@startsection@runin\expandafter\endcsname
+ \csname iftrue\endcsname
+ \else
+ \def\startsection@afterskip{\glueexpr #3\relax}%
+ \expandafter\let\csname if@startsection@runin\expandafter\endcsname
+ \csname iffalse\endcsname
+ \fi
+ }%
+ \csname scr@startsection@hook\endcsname
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \kernel@ifstar {%
+ \csname scr@preto@ssect@hook\endcsname
+ \def\scr@s@ct@@nn@m@{#1}%
+ \@ssect{\glueexpr #3\relax}{\glueexpr #4\relax}{\glueexpr #5\relax}{#6}%
+ }{%
+ \csname scr@preto@sect@hook\endcsname
+ \scr@section@dblarg{%
+ \@sect{#1}{\numexpr #2\relax}{\glueexpr #3\relax}{\glueexpr #4\relax}%
+ {\glueexpr #5\relax}{#6}%
+ }%
+ }%
+ }
+\else
+ \ClassWarningNoLine{\KOMAClassName}{`\string\@startsection' has been
+ changed.\MessageBreak
+ \KOMAClassName\space needs it's own Definition of
+ `\string\@startsection'\MessageBreak
+ to provide extended features for the optional argument\MessageBreak
+ of `\string\section` etc.\MessageBreak
+ Generally it defines `\string\@startsection` completely new\MessageBreak
+ to achieve this. Because of the unexpected definition\MessageBreak
+ an alternative approach will be used.\MessageBreak
+ If this fails and if there isn't a new release of\MessageBreak
+ KOMA-Script that fixes the problem, please\MessageBreak
+ send a report to the KOMA-Script author.\MessageBreak
+ Note, that this alternative approach does not\MessageBreak
+ execute `\string\scr@startsection@hook',\MessageBreak
+ `\string\scr@preto@ssect@hook', or
+ `\string\scr@preto@sect@hook'\MessageBreak
+ and does always use `runin=bysign' and\MessageBreak
+ `afterindent=bysign'%
+ }%
+ \let\scr@saved@startsection\@startsection
+ \newcommand*{\scr@startsection}[6]{%
+ \kernel@ifstar {%
+ \scr@saved@startsection{#1}{\numexpr #2\relax}{\glueexpr #3\relax}%
+ {\glueexpr #4\relax}{\glueexpr #5\relax}{#6}*%
+ }{%
+ \scr@section@dblarg{%
+ \scr@saved@startsection{#1}{\numexpr #2\relax}{\glueexpr #3\relax}%
+ {\glueexpr #4\relax}{\glueexpr #5\relax}{#6}}%
+ }%
+ }
+\fi
+% \end{macrocode}
+% \begin{macro}{\scr@sect@runin}
+% \changes{v3.26}{2018/09/18}{neu (intern)}
+% Diese Hilfsanweisung nimmt die Fallunterscheidung vor, ob eine Spitzmarke
+% oder eine freistehende Überschrift oder abhängig vom Vorzeichen des
+% Abstandes danach eine Spitzmarke oder eine freistehende Überschrift gesetzt
+% werden soll. Die Voreinstellung ist sicherheitshalber letzteres. Diese
+% Voreinstellung wird auch bei jedem Aufruf von \cs{@xsect} erneut
+% erzwungen. Auch in \cs{scr@startsection} wird die Anweisung angepasst.
+% \begin{macrocode}
+\newcommand*{\scr@sect@runin}[3]{#3}
+% \end{macrocode}
+% \end{macro}^^A \scr@sect@runin
+% \begin{macro}{\scr@startsection@ulm@error}
+% \changes{v3.26}{2018/05/14}{Neue interne Anweisung}
+% Ich bin mir bewusst, dass die Fehlerausgabe, die hier definiert wird,
+% vermutlich nie aufgerufen wird, da ein Paketautor hierzu eines der Makros
+% bereits vor dem ersten \cs{scr@startsection}-Befehl verwenden
+% müsste. Trotzdem verwende ich es quasi zwecks Initialisierung.
+% \begin{macrocode}
+\newcommand*{\scr@startsection@ulm@error}[1]{%
+ \ClassError{\KOMAClassName}{%
+ \string#1 undefined outside of \string\scr@startsection
+ }{%
+ A KOMA-Script macro for package authors have been used outside
+ the\MessageBreak
+ specified definition scope.\MessageBreak
+ See `scrkernel-sections.dtx' for more information.%
+ }%
+}
+\newcommand*\startsection@sectionname{%
+ \scr@startsection@ulm@error\startsection@sectionname}
+\newcommand*\startsection@secnumdepth{%
+ \scr@startsection@ulm@error\startsection@secnumdepth}
+\newcommand*\startsection@indent{%
+ \scr@startsection@ulm@error\startsection@indent}
+\newcommand*\startsection@beforeskip{%
+ \scr@startsection@ulm@error\startsection@beforeskip}
+\newcommand*\startsection@afterskip{%
+ \scr@startsection@ulm@error\startsection@afterskip}
+\newcommand*{\if@startsection@runin}{%
+ \scr@startsection@ulm@error\if@startsection@runin}
+\newif\if@startsection@runin
+\newcommand*\startsection@afterindent{%
+ \scr@startsection@ulm@error\startsection@afterindent}
+% \end{macrocode}
+% \end{macro}^^A \scr@startsection@ulm@error
+% \end{macro}^^A \scr@startsection@afterindent
+% \end{macro}^^A \if@startsection@runin
+% \end{macro}^^A \startsection@afterskip
+% \end{macro}^^A \startsection@beforeskip
+% \end{macro}^^A \startsection@indent
+% \end{macro}^^A \startsection@secnumdepth
+% \end{macro}^^A \startsection@sectionname
+% \begin{macro}{\At@startsection}
+% \changes{v3.14}{2014/09/11}{Neue Anweisung für Paketautoren}^^A
+% Mit Hilfe dieser Anweisung kann Code in die Ausführung von \KOMAScript's
+% eigenem \cs{scr@startsection} an der Stelle eingefügt werden, an der
+% \cs{if@afterindent} und \cs{@tempskipa} bereits korrekt eingestellt sind,
+% aber noch bevor \emph{pentaly} und Abstand gesetzt wurden bzw. \cs{everypar}
+% gelöscht wurde.
+% \begin{macrocode}
+\newcommand*{\At@startsection}[1]{%
+ \@ifundefined{scr@startsection@hook}{\let\scr@startsection@hook\@empty}{}%
+ \l@addto@macro{\scr@startsection@hook}{#1}%
+}
+% \end{macrocode}
+% \end{macro}^^A \At@startsection
+% \begin{macro}{\Before@ssect}
+% \changes{v3.14}{2014/09/11}{Neue Anweisung für Paketautoren}^^A
+% Mit Hilfe dieser Anweisung kann Code in die Ausführung von \KOMAScript's
+% eigenem \cs{scr@startsection} unmittelbar vor dem Aufruf von \cs{@ssect}
+% eingefügt werden.
+% \begin{macrocode}
+\newcommand*{\Before@ssect}[1]{%
+ \@ifundefined{scr@preto@ssect@hook}{\let\scr@preto@ssect@hook\@empty}{}%
+ \l@addto@macro{\scr@preto@ssect@hook}{#1}%
+}
+% \end{macrocode}
+% \end{macro}^^A \Before@ssect
+% \begin{macro}{\Before@sect}
+% \changes{v3.14}{2014/09/11}{Neue Anweisung für Paketautoren}^^A
+% Mit Hilfe dieser Anweisung kann Code in die Ausführung von \KOMAScript's
+% eigenem \cs{scr@startsection} unmittelbar vor dem Aufruf von \cs{@sect}
+% eingefügt werden.
+% \begin{macrocode}
+\newcommand*{\Before@sect}[1]{%
+ \@ifundefined{scr@preto@sect@hook}{\let\scr@preto@sect@hook\@empty}{}%
+ \l@addto@macro{\scr@preto@sect@hook}{#1}%
+}
+% \end{macrocode}
+% \end{macro}^^A \Before@sect
+% \begin{macro}{\scr@section@dblarg}
+% \changes{v3.13a}{2014/09/11}{Neue interne Anweisung}^^A
+% \begin{macro}{\scr@section@xdblarg}
+% \changes{v3.13a}{2014/09/11}{Neue interne Anweisung}^^A
+% \begin{macrocode}
+\newcommand{\scr@section@dblarg}[1]{%
+ \kernel@ifnextchar[%]
+ {#1}%
+ {\scr@section@xdblarg{#1}}%
+}
+\newcommand{\scr@section@xdblarg}[2]{%
+ \begingroup
+ \edef\reserved@a{%
+ \unexpanded{\endgroup\let\scr@osectarg\z@#1[{#2}]{#2}\def\scr@osectarg}%
+ {\scr@osectarg}}%
+ \reserved@a
+}
+% \end{macrocode}
+% \end{macro}%^^A \scr@section@xdblarg
+% \end{macro}%^^A \scr@section@dblarg
+% \end{macro}%^^A \scr@saved@startsection
+% \end{macro}%^^A \scr@startsection
+% \begin{macrocode}
+\renewcommand*{\@startsection}{%
+ \ifnum \scr@osectarg=\z@
+ \expandafter\scr@saved@startsection
+ \else
+ \expandafter\scr@startsection
+ \fi
+}
+%</body>
+% \end{macrocode}
+% \end{macro}%^^A \@startsection
+%
+%
+% \begin{macro}{\SecDef}
+% \changes{v3.13a}{2014/09/11}{neue Anweisung}^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
+% ersetzt}^^A
+% \begin{macro}{\secdef}
+% \changes{v3.13a}{2014/09/11}{Vollständige Neudefinition zur Optimierung
+% der Erweiterung für das optionale Argument}^^A
+% \begin{macrocode}
+%<*body>
+\newcommand*{\SecDef}[2]{\kernel@ifstar{#2}{\scr@section@dblarg{#1}}}
+\CheckCommand*{\secdef}[2]{\@ifstar{#2}{\@dblarg{#1}}}
+\let\secdef\SecDef
+%</body>
+% \end{macrocode}
+% \end{macro}%^^A \secdef
+% \end{macro}%^^A \SecDef
+% \begin{macro}{\scr@sect}
+% \changes{v3.10}{2011/08/30}{entfällt}^^A
+% \begin{macro}{\@sect}
+% \changes{v3.10}{2011/08/30}{Vollständige Neudefinition zur Realisierung
+% der Erweiterung für das optionale Argument}^^A
+% \changes{v3.10}{2011/08/30}{Verwendung von
+% \cs{csname}\texttt{add\#1tocentry}\cs{endcsname}
+% bzw. \cs{addtocentrydefault}}^^A
+% \changes{v3.18}{2015/05/20}{definiert \cs{IfUsePrefixLine} intern}^^A
+% \changes{v3.18}{2015/05/22}{Verwendung von \cs{numexpr} für Argument 2}^^A
+% \changes{v3.18}{2015/05/22}{Verwendung von \cs{gluexpr} für Argument
+% 3--5}^^A
+% \changes{v3.19}{2015/07/17}{Verwendung von \cs{sectionlinesformat} und
+% \cs{sectioncatchphraseformat}}^^A
+% Damit auch alle mit \cs{@startsection} definierten Gliederungsebenen
+% bei der Entscheidung berücksichtigt werden, muss ein internes Makro
+% des \LaTeX-Kerns erweitert werden. Für die Ebenen \cs{part} und
+% \cs{chapter} wird der Test direkt in der Definition der Befehle
+% erledigt.
+% \begin{macrocode}
+%<*body>
+\def\@tempa#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{\@seccntformat{#1}\relax}%
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #6{%
+ \@hangfrom{\hskip #3\relax\@svsec}%
+ \interlinepenalty \@M #8\@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}%
+ \else
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec #8}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}}%
+ \fi
+ \@xsect{#5}}
+\ifx\@sect\@tempa\else
+ \ClassWarning{\KOMAClassName}{%
+ Unexpected definition of \string\@sect!\MessageBreak
+ Please send information about this to\MessageBreak
+ the KOMA-Script maintainer!\MessageBreak
+ Maybe LaTeX will be broken by the redefinition\MessageBreak
+ of \string\@sect\space}%
+\fi
+%<trace>\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro \string\@sect}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum \scr@osectarg=\z@
+ \@scr@tempswafalse
+ \else
+ \scr@istest#7=\@nil
+ \fi
+ \if@scr@tempswa
+ \setkeys{KOMAarg.section}{tocentry={#8},head={#8},reference={#8},#7}%
+ \else
+ \ifcase \scr@osectarg\relax
+ \setkeys{KOMAarg.section}{tocentry={#7},head={#7},reference={#7}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#8},head={#7},reference={#8}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#7},head={#8},reference={#7}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#7},head={#7},reference={#7}}%
+ \fi
+ \fi
+% \end{macrocode}
+% \changes{v3.23}{2017/02/04}{support for \textsf{minitoc}}^^A
+% \changes{v3.23}{2017/03/24}{usage of \cs{ext@figure} and \cs{ext@table}
+% instead of \texttt{lof} and \texttt{lot}}^^A
+% Add the \texttt{xsect} entries to \texttt{lof} and \texttt{lot}. Note, that
+% the original \cs{starsection} tests of \textsf{minitoc} has a bug and so
+% does not work. And the original code of \textsf{minitoc} has hard coded
+% \texttt{lot} and \texttt{lof} instead of \cs{ext@figure} and
+% \cs{ext@table}. This is a fixed one:
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{scr@mt@saved@sect}{}{%
+ \expandafter\ifx\csname #1\endcsname\section
+ \addcontentsline{\ext@figure}{xsect}{\@currenttocentry}%
+ \addcontentsline{\ext@table}{xsect}{\@currenttocentry}%
+ \fi
+ \expandafter\ifx\csname #1\endcsname\starsection\relax
+ \addcontentsline{\ext@figure}{xsect}{\@currenttocentry}%
+ \addcontentsline{\ext@table}{xsect}{\@currenttocentry}%
+ \fi
+ }%
+ \let\IfUsePrefixLine\@secondoftwo
+ \ifnum \numexpr #2\relax>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \expandafter\@maybeautodot\csname the#1\endcsname
+ \protected@edef\@svsec{\@seccntformat{#1}\relax}%
+ \fi
+% \end{macrocode}
+% \changes{v3.26}{2018/09/18}{\cs{scr@sect@runin} beachten}^^A
+% Falls \cs{scr@sect@runin} nicht definiert ist, wird es jetzt höchste Zeit
+% dafür. Und natürlich nutzen wir es dann für die Entscheidung Spitzmarke oder
+% nicht.
+% \begin{macrocode}
+ \ifdim
+ \scr@sect@runin{\z@}{\p@}{\glueexpr #5\relax}>\z@
+ \begingroup
+% \end{macrocode}
+% \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}^^A
+% Das Farbänderungen im Schriftargument erlaubt sein sollen und diese aktuelle
+% \cs{penalty}-Werte wieder aufheben, verbiete ich hier einen Umbruch nach
+% der Fontänderung.
+% \begin{macrocode}
+ #6{\nobreak\interlinepenalty \@M
+ \sectionlinesformat{#1}{\glueexpr #3\relax}\@svsec{#8}\@@par}%
+ \endgroup
+%<*trace>
+ \ClassInfo{\KOMAClassName}{%
+ head=`\detokenize\expandafter{\@currentheadentry}'\MessageBreak
+ tocentry=`\detokenize\expandafter{\@currenttocentry}'\MessageBreak
+ reference=`\detokenize\expandafter{\@currentlabelname}'}%
+%</trace>
+ \expandafter\csname #1mark\expandafter\endcsname\expandafter{\@currentheadentry}%
+ \ifx\@currenttocentry\@empty\else
+ \scr@ifundefinedorrelax{add#1tocentry}{%
+ \expandafter\global\expandafter\def
+ \csname add#1tocentry\endcsname##1##2{%
+ \addtocentrydefault{#1}{##1}{##2}%
+ }%
+ }{}%
+ \ifnum \numexpr #2\relax>\c@secnumdepth
+ \csname add#1tocentry\endcsname{}{\@currenttocentry}%
+ \else
+ \csname add#1tocentry\endcsname{\csname the#1\endcsname}{%
+ \@currenttocentry}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}^^A
+% Da Farbänderungen im Schriftargument erlaubt sein sollen und diese aktuelle
+% \cs{penalty}-Werte wieder aufheben, verbiete ich hier einen Umbruch nach
+% der Fontänderung.
+% \begin{macrocode}
+ \def\@svsechd{%
+ #6{\nobreak\sectioncatchphraseformat{#1}{\glueexpr #3\relax}\@svsec{#8}}%
+%<*trace>
+ \ClassInfo{\KOMAClassName}{%
+ head=`\detokenize\expandafter{\@currentheadentry}'\MessageBreak
+ tocentry=`\detokenize\expandafter{\@currenttocentry}'\MessageBreak
+ reference=`\detokenize\expandafter{\@currentlabelname}'}%
+%</trace>
+ \expandafter\csname #1mark\expandafter\endcsname
+ \expandafter{\@currentheadentry}%
+ \ifx\@currenttocentry\@empty\else
+ \scr@ifundefinedorrelax{add#1tocentry}{%
+ \expandafter\global\expandafter\def
+ \csname add#1tocentry\endcsname####1####2{%
+ \addtocentrydefault{#1}{####1}{####2}%
+ }%
+ }{}%
+ \ifnum \numexpr #2\relax>\c@secnumdepth
+ \csname add#1tocentry\endcsname{}{\@currenttocentry}%
+ \else
+ \csname add#1tocentry\endcsname{\csname the#1\endcsname}{%
+ \@currenttocentry}%
+ \fi
+ \fi
+ }%
+ \fi
+ \let\IfUsePrefixLine\scr@IfUsePrefixLineWarning
+ \@xsect{\glueexpr #5\relax}%
+}
+% \end{macrocode}
+% \begin{macro}{\scr@ds@tocentry}
+% \changes{v3.10}{2011/08/30}{neu (intern)}^^A
+% \begin{macro}{\@currenttocentry}
+% \changes{v3.22}{2016/07/12}{\cs{scr@ds@tocentry} (semi-intern)
+% umbenannt}^^A
+% \begin{macro}{\scr@ds@head}
+% \changes{v3.10}{2011/08/30}{neu (intern)}^^A
+% \begin{macro}{\@currentheadentry}
+% \changes{v3.22}{2016/07/12}{\cs{scr@ds@head} (semi-intern)
+% umbenannt}^^A
+% \begin{macro}{\@currentlabelname}
+% \changes{v3.22}{2016/07/12}{neu (semi-intern)}
+% \begin{macro}{\if@scr@tempswa}
+% \changes{v3.10}{2011/08/30}{neu (intern)}^^A
+% \begin{macro}{\scr@istest}
+% \changes{v3.10}{2011/08/30}{neu (intern)}^^A
+% Für die Realisierung werden noch ein paar Key-Value-Definitionen und ein
+% paar Hilfsmakros benötigt:
+% \begin{macrocode}
+\DefineFamily{KOMAarg}
+\DefineFamilyMember[.section]{KOMAarg}
+\providecommand*\@currenttocentry{}
+\providecommand*\@currentheadentry{}
+\providecommand*\@currentlabelname{}
+\FamilyStringKey[.section]{KOMAarg}{tocentry}{\@currenttocentry}
+\FamilyStringKey[.section]{KOMAarg}{head}{\@currentheadentry}
+\DefineFamilyKey[.section]{KOMAarg}{reference}{%
+ \scr@ifundefinedorrelax{NR@gettitle}{%
+ \scr@ifundefinedorrelax{GetTitleString}{%
+ \def\@currentlabelname{#1}%
+ }{%
+ \GetTitleString{#1}%
+ \let\@currentlabelname\GetTitleStringResult
+ }%
+ }{%
+ \NR@gettitle{#1}%
+ }%
+ \scr@ifundefinedorrelax{TR@gettitle}{}{%
+ \expandafter\TR@gettitle\expandafter{\@currentlabelname}%
+ }%
+ \scr@ifundefinedorrelax{ztitlerefsetup}{}{%
+ \ztitlerefsetup{title=\@currentlabelname}%
+ }%
+ \FamilyKeyStateProcessed
+}
+\newcommand*{\scr@istest}{}
+\def\scr@istest#1=#2\@nil{%
+ \ifx\relax#2\relax\@scr@tempswafalse\else\@scr@tempswatrue\fi
+}
+\newif\if@scr@tempswa
+% \end{macrocode}
+% \end{macro}^^A \scr@istest
+% \end{macro}^^A \if@scr@tempswa
+% \end{macro}^^A \@currentlabelname
+% \end{macro}^^A \@currentheadentry
+% \end{macro}^^A \scr@ds@head
+% \end{macro}^^A \@currenttocentry
+% \end{macro}^^A \scr@ds@tocentry
+% \begin{macro}{\sectionlinesformat}
+% \changes{v3.19}{2015/07/17}{neue Anweisung}^^A
+% Diese Anweisung definiert das Format der eigentlichen Überschriften im Stil
+% \texttt{section}, wenn mit Überschriftenzeilen gearbeitet
+% wird. Fonteinstellungen sind zu diesem Zeitpunkt bereits erfolgt. Die
+% Argumente sind:
+% \begin{description}
+% \item[\meta{Ebene} --] der Name der Gliederungebene
+% \item[\meta{Einzug} --] ein eventuell zu verwendender horizontaler
+% Einzug.
+% \item[\meta{Gliederungsnummer} --] die bereits fertig formatierte
+% Gliederungsnummer oder leer, falls keine Gliederungsnummer auszugeben ist.
+% \item[\meta{Text} --] der Text der Überschrift.
+% \end{description}
+% Der Anwender ist selbst verantwortlich, dass innerhalb der Überschrift kein
+% Seitenumbruch erfolgen kann. Nach der Überschrift wird jedoch zwangsweise
+% ein \cs{@@par} ausgeführt, so dass sichergestellt ist, dass mit einem
+% internen Absatz abgeschlossen wird.
+% \begin{macrocode}
+\newcommand{\sectionlinesformat}[4]{%
+ \@hangfrom{\hskip #2#3}{#4}%
+}
+% \end{macrocode}
+% \end{macro}^^A \sectionlinesformat
+% \begin{macro}{\sectioncatchphraseformat}
+% \changes{v3.19}{2015/07/17}{neue Anweisung}^^A
+% Diese Anweisung definiert das Format der eigentlichen Überschriften im
+% Stil \texttt{section}, wenn mit Spitzmarken gearbeitet
+% wird. Fonteinstellungen sind zu diesem Zeitpunkt bereits erfolgt. Die
+% Argumente sind:
+% \begin{description}
+% \item[\meta{Ebene} --] der Name der Gliederungebene
+% \item[\meta{Einzug} --] ein eventuell zu verwendender horizontaler
+% Einzug.
+% \item[\meta{Gliederungsnummer} --] die bereits fertig formatierte
+% Gliederungsnummer oder leer, falls keine Gliederungsnummer auszugeben
+% ist.
+% \item[\meta{Text} --] der Text der Überschrift.
+% \end{description}
+% Der Anwender ist selbst verantwortlich, dass innerhalb der Überschrift kein
+% Seitenumbruch erfolgen kann.
+% \begin{macrocode}
+\newcommand{\sectioncatchphraseformat}[4]{%
+ \hskip #2#3#4%
+}
+% \end{macrocode}
+% \end{macro}^^A \sectioncatchphraseformat
+% \end{macro}^^A \@sect
+% \end{macro}^^A \scr@sect
+%
+% \begin{macro}{\@ssect}
+% \changes{v3.19}{2015/07/17}{Vollständige Neudefinition zur Realisierung
+% der Erweiterung für die Formatieurng der Überschrift}^^A
+% Das wird für Überschriften ohne Nummer verwendet. Im Prinzip machen wir hier
+% dasselbe wie zuvor.
+% \begin{macrocode}
+\def\@tempa#1#2#3#4#5{%
+ \@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #4{%
+ \@hangfrom{\hskip #1}%
+ \interlinepenalty \@M #5\@@par}%
+ \endgroup
+ \else
+ \def\@svsechd{#4{\hskip #1\relax #5}}%
+ \fi
+ \@xsect{#3}}
+\ifx\@ssect\@tempa\else
+ \ClassWarning{\KOMAClassName}{%
+ Unexpected definition of \string\@ssect!\MessageBreak
+ Please send information about this to\MessageBreak
+ the KOMA-Script maintainer!\MessageBreak
+ Maybe LaTeX will be broken by the redefinition\MessageBreak
+ of \string\@ssect\space}%
+\fi
+%<trace>\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro
+%<trace> \string\@ssect}
+\def\@ssect#1#2#3#4#5{%
+ \scr@ifundefinedorrelax{scr@s@ct@@nn@m@}{%
+ \ClassWarning{\KOMAClassName}{incompatible usage of
+ \string\@ssect\space detected.\MessageBreak
+ You've used the KOMA-Script implementation of
+ \string\@ssect\MessageBreak
+ from within a non compatible caller, that does not\MessageBreak
+ \string\scr@s@ct@@nn@m@\space locally.\MessageBreak
+ This could result in several error messages}%
+ \def\scr@s@ct@@nn@m@{\string\scr@s@ct@@nn@m@}%
+ }{}%
+% \end{macrocode}
+% \changes{v3.26}{2018/09/18}{\cs{scr@sect@runin} beachten}^^A
+% Falls \cs{scr@sect@runin} nicht definiert ist, wird es jetzt höchste Zeit
+% dafür. Und natürlich nutzen wir es dann für die Entscheidung Spitzmarke oder
+% nicht.
+% \begin{macrocode}
+ \ifdim
+ \scr@sect@runin{\z@}{\p@}{\glueexpr #3\relax}>\z@
+ \begingroup
+% \end{macrocode}
+% \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}^^A
+% Das Farbänderungen im Schriftargument erlaubt sein sollen und diese aktuelle
+% \cs{penalty}-Werte wieder aufheben, verbiete ich hier einen Umbruch nach
+% der Fontänderung.
+% \begin{macrocode}
+ #4{\nobreak\interlinepenalty \@M
+ \expandafter\sectionlinesformat\expandafter{\scr@s@ct@@nn@m@}%
+ {\glueexpr #1\relax}\@empty{#5}\@@par}%
+ \endgroup
+ \else
+ \edef\@svsechd{%
+ \unexpanded{#4}{%
+% \end{macrocode}
+% \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}^^A
+% Das Farbänderungen im Schriftargument erlaubt sein sollen und diese aktuelle
+% \cs{penalty}-Werte wieder aufheben, verbiete ich hier einen Umbruch nach
+% der Fontänderung.
+% \begin{macrocode}
+ \noexpand\nobreak
+ \noexpand\sectioncatchphraseformat{\scr@s@ct@@nn@m@}%
+ \unexpanded{{\glueexpr #1\relax}\@empty{#5}}%
+ }%
+ }%
+ \fi
+ \let\scr@s@ct@@nn@m@\relax
+ \@xsect{\glueexpr #3\relax}%
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@ssect
+% \begin{macro}{\@xsect}
+% \changes{v3.26}{2018/09/18}{wird umdefiniert}^^A
+% Wir brauchen zum Einen in \cs{@xsect} einen Fallunterscheidung nach
+% \cs{scr@sect@runin} und zum Anderen muss diese Fallunterscheidung am Ende
+% wieder zurückgesetzt werden.
+% \begin{macrocode}
+%<*body>
+\def\@tempa#1{%
+ \@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else
+ \@nobreakfalse
+ \global\@noskipsectrue
+ \everypar{%
+ \if@noskipsec
+ \global\@noskipsecfalse
+ {\setbox\z@\lastbox}%
+ \clubpenalty\@M
+ \begingroup \@svsechd \endgroup
+ \unskip
+ \@tempskipa #1\relax
+ \hskip -\@tempskipa
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi}%
+ \fi
+ \ignorespaces
+}
+\ifx\@xsect\@tempa\else
+ \ClassWarning{\KOMAClassName}{%
+ Unexpected definition of \string\@xsect!\MessageBreak
+ Please send information about this to\MessageBreak
+ the KOMA-Script maintainer!\MessageBreak
+ Maybe LaTeX will be broken by the redefinition\MessageBreak
+ of \string\@xsect\space}%
+\fi
+%<trace>\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro
+%<trace> \string\@xsect}
+\def\@xsect#1{%
+ \@ifundefined{scr@sect@runin}{%
+ \def\scr@sect@runin##1##2##3{##3}%
+ }%
+ \@tempskipa #1\relax
+ \ifdim \scr@sect@runin{\z@}{\p@}{\@tempskipa}>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else
+ \@nobreakfalse
+ \global\@noskipsectrue
+ \everypar{%
+ \if@noskipsec
+ \global\@noskipsecfalse
+ {\setbox\z@\lastbox}%
+ \clubpenalty\@M
+ \begingroup \@svsechd \endgroup
+ \unskip
+ \@tempskipa #1\relax
+ \ifdim \@tempskipa<\z@
+ \hskip -\@tempskipa
+ \else
+ \hskip \@tempskipa
+ \fi
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi}%
+ \fi
+ \def\scr@sect@runin##1##2##3{##3}%
+ \ignorespaces
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@xsect
+%
+% \begin{macro}{\IfUsePrefixLine}
+% \changes{v3.18}{2015/06/09}{außerhalb von Gliederungsbefehlsstilen
+% definiert}^^A
+% Eigentlich ist diese Anweisung nur innerhalb von Gliederungsbefehlen
+% sinnvoll und wurde bis \KOMAScript{} 3.17c auch nur dort definiert. Dann gab
+% es aber Leute, die \cs{chapterformat} missbraucht haben und gleich meldete
+% sich jemand, die nicht verstehen konnte, warum die Anweisung dann einen
+% Fehler produzieren muss. Wenn man den Code nicht verstanden hat, dann ist
+% das nämlich so. Deshalb gebe ich jetzt eine Warnung aus, dass die Verwendung
+% nicht unbedingt zu dem Resultat führt, das erwartet wird.
+% \begin{macro}{\scr@IfUsePrefixLineWarning}
+% \changes{v3.18}{2015/06/09}{neu (intern)}
+% \begin{macrocode}
+%<*body>
+\newcommand*{\scr@IfUsePrefixLineWarning}[2]{%
+ \ClassWarning{\KOMAClassName}{%
+ usage of \string\IfUsePrefixLine\space outside
+ section command\MessageBreak
+ style makes no sense, because the behaviour not only\MessageBreak
+ depends on class options but also on the run-time\MessageBreak
+ section command style.\MessageBreak
+ Neither the then-code nor the else-code will be\MessageBreak
+ executed.\MessageBreak
+ You may change this and avoid the warning by LOCALLY\MessageBreak
+ setting \string\IfUsePrefixLine\space to either
+ \string\@firstoftwo\space or\MessageBreak
+ \string\@secondoftwo\space before using it%
+ }%
+}
+\newcommand*{\IfUsePrefixLine}[2]{}
+\let\IfUsePrefixLine\scr@IfUsePrefixLineWarning
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \scr@IfUsePrefixLineWarning
+% \end{macro}^^A \IfUsePrefixLine
+%
+%
+% \begin{macro}{\raggedsection}
+% \changes{v2.3h}{1996/01/20}{Überschriften werden \cs{raggedsection}^^A
+% gesetzt}^^A
+% \changes{v2.3h}{1996/01/20}{\cs{raggedsection} ist als \cs{raggedright}
+% voreingestellt}^^A
+% Dieses Makro gibt an, wie die Überschriften formatiert
+% werden. Voreingestellt ist linksbündig. Da dies nicht nur die Formatierung
+% von \cs{section} (und darunter), sondern auch die Voreinstellung für die
+% höheren Ebenen ist, wird die Definition hier vorgezogen.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\raggedsection}{}
+\let\raggedsection\raggedright
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \raggedsection
+%
+%
+% \begin{macro}{\DeclareSectionCommand}
+% \changes{v3.15}{2014/11/21}{neue Anweisung}^^A
+% \changes{v3.17}{2015/03/23}{Komplettumbau, um stilabhängige Optionen zu
+% ermöglichen}^^A
+% \changes{v3.18}{2015/05/22}{\cs{scr@dsc@def@style@\dots @command}
+% definiert alle Stil abhängigen Anweisungen}^^A
+% \changes{v3.20}{2015/10/03}{\cs{DeclareTOCStyleEntry}
+% definiert die Verzeichnisstil abhängigen Anweisungen}^^A
+% Definition neuer oder Umdefinition existierender Gliederungsbefehle, die auf
+% \cs{scr@startsection} basieren. Ebenso wird ein Verzeichniseintrag erzeugt,
+% falls ein solcher noch nicht existiert. Die Deklaration geschieht über
+% diverse Optionen (Achtung: Unbedingt daran denken, diese in
+% \cs{ProvideSectionCommands} ebenfalls zu definieren!!!):
+% \begin{macrocode}
+%<*body>
+\DefineFamily{KOMAarg}
+\DefineFamilyMember[.dsc]{KOMAarg}
+% \end{macrocode}
+% \begin{macro}{\DeclareSectionCommandStyleOption}
+% \changes{v3.17}{2015/03/23}{neue Anweisung}^^A
+% Definiert eine neue Option für einen Stil eines Gliederungsbefehls. Das
+% erste Argument ist der Stil, das zweite der Name der Option, das dritte ist
+% die Definition. Sollte innerhalb der Definition eine Familie benötigt
+% werden, so ist \texttt{KOMAarg} zu verwenden.
+% \begin{macrocode}
+\newcommand*{\DeclareSectionCommandStyleOption}[3]{%
+ \AddToSectionCommandOptionsDoList{#2}%
+ \expandafter\g@addto@macro\csname scr@dsc@style@#1@options\endcsname{%
+ \DefineFamilyKey[.dsc]{KOMAarg}{#2}{#3}%
+ }%
+}
+% \end{macrocode}
+% \begin{macro}{\DeclareSectionCommandDummyOption}
+% \changes{v3.17}{2015/03/23}{neue Anweisung (intern)}^^A
+% \changes{v3.20}{2015/11/18}{wird nicht mehr benötigt}^^A
+% \end{macro}^^A \DeclareSectionCommandDummyOption
+% \begin{macro}{\AddToSectionCommandOptionsDoList}
+% \changes{v3.20}{2015/11/18}{neu}
+% \begin{macro}{\@AddToSectionCommandOptionsDoList}
+% \changes{v3.20}{2015/11/18}{neu (intern)}
+% \begin{macro}{\scr@dsc@doopts}
+% \changes{v3.20}{2015/11/18}{neu (intern)}
+% Registriert eine neue Gliederungsbefehlsoption, indem sie der internen Liste
+% der Gliederungsbefehlsoptionen hinzugefügt wird.
+% \begin{macrocode}
+\newcommand*{\AddToSectionCommandOptionsDoList}[1]{%
+ \kernel@ifnextchar [%]
+ {\@AddToSectionCommandOptionListWithDefault{#1}}%
+ {\l@addto@macro\scr@dsc@doopts{\do{#1}}}%
+}
+\newcommand*{\@AddToSectionCommandOptionListWithDefault}{}
+\def\@AddToSectionCommandOptionListWithDefault#1[#2]{%
+ \l@addto@macro\scr@dsc@doopts{\do[{#2}]{#1}}
+}%
+\newcommand*{\scr@dsc@doopts}{}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@dooptions
+% \end{macro}^^A \@AddToSectionCommandOptionsListWithDefault
+% \end{macro}^^A \AddToSectionCommandOptionsDoList
+% \begin{macro}{\RelaxSectionCommandOptions}
+% \changes{v3.20}{2015/11/18}{neu}
+% Diese Option macht alle Gliederungsbefehlsoptionen ungültig.
+% \begin{macrocode}
+\newcommand*{\RelaxSectionCommandOptions}{%
+ \begingroup
+ \def\do@endgroup{\endgroup}%
+ \def\do{%
+ \kernel@ifnextchar [%]
+ {\@do}%
+ {\@do[]}%
+ }%
+ \def\@do[##1]##2{%
+ \l@addto@macro\do@endgroup{\RelaxFamilyKey[.dsc]{KOMAarg}{##2}}%
+ }%
+ \scr@dsc@doopts
+ \do@endgroup
+}
+% \end{macrocode}
+% \end{macro}^^A \RelaxSectionCommandOptions
+% \end{macro}^^A \DeclareSectionCommandStyleOption
+% \begin{macro}{\DeclareSectionCommandStyleLengthOption}
+% \changes{v3.17}{2015/03/23}{neue Anweisung}^^A
+% \changes{v3.20}{2016/04/25}{Argument wird ggf. expandiert}^^A
+% Definiert eine für die aktuelle Ebene \cs{scr@dsc@current} eine neue
+% Längenoption und speichert das Ergebnis in einem Makro, das sich aus
+% Argument 3 gefolgt von der aktuellen Ebene gefolgt von Argument 4 ergibt.
+% \begin{macrocode}
+\newcommand*{\DeclareSectionCommandStyleLengthOption}[4]{%
+ \DeclareSectionCommandStyleOption{#1}{#2}{%
+ \protected@edef\reserved@a{%
+ \noexpand\FamilySetLength{KOMAarg}{#2}{\noexpand\@tempskipa}{##1}%
+ }\reserved@a
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \ifscr@dsc@expandtopt
+ \expandafter\edef\csname #3\scr@dsc@current#4\endcsname{%
+ \the\@tempskipa}%
+ \else
+ \expandafter\edef\csname #3\scr@dsc@current#4\endcsname{##1}%
+ \fi
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \DeclareSectionCommandStyleLengthOption
+% \begin{macro}{\DeclareSectionCommandStyleNumberOption}
+% \changes{v3.17}{2015/03/23}{neue Anweisung}^^A
+% \changes{v3.20}{2016/04/25}{Argument wird expandiert}^^A
+% Definiert eine für die aktuelle Ebene \cs{scr@dsc@current} eine neue
+% Zahlenoption und speichert das Ergebnis in einem Makro, das sich aus
+% Argument 3 gefolgt von der aktuellen Ebene gefolgt von Argument 4 ergibt.
+% \begin{macrocode}
+\newcommand*{\DeclareSectionCommandStyleNumberOption}[4]{%
+ \DeclareSectionCommandStyleOption{#1}{#2}{%
+ \protected@edef\reserved@a{%
+ \noexpand\FamilySetCounterMacro{KOMAarg}{#2}{\noexpand\reserved@a}{##1}
+ }\reserved@a
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \expandafter\let\csname #3\scr@dsc@current#4\endcsname\reserved@a
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \DeclareSectionCommandStyleNumberOption
+% \begin{macro}{\DeclareSectionCommandStyleFontOption}
+% \changes{v3.17}{2015/03/23}{neue Anweisung}^^A
+% Definiert für die aktuelle Ebene \cs{scr@dsc@current} eine neue
+% Schrift und speichert das Ergebnis in einem Element, das sich aus
+% Argument 3 gefolgt von der aktuellen Ebene gefolgt von Argument 4 ergibt.
+% \begin{macrocode}
+\newcommand*{\DeclareSectionCommandStyleFontOption}[4]{%
+ \DeclareSectionCommandStyleOption{#1}{#2}{%
+ \IfExistskomafont{#3\scr@dsc@current#4}{%
+ \setkomafont
+ }{%
+ \newkomafont
+ }{#3\scr@dsc@current#4}{##1}%
+ \FamilyKeyStateProcessed
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \DeclareSectionCommandStyleFontOption
+% \begin{macro}{\DeclareSectionCommandStyleFuzzyOption}
+% \changes{v3.26}{2018/09/18}{neue Anweisung}^^A
+% Definiert für die aktuelle Ebene \cs{scr@dsc@current} eine neue
+% Fuzzy-Auswahl. Eine Fuzzy-Auswahl akzeptiert neben den Werten für
+% boolsche-Schalter noch einen weiteren Wert. Es wird davon eine Anweisung
+% mit drei Argumenten definiert. Abhängig vom Wert wird das erste
+% (\texttt{true}), zweite (\texttt{false}) oder dritte (\emph{sonst}) Argument
+% ausgeführt. Der erlaubte weitere Wert wird als 5. Argument angegeben.
+% \begin{macrocode}
+\newcommand*{\DeclareSectionCommandStyleFuzzyOption}[5]{%
+ \DeclareSectionCommandStyleOption{#1}{#2}{%
+ \FamilySetBool{KOMAarg}{#2}{@tempswa}{##1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \if@tempswa
+ \expandafter\def\csname #3\scr@dsc@current#4\endcsname
+ ####1####2####3{####1}%
+ \else
+ \expandafter\def\csname #3\scr@dsc@current#4\endcsname
+ ####1####2####3{####2}%
+ \fi
+ \else
+ \ifstr{##1}{#5}{%
+ \expandafter\def\csname #3\scr@dsc@current#4\endcsname
+ ####1####2####3{####3}%
+ \FamilyKeyStateProcessed
+ }{}%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \DeclareSectionCommandStyleFuzzyOptions
+%
+% \begin{macro}{\scr@dsc@style@section@options}
+% \changes{v3.17}{2015/03/23}{neue Anweisung (intern)}^^A
+% Dann für die Optionen des Stils \texttt{section}:
+% \begin{macrocode}
+\newcommand*{\scr@dsc@style@section@options}{}
+% \end{macrocode}
+% \begin{description}\item[\texttt{indent}]
+% Linker Einzug der Überschrift
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{section}
+ {indent}{scr@}{@sectionindent}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{afterindent}]
+% \changes{v3.26}{2018/09/18}{neue Option \texttt{afterindent}}^^A
+% Fuzzy-Logik. Ein boolcher Wert gibt an, ob die erste Zeile nach der
+% Überschrift eingezogen werden soll. Als dritter Wert ist \texttt{bysign}
+% möglich. Dann hängt die Entscheidung für den Einzug vom Vorzeichen von
+% \texttt{beforeskip} ab. Ein negativer Wert bedeutet dann, dass der
+% Absatzeinzug nach der Überschrift unterdrückt werden soll.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFuzzyOption{section}
+ {afterindent}{scr@}{@afterindent}
+ {bysign}
+% \end{macrocode}
+% \begin{description}\item[\texttt{beforeskip}]
+% Gibt den vertikalen Abstand vor der Übeschrift an. Im Fall von
+% \texttt{afterindent=bysign} wird der Absolutwert verwendet.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{section}
+ {beforeskip}{scr@}{@beforeskip}
+% \end{macrocode}
+% \begin{description}\item[\texttt{runin}]
+% \changes{v3.26}{2018/09/18}{neue Option \texttt{runin}}^^A
+% Fuzzy-Logik. Ein boolscher Wert gibt an, dass die Überschrift als
+% Spitzmarke (\texttt{true}) oder als eigene Zeile (\texttt{false}) gesetzt
+% werden soll. Als dritter Wert ist \texttt{bysign} möglich. Dann hängt
+% Spitzmarke oder nicht vom Vorzeichen von \texttt{afterskip} ab. Spitzmarke
+% gibt es dann bei einem negativen Wert von \texttt{afterskip}.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFuzzyOption{section}
+ {runin}{scr@}{@runin}
+ {bysign}
+% \end{macrocode}
+% \begin{description}\item[\texttt{afterskip}] Im Fall einer Spitzmarke (siehe
+% \texttt{runin}) der horizontale Abstand nach der Überschrift. Im Fall einer
+% freistehenden Überschrift der vertikale Abstand nach der Überschrift. Falls
+% die Spitzmarke über das Vorzeichen aktiviert wird, wird immer der Betrag des
+% Wertes verwendet!
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{section}
+ {afterskip}{scr@}{@afterskip}
+% \end{macrocode}
+% \begin{description}\item[\texttt{font}] Schrifteinstellungen für das
+% Element.\end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFontOption{section}{font}{}{}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@style@section@options
+% \begin{macro}{\scr@dsc@def@style@section@command}
+% \changes{v3.18}{2015/05/21}{neue Anweisung (intern)}^^A
+% \changes{v3.20}{2016/01/19}{korrekte Spitzmarkenprüfung für
+% \cs{parfillskip}-Änderung}^^A
+% Diese Anweisung left fest, wie ein Gliederungsbefehl für den Stil
+% \texttt{section} zu definieren ist. Das einzige Argument ist dabei der
+% \meta{Name} der Gliederungsebene, beispielsweise \texttt{section},
+% \texttt{subsection} etc. Hier ist es recht einfach, da lediglich
+% \cs{\meta{Name}} per \cs{scr@startsection} definiert werden muss.
+% \begin{macrocode}
+\newcommand*{\scr@dsc@def@style@section@command}[1]{%
+ \@namedef{#1}{%
+ \scr@startsection{#1}%
+ {\csname #1numdepth\endcsname}%
+ {\csname scr@#1@sectionindent\endcsname}%
+ {\csname scr@#1@beforeskip\endcsname}%
+ {\csname scr@#1@afterskip\endcsname}%
+ {%
+ \ifdim\glueexpr\csname scr@#1@afterskip\endcsname >\z@
+ \expandafter\ifnum\scr@v@is@gt{2.96}\relax
+ \setlength{\parfillskip}{\z@ plus 1fil}%
+ \fi
+ \fi
+ \raggedsection\normalfont\sectfont\nobreak
+ \usekomafont{#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@def@style@section@command
+%
+% \begin{macro}{\scr@dsc@style@chapter@options}
+% \changes{v3.17}{2015/03/23}{neue Anweisung (intern)}^^A
+% Dann für die Optionen des Stils \texttt{chapter}:
+% \begin{macrocode}
+%<*book|report>
+\newcommand*{\scr@dsc@style@chapter@options}{}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{pagestyle}] Seitenstil für die Anfangsseite der
+% Gliederungsebene.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleOption{chapter}{pagestyle}{%
+ \@namedef{\scr@dsc@current pagestyle}{#1}%
+ \FamilyKeyStateProcessed
+}%
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{afterindent}]
+% \changes{v3.26}{2018/09/18}{neue Option \texttt{afterindent}}^^A
+% Fuzzy-Logik. Ein boolcher Wert gibt an, ob die erste Zeile nach der
+% Überschrift eingezogen werden soll. Als dritter Wert ist \texttt{bysign}
+% möglich. Dann hängt die Entscheidung für den Einzug vom Vorzeichen von
+% \texttt{beforeskip} ab. Ein negativer Wert bedeutet dann, dass der
+% Absatzeinzug nach der Überschrift unterdrückt werden soll.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFuzzyOption{chapter}
+ {afterindent}{scr@}{@afterindent}
+ {bysign}
+% \end{macrocode}
+% \begin{description}\item[\texttt{beforeskip}]
+% Gibt den vertikalen Abstand vor der Übeschrift an. Im Fall von
+% \texttt{afterindent=bysign} wird der Absolutwert verwendet.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{chapter}
+ {beforeskip}{scr@}{@beforeskip}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{innerskip}] Der Absolutwert gibt den vertikalen Abstand
+% innerhalb der Überschrift zwischen Präfix-Zeile und Text an.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{chapter}
+ {innerskip}{scr@}{@innerskip}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{afterskip}] Der Absolutwert gibt den vertikalen Abstand nach
+% der Überschrift an.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{chapter}
+ {afterskip}{scr@}{@afterskip}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{font}] Schrifteinstellungen für das Element.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFontOption{chapter}{font}{}{}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{prefixfont}] Schrifteinstellungen für die Präfixzeile des
+% Elements.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFontOption{chapter}{prefixfont}{}{prefix}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@style@chapter@options
+% \begin{macro}{\scr@dsc@def@style@chapter@command}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (intern)}
+% Diese Anweisung left fest, wie ein Gliederungsbefehl für den Stil
+% \texttt{chapter} zu definieren ist. Das einzige Argument ist dabei der
+% \meta{Name} der Gliederungsebene, normalerweise \texttt{chapter}.
+% Das ist etwas komplizierter als bei \cs{scr@dsc@def@style@section@command},
+% da hier eine ganze Reihe von miteinander verschachtelten Anweisungen zu
+% definieren sind.
+% \begin{macrocode}
+\newcommand*{\scr@dsc@def@style@chapter@command}[1]{%
+ \@namedef{#1}{\scr@startchapter{#1}}%
+ \@namedef{@#1}{\scr@@startchapter{#1}}%
+ \@namedef{@s#1}{\scr@@startschapter{#1}}%
+ \@namedef{@make#1head}{\scr@makechapterhead{#1}}%
+ \@namedef{@makes#1head}{\scr@makeschapterhead{#1}}%
+ \@namedef{@@make#1head}{\scr@@makechapterhead{#1}}%
+ \@namedef{@@makes#1head}{\scr@@makeschapterhead{#1}}%
+ \@namedef{set#1preamble}{\set@preamble{#1}}%
+}
+%</book|report>
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@def@style@chapter@command
+%
+% \begin{macro}{\scr@dsc@style@part@options}
+% \changes{v3.17}{2015/03/23}{neue Anweisung (intern)}^^A
+% Dann für die Optionen des Stils \texttt{part}:
+% \begin{macrocode}
+\newcommand*{\scr@dsc@style@part@options}{}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{pagestyle}] Seitenstil für die Anfangsseite der
+% Gliederungsebene.
+% \end{description}
+% \begin{macrocode}
+%<*report|book>
+\DeclareSectionCommandStyleOption{part}{pagestyle}{%
+ \@namedef{\scr@dsc@current pagestyle}{#1}%
+ \FamilyKeyStateProcessed
+}%
+%</report|book>
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{afterindent}]
+% \changes{v3.26}{2018/09/18}{neue Option \texttt{afterindent}}^^A
+% Fuzzy-Logik. Ein boolcher Wert gibt an, ob die erste Zeile nach der
+% Überschrift eingezogen werden soll. Als dritter Wert ist \texttt{bysign}
+% möglich. Dann hängt die Entscheidung für den Einzug vom Vorzeichen von
+% \texttt{beforeskip} ab. Ein negativer Wert bedeutet dann, dass der
+% Absatzeinzug nach der Überschrift unterdrückt werden soll.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFuzzyOption{part}
+ {afterindent}{scr@}{@afterindent}
+ {bysign}
+% \end{macrocode}
+% \begin{description}\item[\texttt{beforeskip}]
+% Gibt den vertikalen Abstand vor der Übeschrift an. Im Fall von
+% \texttt{afterindent=bysign} wird der Absolutwert verwendet.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{part}
+ {beforeskip}{scr@}{@beforeskip}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{innerskip}] Der Absolutwert gibt den vertikalen Abstand
+% innerhalb der Überschrift zwischen Präfix-Zeile und Text an.
+% \end{description}
+% \begin{macrocode}
+%<*book|report>
+\DeclareSectionCommandStyleLengthOption{part}
+ {innerskip}{scr@}{@innerskip}
+%</book|report>
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{afterskip}] Der Absolutwert gibt den vertikalen Abstand nach
+% der Überschrift an.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleLengthOption{part}
+ {afterskip}{scr@}{@afterskip}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{font}] Schrifteinstellungen für das Element.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFontOption{part}{font}{}{}
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{font}] Schrifteinstellungen für die Präfixzeile des Elements.
+% \end{description}
+% \begin{macrocode}
+\DeclareSectionCommandStyleFontOption{part}{prefixfont}{}{prefix}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@style@part@options
+% \begin{macro}{\scr@dsc@def@style@part@command}
+% \changes{v3.18}{2015/05/23}{neue Anweisung (intern)}
+% Diese Anweisung legt fest, wie ein Gliederungsbefehl für den Stil
+% \texttt{part} zu definieren ist. Das einzige Argument ist dabei der
+% \meta{Name} der Gliederungsebene, normalerweise \texttt{part}.
+% Das ist ganz ähnlich wie bei \cs{scr@dsc@def@style@chapter@command}.
+% \begin{macrocode}
+\newcommand*{\scr@dsc@def@style@part@command}[1]{%
+ \@namedef{#1}{\scr@startpart{#1}}%
+ \@namedef{@#1}{\scr@@startpart{#1}}%
+ \@namedef{@s#1}{\scr@@startspart{#1}}%
+%<book|report> \@namedef{@end#1}{\scr@@endpart{#1}}%
+%<book|report> \@namedef{set#1preamble}{\set@preamble{#1}}%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@def@style@part@command
+%
+% \begin{macro}{\scr@dsc@style@section@neededoptionstest}
+% \changes{v3.17}{2015/03/24}{Neu (intern)}^^A
+% \changes{v3.24}{2017/04/25}{Voreinstellungen für \texttt{indent} und
+% \texttt{font}}^^A
+% \changes{v3.26}{2018/09/18}{\texttt{runin} und \texttt{afterindent}
+% beachten}^^A
+% Dieses Anweisung überprüft, ob alle notwendigen Eigenschaften für die
+% Definition der spezifischen Gliederungsebene im section-Stil bekannt
+% sind. Sollte das nicht der Fall sein, meldet sie einen Fehler und sorgt sie
+% mit \cs{aftergroup}\cs{@gobbletwo} dafür, dass die Definition unterbleibt.
+% \begin{macrocode}
+\newcommand*{\scr@dsc@style@section@neededoptionstest}{%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @sectionindent}{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {section indent}{indent}{0pt}%
+ {\@namedef{scr@\scr@dsc@current @sectionindent}{0pt}}%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @beforeskip}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {before section skip}{beforeskip}%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterskip}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {after section skip}{afterskip}%
+ }{}%
+ \IfExistskomafont{\scr@dsc@current}{}{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {font}{font}{\normalsize}%
+ {\newkomafont{\scr@dsc@current}{\normalsize}}%
+ }%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @runin}{%
+ \l@addto@macro\local@endgroup{%
+ \ClassInfo{\KOMAClassName}
+ {using compatibility default `runin=bysign'\MessageBreak
+ for `\expandafter\string\csname \scr@dsc@current\endcsname}%
+ \expandafter\gdef\csname scr@\scr@dsc@current @runin\endcsname
+ ##1##2##3{##3}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterindent}{%
+ \l@addto@macro\local@endgroup{%
+ \ClassInfo{\KOMAClassName}
+ {using compatibility default `afterindent=bysign'\MessageBreak
+ for `\expandafter\string\csname \scr@dsc@current\endcsname}%
+ \expandafter\gdef\csname scr@\scr@dsc@current @afterindent\endcsname
+ ##1##2##3{##3}%
+ }%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@style@section@neededoptionstest
+%
+% \begin{macro}{\scr@dsc@style@chapter@neededoptionstest}
+% \changes{v3.17}{2015/03/24}{Neu (intern)}^^A
+% \changes{v3.24}{2017/04/25}{Voreinstellungen für alle außer auf Ebene
+% \texttt{chapter}}^^A
+% Dieses Anweisung überprüft, ob alle notwendigen Eigenschaften für die
+% Definition der spezifischen Gliederungsebene im chapter-Stil bekannt
+% sind. Sollte das nicht der Fall sein, meldet sie einen Fehler und sorgt sie
+% mit \cs{aftergroup}\cs{@gobbletwo} dafür, dass die Definition unterbleibt.
+% \begin{macrocode}
+%<*book|report>
+\newcommand*{\scr@dsc@style@chapter@neededoptionstest}{%
+ \scr@ifundefinedorrelax{\scr@dsc@current pagestyle}{%
+ \ifstr{\scr@dsc@current}{chapter}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {initial page style}{pagestyle}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {initial page style}{pagestyle}%
+ {\chapterpagestyle}%
+ {\@namedef{\scr@dsc@current pagestyle}{\chapterpagestyle}}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @innerskip}{%
+ \ifstr{\scr@dsc@current}{chapter}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {inner chapter skip}{innerskip}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {inner chapter skip}{innerskip}%
+ {\scr@chapter@innerskip}%
+ {\@namedef{scr@\scr@dsc@current @innerskip}{\scr@chapter@innerskip}}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @beforeskip}{%
+ \ifstr{\scr@dsc@current}{chapter}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {before chapter skip}{beforeskip}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {before chapter skip}{beforeskip}%
+ {\scr@chapter@beforeskip}%
+ {\@namedef{scr@\scr@dsc@current @beforeskip}{\scr@chapter@beforeskip}}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterskip}{%
+ \ifstr{\scr@dsc@current}{chapter}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {after chaper skip}{afterskip}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {after chaper skip}{afterskip}%
+ {\scr@chapter@afterskip}%
+ {\@namedef{scr@\scr@dsc@current @afterskip}{\scr@chapter@afterskip}}%
+ }%
+ }{}%
+ \IfExistskomafont{\scr@dsc@current}{}{%
+ \ifstr{\scr@dsc@current}{chapter}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}{font}{font}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {font}{font}%
+ {\usekomafont{chapter}}%
+ {\newkomafont{\scr@dsc@current}{\usekomafont{chapter}}}%
+ }%
+ }%
+ \IfExistskomafont{\scr@dsc@current prefix}{}{%
+ \ifstr{\scr@dsc@current}{chapter}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {prefix line font}{prefixfont}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {prefix line font}{prefixfont}%
+ {\usekomafont{chapterprefix}}%
+ {\newkomafont{\scr@dsc@current prefix}{\usekomafont{chapterprefix}}}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterindent}{%
+ \l@addto@macro\local@endgroup{%
+ \ClassInfo{\KOMAClassName}
+ {using compatibility default `afterindent=bysign'\MessageBreak
+ for `\expandafter\string\csname \scr@dsc@current\endcsname}%
+ \expandafter\gdef\csname scr@\scr@dsc@current @afterindent\endcsname
+ ##1##2##3{##3}%
+ }%
+ }{}%
+}
+%</book|report>
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@style@chapter@neededoptionstest
+%
+% \begin{macro}{\scr@dsc@style@part@neededoptionstest}
+% \changes{v3.17}{2015/03/24}{Neu (intern)}
+% \changes{v3.24}{2017/04/25}{Voreinstellungen für alle außer auf Ebene
+% \texttt{part}}^^A
+% Dieses Anweisung überprüft, ob alle notwendigen Eigenschaften für die
+% Definition der spezifischen Gliederungsebene im part-Stil bekannt
+% sind. Sollte das nicht der Fall sein, meldet sie einen Fehler und sorgt sie
+% mit \cs{aftergroup}\cs{@gobbletwo} dafür, dass die Definition unterbleibt.
+% \begin{macrocode}
+\newcommand*{\scr@dsc@style@part@neededoptionstest}{%
+%<*book|report>
+ \scr@ifundefinedorrelax{\scr@dsc@current pagestyle}{%
+ \ifstr{\scr@dsc@current}{part}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {initial page style}{pagestyle}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {initial page style}{pagestyle}%
+ {\partpagestyle}%
+ {\@namedef{\scr@dsc@current pagestyle}{\partpagestyle}}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @innerskip}{%
+ \ifstr{\scr@dsc@current}{part}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {inner part skip}{innerskip}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {inner part skip}{innerskip}%
+ {\scr@part@innerskip}%
+ {\@namedef{scr@\scr@dsc@current @innerskip}{\scr@part@innerskip}}%
+ }%
+ }{}%
+%</book|report>
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @beforeskip}{%
+ \ifstr{\scr@dsc@current}{part}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {before part skip}{beforeskip}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {before part skip}{beforeskip}%
+ {\scr@part@beforeskip}%
+ {\@namedef{scr@\scr@dsc@current @beforeskip}{\scr@part@beforeskip}}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterskip}{%
+ \ifstr{\scr@dsc@current}{part}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {after part skip}{afterskip}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {after part skip}{afterskip}%
+ {\scr@part@afterskip}%
+ {\@namedef{scr@\scr@dsc@current @afterskip}{\scr@part@afterskip}}%
+ }%
+ }{}%
+ \IfExistskomafont{\scr@dsc@current}{}{%
+ \ifstr{\scr@dsc@current}{part}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}{font}{font}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}{font}{font}%
+ {\usekomafont{part}}%
+ {\newkomafont{\scr@dsc@current}{\usekomafont{part}}}%
+ }%
+ }{}%
+ \IfExistskomafont{\scr@dsc@current prefix}{}{%
+ \ifstr{\scr@dsc@current}{part}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}%
+ {number font}{prefixfont}%
+ }{%
+ \scr@declaresectioncommandwarning{\scr@dsc@current}%
+ {number font}{prefixfont}%
+ {\usekomafont{partprefix}}%
+ {\newkomafont{\scr@dsc@current prefix}{\usekomafont{partprefix}}}%
+ }%
+ }{}%
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterindent}{%
+ \l@addto@macro\local@endgroup{%
+ \ClassInfo{\KOMAClassName}{%
+ using compatibility default
+%<article> `afterindent=false'\MessageBreak
+%<book|report> `afterindent=true'\MessageBreak
+ for `\expandafter\string\csname \scr@dsc@current\endcsname}%
+ \expandafter\gdef\csname scr@\scr@dsc@current @afterindent\endcsname
+ ##1##2##3%
+%<article> {##2}%
+%<book|report> {##1}%
+ }%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@dsc@style@part@neededoptionstest
+%
+% \begin{macro}{\ifscr@dsc@parametersonly}
+% \changes{v3.17}{2015/03/24}{neu}^^A
+% \changes{v3.20}{2015/11/18}{es gibt keine Dummy-Optionen mehr}^^A
+% Dieser Schalter wird verwendet, um die Einstellungen entsprechend dem
+% aktuell gültigen Stil zu ändern, die zugehörige Anweisung selbst aber nicht
+% neu zu definieren. Er wird von einem leeren \texttt{style}-Wert lokal
+% gesetzt.
+% \begin{macrocode}
+\newif\ifscr@dsc@parametersonly
+% \end{macrocode}
+% \end{macro}^^A \ifscr@dsc@parametersonly
+%
+% \begin{macrocode}
+\newcommand*{\DeclareSectionCommand}[2][]{%
+ \edef\scr@dsc@current{#2}%
+% \end{macrocode}
+% Im ersten Durchlauf werden nur die Stil-Optionen ausgewertet:
+% \begin{description}
+% \item[\texttt{style}] Stil der Gliederungsebene
+% \end{description}
+% \begin{macrocode}
+ \scr@dsc@parametersonlyfalse
+ \DefineFamilyKey[.dsc]{KOMAarg}{style}{%
+ \IfArgIsEmpty{##1}{%
+ \scr@dsc@parametersonlytrue
+ \FamilyKeyStateProcessed
+ }{%
+ \scr@ifundefinedorrelax{scr@dsc@def@style@##1@command}{%
+ \FamilyKeyStateUnknownValue
+ }{%
+ \@namedef{scr@\scr@dsc@current @style}{##1}%
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ }%
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{tocstyle}]
+% \changes{v3.20}{2015/11/12}{Option \texttt{tocstyle} frühzeitig
+% auswerten}^^A
+% Verzeichnis-Eintrags-Stil, damit auch für diesen anschließend die Optionen
+% definiert bzw. aktiviert werden können.
+% \end{description}
+% \begin{macrocode}
+ \DefineFamilyKey[.dsc]{KOMAarg}{tocstyle}{%
+ \IfArgIsEmpty{##1}{%
+ \expandafter\let\csname scr@dte@\scr@dsc@current @style\endcsname
+ \relax
+ \FamilyKeyStateProcessed
+ }{%
+%<trace> \typeout{TRACE: option tocstyle=##1}%
+%<trace> \typeout{TRACE: command=\scr@dsc@current}%
+ \scr@ifundefinedorrelax{scr@dte@def@l@##1}{%
+%<trace> \typeout{TRACE: style not defined}%
+ \FamilyKeyStateUnknownValue
+ }{%
+%<trace> \typeout{TRACE: style defined}%
+ \@namedef{scr@dte@\scr@dsc@current @style}{##1}%
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ }%
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{@else@}]
+% \changes{v3.20}{2015/11/18}{Option \texttt{tocstyle} frühzeitig
+% auswerten}^^A
+% Damit keine anderen Optionen ausgewertet werden müssen aber auch nicht als
+% unbekannte Optionen einen Fehler erzeugen, wird diese Spezialoption
+% definiert, die einfach nur \cs{FamilyKeyStateProcessed} setzt.
+% \end{description}
+% \begin{macrocode}
+ \DefineFamilyKey[.dsc]{KOMAarg}{@else@}{%
+%<*trace>
+ \typeout{TRACE: ignoring option `@else@=\detokenize{##1}'}%
+ \typeout{TRACE:
+ \string\scr@key@atlist=`\detokenize\expandafter{\scr@key@atlist}'}%
+ \typeout{TRACE:
+ \string\scr@key@name=`\detokenize\expandafter{\scr@key@name}'}%
+ \typeout{TRACE:
+ \string\scr@key@value=`\detokenize\expandafter{\scr@key@value}'}%
+%</trace>
+ \FamilyKeyStateProcessed
+ }%
+ \FamilyExecuteOptions[.dsc]{KOMAarg}{#1}%
+% \end{macrocode}
+% \changes{v3.20}{2015/11/18}{Rüchnahme der Optionen nach dem ersten
+% Durchgang}^^A
+% Nach dem ersten Druchgang müssen alle Optionen wieder zurückgenommen
+% werden.
+% \begin{macrocode}
+ \RelaxFamilyKey[.dsc]{KOMAarg}{@else@}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{tocstyle}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{style}%
+ \begingroup
+ \scr@ifundefinedorrelax{scr@\scr@dsc@current @style}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}
+ {section command style}{style}%
+ }{}%
+ \endgroup
+ \@firstofone{%
+% \end{macrocode}
+% \changes{v3.20}{2015/11/12}{keine Dummy-Optionen für den echten Lauf}^^A
+% Nachdem nun der Stil für den Gliederungsbefehl bekannt ist, können wir
+% dessen Optionen aktivieren:
+% \begin{macrocode}
+%<trace> \typeout{TRACE: style=\@nameuse{scr@\scr@dsc@current @style}}%
+ \@nameuse{scr@dsc@style@\@nameuse{scr@\scr@dsc@current @style}@options}%
+% \end{macrocode}
+% Außerdem muss der Verzeichniseintrags-Stils initialisiert werden:
+% \begin{macrocode}
+%<trace> \typeout{TRACE: tocstyle=%
+%<trace> \@nameuse{scr@dte@\scr@dsc@current @style}}%
+ \scr@ifundefinedorrelax{scr@dte@\scr@dsc@current @style}{%
+ \scr@ifundefinedorrelax{l@\scr@dsc@current}{%
+ \@namedef{scr@dte@\scr@dsc@current @style}{default}%
+ }{}%
+ }{}%
+% \end{macrocode}
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}^^A
+% \changes{v3.21}{2016/06/12}{erlaube auch \texttt{tocentry} an Stelle von
+% \texttt{toc} als Präfix}^^A
+% An dieser Stelle müssen die Optionen des Verzeichniseintrags auf Optionen
+% der Gliederungsebene abgebildet werden. Dazu erhalten sie in der
+% Gliederungebene den Präfix \texttt{toc}. Das bedeutet gleichzeitig, dass es
+% keine Verzeichniseintragsoption Namens \texttt{style} geben kann und dass
+% Gliederungsoptionen nicht mit \texttt{toc} beginnen dürfen.
+% \begin{macrocode}
+ \let\scr@dsc@tocstyle@options\@empty
+ \let\scr@dsc@extra@relax@opts\@empty
+ \scr@ifundefinedorrelax{scr@dte@\scr@dsc@current @style}{}{%
+ \begingroup
+ \def\scr@dte@current{#2}%
+ \edef\reserved@a{%
+ \noexpand\@ExecuteTOCEntryStyleInitCode{%
+ \@nameuse{scr@dte@\scr@dsc@current @style}%
+ }{\scr@dsc@current}%
+ }\reserved@a
+ \def\do@endgroup{\endgroup}%
+ \def\do##1{%
+ \l@addto@macro\do@endgroup{%
+ \l@addto@macro\scr@dsc@extra@relax@opts{%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{toc##1}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{tocentry##1}%
+ }%
+ }%
+ \kernel@ifnextchar[%]
+ {\@dodefault{##1}}%
+ {\@donodefault{##1}}%
+ }%
+ \def\@donodefault##1{%
+ \l@addto@macro\do@endgroup{%
+ \DefineFamilyKey[.dsc]{KOMAarg}{toc##1}{%
+ \l@addto@macro{\scr@dsc@tocstyle@options}{##1={####1},}%
+ \FamilyKeyStateProcessed
+ }%
+ \DefineFamilyKey[.dsc]{KOMAarg}{tocentry##1}{%
+ \l@addto@macro{\scr@dsc@tocstyle@options}{##1={####1},}%
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ }%
+ \def\@dodefault##1[##2]{%
+ \l@addto@macro\do@endgroup{%
+ \DefineFamilyKey[.dsc]{KOMAarg}{toc##1}[##2]{%
+ \l@addto@macro{\scr@dsc@tocstyle@options}{##1={####1},}%
+ \FamilyKeyStateProcessed
+ }%
+ \DefineFamilyKey[.dsc]{KOMAarg}{tocentry##1}[##2]{%
+ \l@addto@macro{\scr@dsc@tocstyle@options}{##1={####1},}%
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ }%
+ \scr@dte@doopts
+ \do@endgroup
+ }%
+% \end{macrocode}
+% Die Optionen für die Stile von Verzeichniseintrag und Gliederungsebene
+% werden nicht erneut benötigt, müssten aber natürlich erneut verarbeitet
+% werden.
+% \begin{macrocode}
+ \DefineFamilyKey[.dsc]{KOMAarg}{style}{\FamilyKeyStateProcessed}%
+ \DefineFamilyKey[.dsc]{KOMAarg}{tocstyle}{\FamilyKeyStateProcessed}%
+% \end{macrocode}
+% Dazu kommen einige Optionen, die es schlicht immer gibt:
+% \begin{description}\item[\texttt{expandtopt}] Schalter, um die Längen zur
+% Definitionszeit statt zur Anwendungszeit komplett zu expandieren. Das
+% bedingt dann aber auch, dass die Längen nicht mehr abhängig von der
+% aktuellen Schriftgröße sind.\end{description}
+% \begin{macrocode}
+ \FamilyBoolKey[.dsc]{KOMAarg}{expandtopt}{scr@dsc@expandtopt}%
+ \scr@dsc@expandtoptfalse
+% \end{macrocode}
+% \begin{description}\item[\texttt{increaselevel}] Automatische Erhöhung des
+% Wertes von Option \texttt{level} mit Säumniswert 1. Diese Option wird nur
+% definiert, wenn \cs{DeclareSectionCommands} verwendet wurde, was an
+% \cs{scr@local@levelincrease} erkannt wird.\end{description}
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{scr@local@levelincrease}{%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{increaselevel}%
+ }{%
+ \FamilyCounterMacroKey[.dsc]{KOMAarg}{increaselevel}[1]%
+ {\scr@local@levelincrease}%
+ }%
+% \end{macrocode}
+% \begin{description}\item[\texttt{level}] nummerische
+% Gliederungsebene\end{description}
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{scr@local@leveloffset}{%
+ \edef\reserved@a{%
+ \noexpand\FamilyCounterMacroKey[.dsc]{KOMAarg}{level}{%
+ \expandafter\noexpand\csname \scr@dsc@current numdepth\endcsname}%
+ }\reserved@a
+ }{%
+ \edef\reserved@a{%
+ \noexpand\DefineFamilyKey[.dsc]{KOMAarg}{level}{%
+ \noexpand\FamilySetCounterMacro{KOMAarg}{level}{%
+ \expandafter\noexpand\csname \scr@dsc@current numdepth\endcsname
+ }%
+ \unexpanded{%
+ {\numexpr ##1+\scr@local@leveloffset\relax}%
+ \edef\scr@local@leveloffset{%
+ \the\numexpr\scr@local@leveloffset+\scr@local@levelincrease\relax
+ }%
+ }%
+ }%
+ }\reserved@a
+ }%
+% \end{macrocode}
+% \changes{v3.19}{2015/09/09}{neue Eigenschaft \texttt{counterwithout}}
+% \begin{description}\item[\texttt{counterwithout}] Der Zähler dieser Ebene
+% soll nicht länger abhängen vom angegebenen Zähler.
+% \end{description}
+% \begin{macrocode}
+ \FamilyStringKey[.dsc]{KOMAarg}{counterwithout}{\scr@local@counterwithout}%
+ \let\scr@local@counterwithout\relax
+% \end{macrocode}
+% \begin{description}\item[\texttt{counterwithin}] Der Zähler dieser Ebene
+% soll abhängen vom angegebenen Zähler.
+% \end{description}
+% \begin{macrocode}
+ \FamilyStringKey[.dsc]{KOMAarg}{counterwithin}{\scr@local@counterwithin}%
+ \let\scr@local@counterwithin\relax
+% \end{macrocode}
+% \begin{description}
+% \item[\texttt{toclevel}] Ebene im Inhaltsverzeichnis (Voreinstellung ist
+% derselbe Wert wie für level); diese Option gibt es nur, wenn der
+% Verzeichnisstil sie unterstützt (was jeder Verzeichnisstil
+% sollte); wenn allerdings ein Offset dafür definiert ist, dann wird die
+% Option nicht einfach an den Stil weitergereicht, muss also noch einmal
+% umdefiniert werden.
+% \end{description}
+% \begin{macrocode}
+ \scr@ifundefinedorrelax{scr@local@tocleveloffset}{}{%
+ \scr@ifundefinedorrelax{KV@KOMAarg.dsc@toclevel}{%
+ }{%
+ \DefineFamilyKey[.dsc]{KOMAarg}{toclevel}{%
+ \edef\reserved@a{%
+ \noexpand\l@addto@macro{\noexpand\scr@dsc@tocstyle@options}{%
+ level=\the\numexpr ##1+\scr@local@tocleveloffset\relax,%
+ }%
+ }\reserved@a
+ \edef\scr@local@tocleveloffset{%
+ \the\numexpr\scr@local@tocleveloffset+\scr@local@levelincrease\relax
+ }%
+ \FamilyKeyStateProcessed
+ }%
+ }%
+ }%
+% \end{macrocode}
+% \changes{v3.20}{2015/11/12}{Optionen werden nur temporär definiert}^^A
+% Optionen ausführen und anschließend wieder freigeben.
+% \begin{macrocode}
+ \FamilyExecuteOptions[.dsc]{KOMAarg}{#1}%
+ \scr@dsc@extra@relax@opts
+ \let\scr@dsc@extra@relax@opts\relax
+ \RelaxSectionCommandOptions
+ \RelaxFamilyKey[.dsc]{KOMAarg}{style}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{tocstyle}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{expandtopt}%
+ \scr@ifundefinedorrelax{scr@local@levelincrease}{}{%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{increaselevel}%
+ }%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{level}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{counterwithin}%
+% \end{macrocode}
+% Testen, ob alle benötigten Optionen für die (Um-)Definierung des
+% Gliederungsbefehls gesetzt sind:
+% \begin{macrocode}
+ \begingroup
+ \def\local@endgroup{\endgroup}%
+ \scr@ifundefinedorrelax{\scr@dsc@current numdepth}{%
+ \scr@declaresectioncommanderror{\scr@dsc@current}{section level}{level}%
+ }{}%
+ \@nameuse{scr@dsc@style@%
+ \@nameuse{scr@\scr@dsc@current @style}%
+ @neededoptionstest}%
+ \local@endgroup
+% \end{macrocode}
+% Wenn alle Informationen für die (Um-)Definierung des Gliederungsbefehls
+% zusammen sind \dots
+% \begin{macrocode}
+ \@firstofone{%
+% \end{macrocode}
+% Zunächst sicherstellen, dass der Zähler existiert und ggf. dessen
+% Ausgabe anpassen:
+% \changes{v3.20}{2015/10/15}{fehlendes \cs{expandafter} ergänzt}^^A
+% \begin{macrocode}
+ \@ifundefined{c@#2}{\newcounter{#2}}{}%
+ \ifx\scr@local@counterwithout\relax
+ \else\ifx\scr@local@counterwithout\@empty
+ \else
+ \@removefromreset{#2}{\scr@local@counterwithout}%
+ \fi
+ \@namedef{the#2}{\arabic{#2}}%
+ \fi
+ \ifx\scr@local@counterwithin\relax
+ \else\ifx\scr@local@counterwithin\@empty
+ \@namedef{the#2}{\arabic{#2}}%
+ \else
+ \@removefromreset{#2}{\scr@local@counterwithin}%
+ \@addtoreset{#2}{\scr@local@counterwithin}%
+ \expandafter\def\csname the#2\expandafter\endcsname\expandafter{%
+ \csname the\scr@local@counterwithin\endcsname.\arabic{#2}}%
+ \fi
+ \fi
+ \@ifundefined{#2format}{%
+ \@namedef{#2format}{\csname the#2\endcsname\autodot\enskip}%
+ }{}%
+% \end{macrocode}
+% Dann den eigentlichen Gliederungsbefehl definieren:
+% \begin{macrocode}
+ \ifscr@dsc@parametersonly
+ \ClassInfo{\KOMAClassName}{%
+ not defining `\expandafter\string\csname #2\endcsname' due
+ to\MessageBreak
+ empty section style option%
+ }%
+ \else
+ \scr@ifundefinedorrelax{%
+ scr@dsc@def@style@\@nameuse{scr@#2@style}@command%
+ }{%
+ \ClassWarning{\KOMAClassName}{%
+ not defining `\expandafter\string\csname #2\endcsname'
+ due\MessageBreak
+ to not yet defined section style\MessageBreak
+ `\@nameuse{scr@#2@style}'%
+ }%
+ }{%
+ \@nameuse{scr@dsc@def@style@\@nameuse{scr@#2@style}@command}{#2}%
+ }%
+ \fi
+% \end{macrocode}
+% Zu jedem Gliederungsbefehl gehört auch ein Befehl für den Kolumnentitel, der
+% bei \KOMAScript{} außerdem eine Formatierung des Zählers benötigt. Falls
+% \textsf{scrlayer} geladen ist, wird das über dessen Befehl
+% |\DeclareSectionNumberDepth| erledigt, sonst direkt:
+% \changes{v3.15a}{2015/01/21}{fix: \cs{endskip} statt \cs{enskip}}^^A
+% \begin{macrocode}
+ \@ifundefined{DeclareSectionNumberDepth}{%
+ \@ifundefined{#2markformat}{%
+ \@namedef{#2markformat}{\csname the#2\endcsname\autodot\enskip}%
+ }{}%
+ \@ifundefined{#2mark}{%
+ \expandafter\let\csname #2mark\endcsname\@gobble
+ }{}%
+ }{%
+ \DeclareSectionNumberDepth{#2}{\csname #2numdepth\endcsname}%
+ }%
+% \end{macrocode}
+% Und es gehören Befehle dazu, um einen Eintrag ins Inhaltsverzeichnis zu
+% schreiben und den Eintrag auch darzustellen:
+% \begin{macrocode}
+ \expandafter\providecommand\expandafter*%
+ \csname add#2tocentry\endcsname[2]{%
+ \addtocentrydefault{#2}{##1}{##2}%
+ }%
+ \scr@ifundefinedorrelax{scr@dte@#2@style}{%
+ }{%
+ \DeclareTOCStyleEntry[\scr@dsc@tocstyle@options]{%
+ \@nameuse{scr@dte@#2@style}%
+ }{#2}%
+ }%
+ \scr@ifundefinedorrelax{l@#2}{%
+ \DeclareTOCStyleEntry[\scr@dsc@tocstyle@options]{default}{#2}%
+ }{}%
+% \end{macrocode}
+% \changes{v3.20}{2015/0/07}{\textsf{hyperref} bei den Ebenen der
+% Verzeichniseinträge berücksichtigen}^^A
+% \changes{v3.26}{2018/06/27}{Einstellungen von \textsl{hyperref}
+% überschreiben}^^A
+% \changes{v3.26}{2018/06/27}{Notfallbehandlung für Lücken in den
+% Bookmark-Ebenen}^^A
+% \begin{macrocode}
+ \if@atdocument
+ \let\reserved@a\@firstofone
+ \else
+ \@ifpackageloaded{hyperref}{%
+ \let\reserved@a\@firstofone
+ }{%
+ \def\reserved@a##1{%
+ \AfterAtEndOfPackage{hyperref}{\AtBeginDocument{##1}}%
+ }%
+ }%
+ \fi
+ \reserved@a{%
+ \expandafter\let\csname toclevel@#2\expandafter\endcsname
+ \csname #2tocdepth\endcsname
+ \scr@ifundefinedorrelax{bookmarksetup}{%
+ \scr@ifundefinedorrelax{scr@min@toclevel}{%
+ \expandafter\let\expandafter\scr@min@toclevel
+ \csname toclevel@#2\endcsname
+ }{%
+ \expandafter\ifnum \csname toclevel@#2\endcsname
+ < \numexpr \scr@min@toclevel-1\relax
+ \ClassWarning{\KOMAClassName}{%
+ Trying emergency fix for bookmark level gap,\MessageBreak
+ because toclevel of `#2'
+ (\csname toclevel@#2\endcsname)\MessageBreak
+ is more than 1 lower than currently lowest\MessageBreak
+ known level (\scr@min@toclevel).\MessageBreak
+ Note: This fix can fail and you should load\MessageBreak
+ package `bookmark' to avoid usage of this\MessageBreak
+ fix%
+ }%
+ \expandafter\edef\csname toclevel@#2\endcsname{%
+ \the\numexpr \scr@min@toclevel-1\relax
+ }%
+ \fi
+ \expandafter\ifnum \csname toclevel@#2\endcsname
+ < \scr@min@toclevel\relax
+ \expandafter\let\expandafter\scr@min@toclevel
+ \csname toclevel@#2\endcsname
+ \fi
+ }%
+ \scr@ifundefinedorrelax{scr@max@toclevel}{%
+ \expandafter\let\expandafter\scr@max@toclevel
+ \csname toclevel@#2\endcsname
+ }{%
+ \expandafter\ifnum \csname toclevel@#2\endcsname
+ > \numexpr \scr@max@toclevel+1\relax
+ \ClassWarning{\KOMAClassName}{%
+ Trying emergency fix for bookmark level gap,\MessageBreak
+ because toclevel of `#2'
+ (\csname toclevel@#2\endcsname)\MessageBreak
+ is more than 1 greater than currently highest\MessageBreak
+ known level (\scr@max@toclevel).\MessageBreak
+ Note: This fix can fail and you should load\MessageBreak
+ package `bookmark' to avoid usage of this\MessageBreak
+ fix%
+ }%
+ \expandafter\edef\csname toclevel@#2\endcsname{%
+ \the\numexpr \scr@max@toclevel+1\relax
+ }%
+ \fi
+ \expandafter\ifnum \csname toclevel@#2\endcsname
+ > \scr@max@toclevel\relax
+ \expandafter\let\expandafter\scr@max@toclevel
+ \csname toclevel@#2\endcsname
+ \fi
+ }%
+ }{}%
+ }%
+ }%
+ }%
+ \let\scr@dsc@current\relax
+}
+% \end{macrocode}
+% \begin{macro}{\scr@declaresectioncommanderror}
+% \changes{v3.15}{2014/11/21}{neue (interne) Anweisung}^^A
+% Gibt einen Fehler aus, falls \cs{DeclareSectionCommand} zu wenige Optionen
+% übergeben wurde. Das erste Argument ist der Name des zu deklarierenden
+% Befehls, das zweite ist eine textuelle Beschreibung der fehlenden Option und
+% das dritte ist der Name der fehlenden Option. Als Seiteneffekt sorgt der
+% Befehl dafür, dass die Deklaration nicht stattfindet.
+% \begin{macrocode}
+\newcommand*{\scr@declaresectioncommanderror}[3]{%
+ \ClassError{\KOMAClassName}{%
+ #2 of \expandafter\string\csname #1\endcsname\space unknown%
+ }{%
+ Please use option `#3' to declare the #2.\MessageBreak
+ If you'll continue, declaration will be ignored%
+ }%
+ \let\local@endgroup\endgroup
+ \aftergroup\@gobbletwo
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@declaresectioncommanderror
+% \begin{macro}{\scr@declaresectioncommandwarning}
+% \changes{v3.24}{2017/04/25}{neue (interne) Anweisung}^^A
+% In einigen Fällen genügt es hingegen eine Warnung oder Info für fehlende
+% Optionen auszugeben und einen Defaultwert zu verwenden. Das erste Argument
+% ist auch hier der Name des zu deklarierenden Befehls, das zweite eine
+% textuelle Beschreibung der fehlenden Option und das dritte der Name der
+% fehlenden Option. Das vierte ist der Defaultwert, der ersatzweise verwendet
+% wird. Der Befehl hat wie \cs{scr@declaresectioncommanderror} einen
+% Seiteneffekt. In diesem Fall wird \cs{local@endgroup} um das fünfte Argument
+% erweitert.
+% \begin{macrocode}
+\newcommand*{\scr@declaresectioncommandwarning}[5]{%
+ \ClassInfo{\KOMAClassName}{%
+ #2 of \expandafter\string\csname #1\endcsname\space unknown.\MessageBreak
+ You should use option `#3' if you\MessageBreak
+ do not want to use the default value\MessageBreak
+ `\detokenize{#4}'%
+ }%
+ \l@addto@macro\local@endgroup{#5}%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@declaresectioncommandwarning
+% \end{macro}^^A \DeclareSectionCommand
+%
+% \begin{macro}{\DeclareNewSectionCommand}
+% \changes{v3.15}{2014/11/21}{neue Anweisung}^^A
+% \changes{v3.25}{2018/03/10}{zusätzliche Tests und Fehlermeldungen bei
+% \cs{the\dots}, \cs{\dots mark}, \cs{\dots format},
+% \cs{\dots markformat}}^^A
+% Basierend auf |\DeclareSectionCommand| wird eine Gliederungsanweisung
+% definiert, die zuvor noch nicht existierte. Wichtig zu bemerken ist, dass
+% die ganzen Hilfsanweisungen bereits existieren dürfen.
+% \begin{macrocode}
+\newcommand*{\DeclareNewSectionCommand}[2][]{%
+ \@ifundefined{#2}{%
+ \@tempswatrue
+ \let\reserved@b\@empty
+ \@for \reserved@a:=the#2,#2mark,#2format,#2markformat\do{%
+ \expandafter\scr@ifundefinedorrelax\expandafter{\reserved@a}{}{%
+ \@tempswafalse
+ \edef\reserved@b{\expandafter\string\csname \reserved@a\endcsname}%
+ }
+ }
+ \if@tempswa
+ \DeclareSectionCommand[{#1}]{#2}%
+ \else
+ \ClassError{\KOMAClassName}{%
+ command `\reserved@b` already defined%
+ }{%
+ You've tried to define the section command `\expandafter\string\csname
+ #2\endcsname` newly.\MessageBreak
+ Such a section command needs an additional new command
+ `\reserved@b`,\MessageBreak
+ but this already exists. So you cannot define
+ `\expandafter\string\csname #2\endcsname` newly.\MessageBreak
+ Maybe you should use one of \string\DeclareSectionCommand,
+ \string\RedeclareSectionCommand,\MessageBreak
+ or \string\ProvideSectionCommand.\MessageBreak
+ If you'll continue, the command will be ignored.%
+ }%
+ \fi
+ }{%
+ \ClassError{\KOMAClassName}{%
+ command `\expandafter\string\csname #2\endcsname` already defined%
+ }{%
+ You've tried to define the section command `\expandafter\string\csname
+ #2\endcsname` newly,\MessageBreak
+ but a command or something else with this name already
+ exists.\MessageBreak
+ Maybe you should use one of \string\DeclareSectionCommand,
+ \string\RedeclareSectionCommand,\MessageBreak
+ or \string\ProvideSectionCommand.\MessageBreak
+ If you'll continue, the command will be ignored.%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \DeclareNewSectionCommand
+%
+% \begin{macro}{\RedeclareSectionCommand}
+% \changes{v3.15}{2014/11/21}{neue Anweisung}^^A
+% Basierend auf |\DeclareSectionCommand| wird eine Gliederungsanweisung
+% umdefiniert, die zuvor bereits existierte. Wichtig zu bemerken ist, dass
+% die ganzen Hilfsanweisungen nicht zu exisieren brauchen.
+% \begin{macrocode}
+\newcommand*{\RedeclareSectionCommand}[2][]{%
+ \@ifundefined{#2}{%
+ \ClassError{\KOMAClassName}{%
+ command `\expandafter\string\csname #2\endcsname` not defined%
+ }{%
+ You've tried to re-define the section command `\expandafter\string\csname
+ #2\endcsname`,\MessageBreak
+ but a command with this name does not exists.\MessageBreak
+ Maybe you should use one of \string\DeclareSectionCommand,
+ \string\DeclareNewSectionCommand,\MessageBreak
+ or \string\ProvideSectionCommand.\MessageBreak
+ If you'll continue, the command will be irgnored.%
+ }%
+ }{%
+ \DeclareSectionCommand[{#1}]{#2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \RedeclareSectionCommand
+%
+% \begin{macro}{\ProvideSectionCommand}
+% \changes{v3.15}{2014/11/21}{neue Anweisung}^^A
+% Basierend auf |\DeclareSectionCommand| wird eine Gliederungsanweisung
+% definiert, wenn sie zuvor noch nicht existierte. Wichtig zu bemerken ist,
+% dass die ganzen Hilfsanweisungen bereits existieren dürfen.
+% \begin{macrocode}
+\newcommand*{\ProvideSectionCommand}[2][]{%
+ \@ifundefined{#2}{%
+ \DeclareSectionCommand[{#1}]{#2}%
+ }{%
+ \ClassInfo{\KOMAClassName}{%
+ \string\ProvideSectionCommand{#1} ignored%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \ProvideSectionCommand
+%
+% \begin{macro}{\DeclareSectionCommands}
+% \changes{v3.15}{2014/12/03}{neue Anweisung}^^A
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} eingefügt}^^A
+% Basierend auf \cs{DeclareSectionCommand} können gleich mehrere
+% Gliederungsanweisungen definiert werden. Dabei sorgt Option
+% \texttt{increaselevel} dafür, dass die Werte von \texttt{level} und
+% \texttt{toclevel} automatisch von Befehl zu Befehl um den angegebenen Wert
+% (Default ist 1) erhöht werden.
+% \begin{macrocode}
+\newcommand*{\DeclareSectionCommands}[2][]{%
+ \edef\reserved@a{#2}%
+ \def\scr@local@levelincrease{\z@}%
+ \def\scr@local@leveloffset{\z@}%
+ \def\scr@local@tocleveloffset{\z@}%
+ \@for\reserved@a:=\reserved@a\do{%
+ \scr@trim@spaces\reserved@a
+ \edef\reserved@a{%
+ \unexpanded{\DeclareSectionCommand[{#1}]}{\reserved@a}%
+ }%
+ \reserved@a
+ }%
+ \let\scr@local@levelincrease\relax
+ \let\scr@local@leveloffset\relax
+ \let\scr@local@tocleveloffset\relax
+}
+% \end{macrocode}
+% \end{macro}^^A \DeclareSectionCommands
+%
+% \begin{macro}{\DeclareNewSectionCommands}
+% \changes{v3.15}{2014/12/03}{neue Anweisung}^^A
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} eingefügt}^^A
+% Im Unterschied zu \cs{DeclareNewSectionCommand} führt diese Anweisung die
+% Änderung auch dann aus, wenn die Anweisung bereits deklariert war. Eine
+% Fehlermeldung wird aber natürlich trotzdem ausgegeben. Dieser Unterschied
+% ist jedoch notwendig, weil sonst Option \texttt{increaselevel} für
+% nachfolgende Befehle nicht mehr korrekt arbeiten würde.
+% \begin{macrocode}
+\newcommand*{\DeclareNewSectionCommands}[2][]{%
+ \edef\reserved@a{#2}%
+ \def\scr@local@levelincrease{\z@}%
+ \def\scr@local@leveloffset{\z@}%
+ \def\scr@local@tocleveloffset{\z@}%
+ \@for\reserved@a:=\reserved@a\do{%
+ \scr@trim@spaces\reserved@a
+ \@ifundefined{\reserved@a}{}{%
+ \ClassError{\KOMAClassName}{%
+ command `\expandafter\string\csname\reserved@a\endcsname` already
+ defined%
+ }{%
+ You've tried to define the section command
+ `\expandafter\string\csname\reserved@a\endcsname` newly,\MessageBreak
+ but a command, token, box or length with this name already
+ exists.\MessageBreak
+ Maybe you should use one of \string\DeclareSectionCommand,
+ \string\RedeclareSectionCommand,\MessageBreak
+ or \string\ProvideSectionCommand.\MessageBreak
+ Nevertheless, if you'll continue, the command will be defined.%
+ }%
+ }%
+ \edef\reserved@a{%
+ \unexpanded{\DeclareSectionCommand[{#1}]}{\reserved@a}%
+ }%
+ \reserved@a
+ }%
+ \let\scr@local@levelincrease\relax
+ \let\scr@local@leveloffset\relax
+ \let\scr@local@tocleveloffset\relax
+}
+% \end{macrocode}
+% \end{macro}^^A \DeclareNewSectionCommands
+%
+% \begin{macro}{\RedeclareSectionCommands}
+% \changes{v3.15}{2014/12/03}{neue Anweisung}^^A
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} eingefügt}^^A
+% Im Unterschied zu \cs{RedeclareNewSectionCommands} führt diese Anweisung die
+% Änderung auch dann aus, wenn die Anweisung noch nicht deklariert war. Eine
+% Fehlermeldung wird aber natürlich trotzdem ausgegeben. Dieser Unterschied
+% ist jedoch notwendig, weil sonst Option \texttt{increaselevel} für
+% nachfolgende Befehle nicht mehr korrekt arbeiten würde.
+% \begin{macrocode}
+\newcommand*{\RedeclareSectionCommands}[2][]{%
+ \edef\reserved@a{#2}%
+ \def\scr@local@levelincrease{\z@}%
+ \def\scr@local@leveloffset{\z@}%
+ \def\scr@local@tocleveloffset{\z@}%
+ \@for\reserved@a:=\reserved@a\do{%
+ \scr@trim@spaces\reserved@a
+ \@ifundefined{\reserved@a}{%
+ \ClassError{\KOMAClassName}{%
+ command `\expandafter\string\csname\reserved@a\endcsname` not defined%
+ }{%
+ You've tried to re-define the section command
+ `\expandafter\string\csname\reserved@a\endcsname`,\MessageBreak
+ but a command with this name does not exists.\MessageBreak
+ Maybe you should use one of \string\DeclareSectionCommand,
+ \string\DeclareNewSectionCommand,\MessageBreak
+ or \string\ProvideSectionCommand.\MessageBreak
+ Nevertheless, if you'll continue, the command will be defined.%
+ }%
+ }{}%
+ \edef\reserved@a{%
+ \unexpanded{\DeclareSectionCommand[{#1}]}{\reserved@a}%
+ }%
+ \reserved@a
+ }%
+ \let\scr@local@levelincrease\relax
+ \let\scr@local@leveloffset\relax
+ \let\scr@local@tocleveloffset\relax
+}
+% \end{macrocode}
+% \end{macro}^^A \RedeclareSectionCommands
+%
+% \begin{macro}{\ProvideSectionCommands}
+% \changes{v3.15}{2014/12/03}{neue Anweisung}^^A
+% \changes{v3.17}{2015/03/23}{Umbau, um stilabhängige Optionen zu
+% ermöglichen}^^A
+% \changes{v3.26}{2018/08/29}{\cs{scr@trim@spaces} eingefügt}^^A
+% Hier wird es nun wirklich schwierig, weil wir irgendwie dafür sorgen müssen,
+% dass Option \texttt{increaselevel} funktioniert, auch wenn gar nichts
+% definiert werden darf. Das macht die Geschichte ein wenig auswändig.
+% \begin{macrocode}
+\newcommand*{\ProvideSectionCommands}[2][]{%
+ \edef\reserved@a{#2}%
+ \def\scr@local@levelincrease{\z@}%
+ \def\scr@local@leveloffset{\z@}%
+ \def\scr@local@tocleveloffset{\z@}%
+ \@for\reserved@a:=\reserved@a\do{%
+ \scr@trim@spaces\reserved@a
+ \@ifundefined{\reserved@a}{%
+ \edef\reserved@a{%
+ \unexpanded{\DeclareSectionCommand[{#1}]}{\reserved@a}%
+ }%
+ \reserved@a
+ }{%
+% \end{macrocode}
+% Wenn die Anweisung bereits definiert ist, dann müssen wir trotzdem die
+% Optionen auswerten, wobei allerdings nur die Option \texttt{level} und
+% \texttt{increaselevel} eine Wirkung haben dürfen. Der Rest wird per
+% \texttt{@else}-Optionen erledigt.
+% \begin{macrocode}
+ \DefineFamilyKey[.dsc]{KOMAarg}{@else@}{\FamilyKeyStateProcessed}%
+ \FamilyCounterMacroKey[.dsc]{KOMAarg}{increaselevel}[1]%
+ {\scr@local@levelincrease}%
+ \DefineFamilyKey[.dsc]{KOMAarg}{level}{%
+ \FamilySetCounterMacro{KOMAarg}{level}{\reserved@b}{##1}%
+ \edef\scr@local@leveloffset{%
+ \the\numexpr\scr@local@leveloffset+\scr@local@levelincrease\relax
+ }%
+ }%
+ \DefineFamilyKey[.dsc]{KOMAarg}{toclevel}{%
+ \FamilySetCounterMacro{KOMAarg}{toclevel}{\reserved@b}{##1}%
+ \edef\scr@local@tocleveloffset{%
+ \the\numexpr\scr@local@tocleveloffset+\scr@local@levelincrease\relax
+ }%
+ }%
+ \FamilyExecuteOptions[.dsc]{KOMAarg}{#1}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{toclevel}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{level}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{increaselevel}%
+ \RelaxFamilyKey[.dsc]{KOMAarg}{@else@}%
+ }%
+ }%
+ \let\scr@local@levelincrease\relax
+ \let\scr@local@leveloffset\relax
+ \let\scr@local@tocleveloffset\relax
+}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \ProvideSectionCommands
+%
+% \begin{option}{bookmarkpackage}
+% \selectlanguage{english}^^A
+% \changes{v3.26}{2018/06/27}{new option}^^A
+% Package \textsf{hyperref} has problems with bookmark level gaps. So if
+% either the users omits a heading level or defines a heading with a level
+% that distinguish more than one from the previous or following level, there
+% would be a problem. One recommended solution for this would be to use
+% package \textsf{bookmark}. So if we load this package, we can use the same
+% value for bookmark levels and TOC levels even within
+% \textsf{scrartcl}. Nevertheless we allow the user to decide not to use
+% \textsf{bookmark}, but then it is not my fault, if something strange
+% happens.
+% \begin{macrocode}
+%<*option>
+\KOMA@ifkey{bookmarkpackage}{@scr@autoloadbookmarkpackage}
+\@scr@autoloadbookmarkpackagetrue
+\KOMA@kav@add{.\KOMAClassFileName}{bookmarkpackage}{true}
+\AfterAtEndOfPackage{hyperref}{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{bookmark}{}{%
+ \if@scr@autoloadbookmarkpackage
+ \ClassInfo{\KOMAClassName}{%
+ loading recommended package `bookmark'.\MessageBreak
+ Using `bookmark' together with `hyperref' is
+ recommended,\MessageBreak
+ because of handling of possible bookmark level gaps.\MessageBreak
+ You can avoid loading `bookmark' with KOMA-Script
+ option\MessageBreak
+ `bookmarkpackage=false' before \string\begin{document}
+ and\MessageBreak
+ you can avoid this message with
+ `\string\usepackage{bookmark}'\MessageBreak
+ before \string\begin{document}%
+ }%
+ \RequirePackage{bookmark}%
+% \end{macrocode}
+% \changes{v3.26b}{2019/01/17}{workaround for \cs{@beginmainauxhook} added}^^A
+% Sometimes \textsf{auxhook} is not able to recognize that it cannot use a
+% patch of \cs{document} to execute \cs{@beginmainauxhook} if it is loaded via
+% \cs{AtBeginDocument}. In this case we do it here.
+% \begin{macrocode}
+ \ifx\@beginmainauxhook\relax
+ \else
+ \if@filesw
+ \ClassWarning{\KOMAClassName}{%
+ seems someone has broken package auxhook.\MessageBreak
+ Usually this happens, if auxhook is loaded or used\MessageBreak
+ implicitly or explicitly by patching
+ `\string\document'%
+ \scr@ifundefinedorrelax{AtEndPreamble}{}{%
+ \MessageBreak
+ or via etoolbox command \string\AtEndPreamble
+ }.\MessageBreak
+ Trying an emergency workaround%
+ }%
+ \@beginmainauxhook
+ \fi
+ \fi
+ \fi
+ }%
+ }%
+}
+%</option>
+%</class>
+% \end{macrocode}
+% \selectlanguage{ngerman}^^A
+% \end{option}^^A bookmarkpackage
+%
+%
+% \subsection{Definitionen für Präambeln}
+%
+% Bei den \KOMAScript-Klassen \textsf{scrbook} und \textsf{scrreprt}
+% können \cs{part} und \cs{chapter} mit Präambeln versehen werden. Es
+% wird gleichzeitig eine Präambel über und unter der jeweiligen
+% Überschrift unterstützt.
+%
+% \begin{macro}{\use@preamble}
+% \changes{v2.8p}{2001/09/25}{neu (intern)}^^A
+% Dieses Makro dient allgemein zum Setzen einer Präambel (für
+% Gliederungsüberschriften), wenn eine solche definiert ist. Als
+% Argument wird der Name der Präambel übergeben, an den automatisch
+% \texttt{@preamble} angehängt wird. Zum Schluss wird die gespeicherte
+% Präambel gelöscht.
+% \begin{macrocode}
+%<*class>
+%<*book|report>
+%<*body>
+\newcommand*{\use@preamble}[1]{%
+ \@ifundefined{#1@preamble}{}{%
+ \@nameuse{#1@preamble}%
+ \global\expandafter\let\csname#1@preamble\endcsname=\relax
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\set@preamble}
+% \changes{v2.8p}{2001/09/25}{neu (intern)}^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}^^A
+% Das Makro \cs{set@preamble} dient allgemein der Defintion einer
+% Präambel (für Gliederungsüberschriften). Als Argument wird der
+% Name der Gliederungsebene übergeben. Danach folgt ein optionales
+% Argument, das die Position der Präambel angibt. Darauf folgt ein
+% weiteres optionales Argument, das die Breite der Präambel
+% angibt. Ist nur ein optionales Argument angegeben, so ist es die
+% Position. Es folgt ein obligatorisches Argument mit dem Inhalt der
+% Präambel. Die Definition der Präambel erfolgt global.
+% \begin{macro}{\set@@preamble}
+% \changes{v2.8p}{2001/09/25}{neu (intern)}^^A
+% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
+% \cs{kernel@ifnextchar}}^^A
+% \begin{macro}{\set@@@preamble}
+% \changes{v2.8p}{2001/09/25}{neu (intern)}^^A
+% \begin{macro}{\set@@@@preamble}
+% \changes{v2.8p}{2001/09/25}{neu (intern)}^^A
+% \changes{v2.8q}{2001/11/27}{fehlende Klammern ergänzt}^^A
+% \changes{v3.12}{2012/10/16}{b mit derselben Funktion wie u erlaubt}^^A
+% \changes{v3.12a}{2014/02/14}{b korrigiert}^^A
+% Da mehrere optionale Argumente nach einem obligatorischen Argument
+% auszuwerten sind, werden diverse Hilfsmakros benötigt.
+% \begin{macrocode}
+\newcommand*{\set@preamble}[1]{%
+% \end{macrocode}
+% Zunächst wird das erste optionale Argument gesucht.
+% \begin{macrocode}
+ \kernel@ifnextchar [%]
+ {\set@@preamble{#1}}{\set@@@preamble{#1}[][\hsize]}%
+}
+\newcommand*{\set@@preamble}{}
+\def\set@@preamble#1[#2]{%
+% \end{macrocode}
+% Wenn ein optionales Argument existiert, kann es auch ein zweites
+% geben. Wenn nicht, wird mit der Voreinstellung gearbeitet.
+% \begin{macrocode}
+ \kernel@ifnextchar [%]
+ {\set@@@preamble{#1}[{#2}]}{\set@@@preamble{#1}[{#2}][\hsize]}%
+}
+\newcommand{\set@@@preamble}{}
+\long\def\set@@@preamble#1[#2][#3]#4{%
+% \end{macrocode}
+% Dies ist das Hauptmakro, das die eigentliche Arbeit macht. Es muss
+% \cs{long} definiert werden, da die Präambel auch aus mehreren
+% Absätzen bestehen kann.
+%
+% Zunächst wird das Positionsargument ausgewertet. Dies geschieht mit
+% lokalen Hilfsmakros und einer Schleife. Zur Funktion der Schleife
+% siehe im dokumentierten \LaTeX-Kern.
+% \begin{macrocode}
+ \begingroup
+ \def\prmbl@pos{#2}\let\prmbl@hpos\relax\let\prmbl@vpos\relax
+ \expandafter \@tfor \expandafter \@tempa
+ \expandafter :\expandafter =\prmbl@pos
+ \do{%
+ \if \@tempa l%
+ \set@preamble@hpos{0}{#2}%
+ \fi%
+ \if \@tempa c%
+ \set@preamble@hpos{1}{#2}%
+ \fi%
+ \if \@tempa r%
+ \set@preamble@hpos{2}{#2}%
+ \fi%
+ \if \@tempa u%
+ \set@preamble@vpos{0}{#2}%
+ \fi%
+ \if \@tempa b%
+ \set@preamble@vpos{0}{#2}%
+ \fi
+ \if \@tempa o%
+ \set@preamble@vpos{1}{#2}%
+ \fi%
+ \if \@tempa t%
+ \set@preamble@vpos{1}{#2}%
+ \fi
+ }%
+% \end{macrocode}
+% Wurde keine horizontale oder vertikale Ausrichtung definiert, so
+% wird nun der Standardwert dafür eingesetzt.
+% \begin{macrocode}
+ \@ifundefined{prmbl@hpos}{\def\prmbl@hpos{0}}{}%
+ \@ifundefined{prmbl@vpos}{\def\prmbl@vpos{0}}{}%
+% \end{macrocode}
+% Nun sind die Positionen ermittelt und es werden abhängig davon
+% entsprechende Päambelmakros definiert.
+% \begin{macrocode}
+ \ifcase\prmbl@hpos
+% \end{macrocode}
+% Zunächst links unten und oben:
+% \begin{macrocode}
+ \ifcase\prmbl@vpos
+ \set@@@@preamble{#1@u}{t}{#3}{}{\hfil}{#4}%
+ \else
+ \set@@@@preamble{#1@o}{b}{#3}{}{\hfil}{#4}%
+ \fi
+ \or
+% \end{macrocode}
+% Dann zentriert unten und oben:
+% \begin{macrocode}
+ \ifcase\prmbl@vpos
+ \set@@@@preamble{#1@u}{t}{#3}{\hfil}{\hfil}{#4}%
+ \else
+ \set@@@@preamble{#1@o}{b}{#3}{\hfil}{\hfil}{#4}%
+ \fi
+ \else
+% \end{macrocode}
+% Zum Schluss rechts und oben:
+% \begin{macrocode}
+ \ifcase\prmbl@vpos
+ \set@@@@preamble{#1@u}{t}{#3}{\hfil}{}{#4}%
+ \else
+ \set@@@@preamble{#1@o}{b}{#3}{\hfil}{}{#4}%
+ \fi
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% Es folgt das Makro, mit dem die Definition tatsächlich
+% stattfindet. Das erste Argument ist der Name der Präambel, das
+% zweite die Positionsoption für die verwendete \cs{parbox}, das
+% dritte ist die Breite der \cs{parbox}, dann zwei Argumente mit der
+% horizontalen Ausrichtung vor und nach der \cs{parbox} und das
+% sechste Agument ist schließlich der Inhalt der \cs{parbox}.
+% \begin{macrocode}
+\newcommand{\set@@@@preamble}[6]{%
+ \expandafter\gdef\csname #1@preamble\endcsname{%
+ \hbox to\hsize{#4\parbox[{#2}]{#3}{#6\par}#5\par}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\set@preamble@hpos}
+% \changes{v2.8q}{2001/09/25}{neu (intern)}^^A
+% Eines der Hilfsmakros dient dazu, die horizontale Position der
+% Präambel einzustellen, falls dies nicht bereits erfolgt ist. Ist es
+% bereits nicht über"-einstimmend erfolgt, wird ein Fehler
+% ausgegeben. Dieses Makro ist extrem intern und funktioniert nur im
+% Kontext vor \cs{set@preamble}.
+% \begin{macrocode}
+\newcommand*{\set@preamble@hpos}[2]{%
+ \@ifundefined{prbml@hpos}{%
+ \def\prmbl@hpos{#1}%
+ }{%
+ \ifnum \prmbl@hpos=0\relax\else%
+ \ClassError{\KOMAClassName}{%
+ inconsistent hpos options%
+ }{%
+ You've said `#2' as position option. But you have
+ to\MessageBreak
+ use only one of `l', `r', or `c' not two of
+ these.\MessageBreak
+ If you'll continue only first hpos option will be
+ used%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \set@preamble@hpos
+% \begin{macro}{\set@preamble@vpos}
+% \changes{v2.8q}{2001/09/25}{neu (intern)}^^A
+% Das Hilfsmakro für die vertikale Position funktioniert in gleicher
+% Weise.
+% \begin{macrocode}
+\newcommand*{\set@preamble@vpos}[2]{%
+ \@ifundefined{prbml@vpos}{%
+ \def\prmbl@vpos{#1}%
+ }{%
+ \ifnum \prmbl@vpos=0\relax\else%
+ \ClassError{\KOMAClassName}{%
+ inconsistent vpos options%
+ }{%
+ You've said `#2' as position option. But you have
+ to\MessageBreak
+ use only one of `t', `o', `b', or `u' not two of
+ these.\MessageBreak
+ If you'll continue only first vpos option will be
+ used%
+ }%
+ \fi
+ }%
+}
+%</body>
+%</book|report>
+%</class>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\KOMAScript-eigene Befehle für Verzeichniseinträge}
+% Wie schon bei den Gliederungsbefehlen genügt \KOMAScript{} nicht, was der
+% \LaTeX-Kern für Verzeichniseinträge zu bieten hat.
+%
+% \begin{macro}{\bprot@dottedtocline}
+% \changes{v2.96a}{2006/11/30}{neu (intern)}^^A
+% Dieses Makro wird benötigt, um die Ebenen unterhalb von \cs{chapter}
+% bzw. \cs{section} im Inhaltsverzeichnis ebenfalls vor unerwünschten
+% Umbrüchen zwischen Eintrag und Unterebene zu schützen.
+% \begin{macrocode}
+%<*class>
+%<*body>
+\newcommand*{\bprot@dottedtocline}[5]{%
+ \expandafter\ifnum\scr@v@is@gt{2.96}\relax
+ \ifnum #1>\c@tocdepth \else
+ \ifnum \lastpenalty<\numexpr 20010-#1\relax
+ \addpenalty{\@lowpenalty}%
+ \fi
+ \@dottedtocline{#1}{#2}{#3}{#4}{#5}%
+ \penalty \numexpr 20009-#1\relax
+ \fi
+ \else
+ \@dottedtocline{#1}{#2}{#3}{#4}{#5}%
+ \fi
+}
+%</body>
+%</class>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Grobeinteilung von Büchern}
+%
+% Bei Büchern gibt es teilweise eine Einteilung in Vorderteil, Hauptteil und
+% Endteil, die nicht wirklich eine Gliederung darstellt, sondern auf
+% Gliederung, Seitennummerierung etc. Einfluss nimmt.
+%
+% \begin{macro}{\if@mainmatter}
+% \begin{macro}{\@mainmattertrue}
+% \begin{macro}{\@mainmatterfalse}
+% \changes{v2.3a}{1995/07/08}{\cs{if@mainmatter} Anforderung verschoben}^^A
+% Über diesen Schalter wird bei Buchklassen festgelegt, ob wir uns im
+% Hauptteil des Dokuments befinden oder nicht. Die eigentliche
+% Umschaltung geschieht mit Hilfe der Befehle \cs{frontmatter},
+% \cs{mainmatter}, \cs{backmatter}. Ohne Umschaltung befinden wir uns
+% bereits im Hauptteil.
+% \begin{macrocode}
+%<*class>
+%<*book>
+%<*body>
+\newif\if@mainmatter\@mainmattertrue
+% \end{macrocode}
+% \end{macro}^^A \@mainmatterfalse
+% \end{macro}^^A \@mainmattertrue
+% \end{macro}^^A \if@mainmatter
+%
+% \begin{macro}{\frontmatter}
+% \changes{v2.4e}{1996/07/02}{Option \texttt{openany} beachten}^^A
+% \changes{v2.5h}{1999/12/29}{Option \texttt{twoside} beachten}^^A
+% \changes{v3.00}{2008/09/27}{\cs{cleardoubleoddpage} statt
+% \cs{cleardoublepage}}^^A
+% Der Vorspann enthält bei Büchern oftmals Inhaltsverzeichnis, Vorwort
+% und dergleichen und wird mit kleinen römischen Seitenzahlen
+% versehen.
+% \begin{macrocode}
+\newcommand*\frontmatter{%
+ \if@twoside\cleardoubleoddpage\else\clearpage\fi
+ \@mainmatterfalse\pagenumbering{roman}%
+}
+% \end{macrocode}
+% \end{macro}^^A \frontmatter
+% \begin{macro}{\mainmatter}
+% \changes{v2.4e}{1996/07/02}{Option \texttt{openany} beachten}^^A
+% \changes{v2.5h}{1999/12/29}{Option \texttt{twoside} beachten}^^A
+% \changes{v3.00}{2008/09/27}{\cs{cleardoubleoddpage} statt
+% \cs{cleardoublepage}}^^A
+% Der Hauptteil ist das Fleisch der Bücher.
+% \begin{macrocode}
+\newcommand*\mainmatter{%
+ \if@twoside\cleardoubleoddpage\else\clearpage\fi
+ \@mainmattertrue\pagenumbering{arabic}%
+}
+% \end{macrocode}
+% \end{macro}^^A \mainmatter
+% \begin{macro}{\backmatter}
+% \changes{v3.00}{2008/09/27}{\cs{cleardoubleoddpage} statt
+% \cs{cleardoublepage}}^^A
+% Auch wenn nicht ganz einzusehen ist, warum das anders sein soll,
+% wird hier nicht nach der Option \texttt{twoside}, sondern nach
+% \texttt{openright} unterschieden.
+% \begin{macrocode}
+\newcommand*\backmatter{%
+ \if@openright\cleardoubleoddpage\else\clearpage\fi\@mainmatterfalse
+}
+%</body>
+%</book>
+%</class>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Anhang}
+%
+% Teile gibt es tatsächlich bei allen drei Hauptklassen.
+%
+% \begin{macro}{\appendix}
+% Wird der Anhang aktiviert, so werden Kapitel bzw. Abschnitte zukünftig mit
+% Buchstaben nummeriert.
+% \changes{v2.2d}{1995/05/28}{\textsf{scrartcl} benötigt keinen Zähler für
+% \cs{chapter}}^^A
+% \changes{v2.3c}{1995/08/06}{alternative Nummerierung bei Verwendung eines
+% Anhangs}^^A
+% \changes{v2.8}{2001/06/15}{\cs{appendixmore} wird beachtet}^^A
+% \changes{v2.8e}{2001/07/10}{\cs{@altsecnumformattrue} wird nicht länger
+% ausgeführt}^^A
+% \changes{v2.8o}{2001/09/19}{\cs{par} eingefügt}^^A
+% \changes{v2.95}{2006/07/04}{\cs{newcommand*} durch \cs{gdef} ersetzt}^^A
+% \changes{v2.95}{2006/07/04}{Ausführung von \cs{appendixmore}^^A
+% vereinfacht}^^A
+% \changes{v3.20}{2016/12/05}{neue eindeutige Warnung}
+% \begin{macro}{\appendixmore}
+% \cs{appendixmore} kann als \emph{hook} verwendet werden. Derzeit wird dieser
+% allerdings noch recht stiefmütterlich behandelt und lediglich von Option
+% \texttt{appendixprefix} definiert.
+% \begin{macrocode}
+%<*class>
+%<*body>
+\newcommand*\appendix{%
+ \ifstr{\@currenvir}{appendix}{%
+ \ClassWarning{\KOMAClassName}{%
+ You are using
+ `\string\begin{appendix}...\string\end{appendix}'.\MessageBreak
+ You should note, that `\string\appendix' is a mostly
+ globally\MessageBreak
+ working command not an enviroment with only local\MessageBreak
+ effects. Therefore `\string\end{appendix}' will neither\MessageBreak
+ switch back to normal section numbering nor finish\MessageBreak
+ every other effect of `\string\begin{appendix}'.\MessageBreak
+ Nevertheless, some effects may end with\MessageBreak
+ `\string\end{appendix}' and the document may become\MessageBreak
+ inconsistent.\MessageBreak
+ Because of this, you should remove `\string\end{appendix}'\MessageBreak
+ and replace `\string\begin{appendix}' by command\MessageBreak
+ `\string\appendix'%
+ }%
+ }{}%
+ \par%
+%<*article>
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \gdef\thesection{\@Alph\c@section}%
+%</article>
+%<*report|book>
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \gdef\@chapapp{\appendixname}%
+ \gdef\thechapter{\@Alph\c@chapter}%
+%</report|book>
+ \csname appendixmore\endcsname
+}
+%</body>
+%</class>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Teile}
+%
+% \changes{v2.8e}{2001/07/10}{\cs{@thepart} entfernt}
+%
+% Teile sind bei den unterschiedlichen Klassen unterschiedlich definiert.
+%
+% \begin{macro}{\size@part}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% \changes{v2.96a}{2006/12/02}{letztes Element darf ein Argument erwarten,
+% wenn es keine Auswirkung auf den Zeilen abstand hat}^^A
+% \begin{macro}{\size@partnumber}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% \changes{v2.96a}{2006/12/02}{letztes Element darf ein Argument erwarten,
+% wenn es keine Auswirkung auf den Zeilen abstand hat}^^A
+% Hier werden diese Befehle nur vordefiniert. Ihre tatsächliche Einstellung
+% erfolgt über die (Vor-)Auswahl von Option \texttt{headings}.
+% \begin{macrocode}
+%<*class>
+%<*prepare>
+\newcommand*{\size@part}{}
+\newcommand*{\size@partnumber}{}
+%</prepare>
+% \end{macrocode}
+% \end{macro}^^A \size@partnumber
+% \end{macro}^^A \size@part
+%
+%
+% \begin{macro}{\partheadstartvskip}
+% \changes{v2.95a}{2006/07/10}{neue Konfiguratonsmöglichkeit}^^A
+% \changes{v3.15}{2014/11/24}{\textsf{scrartcl} definiert und verwendet
+% \cs{scr@part@beforeskip}}^^A
+% \begin{macro}{\partheadmidvskip}
+% \changes{v2.95a}{2006/07/10}{neue Konfiguratonsmöglichkeit}^^A
+% \begin{macro}{\partheadendvskip}
+% \changes{v2.95a}{2006/07/10}{neue Konfiguratonsmöglichkeit}^^A
+% \changes{v3.15}{2014/11/24}{\textsf{scrartcl} definiert und verwendet
+% \cs{scr@part@afterskip}}^^A
+% \begin{macro}{\parheademptypage}
+% \changes{v3.02}{2009/01/01}{neue Konfigurationsmöglichkeit}^^A
+% Diese vier Makros werden verwendet, um den Abstand über in und unter der
+% Überschrift eines Teils und die leere Rückseite zu definieren. Prinzipiell
+% kann damit auch der Umbruch zwischen Nummer und Text entfernt werden.
+% Da die Größe nicht über Option \texttt{headings} beeinflusst werden kann,
+% müssen diese Hilfsmakros nicht bereits vor den Optionen definiert werden.
+%
+% Zur Erhöhung der Kompatibilität mit \cs{DeclareSectionCommand} werden
+% zunächst einige Hilfsanweisung definiert und verwendet.
+% \begin{macro}{\scr@part@sectionbeforeskip}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung}^^A
+% \changes{v3.17}{2015/03/25}{umbenannt in \cs{scr@part@beforeskip}}^^A
+% \begin{macro}{\scr@part@sectionafterskip}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung}^^A
+% \changes{v3.17}{2015/03/25}{umbenannt in \cs{scr@part@afterskip}}^^A
+% \begin{macro}{\scr@part@sectionindent}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung (unbenutzt)}^^A
+% \changes{v3.17}{2015/03/24}{entfernt}^^A
+% \end{macro}^^A \scr@part@sectionindent
+% \end{macro}^^A \scr@part@sectionafterskip
+% \end{macro}^^A \scr@part@sectionbeforeskip
+% \begin{macro}{\scr@part@beforeskip}
+% \changes{v3.17}{2015/03/25}{neu (intern) aus Umdefinierung von
+% \cs{scr@part@ectionbeforeskip}}^^A
+% \begin{macro}{\scr@part@innerskip}
+% \changes{v3.17}{2015/03/24}{neu (intern)}^^A
+% \begin{macro}{\scr@part@afterskip}
+% \changes{v3.17}{2015/03/25}{neu (intern) aus Umdefinierung von
+% \cs{scr@part@ectionbeforeskip}}^^A
+% \begin{macro}{\scr@part@style}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung}^^A
+% Es wird der leere Stil verwendet, mit dem Neudefinitionen von \cs{part}
+% über \cs{DeclareSectionCommand} verhindert werden.
+% \begin{macrocode}
+%<*prepare>
+\newcommand*{\scr@part@beforeskip}{%
+%<article> 4ex
+% \end{macrocode}
+% Hinweis: Das |+\baselineskip| wird benötigt, um Kompatibilitätsprobleme mit
+% der Umdefinierung von |\chapterheadstartvskip| zu vermeiden.
+% \begin{macrocode}
+%<report|book> \z@ \@plus 1fil + \baselineskip
+}
+%<book|report>\newcommand*{\scr@part@innerskip}{20\p@}
+\newcommand*{\scr@part@afterskip}{%
+%<article> 3ex
+%<report|book> \z@ \@plus 1fil
+}
+\newcommand*{\scr@part@style}{part}
+% \end{macrocode}
+% \end{macro}^^A \scr@part@style
+% \end{macro}^^A \scr@part@afterskip
+% \end{macro}^^A \scr@part@innerskip
+% \end{macro}^^A \scr@part@beforeskip
+% \begin{macrocode}
+\newcommand*{\partheadstartvskip}{%
+%<article> \addvspace{\@tempskipa}%
+%<report|book> \null\vskip-\baselineskip\vskip\@tempskipa
+}
+\newcommand*{\partheadmidvskip}{%
+ \par\nobreak
+%<book|report> \vskip\@tempskipa
+}
+\newcommand*{\partheadendvskip}{%
+%<article> \vskip\@tempskipa
+%<report|book> \vskip\@tempskipa\newpage
+}
+%<*report|book>
+\newcommand*{\partheademptypage}{%
+ \if@twoside\if@openright
+ \null%
+ \thispagestyle{empty}%
+ \newpage
+ \fi\fi
+}
+%</report|book>
+%</prepare>
+% \end{macrocode}
+% \end{macro}^^A \partheademptypage
+% \end{macro}^^A \partheadendvskip
+% \end{macro}^^A \partheadmidvskip
+% \end{macro}^^A \partheadstartvskip
+%
+%
+% \begin{macro}{\scr@startpart}
+% \changes{v3.18}{2015/05/23}{neue Anweisung (intern)}^^A
+% Diese Anweisung ist von der ursprünglichen Definition von \cs{part}
+% abgeleitet und erbt deren ChangeLog-Einträge.
+% \changes{v2.8d}{2001/07/05}{\cs{partpagestyle} statt \texttt{plain}}^^A
+% \changes{v2.8p}{2001/09/27}{Präambel über der Überschrift hinzugefügt}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{SecDef}}^^A
+% \changes{v3.19}{2015/08/25}{Seitenstil nur ändern wenn definiert und nicht
+% leer}^^A
+% \changes{v3.26}{2018/10/14}{Option \texttt{afterindent} wird beachtet}^^A
+% Die Anweisung definiert den Gliederungsüberschriften-Stil
+% \texttt{part}. Dazu bekommt sie als einziges explizites Argument den
+% \meta{Namen} der Gliederungsüberschrift. Weitere Argumente wie ein
+% optionaler Stern oder ein optionales Argument für Inhaltsverzeichnis und
+% Kolumnentitel sowie ein obligatorisches Argument für den Text der
+% Überschrift sind implizit, das heißt, sie werden erst im weiteren Verlauf
+% von Unter-Macros eingelesen und verarbeitet.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\scr@startpart}[1]{%
+%<article> \par
+%<*book|report>
+ \if@openright\cleardoublepage\else\clearpage\fi
+ \scr@ifundefinedorrelax{#1pagestyle}{}{%
+ \ifstr{#1pagestyle}{}{}{%
+ \thispagestyle{\@nameuse{#1pagestyle}}%
+ }%
+ }%
+ \if@twocolumn
+ \onecolumn
+ \@tempswatrue
+ \else
+ \@tempswafalse
+ \fi
+%</book|report>
+ \@tempskipa=\glueexpr\@nameuse{scr@#1@beforeskip}\relax
+ \@ifundefined{scr@#1@afterindent}{\@afterindentfalse}{%
+ \csname scr@#1@afterindent\endcsname
+ {\@afterindenttrue}{\@afterindentfalse}{%
+ \@afterindenttrue
+ \ifdim\@tempskipa<\z@
+ \@tempskipa=-\@tempskipa
+ \@afterindentfalse
+ \fi
+ }%
+ }%
+ \partheadstartvskip
+%<*book|report>
+ \vbox to\z@{\vss\use@preamble{#1@o}\strut\par}%
+ \vskip-\baselineskip\nobreak
+%</book|report>
+ \expandafter\SecDef\csname @#1\expandafter\endcsname\csname @s#1\endcsname
+}
+% \end{macrocode}
+%
+% \begin{macro}{\scr@@startpart}
+% \changes{v3.18}{2015/05/23}{neue Anweisung (intern)}^^A
+% Diese Anweisung ist von der ursprünglichen Definition von \cs{@part}
+% abgeleitet und erbt deren ChangeLog-Einträge.
+% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}^^A
+% \changes{v2.95}{2002/08/13}{\cs{centering} und \cs{@parskipfalse}%
+% \cs{@parskip@indent} vertauscht}^^A
+% \changes{v2.95}{2004/11/05}{\cs{@parskipfalse} und \cs{@parskip@indent}
+% ersetzt}^^A
+% Die Anweisung macht die eigentliche Arbeit für den Fall einer
+% Gliederungsanweisung ohne Stern. Das erste obligatorische Argument ist der
+% \meta{Name} der Gliederungsanweisung. Das zweite eigentlich optionale
+% Argument, das hier jedoch zwingend ist, ist der \meta{Spezial-Text} für
+% Kolumnentitel und Inhaltsverzeichnis. Das dritte obligatorische Argument
+% ist der \meta{Text} für die Überschrift.
+% \begin{macrocode}
+\newcommand{\scr@@startpart}{}
+\long\def\scr@@startpart#1[#2]#3{%
+% \end{macrocode}
+% \changes{v3.10}{2011/08/30}{Integration der Erweiterung für das optionale
+% Argument der Gliederungsbefehle}^^A
+% Für das erweitere optionale Argument muss hier eine key-value-Auswertung
+% erfolgen, falls das erweitere optionale Argument aktiviert ist:
+% \begin{macrocode}
+ \ifnum \scr@osectarg=\z@
+ \@scr@tempswafalse
+ \else
+ \scr@istest#2=\@nil
+ \fi
+ \if@scr@tempswa
+ \setkeys{KOMAarg.section}{tocentry={#3},head={#3},reference={#3},#2}%
+ \else
+ \ifcase \scr@osectarg\relax
+ \setkeys{KOMAarg.section}{tocentry={#2},head={#2},reference={#2}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#3},head={#2},reference={#3}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#2},head={#3},reference={#2}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#2},head={#2},reference={#2}}%
+ \fi
+ \fi
+% \end{macrocode}
+% Als nächstes muss für nummerierte Überschriften dieser Ebene sowohl der
+% Zähler erhöht also auch ein nummerierter Eintrag ins Inhaltsverzeichnis
+% erstellt werden.
+% \changes{v2.8e}{2001/07/10}{\cs{@maybeautodot} wird aufgerufen}^^A
+% \changes{v3.08}{2010/11/01}{Verwendung von \cs{addparttocentry}}^^A
+% \changes{v3.18}{2015/05/20}{Verwendung von \cs{add\meta{Name}tocentry} in
+% \cs{typeout}}^^A
+% \begin{macrocode}
+ \ifnumbered{#1}{%
+ \refstepcounter{#1}%
+ \@maybeautodot\thepart%
+ \expandafter\@maybeautodot\csname the#1\endcsname
+ \typeout{#1 \csname the#1\endcsname.}%
+ \ifx\@currenttocentry\@empty\else
+ \scr@ifundefinedorrelax{add#1tocentry}{%
+ \addtocentrydefault{#1}%
+ }{%
+ \@nameuse{add#1tocentry}%
+ }{\csname the#1\endcsname}{\@currenttocentry}%
+ \fi
+ }{%
+% \end{macrocode}
+% \changes{v3.18}{2015/05/23}{Resetliste auch bei nicht nummerierten
+% Überschriften abarbeiten}^^A
+% Für alle nicht nummerieten Überschriften dieser Ebene trotzdem die
+% Resetliste des Zählers ausführen und ggf. einen Verzeichniseintrag
+% erstellen.
+% \begin{macrocode}
+ \expandafter\ifnum\scr@v@is@lt{3.18}\relax\else
+ \begingroup
+ \let\@elt\@stpelt
+ \csname cl@#1\endcsname
+ \endgroup
+ \fi
+ \typeout{#1 without number}%
+ \ifx\@currenttocentry\@empty\else
+% \end{macrocode}
+% An dieser Stelle muss ggf. der \textsf{hyperref}-Hook für nicht nummerierte
+% Inhaltsverzeichniseinträge ausgeführt werden.
+% \changes{v3.08}{2010/11/01}{Verwendung von \cs{addparttocentry}}^^A
+% \changes{v3.18}{2015/05/23}{\cs{addparttocentry} verallgemeinert}^^A
+% \begin{macrocode}
+ \hy@insteadofrefstepcounter{#1}%
+ \scr@ifundefinedorrelax{add#1tocentry}{%
+ \addtocentrydefault{#1}%
+ }{%
+ \@nameuse{add#1tocentry}%
+ }{}{\@currenttocentry}%
+ \fi
+ }%
+% \end{macrocode}
+% Es folgt das eigentliche Setzen der Überschrift. Übrigens ist der ganze Code
+% oben bei \cs{scr@@startchapter} praktisch identisch. Lediglich das
+% Abarbeiten der Resetliste gibt es dort bereits seit Version~3.15. In
+% \cs{scr@@startchapter} wird an dieser Stelle dann \cs{@make\dots head}
+% ausgeführt. Das könnte man eigentlich irgendwann hier genauso machen.
+% \changes{v2.2c}{1995/05/25}{Part-Ausgabe auf CJK umgestellt}^^A
+% \changes{v2.4b}{1996/03/29}{\cs{size@partnumer} durch
+% \cs{size@partnumber} ersetzt}^^A
+% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor \cs{size@part} und
+% \cs{size@partnumber} aufgerufen}^^A
+% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont} behebt einen
+% Bug im color Paket}^^A
+% \changes{v3.18}{2015/05/23}{\cs{size@\dots} durch \cs{usekomafont}
+% ersetzt}^^A
+% \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}^^A
+% \changes{v3.25}{2017/09/07}{\cs{IfUseNumber} definiert}^^A
+% \changes{v3.25}{2017/09/07}{\cs{sectfont} durch \cs{usekomafont}
+% ersetzt}^^A
+% \changes{v3.25}{2017/09/07}{Umstellung auf
+% \cs{partlineswithprefixformat}}^^A
+% \changes{v3.25}{2018/02/12}{Verwendung des korrekten Font-Elements}^^A
+% \begin{macrocode}
+ \begingroup
+ \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
+ \def\IfUseNumber{\ifnumbered{#1}}%
+ \raggedpart
+ \normalfont\usekomafont{disposition}{\nobreak
+ \IfUseNumber{%
+ \partlineswithprefixformat{#1}{%
+ \usekomafont{#1prefix}{\nobreak\@nameuse{#1format}}%
+%<book|report> \setlength{\@tempskipa}{\@nameuse{scr@#1@innerskip}}%
+ \partheadmidvskip
+ }{%
+ \usekomafont{#1}{\nobreak\interlinepenalty \@M#3\strut\@@par}%
+ }%
+ }{%
+ \partlineswithprefixformat{#1}{}{%
+ \usekomafont{#1}{\nobreak\interlinepenalty \@M#3\strut\@@par}%
+ }
+ }%
+% \end{macrocode}
+% \changes{v3.10}{2011/08/30}{Wenn \cs{partmark} \cs{@gobble} ist, wird
+% stattdessen \cs{@mkboth}{}{} aufgerufen.}^^A
+% Und noch den Kolumnentitel setzen.
+% \begin{macrocode}
+ \expandafter\ifx\csname #1mark\endcsname\@gobble
+ \@mkboth{}{}%
+ \else
+ \csname #1mark\expandafter\endcsname\expandafter{\@currentheadentry}%
+ \fi
+ }%
+ \endgroup
+% \end{macrocode}
+% Ganz zum Schluss muss noch einmal ein Abstand eingefügt werden.
+% \begin{macrocode}
+%<*article>
+ \nobreak
+ \@tempskipa=\glueexpr\@nameuse{scr@#1@afterskip}\relax\relax
+ \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi
+ \partheadendvskip
+%</article>
+%<book|report> \@nameuse{@end#1}%
+% \end{macrocode}
+% \changes{v3.26}{2018/10/14}{Verwendung von \@cs{@afterheading} für
+% \textsf{scrbook} und \textsf{scrreprt}}^^A
+% Ab \KOMAScript{} 3.26 wird hier \cs{@afterheading} für alle Klassen
+% aufgerufen. Damit kann der Einzug nach der Überschrift eingestellt werden.
+% \begin{macrocode}
+ \@afterheading
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@@startpart
+%
+% \begin{macro}{\scr@@startspart}
+% \changes{v3.18}{2015/05/23}{neue Anweisung (intern)}^^A
+% Diese Anweisung ist von der ursprünglichen Definition von \cs{@spart}
+% abgeleitet und erbt deren ChangeLog-Einträge.
+% \changes{v2.4n}{1997/05/28}{in der Sternvariante \cs{chaptermark}^^A
+% bzw. \cs{sectionmark} eingefügt, um die Kolumnentitel zu
+% löschen}^^A
+% \changes{v2.6a}{2000/01/20}{zum Löschen der Kolumnentitel wird
+% nun \cs{@mkboth} verwendet}^^A
+% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}}^^A
+% \changes{v2.95}{2002/08/13}{\cs{centering} und
+% \cs{@parskipfalse}\cs{@parskip@indent} vertauscht}^^A
+% \changes{v2.95}{2004/11/05}{\cs{@parskipfalse} und \cs{@parskip@indent}
+% ersetzt}^^A
+% Die Anweisung macht die eigentliche Arbeit für den Fall einer
+% Gliederungsanweisung mit Stern. Das erste obligatorische Argument ist der
+% \meta{Name} der Gliederungsanweisung. Das zweite obligatorische Argument
+% ist der \meta{Text} für die Überschrift.
+% \begin{macrocode}
+\newcommand{\scr@@startspart}[2]{%
+% \end{macrocode}
+% Für Leute, die unbedingt nach der Sternversion noch ein \cs{addcontentsline}
+% anfügen wollen, muss hier ebenfalls der \textsf{hyperref}-Hook ausgeführt
+% werden. Allerdings passiert das hier entsprechend dem Vorgehen von
+% \textsf{hyperref} selbst in einer Gruppe, in der zusätzlich \cs{@mkboth} zu
+% \cs{@gobbletwo} gemacht wird, auch wenn ich absolut nicht versehe, was das
+% soll.
+% \begin{macrocode}
+ \begingroup
+ \let\@mkboth\@gobbletwo
+ \hy@insteadofrefstepcounter{#1}%
+ \endgroup
+% \end{macrocode}
+% Erst dann erfolgt die tatsächliche Ausgabe der Überschrift.
+% \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}^^A
+% \changes{v3.25}{2017/09/07}{\cs{IfUseNumber} definiert}^^A
+% \changes{v3.25}{2017/09/07}{\cs{sectfont} durch \cs{usekomafont}
+% ersetzt}^^A
+% \changes{v3.25}{2017/09/07}{Umstellung auf
+% \cs{partlineswithprefixformat}}^^A
+% \begin{macrocode}
+ \begingroup
+ \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
+ \let\IfUseNumber\@secondoftwo
+ \raggedpart
+ \normalfont\usekomafont{disposition}{%
+ \nobreak
+ \partlineswithprefixformat{#1}{}{%
+ \usekomafont{#1}{\nobreak\interlinepenalty \@M#2\strut\@@par}%
+ }%
+ \@mkboth{}{}%
+ }%
+ \endgroup
+%<*article>
+ \nobreak
+ \@tempskipa=\glueexpr\csname scr@#1@afterskip\endcsname\relax\relax
+ \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi
+ \partheadendvskip
+ \@afterheading
+%</article>
+%<book|report> \@nameuse{@end#1}%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@@startspart
+%
+% \begin{macro}{\partlineswithprefixformat}
+% \changes{v3.25}{2017/09/07}{neu}
+% Diese Anweisung definiert das Format der eigentlichen Überschriften im Stil
+% \texttt{part}. Fonteinstellungen sind zu diesem Zeitpunkt bereits erfolgt
+% order Teil der Argumente. Die Argumente sind:
+% \begin{description}
+% \item[\meta{Befehlsname} --] der Name der Gliederungsebene, normalerweise
+% \texttt{chapter}.
+% \item[\meta{Gliederungsnummer} --] die bereits fertig formatierte
+% Gliederungsnummer einschließlich des nachfolgenden vertikalen Abstands
+% oder leer, falls keine Gliederungsnummer auszugeben ist.
+% \item[\meta{Text} --] der Text der Überschrift.
+% \end{description}
+% Der Anwender ist selbst verantwortlich, dass innerhalb der Überschrift kein
+% Seitenumbruch erfolgen kann. Nach der Überschrift wird jedoch zwangsweise
+% ein \cs{@@par} ausgeführt, so dass sichergestellt ist, dass mit einem
+% internen Absatz abgeschlossen wird.
+% \begin{macrocode}
+\newcommand{\partlineswithprefixformat}[3]{%
+ #2#3%
+}
+% \end{macrocode}
+% \end{macro}^^A \partlineswithprefixformat
+%
+% \begin{macro}{\scr@@endpart}
+% \changes{v3.18}{2015/05/23}{neue Anweisung (intern)}^^A
+% Diese Anweisung ist von der ursprünglichen Definition von \cs{@spart}
+% abgeleitet und erbt deren ChangeLog-Einträge.
+% \changes{v2.3g}{1996/01/14}{\cs{@endpart} wird für
+% \textsf{scrartcl} nicht mehr definiert}^^A
+% \changes{v2.4e}{1996/07/02}{Option \texttt{openany} beachten}^^A
+% \changes{v2.6c}{2000/06/10}{\cs{@endpart} fügt nur noch in
+% beidseitigen Dokumenten bei Verwendung von \texttt{openright} eine
+% Leerseite ein}^^A
+% \changes{v2.8p}{2001/09/27}{\cs{vbox} eingefügt}^^A
+% \changes{v2.8p}{2001/09/27}{\cs{use@preamble} ersetzt
+% \cs{@part@preamble}}^^A
+% \changes{v3.02}{2009/01/01}{Verwendung des neuen
+% \cs{partheademptypage}}^^A
+% Die Anweisung wird bei \textsf{scrbook} und \textsf{screprt} verwendet, um
+% die Überschrift abzuschließen. \textsf{scrartcl} hat keine solche Anweisung.
+% Da einzige Argument ist der \meta{Name} der Gliederungsanweisung.
+% \begin{macrocode}
+%<*book|report>
+\newcommand*{\scr@@endpart}[1]{%
+ \vbox to\z@{\use@preamble{#1@u}\vss}%
+ \@tempskipa=\glueexpr\csname scr@#1@afterskip\endcsname\relax\relax
+ \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi
+ \partheadendvskip
+ \partheademptypage
+ \if@tempswa
+ \twocolumn
+ \fi
+}
+%</book|report>
+% \end{macrocode}
+% \end{macro}^^A \scr@@endpart
+% \end{macro}^^A \scr@startpart
+%
+%
+% \begin{macro}{\hy@insteadofrefstepcounter}
+% \changes{v3.18}{2015/05/22}{neu (intern und \textsf{hyperref})}
+% Normalerweise führt \textsf{hyperref} via \cs{refstepcounter}
+% Initialisierungen für ein nachfolgendes \cs{addcontentsline} durch. Wenn
+% allerdings eine nicht nummerierte Überschrift ins Inhaltsverzeichnis
+% eingetragen wird, dann fehlt das vorherige \cs{refstepcounter}. Statt
+% \cs{@chapter}, \cs{@schapter}, \cs{@part}, \cs{@spart} etc. direkt zu
+% patchen, erscheint es mir sinnvoller einen Hook dafür zu definieren, der
+% dann von \textsf{hyperref} entsprechend definiert werden kann. Solange
+% \textsf{hyperref} das nicht macht, versuche ich mich selbst daran und kann
+% nur hoffen, dass es funktioniert. Dabei verwende ich im Gegensatz zu
+% \textsf{hyperref} für \cs{Hy@MakeCurrentHrefAuto} kein \cs{Hy@chapapp}, weil
+% ja \cs{autoref} für nicht nummerierte Überschriften ohnehin sinnlos
+% ist. Stattdessen verwende ich den Gliederungsbefehl.
+% \begin{macrocode}
+\newcommand*{\hy@insteadofrefstepcounter}[1]{}
+\let\hy@insteadofrefstepcounter\@gobble
+\BeforePackage{hyperref}{%
+ \let\scr@orig@chapter\@chapter
+ \let\scr@orig@schapter\@schapter
+ \let\scr@orig@addchap\@addchap
+}
+\AfterPackage!{hyperref}{%
+ \let\@chapter\scr@orig@chapter
+ \let\@schapter\scr@orig@schapter
+ \let\@addchap\scr@orig@addchap
+ \ifx\hy@insteadofrefstepcounter\@gobble
+ \renewcommand*{\hy@insteadofrefstepcounter}[1]{%
+ \Hy@MakeCurrentHrefAuto{#1*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}^^A \hy@insteadofrefstepcounter
+%
+% \begin{macro}{\addparttocentry}
+% \changes{v3.08}{2010/11/01}{Neu}^^A
+% Seit Version~3.08 wird der Eintrag nicht direkt innerhalb von \cs{part}
+% per \cs{addcontentsline} erzeugt, sondern indirekt über diese Anweisung. Das
+% erste Argument ist dabei die (formatierte) Nummer bzw. bei nicht
+% nummerierten Teilen leer. Das zweite Argument ist der Überschriftstext für
+% das Verzeichnis. Durch diesen indirekten Weg, kann die Anweisung einfach
+% umdefiniert werden. Verwendet wird hier die Standardanweisung für
+% Inhaltsverzeichniseinträge, die in \texttt{scrkliof.dtx} definiert ist:
+% \begin{macrocode}
+\newcommand*{\addparttocentry}[2]{%
+ \addtocentrydefault{part}{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}^^A \addparttocentry
+%
+%
+% \begin{macro}{\part}
+% \changes{v3.18}{2015/05/23}{siehe \cs{scr@dsc@def@style@part@command} und
+% \cs{scr@startpart}}^^A
+% \begin{macro}{\@part}
+% \changes{v3.18}{2015/05/23}{siehe \cs{scr@dsc@def@style@part@command} und
+% \cs{scr@@startpart}}^^A
+% \begin{macro}{\@spart}
+% \changes{v3.18}{2015/05/23}{siehe \cs{scr@dsc@def@style@part@command} und
+% \cs{scr@@startspart}}^^A
+% \begin{macro}{\@endpart}
+% \changes{v3.18}{2015/05/23}{siehe \cs{scr@dsc@def@style@part@command} und
+% \cs{scr@@endpart}}^^A
+% \begin{macro}{\setpartpreamble}
+% \changes{v2.8f}{2001/07/12}{neu}^^A
+% \changes{v2.8p}{2001/09/27}{Verwendung von \cs{use@preamble}}^^A
+% \changes{v3.18}{2015/05/23}{siehe \cs{scr@dsc@def@style@part@command} und
+% \cs{scr@@endpart}}^^A
+% \begin{macro}{\part@u@preamble}
+% \changes{v2.8p}{2001/09/27}{neu (intern)}^^A
+% \changes{v2.8p}{2001/09/27}{Ersatz für \cs{part@preamble}}^^A
+% \changes{v3.12a}{2014/02/14}{flaschen (\cs{part@preamble@u}) Namen
+% korrigiert}^^A
+% \changes{v3.18}{2015/05/23}{siehe \cs{scr@dsc@def@style@part@command} und
+% \cs{scr@@endpart}}^^A
+% \begin{macro}{\part@o@preamble}
+% \changes{v2.8p}{2001/09/27}{neu (intern)}^^A
+% \changes{v3.12a}{2014/02/14}{flaschen Namen (\cs{part@preamble@o})
+% korrigiert}^^A
+% \changes{v3.18}{2015/05/23}{siehe \cs{scr@dsc@def@style@part@command} und
+% \cs{scr@@endpart}}^^A
+% Diese Anweisungen werden indirekt über \cs{DeclareSectionCommand} und
+% \cs{scr@dsc@def@style@part@command} bzw. \cs{setpartpreamble} definiert.
+% \end{macro}^^A \setpartpreamble
+% \end{macro}^^A \part@u@preamble
+% \end{macro}^^A \part@o@preamble
+% \end{macro}^^A \@endpart
+% \end{macro}^^A \@spart
+% \end{macro}^^A \@part
+% \end{macro}^^A \part
+%
+% \begin{macro}{\addpart}
+% \changes{v2.8c}{2001/06/29}{neu}^^A
+% \changes{v2.8d}{2001/07/05}{\cs{partpagestyle} statt \texttt{plain}}^^A
+% \changes{v2.95a}{2006/07/10}{support of preamble added}^^A
+% \changes{v3.11b}{2012/07/29}{missing negativ \cs{vskip} added}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{SecDef}}^^A
+% \changes{v3.15a}{2015/01/22}{Anpassung an geänderte Abstandsbehandlung bei
+% \cs{part} und \cs{@spart}}^^A
+% \changes{v3.18}{2015/05/25}{Komplett neu definiert}^^A
+% \begin{macro}{\@addpart}
+% \changes{v2.8c}{2001/06/29}{neu (intern)}^^A
+% \changes{v2.8l}{2001/08/17}{erst eintragen, dann ausgeben}^^A
+% \changes{v2.95}{2004/07/20}{kann Kolumnentitel erzeugen}^^A
+% \changes{v3.00}{2008/07/01}{Notlösung für \textsf{hyperref} eingefügt}^^A
+% \changes{v3.08}{2010/11/02}{Verwendung von \cs{addparttocentry}}^^A
+% \changes{v3.10}{2011/08/30}{Integration der Erweiterung für das optionale
+% Argument der Gliederungsbefehle}^^A
+% \changes{v3.10}{2011/08/30}{Wenn \cs{partmark} \cs{@gobble} ist, wird
+% \cs{@mkboth}{}{} aufgerufen.}^^A
+% \changes{v3.17}{2015/04/20}{Es wird \cs{addpartmark} verwendet und auch
+% nie \cs{@mkboth}{}{} aufgerufen.}^^A
+% \changes{v3.18}{2015/05/25}{Komplett neu definiert}^^A
+% \begin{macro}{\@saddpart}
+% \changes{v2.8c}{2001/06/29}{neu (intern)}^^A
+% \changes{v3.18}{2015/05/25}{Komplett neu definiert}^^A
+% \begin{macrocode}
+\newcommand\addpart{%
+ \SecDef\@addpart\@saddpart
+}
+\newcommand*{\@addpart}{}
+\long\def\@addpart[#1]#2{%
+ \edef\reserved@a{%
+ \unexpanded{%
+ \part[{#1}]{#2}%
+ \c@secnumdepth=
+ }\the\c@secnumdepth\relax
+ }%
+ \c@secnumdepth=\numexpr \partnumdepth-1\relax
+ \reserved@a
+}
+\newcommand{\@saddpart}[1]{%
+ \part*{#1}%
+ \addpartmark{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \@saddpart
+% \end{macro}^^A \@addpart
+% \end{macro}^^A \addpart
+%
+%
+% \begin{macro}{\l@part}
+% \changes{v2.97c}{2007/06/21}{\cs{sectfont}\cs{large} durch Verwendung von
+% Element \texttt{partentry} ersetzt}^^A
+% \changes{v2.97c}{2007/06/21}{Element \texttt{partentrypagenumber} wird
+% verwendet}^^A
+% \changes{v3.15}{2014/12/23}{Verwendung von \cs{parttocdepth} und
+% \cs{scr@part@numwidth}}^^A
+% \changes{v3.20}{2015/10/06}{Überführung in Verzeichnisstil}^^A
+% Der Eintrag für \cs{part}. Es werden einige Hilfsmakros passend zu
+% \cs{DeclareSectionCommand} definiert. Dadurch können diverse Einstellungen
+% darüber geändert werden. Es kann jedoch derzeit kein neuer Stil zugewiesen
+% werden.
+% \begin{macro}{\scr@part@tocindent}
+% \changes{v3.15}{2014/12/02}{neue (interne) Anweisung}^^A
+% \changes{v3.18}{2015/06/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \changes{v3.20}{2015/11/06}{wird nun auch verwendet}^^A
+% Der Einzug des Eintrags noch vor der Nummer.
+% \end{macro}^^A \scr@part@tocindent
+% \begin{macro}{\scr@part@tocnumwidth}
+% \changes{v3.15}{2014/12/02}{neue (interne) Anweisung}^^A
+% \changes{v3.18}{2015/06/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% Die definierte Breite der Nummer für den Eintrag ins Inhaltsverzeichnis.
+% \end{macro}
+% \end{macro}^^A \l@part
+%
+%
+% \begin{Counter}{part}
+% \begin{macro}{\thepart}
+% \begin{macro}{\partformat}
+% \changes{v2.3c}{1995/08/06}{Duden Regel 6}^^A
+% \changes{v2.5f}{1999/02/14}{überflüssiges Leerzeichen am Ende
+% entfernt}^^A
+% \changes{v2.7h}{2001/04/22}{verlorenen Backslash in \cs{autodot}^^A
+% wieder eingefügt}^^A
+% Jede Gliederungsebene benötigt einen Zähler für die Gliederungsnummer und
+% eine Darstellung des Zählers (\cs{the\dots}). Desweiteren wird eine
+% Formatierung des Zählers in den Gliederungsüberschriften
+% (\texttt{\bslash\dots format}) benötigt.
+% \begin{macrocode}
+\newcounter{part}
+\renewcommand*{\thepart}{\@Roman\c@part}
+\newcommand*{\partformat}{\partname~\thepart\autodot}
+% \end{macrocode}
+% \end{macro}^^A \partformat
+% \end{macro}^^A \thepart
+% \end{Counter}{part}
+%
+%
+% \begin{macro}{\partname}
+% Namen der Gliederungsebenen \cs{part}.
+% \begin{macrocode}
+\newcommand*\partname{Part}
+% \end{macrocode}
+% \end{macro}^^A \partname
+%
+%
+% \begin{macro}{\partmark}
+% \changes{v2.9r}{2004/07/20}{neu (für \textsf{scrpage2})}^^A
+% \changes{v3.18}{2015/05/24}{Voreinstellung von \cs{@gobble} zu
+% \cs{@mkboth{}{}} geändert}
+% \begin{macrocode}
+\newcommand*{\partmark}[1]{\@mkboth{}{}}
+% \end{macrocode}
+% \end{macro}^^A \partmark
+%
+% \begin{macro}{\addpartmark}
+% \changes{v3.17}{2015/04/20}{neue Anweisung}^^A
+% \changes{v3.18}{2015/05/24}{abhängig von \cs{partnumdepth}}^^A
+% Analog zu \cs{addchapmark} für \cs{addpart}. Auch dabei gilt, dass
+% \cs{if@mainmatter} hier auch von \textsf{scrreprt} definiert wird. Das ist
+% Absicht und vereinfacht dem einen oder anderen Paket oder Benutzer
+% vielleicht die Arbeit.
+% \begin{macrocode}
+\newcommand*\addpartmark[1]{%
+ \begingroup
+ \expandafter\let\csname if@mainmatter\expandafter\endcsname
+ \csname iffalse\endcsname
+ \c@secnumdepth=\numexpr \partnumdepth-1\relax
+ \partmark{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}^^A \addpartmark
+%
+%
+% \begin{macro}{\raggedpart}
+% \changes{v2.95a}{2006/07/10}{neue Konfigurationsmöglichkeit}^^A
+% Die Ausrichtung der Überschrift von \cs{part} kann davon abweichend über
+% \cs{raggedpart} konfiguriert werden. Die Voreinstellung ist von der
+% Klasse abhängig.
+% \begin{macrocode}
+\newcommand*{\raggedpart}{}
+%<article>\let\raggedpart\raggedsection
+%<report|book>\let\raggedpart\centering
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{KOMAfont}{part}
+% \changes{v2.8p}{2001/09/23}{neues Element \texttt{part}}^^A
+% \begin{macro}{\scr@fnt@part}
+% \changes{v2.8p}{2001/09/23}{neues Element \texttt{part}}^^A
+% \begin{KOMAfont}{partnumber}
+% \changes{v2.8p}{2001/09/23}{neues Element \texttt{partnumber}}^^A
+% \begin{macro}{\scr@fnt@partnumber}
+% \changes{v2.8p}{2001/09/23}{neues Element \texttt{partnumber}}^^A
+% \begin{KOMAfont}{partprefix}
+% \changes{v3.18}{2015/06/10}{neues Alias-Element \texttt{partprefix}}^^A
+% \begin{macrocode}
+\newcommand*{\scr@fnt@part}{\size@part}
+\newcommand*{\scr@fnt@partnumber}{\size@partnumber}
+\aliaskomafont{partprefix}{partnumber}
+% \end{macrocode}
+% \end{KOMAfont}
+% \end{macro}
+% \end{KOMAfont}
+% \end{macro}
+% \end{KOMAfont}
+%
+% \begin{KOMAfont}{partentry}
+% \changes{v2.97c}{2007/06/21}{neues Font-Element}^^A
+% \changes{v3.06}{2010/06/09}{Verwendung von \texttt{sectioning} durch
+% \texttt{disposition} ersetzt}^^A
+% Schrift für den \cs{part}-Eintrag im Inhaltsverzeichnis.
+% \begin{macrocode}
+\newkomafont{partentry}{\usekomafont{disposition}\large}
+% \end{macrocode}
+% \end{KOMAfont}
+%
+% \begin{KOMAfont}{partentrypagenumber}
+% \changes{v2.97c}{2007/06/21}{neues Font-Element}^^A
+% Schrift für die Seitenzahl des \cs{part}-Eintrags im Inhaltsverzeichnis
+% abweichend von \texttt{partentry}.
+% \begin{macrocode}
+\newkomafont{partentrypagenumber}{}
+%</body>
+%</class>
+% \end{macrocode}
+% \end{KOMAfont}
+%
+%
+% \subsection{Kapitel}
+%
+% Bei den Klassen \texttt{scrbook} und \texttt{scrreprt} gibt es im
+% Unterschied zu \texttt{scrartcl} auch noch die Kapitelebene. Für die
+% Definition des Kapitelstils mittels \cs{DeclareSectionCommand} werden neben
+% den Optionen und \cs{scr@dsc@def@style@chapter@command} noch diverse
+% Anweisungen benötigt. Diese sind allesamt von der ursprünglichen Definition
+% für Kapitel abgeleitet. Eine Besonderheit ist dabei, dass \textsf{hyperref}
+% dem neuen Code durch (inkompatible) Umdefinierung von \cs{@schapter} und
+% \cs{@chapter} in die Quere kommt. Das gilt es also zusätzlich zu verhindern
+% und dennoch \cs{hyperref} zu berücksichtigen. Dies gelingt am einfachsten
+% durch einen neuen Hook, den \cs{hyperref} zukünftig gerne selbst passend
+% umdefinieren kann. Wer sonst noch an \cs{@chapter} und \cs{@schaper}
+% herumdoktert und dabei \KOMAScript{} aus dem Tritt bringt, ist selbst
+% schuld.
+%
+% \begin{option}{chapterprefix}
+% \changes{v2.8}{2001/06/15}{neue Option}^^A
+% \changes{v2.95c}{2006/08/21}{als \textsf{keyval}-Option}^^A
+% \changes{v3.18}{2015/05/22}{die Option bezieht sich allgemein auf den
+% Gliederungsstil}^^A
+% \begin{option}{nochapterprefix}
+% \changes{v2.8}{2001/06/15}{neue Option}^^A
+% \changes{v2.95c}{2006/08/21}{obsolete Option}^^A
+% \changes{v3.01a}{2008/11/20}{deprecated}^^A
+% Normalerweise verwenden \textsf{scrbook} und \textsf{scrreprt} nicht
+% die enorm großen Überschriften von \textsf{book} und
+% \textsf{report}, die mit einem Absatz "`Kapitel \emph{Nummer}"'
+% beginnen. Mit der Option \texttt{chapterprefix} kann dies jetzt
+% wieder aktiviert werden. Die Option, zur Deaktivierung heißt
+% entsprechend \textsf{nochapterprefix}.
+% Um für Spezialanwendungen auch innerhalb des Dokuments eine
+% Umschaltung zu ermöglichen bzw. für die Optionen
+% \texttt{appendixprefix} und \texttt{noappendixprefix} erfolgt die
+% Umschaltung durch einen Schalter.
+% \begin{macrocode}
+%<*class>
+%<*book|report>
+%<prepare>\newif\if@chapterprefix
+%<*option>
+\KOMA@key{chapterprefix}[true]{%
+ \KOMA@set@ifkey{chapterprefix}{@chapterprefix}{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \KOMA@kav@replacebool{.\KOMAClassFileName}%
+ {chapterprefix}{@chapterprefix}%
+ \KOMA@kav@remove{.\KOMAClassFileName}%
+ {headings}{twolinechapter}%
+ \KOMA@kav@remove{.\KOMAClassFileName}%
+ {headings}{onelinechapter}%
+ \KOMA@kav@xadd{.\KOMAClassFileName}%
+ {headings}{%
+ \if@chapterprefix twolinechapter\else onelinechapter\fi
+ }%
+ \fi
+}
+\KOMA@DeclareDeprecatedOption{nochapterprefix}{chapterprefix=false}
+\KOMA@kav@add{.\KOMAClassFileName}{headings}{onelinechapter}%
+%</option>
+% \end{macrocode}
+% \end{option}
+% \end{option}
+%
+% \begin{option}{appendixprefix}
+% \changes{v2.8}{2001/06/15}{neue Option}^^A
+% \changes{v2.95c}{2006/08/21}{als \textsf{keyval}-Option}^^A
+% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit
+% \cs{FamilyKeyState}}^^A
+% \changes{v3.17}{2015/03/09}{interne Speicherung des Wert}^^A
+% \begin{option}{noappendixprefix}
+% \changes{v2.8}{2001/06/15}{neue Option}^^A
+% \changes{v2.95c}{2006/08/21}{obsolete Option}^^A
+% \changes{v3.01a}{2008/11/20}{deprecated}^^A
+% Will man abweichend von der Option \texttt{chapterprefix} die großen
+% Überschriften für den Anhang aktivieren oder deaktivieren, so kann man das
+% mit dieser Option erreichen. Allerdings setzt diese keinen Schalter, sondern
+% ein Zusatzmakro, das auch für andere Zwecke genutzt werden kann. Übrigens
+% ist keine der beiden Einstellungen die Voreinstellung!
+% \begin{macrocode}
+%<*option>
+\KOMA@key{appendixprefix}[true]{%
+ \KOMA@set@ifkey{appendixprefix}{@tempswa}{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \KOMA@kav@xreplacevalue{.\KOMAClassFileName}{appendixprefix}{#1}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{twolineappendix}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{onelineappendix}%
+ \if@tempswa
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{twolineappendix}%
+ \@ifundefined{appendixmore}{%
+ \def\appendixmore{\@chapterprefixtrue}%
+ }{%
+ \l@addto@macro\appendixmore{\@chapterprefixtrue}%
+ }%
+ \else
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{onelineappendix}%
+ \@ifundefined{appendixmore}{%
+ \def\appendixmore{\@chapterprefixfalse}%
+ }{%
+ \l@addto@macro\appendixmore{\@chapterprefixfalse}%
+ }%
+ \fi
+ \fi
+}
+\KOMA@DeclareDeprecatedOption{noappendixprefix}{appendixprefix=false}
+%</option>
+% \end{macrocode}
+% \end{option}^^A noappendixprefix
+% \end{option}^^A appendixprefix
+%
+%
+% \begin{macro}{\size@chapter}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% \changes{v2.96a}{2006/12/02}{letztes Element darf ein Argument erwarten,
+% wenn es keine Auswirkung auf den Zeilen abstand hat}^^A
+% \begin{macro}{\size@chapterprefix}
+% \changes{v2.96a}{2006/12/02}{neu (intern)}^^A
+% Hier werden diese Befehle nur vordefiniert. Ihre tatsächliche Einstellung
+% erfolgt über die (Vor-)Auswahl von Option \texttt{headings}.
+% \begin{macrocode}
+%<*prepare>
+\newcommand*{\size@chapter}{}
+\newcommand*{\size@chapterprefix}{\size@chapter}
+%</prepare>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\chapterheadstartvskip}
+% \changes{v3.15}{2014/11/24}{\cs{scr@chapter@beforeskip} wird
+% definiert und verwendet}^^A
+% \begin{macro}{\chapterheadendvskip}
+% \changes{v3.11c}{2013/02/13}{\cs{chapterheadstartvskip} und
+% \cs{chapterheadendvskip} haben in \textsf{scrartcl} nichts verloren}^^A
+% \changes{v3.15}{2014/11/24}{\cs{scr@chapter@afterskip} wird
+% definiert und verwendet}^^A
+% \changes{v3.15}{2014/12/10}{\cs{vspace} durch \cs{vskip} ersetzt, damit
+% \cs{lastskip} korrekt gesetzt ist}
+% \begin{macro}{\chapterheadmidvskip}
+% \changes{v3.15}{2014/11/20}{neue Anweisung}^^A
+% \changes{v3.17}{2015/03/25}{\cs{scr@chapter@innerskip} wird
+% definiert und verwendet}^^A
+% Mit diesen Anweisungen wird üblicherweise der Abstand zwischen
+% oberem Rand des Textbereichs und der Überschrift bzw. der Abstand
+% zwischen der Überschrift und dem Text des Kapitels gesetzt. Man kann
+% die Anweisungen aber zusätzlich auch für andere Zwecke
+% missbrauchen. Das ist der Grund warum diese Makros keine Längen,
+% sondern komplette Anweisungen enthalten. In der Voreinstellung
+% enthalten sie jedoch gar nichts. Die tatsächlichen Werte werden
+% durch die Optionen festgelegt. Dabei wird \cs{chapterheadmidvskip} nur
+% verwendet, wenn Option \texttt{chapterprefix} aktiv ist.
+%
+% Zur Erhöhung der Kompatibilität mit \cs{DeclareSectionCommand} werden
+% zunächst einige Hilfsanweisung definiert und verwendet.
+% \begin{macro}{\scr@chapter@beforeskip}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung}^^A
+% \changes{v3.17}{2015/03/25}{umbenannt in
+% \cs{scr@chapter@beforeskip}}^^A
+% \begin{macro}{\scr@chapter@afterskip}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung}^^A
+% \changes{v3.17}{2015/03/25}{umbenannt in
+% \cs{scr@chapter@afterskip}}^^A
+% \begin{macro}{\scr@chapter@sectionindent}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung (unbenutzt)}^^A
+% \changes{v3.17}{2015/04/24}{entfernt}^^A
+% \end{macro}^^A \scr@chapter@sectionindent
+% \end{macro}^^A \scr@chapter@afterskip
+% \end{macro}^^A \scr@chapter@beforeskip
+% \begin{macro}{\scr@chapter@beforeskip}
+% \changes{v3.17}{2015/03/25}{Neu (intern) aus Umdefinierung von
+% \cs{scr@chapter@sectionbeforeskip}}^^A
+% \begin{macro}{\scr@chapter@innerskip}
+% \changes{v3.17}{2015/03/25}{Neu (intern)}^^A
+% \begin{macro}{\scr@chapter@afterskip}
+% \changes{v3.17}{2015/03/25}{Neu (intern) aus Umdefinierung von
+% \cs{scr@chapter@sectionafterskip}}^^A
+% \begin{macro}{\scr@chapter@style}
+% \changes{v3.15}{2014/11/24}{neue (interne) Anweisung}^^A
+% Dabei wird der leere Stil verwendet, mit dem Neudefinitionen von \cs{part}
+% über \cs{DeclareSectionCommand} verhindert werden. Gleichzeitig können
+% jedoch Einstellungen einiger Werte darüber erfolgen.
+% \begin{macrocode}
+%<*prepare>
+\newcommand*{\scr@chapter@beforeskip}{\z@}
+\let\scr@chapter@beforeskip\z@
+\newcommand*{\scr@chapter@afterskip}{\z@}
+\let\scr@chapter@afterskip\z@
+\newcommand*{\scr@chapter@innerskip}{\z@}
+\let\scr@chapter@innerskip\z@
+\newcommand*{\scr@chapter@style}{chapter}
+% \end{macrocode}
+% \end{macro}^^A \scr@chapter@style
+% \end{macro}^^A \scr@chapter@innerskip
+% \end{macro}^^A \scr@chapter@beforeskip
+% \end{macro}^^A \scr@chapter@afterskip
+% \begin{macrocode}
+\newcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}
+\newcommand*{\chapterheadendvskip}{\vskip\@tempskipa}
+\newcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}
+%</prepare>
+% \end{macrocode}
+% \end{macro}^^A \chapterheadmidvskip
+% \end{macro}^^A \chapterheadendvskip
+% \end{macro}^^A \chapterheadstartvskip
+%
+%
+% \begin{macro}{\scr@startchapter}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (für Paketautoren)}
+% \changes{v3.19}{2015/08/25}{Seitenstil nur ändern wenn definiert und nicht
+% leer}^^A
+% Diese Anweisung legt fest, wie der konkrete Aufruf für Überschriften des
+% Stils \texttt{chapter} lautet. Einziges Argument ist dabei der Name der
+% Gliederungsebene, beispielsweise \texttt{chapter}. Alle anderen benötigten
+% Werte ergeben sich aus den Einstellungen für die Gliederungsebene. Beim
+% tatsächlichen Aufruf wird dann daran wie üblich noch optional noch entweder
+% ein Stern oder ein Argument für Kolumnentitel und Inhaltsverzeichniseintrag
+% und der Text der Überschrift angehängt. Diese Anweisung wurde von der
+% ursprünglichen Definition von \cs{chapter} abgeleitet.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\scr@startchapter}[1]{%
+ \if@openright\cleardoublepage\else\clearpage\fi
+ \scr@ifundefinedorrelax{#1pagestyle}{}{%
+ \ifstr{#1pagestyle}{}{}{%
+ \thispagestyle{\@nameuse{#1pagestyle}}%
+ }%
+ }%
+ \global\@topnum\z@
+ \@ifundefined{scr@#1@afterindent}{\@afterindentfalse}{%
+ \csname scr@#1@afterindent\endcsname
+ {\@afterindenttrue}{\@afterindentfalse}{%
+ \@afterindenttrue
+ \@ifundefined{scr@#1@beforeskip}{\@afterindentfalse}{%
+ \ifdim\glueexpr\@nameuse{scr@#1@beforeskip}\relax<\z@
+ \@afterindentfalse
+ \fi
+ }%
+ }%
+ }%
+ \expandafter\SecDef\csname @#1\expandafter\endcsname\csname @s#1\endcsname
+}
+% \end{macrocode}
+%
+% \begin{macro}{\scr@@startchapter}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (intern)}
+% Diese Anweisung nimmt die Rolle des ursprüngliche \cs{@chapter} ein und
+% erbst damit auch die ganzen noch relevanten ChangeLog-Einträge dieser
+% Anweisung.
+% \begin{macrocode}
+\newcommand*{\scr@@startchapter}{}
+\def\scr@@startchapter#1[#2]#3{%
+% \end{macrocode}
+% \changes{v3.10}{2011/08/30}{Integration der Erweiterung für das optionale
+% Argument der Gliederungsbefehle}^^A
+% Für das erweitere optionale Argument muss hier eine key-value-Auswertung
+% erfolgen, falls das erweitere optionale Argument aktiviert ist:
+% \begin{macrocode}
+ \ifnum \scr@osectarg=\z@
+ \@scr@tempswafalse
+ \else
+ \scr@istest#2=\@nil
+ \fi
+ \if@scr@tempswa
+ \setkeys{KOMAarg.section}{tocentry={#3},head={#3},reference={#3},#2}%
+ \else
+ \ifcase \scr@osectarg\relax
+ \setkeys{KOMAarg.section}{tocentry={#2},head={#2},reference={#2}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#3},head={#2},reference={#3}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#2},head={#3},reference={#2}}%
+ \or
+ \setkeys{KOMAarg.section}{tocentry={#2},head={#2},reference={#2}}%
+ \fi
+ \fi
+% \end{macrocode}
+% Als nächstes muss für nummerierte Überschriften dieser Ebene sowohl der
+% Zähler erhöht also auch ein nummerierter Eintrag ins Inhaltsverzeichnis
+% erstellt werden.
+% \changes{v2.8e}{2001/07/10}{\cs{@maybeautodot} wird aufgerufen}^^A
+% \changes{v3.08}{2010/11/01}{Verwendung von \cs{addchaptertocentry}}^^A
+% \changes{v3.18}{2015/05/20}{Verwendung von \cs{add\meta{Name}tocentry}}^^A
+% \changes{v3.18}{2015/05/22}{Verwendung von \meta{Name} statt \cs{@chapapp}
+% in \cs{typeout}}^^A
+% \begin{macrocode}
+ \ifnumbered{#1}{%
+%<book> \if@mainmatter
+ \@tempswatrue
+%<book> \else\@tempswafalse\fi
+ }{\@tempswafalse}%
+ \if@tempswa
+ \refstepcounter{#1}%
+ \expandafter\@maybeautodot\csname the#1\endcsname
+ \typeout{#1 \csname the#1\endcsname.}%
+ \ifx\@currenttocentry\@empty\else
+ \scr@ifundefinedorrelax{add#1tocentry}{%
+ \addtocentrydefault{#1}%
+ }{%
+ \@nameuse{add#1tocentry}%
+ }{\csname the#1\endcsname}{\@currenttocentry}%
+ \fi
+% \end{macrocode}
+% Für alle nicht nummerieten Überschriften dieser Ebene trotzdem die
+% Resetliste des Zählers ausführen und ggf. einen Verzeichniseintrag
+% erstellen.
+% \begin{macrocode}
+ \else
+ \expandafter\ifnum\scr@v@is@lt{3.15}\relax\else
+ \begingroup
+ \let\@elt\@stpelt
+ \csname cl@#1\endcsname
+ \endgroup
+ \fi
+ \typeout{#1 without number}%
+ \ifx\@currenttocentry\@empty\else
+% \end{macrocode}
+% An dieser Stelle muss ggf. der \textsf{hyperref}-Hook für nicht nummerierte
+% Inhaltsverzeichniseinträge ausgeführt werden.
+% \begin{macrocode}
+ \hy@insteadofrefstepcounter{#1}%
+ \scr@ifundefinedorrelax{add#1tocentry}{%
+ \addtocentrydefault{#1}%
+ }{%
+ \@nameuse{add#1tocentry}%
+ }{}{\@currenttocentry}%
+ \fi
+ \fi
+% \end{macrocode}
+% Jetzt kommt der Kolumnentitel an die Reihe.
+% \begin{macrocode}
+ \csname #1mark\expandafter\endcsname\expandafter{\@currentheadentry}%
+% \end{macrocode}
+% Und die Abstände in die andere Verzeichnisse.
+% \changes{v2.8g}{2001/07/18}{per \cs{float@addtolists} wird nun
+% auch ein vertikaler Abstand in Listen des \texttt{float}-Pakets
+% eingebaut}^^A
+% \changes{v3.00}{2008/07/01}{jetzt auch Kapiteleinträge in andere
+% float-Verzeichnisse mit hyperref}^^A
+% \begin{macrocode}
+ \ifdim \@chapterlistsgap>\z@
+ \doforeachtocfile{%
+ \iftocfeature{\@currext}{chapteratlist}{%
+ \addtocontents{\@currext}{\protect\addvspace{\@chapterlistsgap}}%
+ }{}%
+ }%
+ \@ifundefined{float@addtolists}{}{%
+ \scr@float@addtolists@warning
+ \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
+ }%
+ \fi
+% \end{macrocode}
+% Jetzt kommt die eigentliche Überschrift. An dieser Stelle wird ab
+% Version~3.18 nicht mehr stur \cs{@makecshapterhead} verwendet, sondern eine
+% Anweisung, die vom Namen der Gliederungsüberschrift abhängig ist.
+% \changes{v3.18}{2015/05/22}{\cs{@makechapterhead} durch
+% \cs{@make\meta{Name}head} ersetzt}^^A
+% \begin{macrocode}
+ \if@twocolumn
+ \if@at@twocolumn
+ \@nameuse{@make#1head}{#3}%
+ \else
+ \@topnewpage[\@nameuse{@make#1head}{#3}]%
+ \fi
+ \else
+ \@nameuse{@make#1head}{#3}%
+ \fi
+% \end{macrocode}
+% Und das Ganze endet schließlich mit:
+% \changes{v3.18}{2015/05/21}{\cs{@afterheading} in jedem Fall}^^A
+% \begin{macrocode}
+ \@afterheading
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@@startchapter
+%
+% \begin{macro}{\scr@@startschapter}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (intern)}
+% Diese Anweisung nimmt die Rolle des ursprüngliche \cs{@schapter} ein sie ist
+% sehr viel einfacher gestrickt als \cs{scr@@startchapter}.
+% \begin{macrocode}
+\newcommand*{\scr@@startschapter}[2]{%
+% \end{macrocode}
+% Für Leute, die unbedingt nach der Sternversion noch ein \cs{addcontentsline}
+% anfügen wollen, muss hier ebenfalls der \textsf{hyperref}-Hook ausgeführt
+% werden. Allerdings passiert das hier entsprechend dem Vorgehen von
+% \textsf{hyperref} selbst in einer Gruppe, in der zusätzlich \cs{@mkboth} zu
+% \cs{@gobbletwo} gemacht wird, auch wenn ich absolut nicht versehe, was das
+% soll.
+% \begin{macrocode}
+ \begingroup
+ \let\@mkboth\@gobbletwo
+ \hy@insteadofrefstepcounter{#1}%
+ \endgroup
+% \end{macrocode}
+% Dann wird die eigentliche Überschrift ausgegeben.
+% \begin{macrocode}
+ \if@twocolumn
+ \if@at@twocolumn
+ \@nameuse{@makes#1head}{#2}%
+ \else
+ \@topnewpage[\@nameuse{@makes#1head}{#2}]%
+ \fi
+ \else
+ \@nameuse{@makes#1head}{#2}%
+ \fi
+% \end{macrocode}
+% Und das Ganze endet schließlich mit:
+% \changes{v3.18}{2015/05/21}{\cs{@afterheading} in jedem Fall}^^A
+% \begin{macrocode}
+ \@afterheading
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@@startschapter
+%
+%% \begin{macro}{\if@at@twocolumn}
+% \changes{v2.7b}{2001/01/05}{neu (intern)}^^A
+% \begin{macro}{\scr@topnewpage}
+% \changes{v2.7b}{2001/01/05}{neu (intern)}^^A
+% \changes{v2.8q}{2001/11/27}{fehlende Klammern ergänzt}^^A
+% \begin{macro}{\@topnewpage}
+% \changes{v2.7b}{2001/01/05}{neu (\LaTeX{} intern)}^^A
+% \changes{v2.7g}{2001/04/17}{vergessenes \cs{long} ergänzt}^^A
+% \changes{v3.01}{2008/11/13}{Verwendung von
+% \cs{scr@float@addtolists@warning} (aus \texttt{scrkliof.dtx})}^^A
+% Interessant ist dabei die Erweiterung, daß jedes Kapitel mit einer
+% Präambel versehen werden kann. Diese wird im zweispaltigen Satz wie
+% die Überschrift selbst einspaltig gesetzt. Intern wird dies für
+% die Preambel des Index und der Bibliography verwendet. Dabei
+% entsteht aber wiederum das Problem, dass der Indexkopf innerhalb von
+% \cs{twocolumn} ausgegeben wird andererseits aber innerhalb von
+% \cs{chapter} das Makro \cs{@topnewpage} verwendet wird. Damit würde
+% dann also \cs{@topnewpage} innerhalb von \cs{@topnewpage}
+% aufgerufen. Das ist jedoch nicht erlaubt. Als muss der Aufruf von
+% \cs{@topnewpage} in \cs{@chapter} und \cs{@schapter} verhindert
+% werden, wenn wir uns bereits in \cs{@topnewpage} befinden. Eine
+% Möglichkeit dafür wäre, einen Schalter in den Index-Kopf
+% einzubauen. Ich wähle hingegen die Methode, \cs{@topnewpage}
+% entsprechend umzudefinieren. Damit kann dann auch der Anwender
+% \cs{@chapter} innerhalb des optionalen Arguments von \cs{twocolumn}
+% verwenden. Ein Schalter wird allerdings trotzdem gebraucht.
+% \begin{macrocode}
+\newif\if@at@twocolumn
+\newcommand*\scr@topnewpage{}
+\let\scr@topnewpage\@topnewpage
+\long\def\@topnewpage[#1]{%
+ \@at@twocolumntrue\scr@topnewpage[{#1}]\@at@twocolumnfalse
+}
+% \end{macrocode}
+% \end{macro}^^A \@topnewpage
+% \end{macro}^^A \scr@topnewpage
+% \end{macro}^^A \if@at@twocolumn
+%
+% \begin{macro}{\scr@makechapterhead}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (intern)}
+% Diese Anweisung nimmt die Rolle des ursprüngliche \cs{@makechapterhead}
+% ein. Mit dem neuen Mechanismus könnte man auf diesen zusätzlichen Schritt
+% verzichten. Aus Gründen der Kompatibilität wurde er aber übernommen. Daher
+% übernimmt sie auch die ChangeLog-Einträge der alten Anweisung.
+% \changes{v2.7b}{2001/01/05}{Kapitel können grundsätzlich mit einer
+% Präambel versehen werden}^^A
+% \changes{v2.8p}{2001/09/25}{es gibt verschiedene Arten von Präambeln}^^A
+% \changes{v3.15}{2014/12/10}{\cs{nobreak} am Ende entfernt}^^A
+% \begin{macrocode}
+\newcommand*{\scr@makechapterhead}[2]{%
+ \use@chapter@o@preamble{#1}%
+ \@nameuse{@@make#1head}{#2}%
+ \use@preamble{#1@u}%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@makechapterhead
+%
+% \begin{macro}{\scr@makeschapterhead}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (intern)}
+% Diese Anweisung nimmt die Rolle des ursprüngliche \cs{@makeschapterhead}
+% ein. Mit dem neuen Mechanismus könnte man auf diesen zusätzlichen Schritt
+% verzichten. Aus Gründen der Kompatibilität wurde er aber übernommen. Daher
+% übernimmt sie auch die ChangeLog-Einträge der alten Anweisung.
+% \begin{macrocode}
+\newcommand*{\scr@makeschapterhead}[2]{%
+ \use@chapter@o@preamble{#1}%
+ \@nameuse{@@makes#1head}{#2}%
+ \use@preamble{#1@u}%
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@makeschapterhead
+%
+% \begin{macro}{\scr@@makechapterhead}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (intern)}
+% Diese Anweisung nimmt die Rolle des ursprüngliche \cs{@@makechapterhead}
+% ein. Daher übernimmt sie auch die ChangeLog-Einträge der alten Anweisung.
+% \changes{v2.8q}{2002/04/18}{\cs{raggedsection} wird bei Option
+% \texttt{chapterprefix} auch auf den Präfix angewendet}^^A
+% \changes{v2.9p}{2003/06/28}{\cs{parfillskip} auf \cs{fill} gesetzt}^^A
+% \changes{v2.96a}{2006/12/02}{Abstand nach der Präfixzeile nur, wenn eines
+% Präfixzeile ausgegeben wurde}^^A
+% \changes{v2.97b}{2007/03/09}{\cs{endgraf} korrigiert}^^A
+% \changes{v3.15}{2014/11/20}{Generalumbau}^^A
+% \changes{v3.15}{2014/12/09}{\cs{raggedchapter} ersetzt
+% \cs{raggedsection}}^^A
+% \changes{v3.17}{2015/04/03}{Verwendung von \cs{usefontofkomafont} für die
+% initiale Fontumstellung}^^A
+% \begin{macrocode}
+\newcommand*{\scr@@makechapterhead}[2]{%
+% \end{macrocode}
+% Der Absolutwert des Abstandes davor wird eingefügt.
+% \changes{v3.22}{2016/12/21}{\cs{@afterindentrue} wird bei positivem
+% \texttt{beforeskip} gesetzt}^^A
+% \changes{v3.26}{2018/09/18}{Beachtung von Einstellung
+% \texttt{afterindent}}^^A
+% \begin{macrocode}
+ \@tempskipa=\glueexpr \csname scr@#1@beforeskip\endcsname\relax\relax
+ \csname scr@#1@afterindent\endcsname
+ {\@afterindenttrue}{\@afterindentfalse}{%
+ \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\else
+ \expandafter\ifnum\scr@v@is@ge{3.22}\@afterindenttrue\fi
+ \fi
+ }%
+ \chapterheadstartvskip
+% \end{macrocode}
+% Dann die eigentliche Überschrift innerhalb einer Gruppe.
+% \changes{v3.20}{2015/12/23}{\cs{parfillskip} auf \texttt{\cs{z@} plus
+% 1fil} gesetzt}^^A
+% \begin{macrocode}
+ {%
+ \setlength{\parindent}{\z@}\setlength{\parfillskip}{\z@ plus 1fil}%
+% \end{macrocode}
+% \changes{v3.19}{2015/08/02}{Verwendung von \cs{chapterlinesformat} und
+% \cs{chapterlineswithprefixformat}}^^A
+% \changes{v3.19}{2015/08/02}{Verwendung von Element \texttt{disposition} an
+% Stelle von Befehl \cs{sectfont}}^^A
+% \changes{v3.19a}{2015/10/03}{Bug durch vergessene Definition von
+% \cs{IfUseNumber} behoben}^^A
+% Ab Version~3.19 wurde der Code weitgehend umgebaut, um die Befehle
+% \cs{chapterlinesformat} für die hängende Version und
+% \cs{chapterlinesandprefixformat} für die Version mit Präfixzeile zu
+% verwenden. Dadurch entfällt dann auch die Verwendung von
+% \cs{usefontofkomafont}. Ich bin mir bewusst, dass dadurch diverse Hacks
+% bezüglich der Kapitelüberschriften nicht mehr funktionieren. Dafür kann man
+% diese Hacks nun durch saubere Lösungen ersetzen.
+% \begin{macrocode}
+ \def\IfUseNumber{\ifnumbered{#1}}%
+%<book> \if@mainmatter\else\let\IfUseNumber\@secondoftwo\fi
+ \if@chapterprefix
+ \let\IfUsePrefixLine\@firstoftwo
+ \else
+ \let\IfUsePrefixLine\@secondoftwo
+ \fi
+ \normalfont\usekomafont{disposition}{%
+ \usekomafont{#1}{%
+ \settoheight{\@tempskipa}{%
+ {\usekomafont{#1prefix}{%
+ \vrule \@width\z@ \@height\csname scr@#1@innerskip\endcsname}}%
+ }%
+ \raggedchapter
+ \IfUseNumber{%
+ \IfUsePrefixLine{%
+ \chapterlineswithprefixformat{#1}%
+ {{\usekomafont{#1prefix}{\csname #1format\endcsname%
+ \setlength{\@tempskipa}{\csname scr@#1@innerskip\endcsname}%
+ \chapterheadmidvskip}}}%
+ {\interlinepenalty \@M#2\@@par}%
+ }{%
+ \chapterlinesformat{#1}%
+ {\csname #1format\endcsname}%
+ {\interlinepenalty \@M#2\@@par}%
+ }%
+ }{%
+ \IfUsePrefixLine{%
+ \chapterlineswithprefixformat{#1}%
+ {}%
+ {\interlinepenalty \@M#2\@@par}%
+ }{%
+ \chapterlinesformat{#1}%
+ {}%
+ {\interlinepenalty \@M#2\@@par}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ \nobreak\par\nobreak
+% \end{macrocode}
+% Zum Schluss der Absolutwert des Abstandes dahinter.
+% \changes{v3.26}{2018/09/20}{Betragsbildung entfernt}^^A
+% \begin{macrocode}
+ \@tempskipa=\glueexpr \csname scr@#1@afterskip\endcsname\relax\relax
+ \chapterheadendvskip
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@@makechapterhead
+%
+% \begin{macro}{\scr@@makeschapterhead}
+% \changes{v3.18}{2015/05/22}{neue Anweisung (intern)}
+% Diese Anweisung nimmt die Rolle des ursprüngliche \cs{@@makechapterhead}
+% ein. Sie ist um einiges einfacher als \cs{scr@@makechapterhead} orientiert
+% sich aber prinzipiell daran.
+% \changes{v2.9p}{2003/06/28}{\cs{parfillskip} auf \cs{fill} gesetzt}^^A
+% \changes{v2.9q}{2004/03/24}{Klammerung an \cs{@@makechapterhead}^^A
+% angepasst}^^A
+%\changes{v3.15}{2014/12/09}{\cs{raggedchapter} ersetzt
+% \cs{raggedsection}}^^A
+%\changes{v3.19}{2015/08/02}{an die Änderungen bei \cs{scr@@makechapterhead}
+% angepasst}^^A
+% \changes{v3.20}{2015/12/23}{\cs{parfillskip} auf \texttt{\cs{z@} plus
+% 1fil} gesetzt}^^A
+% \changes{v3.22}{2016/12/21}{\cs{@afterindentrue} wird bei positivem
+% \texttt{beforeskip} gesetzt}^^A
+% \changes{v3.25}{2017/09/07}{\cs{IfUseNumber} korrigiert}^^A
+% \changes{v3.26}{2018/09/18}{Beachtung von Einstellung
+% \texttt{afterindent}}^^A
+% \changes{v3.26}{2018/09/20}{Betragsbildung für \texttt{afterskip}
+% entfernt}^^A
+% \begin{macrocode}
+\newcommand*{\scr@@makeschapterhead}[2]{%
+ \@tempskipa=\glueexpr \csname scr@#1@beforeskip\endcsname\relax\relax
+ \csname scr@#1@afterindent\endcsname
+ {\@afterindenttrue}{\@afterindentfalse}{%
+ \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\else
+ \expandafter\ifnum\scr@v@is@ge{3.22}\@afterindenttrue\fi
+ \fi
+ }%
+ \chapterheadstartvskip
+ {%
+ \setlength{\parindent}{\z@}\setlength{\parfillskip}{\z@ plus 1fil}%
+ \let\IfUseNumber\@secondoftwo
+ \if@chapterprefix
+ \let\IfUsePrefixLine\@firstoftwo
+ \else
+ \let\IfUsePrefixLine\@secondoftwo
+ \fi
+ \normalfont\usekomafont{disposition}{%
+ \usekomafont{#1}{%
+ \raggedchapter
+ \IfUsePrefixLine{%
+ \chapterlineswithprefixformat{#1}%
+ {}%
+ {\interlinepenalty \@M#2\@@par}%
+ }{%
+ \chapterlinesformat{#1}%
+ {}%
+ {\interlinepenalty \@M#2\@@par}%
+ }%
+ }%
+ }%
+ }%
+ \nobreak\par\nobreak
+ \@tempskipa=\glueexpr \csname scr@#1@afterskip\endcsname\relax\relax
+ \chapterheadendvskip
+}
+% \end{macrocode}
+% \end{macro}^^A \scr@@makeschapterhead
+%
+% \begin{macro}{\chapterlinesformat}
+% \changes{v3.19}{2015/08/02}{neue Anweisung}
+% \begin{macro}{\chapterlineswithprefixformat}
+% \changes{v3.19}{2015/08/02}{neue Anweisung}
+% Diese Anweisung definiert das Format der eigentlichen Überschriften im Stil
+% \texttt{chapter}, wenn mit Überschriftenzeilen gearbeitet
+% wird. Fonteinstellungen sind zu diesem Zeitpunkt bereits erfolgt. Die
+% Argumente sind:
+% \begin{description}
+% \item[\meta{Befehlsname} --] der Name der Gliederungsebene, normalerweise
+% \texttt{chapter}.
+% \item[\meta{Gliederungsnummer} --] die bereits fertig formatierte
+% Gliederungsnummer (bei \cs{chapterlineswithprefixformat} einschließlich
+% des nachfolgenden vertikalen Abstands) oder leer, falls keine
+% Gliederungsnummer auszugeben ist.
+% \item[\meta{Text} --] der Text der Überschrift.
+% \end{description}
+% Der Anwender ist selbst verantwortlich, dass innerhalb der Überschrift kein
+% Seitenumbruch erfolgen kann. Nach der Überschrift wird jedoch zwangsweise
+% ein \cs{@@par} ausgeführt, so dass sichergestellt ist, dass mit einem
+% internen Absatz abgeschlossen wird.
+% \begin{macrocode}
+\newcommand{\chapterlinesformat}[3]{%
+ \@hangfrom{#2}{#3}%
+}
+\newcommand{\chapterlineswithprefixformat}[3]{%
+ #2#3%
+}
+% \end{macrocode}
+% \end{macro}^^A \chapterlineswithprefixformat
+% \end{macro}^^A \chapterlinesformat
+%
+% \begin{macro}{\use@chapter@o@preamble}
+% \changes{v3.15}{2014/12/08}{Anpassung an geänderte Abstandsbehandlung}^^A
+% \changes{v3.15a}{2015/02/02}{Korrektur, zur Verhinderung falscher
+% \texttt{overfull \cs{vbox}} Meldungen}^^A
+% \changes{v3.18}{2015/05/20}{Verwendung befehlsabhängiger Abstände und
+% Warnungen}^^A
+% \changes{v3.18}{2015/05/22}{Bekommt ein Argument und setzt die Prämabel
+% der Anweisung nicht des Stils}^^A
+% Das Makro wird benötigt, weil das Setzen der oberen Präambel etwas
+% mehr Aufwand bedeutet. Die Anweisung spart Platz, da sie zweimal
+% verwendet wird.
+% \begin{macrocode}
+\newcommand*{\use@chapter@o@preamble}[1]{%
+ {%
+ \settoheight{\@tempdima}{%
+ \@tempskipa=\glueexpr \csname scr@#1@beforeskip\endcsname\relax\relax
+ \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi
+ \vbox{\chapterheadstartvskip}%
+ }%
+ \settodepth{\@tempdimb}{%
+ \@tempskipa=\glueexpr \csname scr@#1@beforeskip\endcsname\relax\relax
+ \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi
+ \vbox{\chapterheadstartvskip}%
+ }%
+ \addtolength{\@tempdima}{\@tempdimb}%
+ \setbox\z@\vbox{%
+ \use@preamble{#1@o}%
+ }%
+ \setlength{\@tempdimb}{\ht0}%
+ \addtolength{\@tempdimb}{\dp0}%
+ \vbox to \z@{%
+ \vskip-\baselineskip
+ \vbox to \@tempdima{%
+ \vfill
+ \box\z@
+ }%
+ \vss
+ }\vskip-\parskip\vskip-\baselineskip
+ \ifdim \@tempdimb>\@tempdima%
+ \addtolength{\@tempdimb}{-\@tempdima}%
+ \ifdim\@tempdimb<\vfuzz
+ \ClassInfo{\KOMAClassName}{%
+ preamble before #1 is \the\@tempdimb\space to high.\MessageBreak
+ Tolerated without warning because of\MessageBreak
+ \string\vfuzz\space = \the\vfuzz\space >= \the\@tempdimb
+ }%
+ \else
+ \ClassWarning{\KOMAClassName}{%
+ preamble before #1 is \the\@tempdimb\space to high.\MessageBreak
+ To avoid the overfull \string\vbox\space you may
+ change\MessageBreak
+ the `beforeskip' value using
+ \string\RedeclareSectionCommand\MessageBreak
+ at the preamble of your document.\MessageBreak
+ You may also change \string\setchapterpreamble\MessageBreak
+ before the command, which generates the message
+ about\MessageBreak
+ an overfull \string\vbox
+ }%
+ \fi
+ \fi%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \use@chapter@o@preamble
+% \end{macro}^^A \scr@startchapter
+%
+% \begin{macro}{\addchaptertocentry}
+% \changes{v3.08}{2010/11/01}{Neu}^^A
+% \changes{v3.12}{2013/09/24}{Behandlung von \cs{if@chaptertolists} hier}^^A
+% \changes{v3.12}{2013/09/24}{Verwendung von \cs{addxcontentsline}}^^A
+% Seit Version~3.08 wird der Eintrag nicht direkt innerhalb von \cs{chapter}
+% per \cs{addcontentsline} erzeugt, sondern indirekt über diese Anweisung. Das
+% erste Argument ist dabei die (formatierte) Nummer bzw. bei nicht
+% nummerierten Kapiteln leer. Das zweite Argument ist der Überschriftstext für
+% das Verzeichnis. Durch diesen indirekten Weg, kann die Anweisung einfach
+% umdefiniert werden. Verwendet wird hier die Standardanweisung für
+% Inhaltsverzeichniseinträge, die in \texttt{scrkliof.dtx} definiert ist:
+% \begin{macrocode}
+\newcommand*{\addchaptertocentry}[2]{%
+ \addtocentrydefault{chapter}{#1}{#2}%
+ \if@chaptertolists
+ \doforeachtocfile{%
+ \iftocfeature{\@currext}{chapteratlist}{%
+ \addxcontentsline{\@currext}{chapteratlist}[{#1}]{#2}%
+ }{}%
+ }%
+ \@ifundefined{float@addtolists}{}{\scr@float@addtolists@warning}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}^^A \addchaptertocentry
+%
+% \begin{macro}{\@chapter}
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}
+% und \cs{scr@@startchapter}}^^A
+% \begin{macro}{\@makechapterhead}
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}
+% und \cs{scr@makechapterhead}}^^A
+% \begin{macro}{\@@makechapterhead}
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}
+% und \cs{scr@@makechapterhead}}^^A
+% \begin{macro}{\@schapter}
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}
+% und \cs{scr@@startschapter}}^^A
+% \begin{macro}{\@makeschapterhead}
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}
+% und \cs{scr@makeschapterhead}}^^A
+% \begin{macro}{\@@makeschapterhead}
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}
+% und \cs{scr@@makeschapterhead}}^^A
+% \begin{macro}{\setchapterpreamble}
+% \changes{v2.7b}{2001/01/05}{neu}^^A
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}}^^A
+% \begin{macro}{\chapter@u@preamble}
+% \changes{v2.8p}{2001/09/25}{neu (intern)}^^A
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}}^^A
+% \begin{macro}{\chapter@o@preamble}
+% \changes{v2.8p}{2001/09/25}{neu (intern)}^^A
+% \changes{v3.18}{2015/05/22}{siehe \cs{scr@dsc@def@style@chapter@command}}^^A
+% All diese Anweisungen wurden in früheren Versionen von \KOMAScript{}
+% explizit definiert. Nun werden sie nur noch indirekt über
+% \cs{scr@dsc@def@style@chapter@command} definiert und verwenden dabei andere
+% interne Anweisungen als früher. Deshalb funktionieren ggf. das Patchen mit
+% \textsf{etoolbox}, \textsf{xpatch} und ähnlichen Paketen nicht mehr. Das ist
+% der Preis für die neuen Möglichkeiten.
+% \end{macro}^^A \chapter@o@preamble
+% \end{macro}^^A \chapter@u@preamble
+% \end{macro}^^A \setchapterpreamble
+% \end{macro}^^A \@@makeschapterhead
+% \end{macro}^^A \@makeschapterhead
+% \end{macro}^^A \@schapter
+% \end{macro}^^A \@@makechapterhead
+% \end{macro}^^A \@makechapterhead
+% \end{macro}^^A \@chapter
+%
+% \begin{macro}{\addchap}
+% \changes{v2.0e}{1994/08/10}{\cs{sectdef} durch \cs{secdef} ersetzt}^^A
+% \changes{v2.0e}{1994/08/10}{\cs{addcontensline} durch
+% \cs{addcontentsline} ersetzt}^^A
+% \changes{v2.0e}{1994/08/10}{\cs{@makechapterhead} durch
+% \cs{@makeschapterhead} ersetzt}^^A
+% \changes{v2.0e}{1994/08/10}{\cs{afterheadings} durch
+% \cs{@afterheading} ersetzt}^^A
+% \changes{v2.1a}{1994/10/29}{Argument von \cs{chaptermark}^^A
+% entfernt bei \textsf{scrbook}}^^A
+% \changes{v2.0e}{1994/10/12}{mehrfach \cs{markboth} durch
+% \cs{sectionmark} ersetzt}^^A
+% \changes{v2.2b}{1995/03/20}{\cs{chaptermark} durch \cs{@mkboth}
+% ersetzt}^^A
+% \changes{v2.8d}{2001/07/05}{\cs{chapterpagestyle} statt
+% \texttt{plain}}^^A
+% \changes{v3.00}{2008/07/01}{jetzt auch Kapiteleinträge in andere
+% float-Verzeichnisse mit hyperref}^^A
+% \changes{v3.01}{2008/11/13}{Verwendung von
+% \cs{scr@float@addtolists@warning} (aus \texttt{scrkliof.dtx})}^^A
+% \changes{v3.08}{2010/11/01}{Verwendung von \cs{addchaptertocentry}}^^A
+% \changes{v3.10}{2011/08/30}{Integration der Erweiterung für das optionale
+% Argument der Gliederungsbefehle}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{SecDef}}^^A
+% \changes{v3.18}{2015/05/22}{Komplett neu definiert}^^A
+% \KOMAScript{} bietet in \textsf{scrbook} und \textsf{scrreprt} den
+% zusätzlichen Gliederungsbefehl \cs{addchap}. Es handelt sich dabei
+% um einen mit \cs{chapter*} vergleichbaren Befehl, bei dem jedoch der
+% Kolumnentitel korrigiert wird und ein Eintrag ins Inhaltsverzeichnis
+% erfolgt (nicht in der Stern-Variante).
+%
+% Die Definition von \cs{addcap} sah bis zu Version 2.7 so aus:
+% \begin{verbatim}
+% \newcommand\addchap{\if@openright\cleardoublepage\else\clearpage\fi
+% \thispagestyle{plain}%
+% \global\@topnum\z@
+% \@afterindentfalse
+% \secdef\@addchap\@saddchap}
+% \def\@addchap[#1]#2{\typeout{#2}
+% \addcontentsline{toc}{chapter}{#1}
+% \if@twoside\@mkboth{#1}{}\else\@mkboth{}{#1}\fi
+% \addtocontents{lof}{\protect\addvspace{10\p@}}%
+% \addtocontents{lot}{\protect\addvspace{10\p@}}%
+% \if@twocolumn
+% \@topnewpage[\@makeschapterhead{#2}]%
+% \else
+% \@makeschapterhead{#2}%
+% \@afterheading
+% \fi}
+% \def\@saddchap#1{\@mkboth{}{}
+% \if@twocolumn
+% \@topnewpage[\@makeschapterhead{#1}]%
+% \else
+% \@makeschapterhead{#1}%
+% \@afterheading
+% \fi}
+% \end{verbatim}\vspace{-\baselineskip}
+% Dies führte jedoch zu Problemen im Zusammenhang mit
+% \textsf{hyperref}, da hierbei keine korrekten Links erzeugt
+% werden. Mit dem \texttt{hypertex}-Treiber von \textsf{hyperref}
+% bis Version 6.71a werden auch in der neuen Implementierung keine
+% korrekten Links erzeugt. Dies ist jedoch ein Bug in jenem
+% Treiber. Mit neuen Versionen tritt das Problem nicht mehr auf.
+% Deshalb wurde der Code wie folgt vereinfacht. Von wesentlicher
+% Bedeutung ist dabei der Aufruf von \cs{chapter*}, da in
+% \texttt{hpdftex.def} das interne Makro \cs{@schapter} so umdefiniert
+% wird, dass ein korrekter Link erzeugt wird.
+% \begin{macro}{\@addchap}
+% \changes{v3.12}{2013/02/26}{Verwendung von \cs{addchapmark}}^^A
+% \changes{v3.17}{2015/04/20}{\cs{scr@ds@head} in \cs{addchapmark}
+% expandieren}^^A
+% \changes{v3.18}{2015/05/22}{Komplett neu definiert}^^A
+% \begin{macro}{\@saddchap}
+% \changes{v3.12}{2013/02/26}{Verwendung von \cs{addchapmark}}^^A
+% \changes{v3.18}{2015/05/22}{Komplett neu definiert}^^A
+% Seit \KOMAScript~3.18 wurden die Definitionen noch einmal deutlich
+% vereinfacht. Deshalb wird nun auch nur noch für \cs{addchap*} die neue
+% Anweisung \cs{addchapmark} benötigt. Bei \cs{addchap} geht es hingegen
+% einfach über \cs{chaptermark} innerhalb von \cs{chapter}.
+% \begin{macrocode}
+\newcommand\addchap{%
+ \SecDef\@addchap\@saddchap
+}%
+\newcommand*{\@addchap}{}%
+\long\def\@addchap[#1]#2{%
+ \edef\reserved@a{%
+ \unexpanded{%
+ \chapter[{#1}]{#2}%
+ \c@secnumdepth=
+ }\the\c@secnumdepth\relax
+ }%
+ \c@secnumdepth=\numexpr \chapternumdepth-1\relax
+ \reserved@a
+}
+\newcommand{\@saddchap}[1]{%
+ \chapter*{#1}%
+ \addchapmark{}%
+}%
+% \end{macrocode}
+% In \texttt{hyperref} bis Version 6.71a ist ein dicker Bug. In
+% verschiedenen \texttt{def}-Dateien wird dort das \emph{interne}
+% \KOMAScript-Makro \cs{@addchap} umdefiniert, ohne sicherzustellen,
+% dass das Makro auch noch so aussieht, wie man das erwartet hat. Die
+% sauberste Lösung wäre sicher gewesen dort \cs{@addchap} nur zu
+% ergänzen, so wie man das auch bei \cs{@schapter} gemacht hatte. Ab
+% Version 6.71b ist dieser Bug behoben. Damit ich nicht eines Fehlers
+% verdächtigt werde, wird ggf. eine entsprechende Meldung ausgegeben.
+% \changes{v2.7e}{2001/04/16}{fehlende, schließende Klammer
+% ergänzt}^^A
+% \changes{v2.7f}{2001/04/17}{fehlendes Klammerpaar ergänzt}^^A
+% \changes{v2.8q}{2001/11/17}{\cs{AfterPackage} zur Überprüfung der
+% \textsf{hyperref}-Version verwendet}
+% \begin{macrocode}
+%<*book>
+\AfterPackage{hyperref}{%
+ \@ifpackagelater{hyperref}{2001/02/19}{}{%
+ \ClassWarningNoLine{\KOMAClassName}{%
+ You are using an old version of hyperref package!\MessageBreak%
+ This version has a buggy hack at many drivers\MessageBreak%
+ causing \string\addchap\space to behave strange.\MessageBreak%
+ Please update hyperref to at least version
+ 6.71b}}}
+%</book>
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \@saddchap
+% \end{macro}^^A \@addchap
+% \end{macro}^^A \addchap
+%
+%
+% \begin{macro}{\l@chapter}
+% \changes{v2.9k}{2003/01/02}{Anpassung an Option \texttt{tocleft}}^^A
+% \changes{v2.96b}{2006/11/30}{Umbruch zwischen \cs{chapter}-Eintrag im
+% Inhaltsverzeichnis und übergeordneten Einträgen verhindern}^^A
+% \changes{v2.96b}{2006/11/30}{Umbruch zwischen \cs{chapter}-Eintrag im
+% Inhaltsverzeichnis und untergeordneten Einträgen verhindern}^^A
+% \changes{v2.97c}{2007/06/21}{\cs{sectfont} durch Verwendung von
+% Element \texttt{chapterentry} ersetzt}^^A
+% \changes{v2.97c}{2007/06/21}{Element \texttt{chapterentrypagenumber} wird
+% verwendet}^^A
+% \changes{v2.97c}{2007/06/21}{weitgehend umgeschrieben, um linksbündige
+% Einträge zu ermöglichen}^^A
+% \changes{v3.15}{2014/12/22}{Verwendung von \cs{chaptertocdepth} und
+% \cs{scr@chapter@tocnumwidth}}^^A
+% \changes{v3.15}{2014/12/10}{Verwendung von \cs{addvspace} statt \cs{vskip}
+% für den Abstand am Anfang}^^A
+% \changes{v3.20}{2015/10/06}{überführt in Verzeichnisstil}^^A
+% Für die Definition des Kapiteleintrags ins Inhaltsverzeichnis werden einige
+% Parameter von \cs{DeclareSectionCommand} definiert und teilweise
+% verwendet. Damit kann man dann zumindest einige Änderungen mit
+% \cs{DeclareSectionCommand} vornehmen, allerdings noch keine komplette
+% Neugestaltung des Eintrags erreichen.
+% \begin{macro}{\scr@chapter@tocindent}
+% \changes{v3.15}{2014/12/02}{neue (interne) Anweisung}^^A
+% \changes{v3.18}{2015/05/20}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \changes{v3.20}{2015/11/06}{wird nun auch verwendet}^^A
+% Der Einzug des Eintrags noch vor der Nummer.
+% \end{macro}^^A \scr@chapter@tocindent
+% \begin{macro}{\scr@chapter@tocnumwidth}
+% \changes{v3.15}{2014/12/02}{neue (interne) Anweisung}^^A
+% \changes{v3.18}{2015/05/20}{indirekt über \cs{DeclareSectionCommand}}^^A
+% Die Breite der Nummer des Eintrags wird tatsächlich verwendet.
+% \end{macro}
+% \begin{option}{chapterentrydots}
+% \changes{v3.15}{2014/12/10}{Neu}^^A
+% Seit Version~3.15 kann man mit dieser Option Pünktchen zwischen Text und
+% Seitenzahl in den Kapiteleinträgen einschalten.
+% \begin{macrocode}
+%<*option>
+\KOMA@ifkey{chapterentrydots}{@chapterentrywithdots}
+%</option>
+% \end{macrocode}
+% \end{option}^^A chapterentrydots
+% \begin{macro}{\raggedchapterentry}
+% \changes{v2.97c}{2007/06/21}{neue Anweisung}^^A
+% \changes{v3.20}{2016/02/23}{wird nicht mehr verwendet}^^A
+% \changes{v3.21}{2016/06/06}{siehe \texttt{scrkernel-tocstyle.dtx},
+% Stil \texttt{tocline}, Eigenschaft \texttt{raggedentrytext}}^^A
+% Ausrichtung des Textes der Kapiteleinträge im Inhaltsverzeichnis.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\raggedchapterentry}{}
+% \end{macrocode}
+% \end{macro}^^A \raggedchapterentry
+% \end{macro}^^A \l@chapter
+%
+% \begin{macro}{\l@chapteratlist}
+% \changes{v2.96a}{2006/12/03}{neues Macro}^^A
+% Dieses Makro wird ggf. für die Kapiteleinträge in den Listen der
+% Gleitumgebungen verwendet. Zunächst einmal wird hier dasselbe verwendet, wie
+% für die Kapiteleinträge ins Inhaltsverzeichnis.
+% \begin{macrocode}
+\newcommand*{\l@chapteratlist}{\l@chapter}
+% \end{macrocode}
+% \end{macro}^^A \l@chapteratlist
+%
+% \begin{Counter}{chapter}
+% \begin{macro}{\thechapter}
+% \begin{macro}{\chapterformat}
+% \changes{v2.3c}{1995/08/06}{Duden Regel 6}^^A
+% \changes{v2.7}{2000/01/03}{einfaches Leerzeichen durch \cs{enskip}^^A
+% ersetzt}^^A
+% \changes{v2.8}{2001/06/15}{\cs{chapappifprefix} eingefügt}^^A
+% \changes{v2.8o}{2001/09/19}{\cs{chapappifchapterprefix} statt
+% \cs{chapappifprefix}} ^^A
+% \changes{v2.96a}{2006/12/02}{\cs{mbox} eingefügt, um \cs{caps} zu
+% ermöglichen}^^A
+% \changes{v3.17}{2015/03/08}{\cs{enskip} not in prefix line mode}^^A
+% \begin{macro}{\chaptermarkformat}
+% \changes{v2.3a}{1995/07/08}{Leerraum nach der Kapitelnummer erhöht}^^A
+% \changes{v2.3c}{1995/08/06}{Duden Regel 6}^^A
+% \changes{v2.8}{2001/06/15}{\cs{chapappifprefix} eingefügt}^^A
+% \changes{v2.8o}{2001/09/19}{\cs{chapappifchapterprefix} statt
+% \cs{chapappifprefix}}^^A
+% \changes{v3.03a}{2009/04/03}{Tilde durch \cs{nobreakspace} ersetzt, um die
+% Kompatibilität mit Spanisch zu verbessern}^^A
+% Jede Gliederungsebene benötigt einen Zähler für die
+% Gliederungsnummer und eine Darstellung des Zählers
+% (\cs{the\dots}). Desweiteren wird eine Formatierung des Zählers in
+% den Gliederungsüberschriften (\texttt{\bslash\dots format}) und eine
+% Formatierung des Zählers in der Kopfzeile
+% (\texttt{\bslash\dots markformat}) benötigt.
+% \begin{macrocode}
+\newcounter{chapter}
+\renewcommand*{\thechapter}{\@arabic\c@chapter}
+\newcommand*{\chapterformat}{%
+ \mbox{\chapappifchapterprefix{\nobreakspace}\thechapter\autodot
+ \IfUsePrefixLine{}{\enskip}}%
+}
+\newcommand*\chaptermarkformat{\chapappifchapterprefix{\ }%
+ \thechapter\autodot\enskip}
+% \end{macrocode}
+% \end{macro}^^A \chaptermarkformat
+% \end{macro}^^A \chapterformat
+% \end{macro}^^A \thechapter
+% \end{Counter}^^A chapter
+%
+%
+% \begin{macro}{\chaptername}
+% Name der Gliederungsebenen \cs{chapter}.
+% \begin{macrocode}
+\newcommand*\chaptername{Chapter}
+% \end{macrocode}
+% \end{macro}^^A \chaptername
+%
+%
+% \begin{macro}{\appendixname}
+% Der Name des Anhangs.
+% \begin{macrocode}
+\newcommand*\appendixname{Appendix}
+% \end{macrocode}
+% \end{macro}^^A \appendixname
+%
+%
+% \begin{macro}{\chapappifprefix}
+% \changes{v2.8}{2001/06/15}{neu}^^A
+% \changes{v2.8o}{2001/09/19}{obsolet}^^A
+% \begin{macro}{\chapappifchapterprefix}
+% \changes{v2.8o}{2001/09/19}{neu}^^A
+% \changes{v2.8o}{2001/09/19}{Argument ist nicht optional}^^A
+% \changes{v3.18}{2015/06/09}{verwendet \cs{IfChapterUsePrefixLine}}^^A
+% \begin{macro}{\IfChapterUsesPrefixLine}
+% \changes{v3.18}{2015/06/09}{neu (intern)}
+% \begin{macro}{\chapapp}
+% \changes{v2.8}{2001/06/15}{neu}^^A
+% Das in \cs{chapterformat} verwendete Makro
+% \cs{chapappifchapterprefix} setzt abhängig von \cs{if@chapterprefix}
+% noch das Makro \cs{chapapp} gefolgt vom obliatorischen Argument.
+% \cs{chapapp} macht \cs{@chapapp} auf Anwenderebene verfügbar. Der
+% Vorteil des neuen \cs{chapappifchapterprefix} gegenüber dem alten
+% \cs{chapappifprefix} ist, dass nun beim Umdefinieren von
+% \cs{chapterformat} und \cs{chaptermarkformat} wieder
+% \cs{renewcommand} verwendet werden kann und beim Umschalten in den
+% Anhang die Kopfzeile korrekt ist, weil das Makro nun nicht mehr
+% geschützt ist, sondern direkt expandiert.
+% \begin{macrocode}
+\newcommand*{\chapappifprefix}[1][]{%
+ \ClassWarning{\KOMAClassName}{%
+ Please don't use obsolete command
+ \string\chapappifprefix.\MessageBreak
+ The new command \string\chapappifchapterprefix\space has
+ an\MessageBreak
+ obligatory instead of an optional argument. Use that\MessageBreak
+ new command%
+ }%
+ \chapappifchapterprefix{#1}%
+}
+\newcommand*{\chapappifchapterprefix}[1]{%
+ \IfChapterUsesPrefixLine{\chapapp#1}{}%
+}
+\newcommand*{\IfChapterUsesPrefixLine}{%
+ \if@chapterprefix\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
+}
+\newcommand*{\chapapp}{\@chapapp}
+% \end{macrocode}
+% \begin{macro}{\@chapapp}
+% Dieses Makro enthält den Kapitelname (\cs{chaptername}), der sich im
+% Anhang üblicherweise ändert (\cs{appendixname}).
+% \begin{macrocode}
+\newcommand*\@chapapp{\chaptername}
+% \end{macrocode}
+% \end{macro}^^A \@chapapp
+% \end{macro}^^A \chapapp
+% \end{macro}^^A \IfChapterUsePrefixLine
+% \end{macro}^^A \chapappifchapterprefix
+% \end{macro}^^A \chapappifprefix
+%
+%
+% \begin{macro}{\chaptermark}
+% Da \cs{chapter} nicht mit Hilfe von \cs{@startsection} definiert
+% wird, wird auch \cs{chaptermark} nicht automatisch definiert. Es
+% wird aber in den Seitenstilen benötigt bzw. umdefiniert. Also hier
+% vorsorglich eine Dummy-Definition:
+% \begin{macrocode}
+\newcommand*\chaptermark[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addchapmark}
+% \changes{v3.12}{2013/03/26}{neue Anweisung}^^A
+% Für \cs{addchapmark} gilt dies hingegen nicht. Das wird nicht von den Stilen
+% definiert, sondern direkt mit der gewünschten Definition
+% initialisiert. Bitte nicht davon verwirren lassen, dass \cs{if@mainmatter}
+% hier auch von \textsf{scrreprt} definiert wird. Das ist Absicht und
+% vereinfacht dem einen oder anderen Paket oder Benutzer vielleicht die
+% Arbeit.
+% \begin{macrocode}
+\newcommand*\addchapmark[1]{%
+ \begingroup
+ \expandafter\let\csname if@mainmatter\expandafter\endcsname
+ \csname iffalse\endcsname
+ \c@secnumdepth=\numexpr \chapternumdepth-1\relax
+ \chaptermark{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}^^A \addchapmark
+%
+%
+% \begin{macro}{\raggedchapter}
+% \changes{v3.15}{2014/12/09}{neu}^^A
+% Da das doch recht häufig gewünscht wird, kann man die Ausrichtung der
+% Kapitelüberschrift auch getrennt von der Ausrichtung der übrigen
+% Überschriften einstellen.
+% \begin{macrocode}
+\newcommand*{\raggedchapter}{\raggedsection}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{KOMAfont}{chapter}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{chapter}}^^A
+% \begin{macro}{\scr@fnt@chapter}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{chapter}}^^A
+% \begin{KOMAfont}{chapterprefix}
+% \changes{v2.96a}{2006/12/02}{neues Element \texttt{chapterprefix}}^^A
+% \begin{macro}{\scr@fnt@chapterprefix}
+% \changes{v2.96a}{2006/12/02}{neues Element \texttt{chapterprefix}}^^A
+% \begin{macrocode}
+\newcommand*{\scr@fnt@chapter}{\size@chapter}
+\newcommand*{\scr@fnt@chapterprefix}{\size@chapterprefix}
+% \end{macrocode}
+% \end{macro}^^A \scr@fnt@chapterprefix
+% \end{KOMAfont} chapterprefix
+% \end{macro}^^A \scr@fnt@chapter
+% \end{KOMAfont}^^A chapter
+%
+% \begin{KOMAfont}{chapterentry}
+% \changes{v2.97c}{2007/06/21}{neues Font-Element}^^A
+% \changes{v3.06}{2010/06/09}{Verwendung von \texttt{sectioning} durch
+% \texttt{disposition} ersetzt}^^A
+% Schrift für den \cs{chapter}-Eintrag im Inhaltsverzeichnis.
+% \begin{macrocode}
+\newkomafont{chapterentry}{\usekomafont{disposition}}
+% \end{macrocode}
+% \end{KOMAfont}
+%
+% \begin{KOMAfont}{chapterentrypagenumber}
+% \changes{v2.97c}{2007/06/21}{neues Font-Element}^^A
+% Schrift für die Seitenzahl des \cs{chapter}-Eintrags im Inhaltsverzeichnis
+% abweichend von \texttt{chapterentry}.
+% \begin{macrocode}
+\newkomafont{chapterentrypagenumber}{}
+% \end{macrocode}
+% \end{KOMAfont}
+%
+% \begin{KOMAfont}{chapterentrydots}
+% \changes{v3.15}{2014/12/10}{neues Font-Element}^^A
+% Schrift für die optionalen Pünktchen des \cs{chapter}-Eintrags im
+% Inhaltsverzeichnis abweichend von \texttt{chapterentrypagenumber}.
+% \begin{macrocode}
+\newkomafont{chapterentrydots}{\normalfont}
+%</body>
+%</book|report>
+%</class>
+% \end{macrocode}
+% \end{KOMAfont}
+%
+%
+% \subsection{Abschnitte und Untergliederungen}
+%
+% Alle Ebenen ab \cs{section} ähneln sich so sehr, dass sie gemeinsam
+% behandelt werden. Lediglich bei \textsf{scrartl} gibt es für \cs{section}
+% selbst noch ein paar Besonderheiten.
+%
+% \begin{macro}{\size@section}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% \begin{macro}{\size@subsection}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% \begin{macro}{\size@subsubsection}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% \begin{macro}{\size@paragraph}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% \begin{macro}{\size@subparagraph}
+% \changes{v2.8o}{2001/09/14}{neu (intern)}^^A
+% Hier werden diese Befehle nur vordefiniert. Ihre tatsächliche Einstellung
+% erfolgt über die (Vor-)Auswahl von Option \texttt{headings}.
+% \begin{macrocode}
+%<*class>
+%<*prepare>
+\newcommand*{\size@section}{}
+\newcommand*{\size@subsection}{}
+\newcommand*{\size@subsubsection}{}
+\newcommand*{\size@paragraph}{}
+\newcommand*{\size@subparagraph}{}
+%</prepare>
+% \end{macrocode}
+% \end{macro}^^A \size@subparagraph
+% \end{macro}^^A \size@paragraph
+% \end{macro}^^A \size@subsubsection
+% \end{macro}^^A \size@subsection
+% \end{macro}^^A \size@section
+%
+%
+% \begin{macro}{\l@section}
+% \changes{v2.9k}{2003/01/02}{Anpassung an Option \texttt{tocleft}}^^A
+% \changes{v2.96b}{2006/11/30}{Umbruch zwischen \cs{section}-Eintrag im
+% Inhaltsverzeichnis und übergeordneten Einträgen verhindern}^^A
+% \changes{v2.96b}{2006/11/30}{Umbruch zwischen \cs{section}-Eintrag im
+% Inhaltsverzeichnis und untergeordneten Einträgen verhindern}^^A
+% \changes{v2.97c}{2007/06/21}{\cs{sectfont} durch Verwendung von
+% Element \texttt{sectionentry} ersetzt}^^A
+% \changes{v2.97c}{2007/06/21}{Element \texttt{sectionentrypagenumber} wird
+% verwendet}^^A
+% \changes{v2.97c}{2007/06/21}{weitgehend umgeschrieben, um linksbündige
+% Einträge zu ermöglichen}^^A
+% \changes{v3.15}{2014/11/24}{\cs{sectiontocdepth},
+% \cs{scr@section@tocindent} und \cs{scr@section@tocnumwidth} werden
+% verwendet}^^A
+% \changes{v3.20}{2015/10/06}{Überführung in Verzeichnisstil}^^A
+% Bei der Artikel-Klasse folgt die Formatierung für
+% \cs{section}-Einträge, an Stelle der Einträge für \cs{chapter}
+% der Buch- oder der Bericht-Klasse. Bei diesen handelt es sich hier
+% stattdessen um eine normale Ebene.
+% \begin{option}{sectionentrydots}
+% \changes{v3.15}{2014/12/10}{Neu}^^A
+% Seit Version~3.15 kann man mit dieser Option Pünktchen zwischen Text und
+% Seitenzahl in den Kapiteleinträgen einschalten.
+% \begin{macrocode}
+%<*article>
+%<*option>
+\KOMA@ifkey{sectionentrydots}{@sectionentrywithdots}
+%</option>
+% \end{macrocode}
+% \end{option}^^A sectionentrydots
+% \begin{macro}{\raggedsectionentry}
+% \changes{v2.97c}{2007/06/21}{neue Anweisung}^^A
+% \changes{v3.20}{2016/02/23}{nicht mehr verwendet}^^A
+% Ausrichtung des Textes der Abschnittseinträge im Inhaltsverzeichnis.
+% \begin{macrocode}
+%<*body>
+\newcommand*{\raggedsectionentry}{}
+%</body>
+%</article>
+% \end{macrocode}
+% \end{macro}^^A \raggedsectionentry
+% \end{macro}^^A \l@section
+%
+%
+% \begin{macro}{\addsec}
+% \changes{v2.0e}{1994/10/12}{mehrfach \cs{markboth} durch
+% \cs{sectionmark} ersetzt}^^A
+% \changes{v2.2b}{1995/03/20}{\cs{sectionmark} durch \cs{@mkboth}
+% ersetzt}^^A
+% \changes{v2.3h}{1995/01/21}{jetzt auch bei \textsf{scrbook} und
+% \textsf{scrreprt}}^^A
+% \changes{v2.4g}{1996/11/04}{\cs{section*} vorgezogen, damit
+% dadurch provozierte Seitenumbrüche im Inhaltsverzeichnis
+% berücksichtigt werden}^^A
+% \changes{v2.5d}{1998/01/03}{\cs{@mkboth} bedingt durch
+% \cs{markright} ersetzt}^^A
+% \changes{v2.7a}{2001/01/04}{\cs{addsec} für eine bessere
+% Unterstützung von \textsf{hyperref} geändert}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{SecDef}}^^A
+% \begin{macro}{\@addsec}
+% \changes{v3.10}{2011/08/30}{Verwendung von \cs{addsectiontocentry}}^^A
+% \changes{v3.10}{2011/08/30}{Integration der Erweiterung für das optionale
+% Argument der Gliederungsbefehle}^^A
+% \changes{v3.12}{2013/02/26}{Verwendung von \cs{addsecmark}}^^A
+% \changes{v3.18}{2015/05/22}{komplett neu definiert}^^A
+% \begin{macro}{\@saddsec}
+% \changes{v3.12}{2013/02/26}{Verwendung von \cs{addsecmark}}^^A
+% \changes{v3.17}{2015/04/20}{\cs{scr@ds@head} in \cs{addsecmark}
+% expandieren}^^A
+% \KOMAScript{} bietet in allen drei Hauptklassen den zusätzlichen
+% Gliederungsbefehl \cs{addsec}. Es handelt sich dabei um einen mit
+% \cs{section*} vergleichbaren Befehl, bei dem jedoch der
+% Kolumnentitel korrigiert wird und ein Eintrag ins Inhaltsverzeichnis
+% erfolgt (nicht in der Stern-Variante).
+%
+% Mit Version~3.18 wurde \cs{addsec} deutlich vereinfacht. Seither verwendet
+% nur noch \cs{@saddsec} die Anweiung \cs{addsecmark}, während \cs{@addsec}
+% direkt über das \cs{sectionmark} von \cs{section} arbeitet.
+% \begin{macrocode}
+%<*body>
+\newcommand\addsec{\SecDef\@addsec\@saddsec}
+\newcommand*{\@addsec}{}
+\def\@addsec[#1]#2{%
+ \edef\reserved@a{%
+ \unexpanded{%
+ \section[{#1}]{#2}%
+ \c@secnumdepth=
+ }\the\c@secnumdepth\relax
+ }%
+ \c@secnumdepth=\numexpr \sectionnumdepth-1\relax
+ \reserved@a
+}
+\newcommand*{\@saddsec}[1]{%
+ \section*{#1}\addsecmark{}%
+}
+% \end{macrocode}
+% \end{macro}^^A \@saddsec
+% \end{macro}^^A \@addsec
+% \end{macro}^^A \addsec
+%
+%
+% \begin{macro}{\minisec}
+% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont}
+% behebt einen Bug im color Paket}^^A
+% \changes{v2.9o}{2003/01/31}{\cs{nobreak} nach dem Gruppenende
+% behebt einen Bug im color Paket}^^A
+% \changes{v2.96a}{2006/11/30}{Standardwert für \cs{parfillskip} (abhängig
+% von Option \texttt{version})}^^A
+% \changes{v2.96a}{2006/12/03}{alle nicht benötigten \cs{nobreak}^^A
+% entfernt}^^A
+% \changes{v3.13a}{2014/08/07}{Absicherung der Abstände bei
+% aufeinanderfolgenden Überschriften entsprechend \cs{@startsection}}^^A
+% \changes{v3.26}{2018/05/14}{fehlendes \cs{interlinepenalty}\cs{@M}
+% ergänzt}^^A
+% \begin{KOMAfont}{minisec}
+% \changes{v2.96a}{2006/12/03}{\texttt{minisec} ist ein eigenes
+% Fontelement}^^A
+% \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}^^A
+% In \KOMAScript{} gibt es diese zusätzliche Gliederungsebene, die
+% immer ohne Nummer und ohne Eintrag ins Inhaltsverzeichnis erfolgt.
+% \begin{macrocode}
+\newkomafont{minisec}{}
+\newcommand\minisec[1]{%
+ \expandafter\ifnum\scr@v@is@lt{3.13a}\relax
+ \@afterindentfalse \vskip 1.5ex
+ \else
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@afterindentfalse
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace{1.5ex}%
+ \fi
+ \fi
+ {\parindent \z@
+ \expandafter\ifnum\scr@v@is@gt{2.96}\relax
+ \setlength{\parfillskip}{\z@ plus 1fil}\fi
+ \raggedsection\normalfont\sectfont\nobreak
+ \usekomafont{minisec}{\nobreak\interlinepenalty \@M #1\par\nobreak}%
+ }\nobreak
+ \@afterheading
+}
+% \end{macrocode}
+% \end{KOMAfont}
+% \end{macro}
+%
+%
+% \begin{macro}{\addsectiontocentry}
+% \changes{v3.10}{2011/08/30}{Neu}^^A
+% Entsprechend \cs{addparttocentry} und \cs{addchaptertocentry}.
+% \begin{macrocode}
+\newcommand*{\addsectiontocentry}[2]{%
+ \addtocentrydefault{section}{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addsubsectiontocentry}
+% \changes{v3.10}{2011/08/30}{Neu}^^A
+% Entsprechend \cs{addparttocentry} usw.
+% \begin{macrocode}
+\newcommand*{\addsubsectiontocentry}[2]{%
+ \addtocentrydefault{subsection}{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addparagraphtocentry}
+% \changes{v3.10}{2011/08/30}{Neu}^^A
+% Entsprechend \cs{addparttocentry} usw.
+% \begin{macrocode}
+\newcommand*{\addparagraphtocentry}[2]{%
+ \addtocentrydefault{paragraph}{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addsubparagraphtocentry}
+% \changes{v3.10}{2011/08/30}{Neu}^^A
+% Entsprechend \cs{addparttocentry} usw.
+% \begin{macrocode}
+\newcommand*{\addsubparagraphtocentry}[2]{%
+ \addtocentrydefault{subparagraph}{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{Counter}{section}
+% \begin{macro}{\thesection}
+% \changes{v2.97e}{2007/11/23}{Kapitelnummer nur im Hauptteil}^^A
+% \changes{v3.03b}{2009/06/09}{\cs{relax} im Kompatibilitätstest durch ein
+% Leerzeichen ersetzt, obwohl das die Wartbarkeit verschlechtert, aber
+% \textsf{hyperref} hat mit dem \cs{relax} ein nicht dokumentieres Problem}
+% \begin{macro}{\sectionmarkformat}
+% \changes{v2.3a}{1995/07/08}{Leerraum nach der Kapitelnummer
+% erhöht}^^A
+% \changes{v2.3c}{1995/08/06}{Duden Regel 6}^^A
+% \begin{Counter}{subsection}
+% \begin{macro}{\thesubsection}
+% \begin{macro}{\subsectionmarkformat}
+% \changes{v2.3a}{1995/07/08}{Leerraum nach der Kapitelnummer
+% erhöht}^^A
+% \changes{v2.3c}{1995/08/06}{Duden Regel 6}^^A
+% \begin{Counter}{subsubsection}
+% \begin{macro}{\thesubsubsection}
+% \begin{Counter}{paragraph}
+% \begin{macro}{\theparagraph}
+% \begin{Counter}{subparagraph}
+% \begin{macro}{\thesubparagraph}
+% Jede Gliederungsebene benötigt einen Zähler für die
+% Gliederungsnummer und eine Darstellung des Zählers
+% (\cs{the\dots}). Desweiteren wird eine Formatierung des Zählers in
+% den Gliederungsüberschriften (\texttt{\bslash\dots format}) und eine
+% Formatierung des Zählers in der Kopfzeile
+% (\texttt{\bslash\dots markformat}) benötigt.
+% \begin{macrocode}
+%<*book|report>
+\newcounter{section}[chapter]
+\renewcommand*\thesection{%
+%<*book>
+ \ifnum \scr@compatibility>\@nameuse{scr@v@2.97d} % the space before this
+ % comment should be \relax but hyperref has a
+ % not documented problem with \relax
+ \if@mainmatter\thechapter.\fi
+ \else
+%</book>
+ \thechapter.%
+%<book> \fi
+ \@arabic\c@section
+}
+%</book|report>
+%<*article>
+\newcounter{section}
+\renewcommand*{\thesection}{\@arabic\c@section}
+%</article>
+\newcommand*\sectionmarkformat{\thesection\autodot\enskip}
+\newcounter{subsection}[section]
+\renewcommand*{\thesubsection}{\thesection.\@arabic\c@subsection}
+%<*article>
+\newcommand*\subsectionmarkformat{\thesubsection\autodot\enskip}
+%</article>
+\newcounter{subsubsection}[subsection]
+\renewcommand*{\thesubsubsection}{%
+ \thesubsection.\@arabic\c@subsubsection
+}
+\newcounter{paragraph}[subsubsection]
+\renewcommand*{\theparagraph}{\thesubsubsection.\@arabic\c@paragraph}
+\newcounter{subparagraph}[paragraph]
+\renewcommand*{\thesubparagraph}{%
+ \theparagraph.\@arabic\c@subparagraph
+}
+% \end{macrocode}
+% \begin{macro}{\@seccntformat}
+% \changes{v2.3c}{1995/08/06}{CJK erweitert}^^A
+% \changes{v2.9p}{2004/01/07}{\cs{protect} eingefügt}^^A
+% \changes{v2.97}{2007/01/24}{Workaround für das blöde \cs{protect}}^^A
+% \changes{v3.17}{2015/02/23}{verwendet \cs{\dots format}, wenn es
+% existiert}^^A
+% \changes{v3.17}{2015/03/31}{verwendet \cs{protect} für \cs{\dots
+% format}}^^A
+% \begin{macro}{\othersectionlevelsformat}
+% \changes{v2.7}{2000/01/03}{neu}^^A
+% \changes{v2.7}{2000/01/03}{\cs{quad} durch \cs{enskip} ersetzt}^^A
+% \changes{v2.7i}{2001/05/17}{\cs{let} durch \cs{def} ersetzt}^^A
+% \changes{v2.97}{2007/01/24}{statt einem Argument jetzt drei}^^A
+% Bei den Ebenen ab \cs{section} erfolgt die Formatierung der
+% Gliederungnummer in der Überschrift mit einer gemeinsamen
+% Anweisung. Die interne Anweisung \cs{@seccntformat} wird dabei von
+% \LaTeX-Kern verwendet und muss umdefiniert werden, um eine
+% entsprechende Anweisung auf Anwenderebene verfügbar zu haben.
+% Ab Version 2.9p wurde in \cs{@seccntformat} ein \cs{protect} vor
+% \cs{othersectionlevelsformat} eingefügt. Damit wurde es für den Benutzer
+% deutlich einfacher, die Anweisung \cs{othersectionlevelsformat}
+% umzudefinieren. Dafür war dadurch aber \cs{the\dots} nicht mehr
+% expandiert. Das wiederum gab Probleme, wenn \cs{@seccntformat} für den
+% \cs{mark}-Mechanismus genutzt wurde. Deshalb hat
+% \cs{othersectionlevelsformat} ab Version 2.97 drei Argumente statt nur
+% eines. Das zweite Argument sollte vom Anwender ignoriert werden, es
+% existiert nur, um die Kompatibitlität Umdefinitionen zu erhalten, bei denen
+% \cs{othersectionlevelsformat} nur ein Argument besitzt. Das dritte Argument
+% ist die \cs{the\dots}-Anweisung. Das zweite Argument funktioniert so, das es
+% das dritte Argument frisst, falls \cs{othersectionlevelsformat} nur ein
+% Argument liest.
+% \begin{macrocode}
+\newcommand*{\othersectionlevelsformat}[3]{#3\autodot\enskip}
+\renewcommand*{\@seccntformat}[1]{%
+ \expandafter\ifnum\scr@v@is@lt{3.17}\relax
+ \protect\othersectionlevelsformat{#1}{%
+ \expandafter\aftergroup\noexpand\@gobble}{\csname the#1\endcsname}%
+ \else
+ \scr@ifundefinedorrelax{#1format}{%
+ \protect\othersectionlevelsformat{#1}{%
+ \expandafter\aftergroup\noexpand\@gobble}{\csname the#1\endcsname}%
+ }{\expandafter\protect\csname #1format\endcsname}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}^^A \othersectonlevelsformat
+% \end{macro}^^A \@seccntformat
+% \end{macro}^^A \thesubparagraph
+% \end{Counter}^^A subparagraph
+% \end{macro}^^A \theparagraph
+% \end{Counter}^^A paragraph
+% \end{macro}^^A \thesubsubsection
+% \end{Counter}^^A subsubsection
+% \end{macro}^^A \subsectionformat
+% \end{macro}^^A \thesubsection
+% \end{Counter}^^A subsection
+% \end{macro}^^A \sectionformat
+% \end{macro}^^A \thesection
+% \end{Counter}^^A section
+%
+%
+% \begin{macro}{\addsecmark}
+% \changes{v3.12}{2013/03/26}{neue Anweisung}^^A
+% \cs{addsecmark} wird nicht von den Seitenstilen definiert, sondern direkt
+% mit der gewünschten Definition initialisiert.
+% \begin{macrocode}
+\newcommand*\addsecmark[1]{%
+ \begingroup
+ \c@secnumdepth=\numexpr \sectionnumdepth-1\relax
+ \sectionmark{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}^^A \addsecmark
+%
+% \begin{KOMAfont}{section}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{section}}^^A
+% \begin{macro}{\scr@fnt@section}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{section}}^^A
+% \begin{KOMAfont}{subsection}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{subsection}}^^A
+% \begin{macro}{\scr@fnt@subsection}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{subsection}}^^A
+% \begin{KOMAfont}{subsubsection}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{subsubsection}}^^A
+% \begin{macro}{\scr@fnt@subsubsection}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{subsubsection}}^^A
+% \begin{KOMAfont}{paragraph}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{paragraph}}^^A
+% \begin{macro}{\scr@fnt@paragraph}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{paragraph}}^^A
+% \begin{KOMAfont}{subparagraph}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{subparagraph}}^^A
+% \begin{macro}{\scr@fnt@subparagraph}
+% \changes{v2.8o}{2001/09/14}{neues Element \texttt{subparagraph}}^^A
+% \begin{KOMAfont}{minisec}
+% \changes{v2.8o}{2001/09/14}{neuer Ersatz für das Element
+% \texttt{minisec}}^^A
+% \changes{v2.96a}{2007/01/08}{Alias für das Element \texttt{minisec}^^A
+% entfernt, da es nun ein eigenes Element ist}^^A
+% Definition der Elemente der Gliederung, deren Schrift geändert
+% werden kann.
+% \begin{macrocode}
+\newcommand*{\scr@fnt@section}{\size@section}
+\newcommand*{\scr@fnt@subsection}{\size@subsection}
+\newcommand*{\scr@fnt@subsubsection}{\size@subsubsection}
+\newcommand*{\scr@fnt@paragraph}{\size@paragraph}
+\newcommand*{\scr@fnt@subparagraph}{\size@subparagraph}
+% \end{macrocode}
+% \end{KOMAfont}^^A minisec
+% \end{macro}
+% \end{KOMAfont}
+% \end{macro}
+% \end{KOMAfont}
+% \end{macro}
+% \end{KOMAfont}
+% \end{macro}
+% \end{KOMAfont}
+% \end{macro}
+% \end{KOMAfont}
+%
+% \begin{KOMAfont}{sectionentry}
+% \changes{v2.97c}{2007/06/21}{neues Font-Element}^^A
+% \changes{v3.06}{2010/06/09}{Verwendung von \texttt{sectioning} durch
+% \texttt{disposition} ersetzt}^^A
+% Schrift für den \cs{section}-Eintrag im Inhaltsverzeichnis.
+% \begin{macrocode}
+%<*article>
+\newkomafont{sectionentry}{\usekomafont{disposition}}
+% \end{macrocode}
+% \end{KOMAfont}
+%
+% \begin{KOMAfont}{sectionentrypagenumber}
+% \changes{v2.97c}{2007/06/21}{neues Font-Element}^^A
+% Schrift für die Seitenzahl des \cs{section}-Eintrags im Inhaltsverzeichnis
+% abweichend von \texttt{sectionentry}.
+% \begin{macrocode}
+\newkomafont{sectionentrypagenumber}{}
+% \end{macrocode}
+% \end{KOMAfont}
+%
+% \begin{KOMAfont}{sectionentrydots}
+% \changes{v3.15}{2014/12/10}{neues Font-Element}^^A
+% Schrift für die optionalen Pünktchen des \cs{section}-Eintrags im
+% Inhaltsverzeichnis abweichend von \texttt{sectionentrypagenumber}.
+% \begin{macrocode}
+\newkomafont{sectionentrydots}{\normalfont}
+%</article>
+% \end{macrocode}
+% \end{KOMAfont}
+%
+%
+% \begin{macro}{\partnumdepth}
+% \changes{v3.12}{2013/12/16}{new read only command}^^A
+% \changes{v3.18}{2015/05/24}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\chapternumdepth}
+% \changes{v3.12}{2013/12/16}{new read only command}^^A
+% \changes{v3.18}{2015/05/20}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\sectionnumdepth}
+% \changes{v3.12}{2013/12/16}{new read only command}^^A
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subsectionnumdepth}
+% \changes{v3.12}{2013/12/16}{new read only command}^^A
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subsubsectionnumdepth}
+% \changes{v3.12}{2013/12/16}{new read only command}^^A
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\paragraphnumdepth}
+% \changes{v3.12}{2013/12/16}{new read only command}^^A
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subparagraphnumdepth}
+% \changes{v3.12}{2013/12/16}{new read only command}^^A
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% Diese dürfen nur gelesen, sollten aber nie umdefiniert werden und geben die
+% Nummerierungsebene der Gliederungsanweisungen an (nicht zu verwechseln mit
+% der Verzeichnisebene der Gliederungsanweisungen).
+% \begin{macro}{\parttocdepth}
+% \changes{v3.15}{2014/12/22}{neue Anweisung}^^A
+% \changes{v3.18}{2015/05/25}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\chaptertocdepth}
+% \changes{v3.15}{2014/12/22}{neue Anweisung}^^A
+% \changes{v3.18}{2015/05/20}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\sectiontocdepth}
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subsectiontocdepth}
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subsubsectiontocdepth}
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\paragraphtocdepth}
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subparagraphtocdepth}
+% \changes{v3.15}{2014/12/09}{indirekt über \cs{DeclareSectionCommand}}^^A
+% Diese dürfen nur gelesen, sollten aber nie umdefiniert werden und geben die
+% Verzeichnisebene der Gliederungsanweisungen an.
+% \begin{macro}{\part}
+% \changes{v3.18}{2015/05/25}{Verwendung von \cs{DeclareSectionCommand}}^^A
+% \changes{v3.26}{2018/06/27}{Definition nach \cs{section} verschoben (wegen
+% bookmark level fix)}^^A
+% \begin{macro}{\chapter}
+% \changes{v2.8d}{2001/07/05}{\cs{chapterpagestyle} statt
+% \texttt{plain}}^^A
+% \changes{v3.18}{2015/05/20}{Verwendung von \cs{DeclareSectionCommand}}^^A
+% Als Besonderheit werden für \cs{chapter} nur diejenigen Werte gesetzt, die
+% nicht über Optionen eingestellt werden können und daher vorab deklariert
+% werden müssen. Bei den Anweisungen der unteren Ebenen werden hingegen alle
+% Einstellungen über \cs{DeclareSectionCommand} vorgenommen.
+% \begin{macro}{\section}
+% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
+% \cs{size@section} aufgerufen}^^A
+% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont}
+% behebt einen Bug im color Paket}^^A
+% \changes{v2.96a}{2006/11/30}{Standardwert für \cs{parfillskip} (abhängig
+% von Option \texttt{version})}^^A
+% \changes{v2.96a}{2006/12/03}{alle nicht benötigten \cs{nobreak} entfernt}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{scr@startsection}}^^A
+% \changes{v3.15}{2014/11/24}{Verwendung von \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subsection}
+% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
+% \cs{size@subsection} aufgerufen}^^A
+% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont}
+% behebt einen Bug im color Paket}^^A
+% \changes{v2.96a}{2006/11/30}{Standardwert für \cs{parfillskip} (abhängig
+% von Option \texttt{version})}^^A
+% \changes{v2.96a}{2006/12/03}{alle nicht benötigten \cs{nobreak} entfernt}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{scr@startsection}}^^A
+% \changes{v3.15}{2014/11/24}{Verwendung von \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subsubsection}
+% \changes{v2.3d}{1995/08/19}{wird bei \texttt{scrartcl} nun
+% ebenfalls numeriert und ins Inhaltsverzeichnis geschrieben}^^A
+% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
+% \cs{size@subsubsection} aufgerufen}^^A
+% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont}
+% behebt einen Bug im color Paket}^^A
+% \changes{v2.96a}{2006/11/30}{Standardwert für \cs{parfillskip} (abhängig
+% von Option \texttt{version})}^^A
+% \changes{v2.96a}{2006/12/03}{alle nicht benötigten \cs{nobreak} entfernt}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{scr@startsection}}^^A
+% \changes{v3.15}{2014/11/24}{Verwendung von \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\paragraph}
+% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
+% \cs{size@paragraph} aufgerufen}^^A
+% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont}
+% behebt einen Bug im color Paket}^^A
+% \changes{v2.96a}{2006/12/03}{alle nicht benötigten \cs{nobreak} entfernt}^^A
+% \changes{v3.15}{2014/11/24}{Verwendung von \cs{DeclareSectionCommand}}^^A
+% \begin{macro}{\subparagraph}
+% \changes{v2.8p}{2001/09/22}{\cs{sectfont} wird nun vor
+% \cs{size@subparagraph} aufgerufen}^^A
+% \changes{v2.8q}{2002/02/28}{\cs{nobreak} nach \cs{sectfont}
+% behebt einen Bug im color Paket}^^A
+% \changes{v2.96a}{2006/12/03}{alle nicht benötigten \cs{nobreak} entfernt}^^A
+% \changes{v3.13a}{2014/09/11}{Verwendung von \cs{scr@startsection}}^^A
+% \changes{v3.15}{2014/11/24}{Verwendung von \cs{DeclareSectionCommand}}^^A
+% \changes{v3.15}{2014/11/24}{\cs{parindent} durch \cs{scr@parindent}
+% ersetzt}^^A
+% Die Standardgliederungsbefehle \cs{section} bis \cs{subparagraph}
+% sind seit \KOMAScript{} v3.15 über die von \KOMAScript{} bereitgestellte
+% Schnittstelle \cs{DeclareSectionCommand} definiert.
+% \begin{macrocode}
+%<*book|report>
+\DeclareSectionCommand[%
+ style=chapter,%
+ level=\z@,%
+ pagestyle=plain,%
+ tocstyle=chapter,%
+ tocindent=\z@,%
+ tocnumwidth=1.5em%
+]{chapter}
+%</book|report>
+\DeclareSectionCommand[%
+ style=section,%
+ level=1,%
+ indent=\z@,%
+ beforeskip=-3.5ex \@plus -1ex \@minus -.2ex,%
+ afterskip=2.3ex \@plus.2ex,%
+ tocstyle=section,%
+%<article> tocindent=0pt,%
+%<book|report> tocindent=1.5em,%
+%<article> tocnumwidth=1.5em%
+%<book|report> tocnumwidth=2.3em%
+]{section}
+\DeclareSectionCommand[%
+ style=part,%
+%<article> level=\z@,%
+%<report|book> level=\m@ne,%
+%<report|book> pagestyle=plain,%
+ tocstyle=part,%
+ toclevel=\m@ne,%
+ tocindent=\z@,%
+ tocnumwidth=2em%
+]{part}
+\DeclareSectionCommand[%
+ style=section,%
+ level=2,%
+ indent=\z@,%
+ beforeskip=-3.25ex\@plus -1ex \@minus -.2ex,%
+ afterskip=1.5ex \@plus .2ex,%
+%<article> tocstyle=subsection,%
+%<book|report> tocstyle=section,%
+%<article> tocindent=1.5em,%
+%<book|report> tocindent=3.8em,%
+%<article> tocnumwidth=2.3em%
+%<book|report> tocnumwidth=3.2em%
+]{subsection}
+\DeclareSectionCommand[%
+ style=section,%
+ level=3,%
+ indent=\z@,%
+ beforeskip=-3.25ex\@plus -1ex \@minus -.2ex,%
+ afterskip=1.5ex \@plus .2ex,%
+%<article> tocstyle=subsection,%
+%<book|report> tocstyle=section,%
+%<article> tocindent=3.8em,%
+%<book|report> tocindent=7.0em,%
+%<article> tocnumwidth=3.2em%
+%<book|report> tocnumwidth=4.1em%
+]{subsubsection}
+\DeclareSectionCommand[%
+ style=section,%
+ level=4,%
+ indent=\z@,%
+ beforeskip=3.25ex \@plus1ex \@minus.2ex,%
+ afterskip=-1em,%
+%<article> tocstyle=subsection,%
+%<book|report> tocstyle=section,%
+%<article> tocindent=7.0em,%
+%<book|report> tocindent=10em,%
+%<article> tocnumwidth=4.1em%
+%<book|report> tocnumwidth=5em%
+]{paragraph}
+\DeclareSectionCommand[%
+ style=section,%
+ level=5,%
+ indent=\scr@parindent,%
+ beforeskip=3.25ex \@plus1ex \@minus .2ex,%
+ afterskip=-1em,%
+%<article> tocstyle=subsection,%
+%<book|report> tocstyle=section,%
+%<article> tocindent=10em,%
+%<book|report> tocindent=12em,%
+%<article> tocnumwidth=5em%
+%<book|report> tocnumwidth=6em%
+]{subparagraph}
+\expandafter\ifnum\scr@v@is@lt{3.15}\relax
+ \let\scr@subparagraph@sectionindent\parindent
+\else
+ \def\scr@subparagraph@sectionindent{\scr@parindent}%
+\fi
+%</body>
+%</class>
+% \end{macrocode}
+% \end{macro}^^A \subparagraph
+% \end{macro}^^A \paragraph
+% \end{macro}^^A \subsubsection
+% \end{macro}^^A \subsection
+% \end{macro}^^A \section
+% \end{macro}^^A \chapter
+% \end{macro}^^A \part
+% \end{macro}^^A \subparargraphtocdepth
+% \end{macro}^^A \paragraphtocdepth
+% \end{macro}^^A \subsubsectiontocdepth
+% \end{macro}^^A \subsectiontocdepth
+% \end{macro}^^A \sectiontocdepth
+% \end{macro}^^A \chaptertocdepth
+% \end{macro}^^A \parttocdepth
+% \end{macro}^^A \subparargraphnumdepth
+% \end{macro}^^A \paragraphnumdepth
+% \end{macro}^^A \subsubsectionnumdepth
+% \end{macro}^^A \subsectionnumdepth
+% \end{macro}^^A \sectionnumdepth
+% \end{macro}^^A \chapternumdepth
+% \end{macro}^^A \partnumdepth
+%
+%
+% \subsection{Font und Größeneinstellungen}
+%
+% Die Einstellungen für die einzelnen Ebenen werden bei den Definitonen der
+% Ebenen vorgenommen. Hier gibt es nur Einstellungen, die nicht einer
+% einzelnen Ebene zugeordnet sind.
+%
+% \begin{KOMAfont}{disposition}
+% \changes{v2.95b}{2006/07/30}{neues Element \texttt{disposition}}^^A
+% \begin{KOMAfont}{sectioning}
+% \begin{macro}{\scr@fnt@disposition}
+% \changes{v2.95b}{2006/07/30}{neues Element \texttt{disposition}}^^A
+% \begin{macro}{\sectfont}
+% \changes{v2.8c}{2001/06/29}{\cs{normalcolor} eingefügt}^^A
+% \changes{v3.12}{2013/11/11}{wird wegen Option
+% \texttt{headings!=standardclasses} früher definiert}^^A
+% \changes{v3.20}{2016/01/29}{\cs{sffamily} durch \cs{@gr@gsffamily}
+% ersetzt}^^A
+% Dies Schriftart nicht nur für die Gliederungsbefehle. Dieses Makro
+% ist als intern zu betrachten. Der Anwender sollte stattdessen das
+% entsprtechende Fontelement verwenden.
+% \begin{macrocode}
+%<*prepare>
+\newcommand*{\sectfont}{\normalcolor\@gr@gsffamily\bfseries}
+%</prepare>
+%<*body>
+\newcommand*{\scr@fnt@disposition}{\sectfont}
+\aliaskomafont{sectioning}{disposition}
+%</body>
+% \end{macrocode}
+% \end{macro}^^A \sectfont
+% \end{macro}^^A \scr@fnt@disposition
+% \end{KOMAfont}^^A sectioning
+% \end{KOMAfont}^^A disposition
+%
+%
+% \begin{option}{headings}
+% \changes{v2.3h}{1996/01/20}{Größe von \cs{chapter} um eine Stufe
+% verringert}^^A
+% \changes{v2.3h}{1996/01/20}{Verwendung von \cs{chapterheadstartvskip} und
+% \cs{chapterheadendvskip} an Stelle von festen vertikalen Abständen am
+% Anfang und am Ende eines Kapitels}^^A
+% \changes{v2.7c}{2000/01/19}{vertikale Abstände nach der Kapitelüberschrift
+% geringfügig verändert und mit Leim versehen, um mit \cs{flushbottom} zu
+% besseren Ergebnissen zu gelangen}^^A
+% \changes{v2.98c}{2008/03/10}{Neue Option}^^A
+% \changes{v3.10}{2011/08/30}{Integration der Erweiterung für das optionale
+% Argument der Gliederungsbefehle}^^A
+% \changes{v3.12}{2013/03/05}{Verwendung der Status-Signalisierung mit
+% \cs{FamilyKeyState}}^^A
+% \changes{v3.12}{2013/08/26}{\cs{KOMA@options} durch \cs{KOMAoptions}
+% ersetzt}^^A
+% \changes{v3.12}{2013/11/11}{neuer Wert \texttt{standardclasses}}^^A
+% \changes{v3.15}{2014/11/24}{\cs{scr@chapter@beforeskip} und
+% \cs{scr@chapter@afterskip} werden verwendet}^^A
+% \changes{v3.17}{2015/03/09}{interne Speicherung des Wert}^^A
+% \changes{v3.18}{2015/05/20}{Werte für \cs{scr@chapter@beforeskip}
+% negiert}^^A
+% Dies ist eine neue zentrale Option für Überschriften. Dabei ergibt sich
+% nun auch das Problem, dass die Gesamtmenge der Überschriften mal
+% \emph{headings} (Überschriften), mal \emph{sectioning}
+% (Abschnittseinteilung) und mal \emph{disposition} (Gliederung) genannt
+% wird. Es wäre gut gewesen, sich bei Zeiten Gedanken darüber zu machen, wie
+% man das am besten einheitlich nennt.
+% \begin{macrocode}
+%<*class>
+%<*option>
+\KOMA@key{headings}{%
+ \KOMA@set@ncmdkey{headings}{@tempa}{%
+ {big}{0},%
+ {normal}{1},%
+ {small}{2},%
+%<*book|report>
+ {openany}{3},%
+ {openright}{4},%
+ {openleft}{5},%
+ {twolinechapter}{6},{chapterprefix}{6},{chapterwithprefix}{6},%
+ {chapterwithprefixline}{6},%
+ {onelinechapter}{7},{nochapterprefix}{7},{chapterwithoutprefix}{7},%
+ {chapterwithoutprefixline}{7},%
+ {twolineappendix}{8},{appendixprefix}{8},{appendixwithprefix}{8},%
+ {appendixwithprefixline}{8},%
+ {onelineappendix}{9},{noappendixprefix}{9},{appendixwithoutprefix}{9},%
+ {appendixwithoutprefixline}{9},%
+%</book|report>
+ {optiontotocandhead}{10},{optiontoheadandtoc}{10},%
+ {optiontotoc}{11},%
+ {optiontohead}{12},%
+ {standardclasses}{13}%
+ }{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed
+ \ifcase \@tempa\relax% big
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{big}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{normal}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{small}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{standardclasses}%
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{big}%
+% \end{macrocode}
+% Als erstes kümmern wir uns um die drei Größenabstufungen für die
+% Überschriften, die \KOMAScript{} bietet, und zwar in der Reihenfolge
+% \texttt{big}, \texttt{normal}, \texttt{small}. Es sei darauf hingewiesen,
+% dass die Verwendung dieser Option alle Änderungen an
+% \cs{chapterheadstartvskip} oder \cs{chapterheadendvskip} oder den
+% Font-Elementen für die einzelnen Überschriften aufhebt macht!
+%
+% Hinweis: Es wurde |+\baselineskip+\parskip| hinzugefügt, um
+% Kompatibilitätsprobleme zu vermeiden. Die entsprechenden Werte werden in der
+% Präambel aber wieder abgezogen, um Überschriften wirklich mit
+% |beforeskip=0pt| an den oberen Rand zu bekommen.
+% \begin{macrocode}
+%<*book|report>
+ \renewcommand*{\scr@chapter@beforeskip}{-3.3\baselineskip-\parskip}%
+ \renewcommand*{\scr@chapter@afterskip}{%
+ 1.725\baselineskip \@plus .115\baselineskip \@minus .192\baselineskip
+ }%
+ \renewcommand*{\scr@chapter@innerskip}{.5\baselineskip}%
+ \renewcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}%
+ \renewcommand*{\chapterheadendvskip}{%
+ \expandafter\ifnum\scr@v@is@lt{3.15}\vspace\@tempskipa
+ \else\vskip\@tempskipa\fi
+ }%
+ \renewcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}%
+%</book|report>
+ \renewcommand*{\size@part}{\Huge}%
+ \renewcommand*{\size@partnumber}{\huge}%
+%<book|report> \renewcommand*{\size@chapter}{\huge}%
+%<book|report> \renewcommand*{\size@chapterprefix}{\size@chapter}%
+ \renewcommand*{\size@section}{\Large}%
+ \renewcommand*{\size@subsection}{\large}%
+ \renewcommand*{\size@subsubsection}{\normalsize}%
+ \renewcommand*{\size@paragraph}{\normalsize}%
+ \renewcommand*{\size@subparagraph}{\normalsize}%
+ \or % normal
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{big}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{normal}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{small}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{standardclasses}%
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{normal}%
+%<*book|report>
+ \renewcommand*{\scr@chapter@beforeskip}{-3\baselineskip-\parskip}%
+ \renewcommand*{\scr@chapter@afterskip}{%
+ 1.5\baselineskip \@plus .1\baselineskip \@minus .167\baselineskip
+ }%
+ \renewcommand*{\scr@chapter@innerskip}{.5\baselineskip}%
+ \renewcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}%
+ \renewcommand*{\chapterheadendvskip}{%
+ \expandafter\ifnum\scr@v@is@lt{3.15}\vspace\@tempskipa
+ \else\vskip\@tempskipa\fi
+ }%
+ \renewcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}%
+%</book|report>
+ \renewcommand*{\size@part}{\huge}%
+ \renewcommand*{\size@partnumber}{\huge}%
+%<*book|report>
+ \renewcommand*{\size@chapter}{\LARGE}%
+ \renewcommand*{\size@chapterprefix}{\size@chapter}%
+ \renewcommand*{\size@section}{\Large}%
+ \renewcommand*{\size@subsection}{\large}%
+%</book|report>
+%<*article>
+ \renewcommand*{\size@section}{\large}%
+ \renewcommand*{\size@subsection}{\normalsize}%
+%</article>
+ \renewcommand*{\size@subsubsection}{\normalsize}%
+ \renewcommand*{\size@paragraph}{\normalsize}%
+ \renewcommand*{\size@subparagraph}{\normalsize}%
+ \or % small
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{big}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{normal}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{small}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{standardclasses}%
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{small}%
+%<*book|report>
+ \renewcommand*{\scr@chapter@beforeskip}{-2.8\baselineskip-\parskip}%
+ \renewcommand*{\scr@chapter@afterskip}{%
+ 1.35\baselineskip \@plus 0.09\baselineskip \@minus .15\baselineskip
+ }%
+ \renewcommand*{\scr@chapter@innerskip}{.5\baselineskip}%
+ \renewcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}%
+ \renewcommand*{\chapterheadendvskip}{%
+ \expandafter\ifnum\scr@v@is@lt{3.15}\vspace\@tempskipa
+ \else\vskip\@tempskipa\fi
+ }%
+ \renewcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}%
+%</book|report>
+ \renewcommand*{\size@part}{\LARGE}%
+ \renewcommand*{\size@partnumber}{\LARGE}%
+%<*book|report>
+ \renewcommand*{\size@chapter}{\Large}%
+ \renewcommand*{\size@chapterprefix}{\size@chapter}%
+ \renewcommand*{\size@section}{\large}%
+%</book|report>
+%<*article>
+ \renewcommand*{\size@section}{\normalsize}%
+%</article>
+ \renewcommand*{\size@subsection}{\normalsize}%
+ \renewcommand*{\size@subsubsection}{\normalsize}%
+ \renewcommand*{\size@paragraph}{\normalsize}%
+ \renewcommand*{\size@subparagraph}{\normalsize}%
+% \end{macrocode}
+% Für \textsf{scrbook} und \textsf{scrreprt} gibt es dann noch die
+% Möglichkeit, auch hierüber die Optionen \texttt{open=any},
+% \texttt{open=right} und \texttt{open=left} zu setzen.
+% \begin{macrocode}
+ \or % openany
+%<*book|report>
+ \KOMAoptions{open=any}%
+%</book|report>
+ \or % openright
+%<*book|report>
+ \KOMAoptions{open=right}%
+%</book|report>
+ \or % openleft
+%<*book|report>
+ \KOMAoptions{open=left}%
+%</book|report>
+% \end{macrocode}
+% Für \textsf{scrbook} und \textsf{scrreprt} gibt es dann noch die
+% Möglichkeit, auch hierüber die Optionen \texttt{chapterprefix} und
+% \texttt{appendixprefix} zu setzen.
+% \begin{macrocode}
+ \or % twolinechapter
+%<*book|report>
+ \KOMAoptions{chapterprefix=true}%
+%</book|report>
+ \or % onelinechapter
+%<*book|report>
+ \KOMAoptions{chapterprefix=false}%
+%</book|report>
+ \or % twolineappendix
+%<*book|report>
+ \KOMAoptions{appendixprefix=true}%
+%</book|report>
+ \or % onelineappend
+%<*book|report>
+ \KOMAoptions{appendixprefix=false}%
+%</book|report>
+% \end{macrocode}
+% Ab Version~3.10 wird über diese Option auch noch die Erweiterung für das
+% optionale Argument der Gliederungsüberschriften aktiviert und gesteuert.
+% \begin{macrocode}
+ \or % optiontotocandhead
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontotocandhead}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontotoc}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontohead}%
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{optiontotocandhead}%
+ \scr@activate@xsection{3}%
+ \or % optiontotoc
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontotocandhead}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontotoc}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontohead}%
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{optiontotoc}%
+ \scr@activate@xsection{2}%
+ \or % optiontohead
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontotocandhead}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontotoc}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{optiontohead}%
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{optiontohead}%
+ \scr@activate@xsection{1}%
+% \end{macrocode}
+% Ab Version~3.12 gibt es noch die Möglichkeit, die Überschriftengrößen der
+% Standardklassen zu emulieren.
+% \begin{macrocode}
+ \or % standardclasses
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{big}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{normal}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{small}%
+ \KOMA@kav@remove{.\KOMAClassFileName}{headings}{standardclasses}%
+ \KOMA@kav@add{.\KOMAClassFileName}{headings}{standardclasses}%
+%<*book|report>
+ \renewcommand*{\scr@chapter@beforeskip}{-50\p@}%
+ \renewcommand*{\scr@chapter@afterskip}{40\p@}%
+ \renewcommand*{\scr@chapter@innerskip}{20\p@}%
+ \renewcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}%
+ \renewcommand*{\chapterheadendvskip}{\vskip\@tempskipa}%
+ \renewcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}%
+ \renewcommand*{\size@part}{\Huge}%
+ \renewcommand*{\size@partnumber}{\huge}%
+ \renewcommand*{\size@chapter}{\Huge}%
+ \renewcommand*{\size@chapterprefix}{\huge}%
+%</book|report>
+%<*article>
+ \renewcommand*{\size@part}{\huge}%
+ \renewcommand*{\size@partnumber}{\Large}%
+%</article>
+ \renewcommand*{\size@section}{\Large}%
+ \renewcommand*{\size@subsection}{\large}%
+ \renewcommand*{\size@subsubsection}{\normalsize}%
+ \renewcommand*{\size@paragraph}{\normalsize}%
+ \renewcommand*{\size@subparagraph}{\normalsize}%
+ \renewcommand*{\sectfont}{\bfseries}%
+%<book|report> \KOMAoptions{open=right,chapterprefix=true}%
+ \fi
+ \fi
+}
+\KOMA@kav@add{.\KOMAClassFileName}{headings}{big}
+%<book|report>\KOMA@kav@add{.\KOMAClassFileName}{headings}{onelinechapter}
+% \end{macrocode}
+% \end{option}^^A headings
+%
+% \begin{option}{bigheadings}
+% \changes{v2.3h}{1996/01/20}{neue Option}^^A
+% \changes{v2.4g}{1996/11/04}{die Option heißt nun wirklich so; bei
+% Verwendung des alten, falschen Namens wird ein Fehler
+% ausgegeben}^^A
+% \changes{v2.98c}{2008/03/10}{obsolet}^^A
+% \changes{v3.01a}{2008/11/20}{deprecated}^^A
+% \begin{macro}{\@bigheadings}
+% \changes{v2.98c}{2008/03/10}{entfernt}^^A
+% \begin{option}{normalheadings}
+% \changes{v2.3h}{1996/01/20}{neue Option}^^A
+% \changes{v2.4g}{1996/11/04}{die Option heißt nun wirklich so; bei
+% Verwendung des alten, falschen Namens wird ein Fehler
+% ausgegeben}^^A
+% \changes{v2.98c}{2008/03/10}{obsolet}^^A
+% \changes{v3.01a}{2008/11/20}{deprecated}^^A
+% \begin{macro}{\@normalheadings}
+% \changes{v2.98c}{2008/03/10}{entfernt}^^A
+% \begin{option}{smallheadings}
+% \changes{v2.3h}{1996/01/20}{neue Option}^^A
+% \changes{v2.4g}{1996/11/04}{die Option heißt nun wirklich so; bei
+% Verwendung des alten, falschen Namens wird ein Fehler
+% ausgegeben}^^A
+% \changes{v2.98c}{2008/03/10}{obsolet}^^A
+% \changes{v3.01a}{2008/11/20}{deprecated}^^A
+% \begin{macro}{\@smallheadings}
+% \changes{v2.98c}{2008/03/10}{entfernt}^^A
+% \begin{macrocode}
+\KOMA@DeclareDeprecatedOption{bigheadings}{headings=big}
+\KOMA@DeclareDeprecatedOption{normalheadings}{headings=normal}
+\KOMA@DeclareDeprecatedOption{smallheadings}{headings=small}
+%</option>
+%</class>
+% \end{macrocode}
+% \end{macro}^^A \@smallheadings
+% \end{option}^^A smallheadings
+% \end{macro}^^A \@normalheadings
+% \end{option}^^A normalheadings
+% \end{macro}^^A \@bigheadings
+% \end{option}^^A bigheadings
+%
+%
+% \iffalse
+%</!letter>
+% \fi
+%
+% \Finale
+%
+\endinput
+%
+% end of file `scrkernel-sections.dtx'
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: iso-latin-1
+%%% TeX-master: t
+%%% End: