diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /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.dtx | 6304 |
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: |