% \CheckSum{4900} % \iffalse meta-comment % ====================================================================== % scrkernel-sections.dtx % Copyright (c) Markus Kohm, 2002-2020 % % 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-2020 % % 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 3476 2020-04-08 14:42:59Z kohm $ % The runs of run-time file generation: %%%% (run: preidentify) % - everything that is needed before selfidentification of resulting files % (unused) %%%% (run: identify) % - everything that is needed for selfidentification of resulting files % (unused) %%%% (run: prepare) % - everything that is needed to define options % % \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 } % % \end{macrocode} % \changes{v3.18}{2015/05/22}{indirekte Initialisierung} % Die Initialisierung erfolgt indirekt über Option \texttt{headings}. % \begin{macrocode} %<*execoption> %\KOMAExecuteOptions{headings=openright} %\KOMAExecuteOptions{headings=openany} % % \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} % % % % \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.% }% } % % \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 } % %\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} % % \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> %\setcounter{secnumdepth}{2} %
\setcounter{secnumdepth}{3} % % \end{macrocode} % \end{Counter} % % % \begin{macro}{\ifnumbered} % \changes{v3.12}{2013/12/16}{new command}%^^A % \changes{v3.28}{2019/11/19}{renamed to \cs{Ifnumbered}}%^^A % \begin{macro}{\Ifnumbered} % \changes{v3.28}{2019/11/19}{renamed from \cs{ifnumbered}}%^^A % \begin{macro}{\ifunnumbered} % \changes{v3.12}{2013/12/16}{new command}%^^A % \changes{v3.28}{2019/11/19}{renamed to \cs{Ifunnumbered}}%^^A % \begin{macro}{\Ifunnumbered} % \changes{v3.28}{2019/11/19}{renamed from \cs{ifunnumbered}}%^^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> \providecommand*{\ifnumbered}{% \ClassWarning{\KOMAClassName}{Usage of deprecated command `\string\ifnumbered'.\MessageBreak The command has been renamed because of a\MessageBreak recommendation of The LaTeX Project Team.\MessageBreak Please replace `\string\ifnumbered' by `\string\Ifnumbered'% }% \Ifnumbered } \newcommand*{\Ifnumbered}[1]{% \if@currentusenumber \scr@ifundefinedorrelax{#1numdepth}{% \expandafter\@secondoftwo }{% \expandafter\ifnum \@nameuse{#1numdepth}>\c@secnumdepth \expandafter\expandafter\expandafter\@secondoftwo \else \expandafter\expandafter\expandafter\@firstoftwo \fi }% \else \expandafter\@secondoftwo \fi } \providecommand*{\ifunnumbered}{% \ClassWarning{\KOMAClassName}{Usage of deprecated command `\string\ifunnumbered'.\MessageBreak The command has been renamed because of a\MessageBreak recommendation of The LaTeX Project Team.\MessageBreak Please replace `\string\ifunnumbered' by `\string\Ifunnumbered'% }% \Ifunnumbered } \newcommand*{\Ifunnumbered}[1]{% \Ifnumbered{#1}{\@secondoftwo}{\@firstoftwo}% } % % % \end{macrocode} % \end{macro} % \end{macro} % \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}% } % % % \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 % % \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} % % \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 } % % \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 } % % \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} % % \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 Do-Hooks % \texttt{heading/postinit} 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! %^^A TODO: Der ganze Test hier ist eigentlich Unfug. Beim Laden %^^A der Klasse sollte die Kern-Anweisung noch unverändert sein, da Pakete %^^A normalerweise erst danach zum Zuge kommen und sie umdefinieren %^^A können. Also müsste eigentlich \cs{AtBeginDocument} getestet werden. Ich %^^A werde mir das gelegentlich noch einmal vornehmen müssen. % \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]{% \ExecuteDoHook{heading/preinit/#1}% \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 }% \ExecuteDoHook{heading/postinit/#1}% \if@nobreak \everypar{}% \else \addpenalty\@secpenalty\addvspace\@tempskipa \fi \kernel@ifstar {% \ExecuteDoHook{heading/branch/star/#1}% \def\scr@s@ct@@nn@m@{#1}% \@ssect{\glueexpr #3\relax}{\glueexpr #4\relax}{\glueexpr #5\relax}{#6}% }{% \ExecuteDoHook{heading/branch/nostar/#1}% \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 the elements of do-hooks:\MessageBreak \space\space- `heading/postinit',\MessageBreak \space\space- `heading/branch/star',\MessageBreak \space\space- `heading/branch/nostar',\MessageBreak and does always use `runin=bysign' and\MessageBreak `afterindent=bysign'% }% \let\scr@saved@startsection\@startsection \newcommand*{\scr@startsection}[6]{% \ExecuteDoHook{heading/preinit/#1}% \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 % \changes{v3.27}{2019/02/04}{Umgestellt auf \cs{AddtoDoHook}}%^^A % \changes{v3.27}{2019/02/04}{deprecated}%^^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]{% \ClassInfo{\KOMAClassName}{% Usage of deprecated command `\string\At@startsection' mapped to\MessageBreak `\string\AddtoDoHook{heading/postinit} {...\string\@gobble}'% }% \AddtoDoHook{heading/postinit}{\scr@doonlyifstyleofargis{#1}{section}}% } % \end{macrocode} % \begin{macro}{\scr@doonlyifstyleofargis} % \changes{v3.27}{2019/02/04}{neu (intern)} % Hilfsmakro für \cs{At@startsection}, \cs{Before@sect} und \cs{Before@@sect}. % \begin{macrocode} \newcommand*{\scr@doonlyifstyleofargis}[3]{% \IfSectionCommandStyleIs{#3}{#2}{#1}{}% } % \end{macrocode} % \end{macro}%^^A \scr@doonlyifstyleofargis % \end{macro}%^^A \At@startsection % \begin{macro}{\Before@ssect} % \changes{v3.14}{2014/09/11}{Neue Anweisung für Paketautoren}%^^A % \changes{v3.27}{2019/02/04}{Umgestellt auf \cs{AddtoDoHook}}%^^A % \changes{v3.27}{2019/02/04}{deprecated}%^^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]{% \ClassInfo{\KOMAClassName}{% Usage of deprecated command `\string\Before@ssect' mapped to\MessageBreak `\string\AddtoDoHook{heading/branch/star}% {...\string\@gobble}'% }% \AddtoDoHook{heading/branch/star}{\scr@onlyifstyleofargis{#1}{section}}% } % \end{macrocode} % \end{macro}%^^A \Before@ssect % \begin{macro}{\Before@sect} % \changes{v3.14}{2014/09/11}{Neue Anweisung für Paketautoren}%^^A % \changes{v3.27}{2019/02/04}{Umgestellt auf \cs{AddtoDoHook}}%^^A % \changes{v3.27}{2019/02/04}{deprecated}%^^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]{% \ClassInfo{\KOMAClassName}{% Usage of deprecated command `\string\Before@sect' mapped to\MessageBreak `\string\AddtoDoHook{heading/branch/nostar}% {...\string\@gobble}'% }% \AddtoDoHook{heading/branch/nostar}{\scr@onlyifstyleofargis{#1}{section}}% } % \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 } % % \end{macrocode} % \end{macro}%^^A \@startsection % % \begin{macro}{\UseNumberUsageError} % \changes{v3.27}{2019/02/02}{Neu} % \begin{macro}{\IfUseNumber} % \changes{v3.27}{2019/02/02}{Explizite Fehlermeldung bei Verwendung außerhalb % von Überschriften}%^^A % Diese Anweisung ist nur innerhalb von Überschriften definiert. Wird sie % außerhalb verwendet, so gibt sie einen entsprechenden Fehler aus. % \begin{macrocode} %<*body> \newcommand*{\UseNumberUsageError}[2]{% \ClassError{\KOMAClassName}{% \string\IfUseNumber\space not allowed% }{% You cannot use \string\IfUseNumber\space outside a heading.\MessageBreak If you'd continue, I'll ignore both arguments, because I do not know\MessageBreak whether to use the first or the second argument.% }% } \newcommand*{\IfUseNumber}[2]{}% \let\IfUseNumber\UseNumberUsageError % % \end{macrocode} % \end{macro} % \end{macro} % % \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 % % \end{macrocode} % \end{macro}%^^A \secdef % \end{macro}%^^A \SecDef % \begin{macro}{\scr@sect} % \changes{v3.10}{2011/08/30}{entfällt}%^^A % \end{macro}%^^A \scr@sect % \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 % \changes{v3.27}{2019/07/08}{neue Option \texttt{nonumber}}%^^A % \changes{v3.30}{2020/02/25}{unerwünschtes Leerzeichen am Ende der Warnung % entfernt}%^^A % \begin{macro}{\scr@latex@sect} % \changes{v3.27}{2019/07/24}{Neu (intern für \textsf{scrhack})}%^^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\scr@latex@sect#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\scr@latex@sect\else \let\scr@latex@sect\@sect \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}% \fi % \end{macrocode} % \end{macro}%^^A \scr@latex@sect % \begin{macrocode} %\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 \@currentusenumbertrue \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 \ifcase \if@currentusenumber \ifnum \numexpr #2\relax>\c@secnumdepth \z@\else \@ne\fi \else \z@ \fi \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. % \changes{v3.27}{2019/02/02}{\cs{IfUseNumber} lokal definiert}%^^A % \begin{macrocode} \ifdim \scr@sect@runin{\z@}{\p@}{\glueexpr #5\relax}>\z@ \begingroup \ifx\@svsec\@empty \let\IfUseNumber\@secondoftwo \else \let\IfUseNumber\@firstoftwo \fi % \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. % \changes{v3.27}{2019/02/02}{\cs{scr@do@at} hinzugefügt}%^^A % \begin{macrocode} \ExecuteDoHook{heading/begingroup/#1}% #6{\nobreak\interlinepenalty \@M \sectionlinesformat{#1}{\glueexpr #3\relax}\@svsec{#8}\@@par}% \ExecuteDoHook{heading/endgroup/#1}% \endgroup %<*trace> \ClassInfo{\KOMAClassName}{% head=`\detokenize\expandafter{\@currentheadentry}'\MessageBreak tocentry=`\detokenize\expandafter{\@currenttocentry}'\MessageBreak reference=`\detokenize\expandafter{\@currentlabelname}'}% % \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}% }% }{}% \ifcase \if@currentusenumber \ifnum \numexpr #2\relax>\c@secnumdepth \z@\else \@ne\fi \else \z@ \fi \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 % \changes{v3.27}{2019/02/02}{\cs{ExecuteDoHook} eingefügt}%^^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{% \ifx\@svsec\@empty \let\IfUseNumber\@secondoftwo \else \let\IfUseNumber\@firstoftwo \fi \ExecuteDoHook{heading/begingroup/#1}% #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}'}% % \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}% }% }{}% \ifcase \if@currentusenumber \ifnum \numexpr #2\relax>\c@secnumdepth \z@\else \@ne\fi \else \z@ \fi \csname add#1tocentry\endcsname{}{\@currenttocentry}% \else \csname add#1tocentry\endcsname{\csname the#1\endcsname}{% \@currenttocentry}% \fi \fi \ExecuteDoHook{heading/endgroup/#1}% }% \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}{\if@currentusenumber} % \changes{v3.27}{2019/07/08}{neu (semi-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 } \FamilyInverseBoolKey[.section]{KOMAarg}{nonumber}{@currentusenumber} \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@currentusenumber % \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 % % \begin{macro}{\@ssect} % \changes{v3.19}{2015/07/17}{Vollständige Neudefinition zur Realisierung % der Erweiterung für die Formatieurng der Überschrift}%^^A % \begin{macro}{\scr@latex@ssect} % \changes{v3.27}{2019/07/24}{Neu (intern für \textsf{scrhack})}%^^A % \changes{v3.30}{2020/02/25}{unerwünschtes Leerzeichen am Ende der Warnung % entfernt}%^^A % Das wird für Überschriften ohne Nummer verwendet. Im Prinzip machen wir hier % dasselbe wie zuvor. % \begin{macrocode} \def\scr@latex@ssect#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\scr@latex@ssect \else \let\scr@latex@ssect\@ssect \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}% \fi % \end{macrocode} % \end{macro}%^^A \scr@latex@ssect % \begin{macrocode} %\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro % \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. % \changes{v3.27}{2019/02/02}{\cs{IfUseNumber} lokal definiert}%^^A % \begin{macrocode} \ifdim \scr@sect@runin{\z@}{\p@}{\glueexpr #3\relax}>\z@ \begingroup \let\IfUseNumber\@secondoftwo % \end{macrocode} % \changes{v3.21}{2016/06/12}{fehlendes \cs{nobreak} ergänzt}%^^A % \changes{v3.27}{2019/02/02}{\cs{ExecuteDoHook} eingefügt}%^^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} \edef\reserved@a{% \noexpand\ExecuteDoHook{heading/begingroup/\scr@s@ct@@nn@m@}% }\reserved@a #4{\nobreak\interlinepenalty \@M \expandafter\sectionlinesformat\expandafter{\scr@s@ct@@nn@m@}% {\glueexpr #1\relax}\@empty{#5}\@@par}% \edef\reserved@a{% \noexpand\ExecuteDoHook{heading/endgroup/\scr@s@ct@@nn@m@}% }\reserved@a \endgroup \else \edef\@svsechd{% \unexpanded{\let\IfUseNumber\@secondoftwo}% \noexpand\ExecuteDoHook{heading/begingroup/\scr@s@ct@@nn@m@}% \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}}% }% \noexpand\ExecuteDoHook{heading/endgroup/\scr@s@ct@@nn@m@}% }% \fi \let\scr@s@ct@@nn@m@\relax \@xsect{\glueexpr #3\relax}% } % % \end{macrocode} % \end{macro}%^^A \@ssect % \begin{macro}{\@xsect} % \changes{v3.26}{2018/09/18}{wird umdefiniert}%^^A % \changes{v3.30}{2020/02/25}{unerwünschtes Leerzeichen am Ende der Warnung % entfernt}%^^A % \begin{macro}{\scr@latex@xsect} % \changes{v3.27}{2019/07/24}{Neu (intern für \textsf{scrhack})}%^^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\scr@latex@xsect#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\scr@latex@xsect\else \let\scr@latex@xsect\@xsect \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}% \fi % \end{macrocode} % \end{macro}%^^A \scr@latex@xsect % \begin{macrocode} %\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro % \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 } % % \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 % % \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 % % \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. Ebenso % wird ein Verzeichniseintrag erzeugt, falls ein solcher noch nicht % existiert. Die Deklaration geschieht über diverse Optionen: %^^A (Achtung: Unbedingt daran denken, die Optionen in %^^A \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 % \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^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}}% } % % \end{macrocode} % \begin{macro}{\scr@dsc@style@chapter@subcommands} % \selectlanguage{english}%^^A % \changes{v3.30}{2020/04/08}{new (internal)} % Internal name list of additional commands to be defined for style % \texttt{part} commands. % \begin{macrocode} \newcommand*{\scr@dsc@style@chapter@subcommands}[1]{% @#1,@s#1,@make#1head,@makes#1head,@@make#1head,@@makes#1head,set#1preamble% } % \end{macrocode} % \end{macro}%^^A \scr@dsc@style@chapter@subcommands % \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 }% % % \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} % % \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@ommand} % \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}}% % \@namedef{@end#1}{\scr@@endpart{#1}}% % \@namedef{set#1preamble}{\set@preamble{#1}}% } % \end{macrocode} % \begin{macro}{\scr@dsc@style@part@subcommands} % \selectlanguage{english}%^^A % \changes{v3.30}{2020/04/08}{new (internal)} % Internal name list of additional commands to be defined for style % \texttt{part} commands. % \begin{macrocode} \newcommand*{\scr@dsc@style@part@subcommands}[1]{% @#1,@s#1,@end#1,set#1preamble% } % \end{macrocode} % \end{macro}%^^A \scr@dsc@style@part@subcommands % \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 % \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^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}% }% }{}% } % % \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 % \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^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}}% }% }{}% % \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 %
`afterindent=false'\MessageBreak % `afterindent=true'\MessageBreak for `\expandafter\string\csname \scr@dsc@current\endcsname}% \expandafter\gdef\csname scr@\scr@dsc@current @afterindent\endcsname ##1##2##3% %
{##2}% % {##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 % \changes{v3.27}{2019/10/02}{Präfix für die Speicherung des % Verzeichnisstils geändert}%^^A % Verzeichnis-Eintrags-Stil, damit auch für diesen anschließend die Optionen % definiert bzw. aktiviert werden können. Zu beachten ist hier, dass ab % \textsf{tocbasic} 3.27 der Stil korrekter Weise in \cs{scr@tso@\meta{level % name}@style} statt in \cs{scr@dte@\meta{level name}@style} gespeichert % wird. Zur Sicherheit werden hier beide Makros behandelt. % \end{description} % \begin{macrocode} \DefineFamilyKey[.dsc]{KOMAarg}{tocstyle}{% \IfArgIsEmpty{##1}{% \@ifundefined{scr@dte@\scr@dsc@current @style}{}{% \expandafter\let\csname scr@dte@\scr@dsc@current @style\endcsname \relax }% \expandafter\let\csname scr@tso@\scr@dsc@current @style\endcsname \relax \FamilyKeyStateProcessed }{% % \typeout{TRACE: option tocstyle=##1}% % \typeout{TRACE: command=\scr@dsc@current}% \scr@ifundefinedorrelax{scr@dte@def@l@##1}{% % \typeout{TRACE: style not defined}% \FamilyKeyStateUnknownValue }{% % \typeout{TRACE: style defined}% \@namedef{scr@dte@\scr@dsc@current @style}{##1}% \@namedef{scr@tso@\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}'}% % \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} % \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} % \typeout{TRACE: tocstyle=% % \@nameuse{scr@tso@\scr@dsc@current @style}}% \scr@ifundefinedorrelax{scr@tso@\scr@dsc@current @style}{% \scr@ifundefinedorrelax{l@\scr@dsc@current}{% \@namedef{scr@tso@\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@tso@\scr@dsc@current @style}{% \expandafter\let \csname scr@tso@\scr@dsc@current @style\expandafter\endcsname \csname scr@dte@\scr@dsc@current @style\endcsname }{}% \scr@ifundefinedorrelax{scr@tso@\scr@dsc@current @style}{}{% \begingroup \def\scr@dte@current{#2}% \edef\reserved@a{% \noexpand\@ExecuteTOCEntryStyleInitCode{% \@nameuse{scr@tso@\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, % \changes{v3.27}{2019/02/07}{\texttt{level} darf nicht -\cs{maxdimen} % sein}%^^A % wobei \texttt{level} nicht -\cs{maxdimen} ist: % \begin{macrocode} \begingroup \def\local@endgroup{\endgroup}% \scr@ifundefinedorrelax{\scr@dsc@current numdepth}{% \scr@declaresectioncommanderror{\scr@dsc@current}{section level}{level}% }{% \expandafter\ifnum \csname #2numdepth\endcsname>-\maxdimen \@nameuse{scr@dsc@style@% \@nameuse{scr@\scr@dsc@current @style}% @neededoptionstest}% \else \ClassError{\KOMAClassName}{% `level' must be > -\the\numexpr\maxdimen\relax }{% KOMA-Script internally sets `secnumdepth' to -\the\numexpr\maxdimen\relax\space to locally switch of\MessageBreak the numbering, i.e., inside running heads.\MessageBreak Because of this, you can define section commands with\MessageBreak `level' greater than -\the\numexpr\maxdimen\relax\space only.% }% \let\local@endgroup\endgroup \aftergroup\@gobbletwo \fi }% \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@tso@#2@style}{% \expandafter\let\csname scr@tso@#2@style\expandafter\endcsname \csname scr@dte@#2@style\endcsname }{}% \scr@ifundefinedorrelax{scr@tso@#2@style}{% }{% \DeclareTOCStyleEntry[\scr@dsc@tocstyle@options]{% \@nameuse{scr@tso@#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 % \changes{v3.30}{2020/04/08}{unerwünschte Leerzeichen eliminiert}%^^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 % \end{macrocode} % \changes{v3.30}{2020/04/08}{erweiterte Neuheitsprüfung}%^^A % Es wird der Stil benötigt, um zu ermitteln, ob die Unterbefehle für diesen % Stil möglicherweise bereits definiert sind. % \begin{macrocode} \expandafter\let\expandafter\scr@dsc@current \csname scr@tso@##2@style\endcsname \DefineFamilyKey[.dsc]{KOMAarg}{style}{% \edef\scr@dsc@current{##1}% \FamilyKeyStateProcessed }% \DefineFamilyKey[.dsc]{KOMAarg}{@else@}{\FamilyKeyStateProcessed}% \FamilyExecuteOptions[.dsc]{KOMAarg}{#1}% \RelaxFamilyKey[.dsc]{KOMAarg}{@else@}% \RelaxFamilyKey[.dsc]{KOMAarg}{style}% \@tempswatrue % \end{macrocode} % Wenn der Stil definiert ist und Unterbefehle kennt, diese ebenfalls testen. % \begin{macrocode} \@ifundefined{scr@dsc@current}{}{% \scr@ifundefinedorrelax{scr@dsc@style@\scr@dsc@current @subcommands}{% }{% \edef\reserved@b{% \csname scr@dsc@style@\scr@dsc@current @subcommands\endcsname{#2}% }% \expandafter\@for\expandafter\reserved@a\expandafter:\expandafter=% \reserved@b\do{% \expandafter\scr@ifundefinedorrelax\expandafter{\reserved@a}{}{% \@tempswafalse \edef\reserved@b{% \expandafter\string\csname \reserved@a\endcsname}% }% }% } }% \let\scr@dsc@current\relax \fi \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 } % % \end{macrocode} % \end{macro}%^^A \ProvideSectionCommands % % \begin{macro}{\IfSectionCommandStyleIs} % \selectlanguage{english}%^^A % \changes{v3.27}{2019/02/04}{new}%^^A % Test whether ot not the section command of argument 1 has the style of % argument 2. If so: use argument 3, of not: use argument 4. % \begin{macrocode} %<*body> \newcommand*{\IfSectionCommandStyleIs}[2]{% \scr@ifundefinedorrelax{#1}{% \ClassError{\KOMAClassName}{% \expandafter\string\csname #1\endcsname\space not defined}{% You cannot compare the section command style of an undefined command.}% }{% \scr@ifundefinedorrelax{scr@#1@style}{% \ClassError{\KOMAClassName}{% \expandafter\string\csname #1\endcsname\space not a valid section command% }{% You cannot detect the section command style of a command, that has\MessageBreak never been defined as a section command by KOMA-Script.% }% }% }% \scr@ifundefinedorrelax{scr@dsc@def@style@#2@command}{% \ClassError{\KOMAClassName}{% unknown section command style `#2'% }{}% }% \Ifstr{\@nameuse{scr@#1@style}}{#2}% } % % \end{macrocode} % \end{macro} % % \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 % \end{macrocode} % \changes{v3.27}{2019/06/26}{try to translate \textsf{hyperref} driver to % \textsf{bookmark} driver option}%^^A % The name of the \textsf{hyperref} driver is in \cs{Hy@driver}. But % \textsf{bookmark} does not provide the same drivers, so we try to translate % the curreny known \textsf{hyperref} drivers to \textsf{bookmark} % drivers. Also we do not load \textsf{bookmark} with a driver option but % define \textsf{bookmark}'s \cs{BookmarkDriverDefault}. % \begin{macrocode} \scr@ifundefinedorrelax{Hy@driver}{% \ClassWarning{\KOMAClassName}{% `hyperref' loaded but `\string\Hy@driver' undefined.\MessageBreak This should not happen!\MessageBreak Maybe `hyperref' not loaded or unknown version?% }% }{% % \end{macrocode} % \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A % Note: \texttt{hpdftex}, \texttt{hluatex}, \texttt{hxetex} and \texttt{hvtex} % do not need to be translated, because they are autodetected by % \textsf{bookmark} as well. \texttt{hypertex}, \texttt{hdviwindo}, % \texttt{htex4ht} and \texttt{latex2html} are not known by \textsf{bookmark}, % so we stay with the default (usually \texttt{dvips}). % \begin{macrocode} \Ifstr{\Hy@driver}{hdvips}{% \providecommand*{\BookmarkDriverDefault}{dvips}% }{% \Ifstr{\Hy@driver}{hdvipdfm}{% \providecommand*{\BookmarkDriverDefault}{dvipdfm}% }{% \Ifstr{\Hy@driver}{hdvipson}{% \providecommand*{\BookmarkDriverDefault}{dvipsone}% }{% \Ifstr{\Hy@driver}{htexture}{% \providecommand*{\BookmarkDriverDefault}{textures}% }{% }% }% }% }% }% \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 adding:\MessageBreak \space\space\string\usepackage \scr@ifundefinedorrelax{BookmarkDriverDefault}{}{% [\BookmarkDriverDefault]% }{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.\MessageBreak You can avoid this warning adding:\MessageBreak \space\space\string\usepackage{auxhook}\MessageBreak before \string\begin{document}% }% \@beginmainauxhook \fi \fi \fi }% }% } % % % \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 }% } % % % % \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 % \changes{v3.27}{2019/02/25}{veraltet}%^^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 \ClassWarning{\KOMAClassName}{% usage of `\string\bprot@dottedtocline' is deprecated.\MessageBreak Maybe an old auxiliary file has been used.\MessageBreak Note, this command will be removed from\MessageBreak KOMA-Script soon. So if this warning message\MessageBreak persists after one more LaTeX run, you should\MessageBreak redeclare the corresponding ToC entries using\MessageBreak \string\DeclareTOCStyleEntry[\MessageBreak \space\space level=\detokenize{#1},\MessageBreak \space\space indent=\detokenize{#2},\MessageBreak \space\space numwidth=\detokenize{#3}]{default}{...},\MessageBreak where `...' is the name of the ToC level.\MessageBreak Note, in future usage of `\string\bprot@dottedtocline'\MessageBreak could result in an error% }% \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 } % % % \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 } % % % % \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} % \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^A % \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}% %
%<*report|book> \setcounter{chapter}{0}% \setcounter{section}{0}% \gdef\@chapapp{\appendixname}% \gdef\thechapter{\@Alph\c@chapter}% % \csname appendixmore\endcsname } % % % \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}{} % % \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}{% %
4ex % \end{macrocode} % Hinweis: Das |+\baselineskip| wird benötigt, um Kompatibilitätsprobleme mit % der Umdefinierung von |\chapterheadstartvskip| zu vermeiden. % \begin{macrocode} % \z@ \@plus 1fil + \baselineskip } %\newcommand*{\scr@part@innerskip}{20\p@} \newcommand*{\scr@part@afterskip}{% %
3ex % \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}{% %
\addvspace{\@tempskipa}% % \null\vskip-\baselineskip\vskip\@tempskipa } \newcommand*{\partheadmidvskip}{% \par\nobreak % \vskip\@tempskipa } \newcommand*{\partheadendvskip}{% %
\vskip\@tempskipa % \vskip\@tempskipa\newpage } %<*report|book> \newcommand*{\partheademptypage}{% \if@twoside\if@openright \null% \thispagestyle{empty}% \newpage \fi\fi } % % % \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 % \changes{v3.28}{2019/11/18}{\cs{ifstr} umbenannt in \cs{Ifstr}}%^^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]{% \ExecuteDoHook{heading/preinit/#1}% %
\par %<*book|report> \if@openright\cleardoublepage\else\clearpage\fi \scr@ifundefinedorrelax{#1pagestyle}{}{% \Ifstr{#1pagestyle}{}{}{% \thispagestyle{\@nameuse{#1pagestyle}}% }% }% \if@twocolumn \onecolumn \@tempswatrue \else \@tempswafalse \fi % \@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 }% }% \ExecuteDoHook{heading/postinit/#1}% \partheadstartvskip %<*book|report> \vbox to\z@{\vss\use@preamble{#1@o}\strut\par}% \vskip-\baselineskip\nobreak % \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 % \changes{v3.27}{2019/07/08}{neue Option \texttt{nonumber}}%^^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{% \ExecuteDoHook{heading/branch/nostar/#1}% % \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 \@currentusenumbertrue \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 % \changes{v3.28}{2019/11/19}{\cs{ifnumbered} umbenannt in % \cs{Ifnumbered}}%^^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 % \changes{v3.28}{2019/11/19}{\cs{ifnumbered} umbenannt in % \cs{Ifnumbered}}%^^A % \begin{macrocode} \begingroup \def\IfUseNumber{\Ifnumbered{#1}}% \ExecuteDoHook{heading/begingroup/#1}% \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative \raggedpart \normalfont\usekomafont{disposition}{\nobreak \IfUseNumber{% \partlineswithprefixformat{#1}{% \usekomafont{#1prefix}{\nobreak\@nameuse{#1format}}% % \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 }% \ExecuteDoHook{heading/endgroup/#1}% \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 %
% \@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]{% \ExecuteDoHook{heading/branch/star/#1}% % \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 \let\IfUseNumber\@secondoftwo \ExecuteDoHook{heading/begingroup/#1}% \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative \raggedpart \normalfont\usekomafont{disposition}{% \nobreak \partlineswithprefixformat{#1}{}{% \usekomafont{#1}{\nobreak\interlinepenalty \@M#2\strut\@@par}% }% \@mkboth{}{}% }% \ExecuteDoHook{heading/endgroup/#1}% \endgroup %<*article> \nobreak \@tempskipa=\glueexpr\csname scr@#1@afterskip\endcsname\relax\relax \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi \partheadendvskip \@afterheading %
% \@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 } % % \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})}%^^A % \begin{macro}{\scr@chapter@before@hyperref@patch} % \changes{v3.27}{2019/07/24}{neu (intern für \textsf{scrhack})}%^^A % \begin{macro}{\scr@chapter@after@hyperref@patch} % \changes{v3.27}{2019/07/24}{neu (intern für \textsf{scrhack})}%^^A % 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 \newcommand*{\scr@chapter@before@hyperref@patch}{% \let\scr@orig@chapter\@chapter \let\scr@orig@schapter\@schapter \let\scr@orig@addchap\@addchap } \BeforePackage{hyperref}{\scr@chapter@before@hyperref@patch} \newcommand*{\scr@chapter@after@hyperref@patch}{% \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 } \AfterPackage!{hyperref}{\scr@chapter@after@hyperref@patch} % \end{macrocode} % \end{macro}%^^A \scr@after@hyperref@patch % \end{macro}%^^A \scr@before@hyperref@patch % \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}{} %
\let\raggedpart\raggedsection %\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}{} % % % \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> %\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}% % % \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} % % \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} % % \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} % % \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]{% \ExecuteDoHook{heading/preinit/#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 }% }% }% \ExecuteDoHook{heading/postinit/#1}% \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{% \ExecuteDoHook{heading/branch/nostar/#1}% % \end{macrocode} % \changes{v3.10}{2011/08/30}{Integration der Erweiterung für das optionale % Argument der Gliederungsbefehle}%^^A % \changes{v3.27}{2019/07/08}{neue Option \texttt{nonumber}}%^^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 \@currentusenumbertrue \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 % \changes{v3.28}{2019/11/19}{\cs{ifnumbered} umbenannt in % \cs{Ifnumbered}}%^^A % \begin{macrocode} \Ifnumbered{#1}{% % \if@mainmatter \@tempswatrue % \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 % \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by % \cs{Iftocfeature}}%^^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]{% \ExecuteDoHook{heading/branch/star/#1}% % \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 % \changes{v3.27}{2019/02/02}{Setzen von \cs{parindent} und \cs{parfillskip} % verschoben}%^^A % \begin{macrocode} {% % \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 % \changes{v3.27}{2019/02/02}{\cs{ExecuteDoHook} eingefügt}%^^A % \changes{v3.28}{2019/11/19}{\cs{ifnumbered} umbenannt in % \cs{Ifnumbered}}%^^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}}% % \if@mainmatter\else\let\IfUseNumber\@secondoftwo\fi \ExecuteDoHook{heading/begingroup/#1}% \if@chapterprefix \let\IfUsePrefixLine\@firstoftwo \else \let\IfUsePrefixLine\@secondoftwo \fi \setlength{\parindent}{\z@}\setlength{\parfillskip}{\z@ plus 1fil}% \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}% }% }% }% }% \ExecuteDoHook{heading/endgroup/#1}% }% \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 {% \let\IfUseNumber\@secondoftwo \ExecuteDoHook{heading/begingroup/#1}% \if@chapterprefix \let\IfUsePrefixLine\@firstoftwo \else \let\IfUsePrefixLine\@secondoftwo \fi \setlength{\parindent}{\z@}\setlength{\parfillskip}{\z@ plus 1fil}% \normalfont\usekomafont{disposition}{% \usekomafont{#1}{% \raggedchapter \IfUsePrefixLine{% \chapterlineswithprefixformat{#1}% {}% {\interlinepenalty \@M#2\@@par}% }{% \chapterlinesformat{#1}% {}% {\interlinepenalty \@M#2\@@par}% }% }% }% \ExecuteDoHook{heading/endgroup/#1}% }% \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 % \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by % \cs{Iftocfeature}}%^^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}%^^A % \changes{v3.27a}{2019/11/11}{Meldung korrigiert}%^^A % \begin{macrocode} %<*book> \AfterPackage{hyperref}{% \@ifpackagelater{hyperref}{2001/02/19}{}{% \ClassWarningNoLine{\KOMAClassName}{% You are using an old version of the hyperref package!\MessageBreak% This version has a buggy hack in many drivers,\MessageBreak% causing \string\addchap\space to behave strangely.\MessageBreak% Please update hyperref to at least version 6.71b% }% }% } % % % \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} % % \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 % \changes{v3.27}{2019/10/28}{überflüssiges \cs{normalfont} entfernt}%^^A % Schrift für die optionalen Pünktchen des \cs{chapter}-Eintrags im % Inhaltsverzeichnis abweichend von \texttt{chapterentry} und % \cs{normalfont}\cs{normalsize}. % \begin{macrocode} \newkomafont{chapterentrydots}{} % % % % \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}{} % % \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} % % \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}{} % %
% \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}%^^A % \changes{v3.27}{2019/06/26}{Umstellung auf \cs{scr@v@is@gt}}%^^A % \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> \expandafter\ifnum\scr@v@is@gt{2.97d}% \if@mainmatter\thechapter.\fi \else % \thechapter.% % \fi \@arabic\c@section } %
%<*article> \newcounter{section} \renewcommand*{\thesection}{\@arabic\c@section} %
\newcommand*\sectionmarkformat{\thesection\autodot\enskip} \newcounter{subsection}[section] \renewcommand*{\thesubsection}{\thesection.\@arabic\c@subsection} %<*article> \newcommand*\subsectionmarkformat{\thesubsection\autodot\enskip} %
\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 % \changes{v3.27}{2019/10/28}{überflüssiges \cs{normalfont} entfernt}%^^A % Schrift für die optionalen Pünktchen des \cs{section}-Eintrags im % Inhaltsverzeichnis abweichend von \texttt{sectionentry} und % \cs{normalfont}\cs{normalsize}. % \begin{macrocode} \newkomafont{sectionentrydots}{} %
% \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} %
\DeclareSectionCommand[% style=section,% level=1,% indent=\z@,% beforeskip=-3.5ex \@plus -1ex \@minus -.2ex,% afterskip=2.3ex \@plus.2ex,% tocstyle=section,% %
tocindent=0pt,% % tocindent=1.5em,% %
tocnumwidth=1.5em% % tocnumwidth=2.3em% ]{section} \DeclareSectionCommand[% style=part,% %
level=\z@,% % level=\m@ne,% % 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,% %
tocstyle=subsection,% % tocstyle=section,% %
tocindent=1.5em,% % tocindent=3.8em,% %
tocnumwidth=2.3em% % tocnumwidth=3.2em% ]{subsection} \DeclareSectionCommand[% style=section,% level=3,% indent=\z@,% beforeskip=-3.25ex\@plus -1ex \@minus -.2ex,% afterskip=1.5ex \@plus .2ex,% %
tocstyle=subsection,% % tocstyle=section,% %
tocindent=3.8em,% % tocindent=7.0em,% %
tocnumwidth=3.2em% % tocnumwidth=4.1em% ]{subsubsection} \DeclareSectionCommand[% style=section,% level=4,% indent=\z@,% beforeskip=3.25ex \@plus1ex \@minus.2ex,% afterskip=-1em,% %
tocstyle=subsection,% % tocstyle=section,% %
tocindent=7.0em,% % tocindent=10em,% %
tocnumwidth=4.1em% % tocnumwidth=5em% ]{paragraph} \DeclareSectionCommand[% style=section,% level=5,% indent=\scr@parindent,% beforeskip=3.25ex \@plus1ex \@minus .2ex,% afterskip=-1em,% %
tocstyle=subsection,% % tocstyle=section,% %
tocindent=10em,% % tocindent=12em,% %
tocnumwidth=5em% % 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 % % % \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} % %<*body> \newcommand*{\scr@fnt@disposition}{\sectfont} \aliaskomafont{sectioning}{disposition} % % \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},% % {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}% % \renewcommand*{\size@part}{\Huge}% \renewcommand*{\size@partnumber}{\huge}% % \renewcommand*{\size@chapter}{\huge}% % \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}% % \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}% % %<*article> \renewcommand*{\size@section}{\large}% \renewcommand*{\size@subsection}{\normalsize}% %
\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}% %
\renewcommand*{\size@part}{\LARGE}% \renewcommand*{\size@partnumber}{\LARGE}% %<*book|report> \renewcommand*{\size@chapter}{\Large}% \renewcommand*{\size@chapterprefix}{\size@chapter}% \renewcommand*{\size@section}{\large}% % %<*article> \renewcommand*{\size@section}{\normalsize}% %
\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}% %
\or % openright %<*book|report> \KOMAoptions{open=right}% % \or % openleft %<*book|report> \KOMAoptions{open=left}% % % \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}% % \or % onelinechapter %<*book|report> \KOMAoptions{chapterprefix=false}% % \or % twolineappendix %<*book|report> \KOMAoptions{appendixprefix=true}% % \or % onelineappend %<*book|report> \KOMAoptions{appendixprefix=false}% % % \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}% % %<*article> \renewcommand*{\size@part}{\huge}% \renewcommand*{\size@partnumber}{\Large}% %
\renewcommand*{\size@section}{\Large}% \renewcommand*{\size@subsection}{\large}% \renewcommand*{\size@subsubsection}{\normalsize}% \renewcommand*{\size@paragraph}{\normalsize}% \renewcommand*{\size@subparagraph}{\normalsize}% \renewcommand*{\sectfont}{\bfseries}% % \KOMAoptions{open=right,chapterprefix=true}% \fi \fi } \KOMA@kav@add{.\KOMAClassFileName}{headings}{big} %\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} % % % \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 % % \fi % % \Finale % \endinput % % end of file `scrkernel-sections.dtx' %%% Local Variables: %%% mode: doctex %%% coding: utf-8 %%% TeX-master: t %%% End: