diff options
author | Norbert Preining <norbert@preining.info> | 2022-07-05 03:01:03 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-07-05 03:01:03 +0000 |
commit | f1e3d1ca3738aac0ba720e4c1d87795d5d0cdcd9 (patch) | |
tree | e8caf076081509f7dd667c7c608bbf660b35baac /macros/latex/contrib/koma-script/scrkernel-sections.dtx | |
parent | 1c10375ec46d7d83b2f1efc2a71b7ea114c889f0 (diff) |
CTAN sync 202207050301
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-sections.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrkernel-sections.dtx | 6754 |
1 files changed, 6754 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-sections.dtx b/macros/latex/contrib/koma-script/scrkernel-sections.dtx new file mode 100644 index 0000000000..5ed80eebaa --- /dev/null +++ b/macros/latex/contrib/koma-script/scrkernel-sections.dtx @@ -0,0 +1,6754 @@ +% \iffalse meta-comment +% ====================================================================== +% scrkernel-sections.dtx +% Copyright (c) Markus Kohm, 2002-2022 +% +% This file is part of the LaTeX2e KOMA-Script bundle. +% +% This work may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, version 1.3c of the license. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later and of this work. +% +% This work has the LPPL maintenance status "author-maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% This work consists of all files listed in MANIFEST.md. +% ====================================================================== +%%% From File: $Id: scrkernel-sections.dtx 3874 2022-06-05 10:38:02Z kohm $ +% The runs of run-time file generation: +%<preidentify>%%% (run: preidentify) +% - everything that is needed before selfidentification of resulting files +% (unused) +%<identify>%%% (run: identify) +% - everything that is needed for selfidentification of resulting files +% (unused) +%<prepare>%%% (run: prepare) +% - everything that is needed to define options +%<option>%%% (run: option) +% - definition of options +%<execoption>%%% (run: execoption) +% - initial option executions up to \KOMAProcessOptions +%<body>%%% (run: body) +% - everything, that should be done after \KOMAProcessOptions +%<exit>%%% (run: exit) +% - everything, that should be done immediately before leaving the file +%<*dtx> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\begingroup + \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}} + \filedate$Date: 2022-06-05 12:38:02 +0200 (So, 05. Jun 2022) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}} + \filerevision$Revision: 3874 $ + \edef\reserved@a{% + \noexpand\endgroup + \noexpand\ProvidesFile{scrkernel-sections.dtx}% + [\filedate\space\filerevision\space + KOMA-Script source (disposition)] + }% +\reserved@a +\documentclass[USenglish]{koma-script-source-doc} +\usepackage{babel} +\setcounter{StandardModuleDepth}{3} +\begin{document} +\DocInput{scrkernel-sections.dtx} +\end{document} +%</dtx> +% \fi +% +% \changes{v2.3h}{1996/01/20}{configurable font sized for headings} +% \changes{v2.95}{2002/06/26}{first version after splitting \file{scrclass.dtx}} +% \changes{v3.15}{2014/12/09}{reordered code in \file{scrkernel-sections.dtx}} +% \changes{v3.36}{2022/03/08}{switch over from \cls*{scrdoc} to +% \cls*{koma-script-source-doc}} +% \changes{v3.36}{2022/03/21}{the whole implementation documentation in English} +% +% \GetFileInfo{scrkernel-sections.dtx} +% \title{The Code for Parts, Chapters, Sections etc.\@ of +% \href{https://komascript.de}{\KOMAScript} Classes} +% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} +% \date{Revision \fileversion{} of \filedate} +% \maketitle +% \begin{abstract} +% \file{scrkernel-sections.dtx} implements all the options, macros and user +% commands used for the sectioning of documents. +% \end{abstract} +% \tableofcontents +% +% \section{User Manual} +% +% You can find the user documentation the commands implemented here in the +% \KOMAScript{} manual, either the German \file{scrguide} or the English +% \file{scrguien}. +% +% \MaybeStop{\PrintIndex} +% +% \section{Implementation of Parts, Chapters, Section etc.} +% +% The letter class does not provide sectioning. +% \begin{macrocode} +%<*class&!letter> +% \end{macrocode} +% +% \begin{macro}{@maybeasf} +% \changes{v2.8e}{2001/07/10}{removed} +% \end{macro} +% +% \subsection{Interleaf pages} +% +% With \cls*{scrbook} and \cls*{scrreprt} chapters can optionally (or by +% default) start automatically on a odd page. So if the last page before +% already was an odd page, we have to insert a so called interleaf page. The +% main handling of interleaf pages is already defined in +% \file{scrkernel-pagestyles.dtx} (but there is a ToDo note to move is to a +% new file). Here we only support the optional selection of the start page of +% a chapter. +% +% \begin{option}{open} +% \changes{v2.98c}{2008/03/06}{added} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/09}{using internal value storage} +% \changes{v3.18}{2015/05/22}{initialization using \opt{headings}} +% \begin{macro}{\@openrighttrue,\@openrightfalse,\if@openright} +% The option supports three values: +% \begin{center} +% \begin{tabular}{llll} +% \opt{open} & \cs{if@openright} & \cs{cleardoublestandardpage} & +% meaning\\\hline +% \opt{=any} & \cs{iffalse} & \cs{cleardoubleoddstandardpage} & +% chapters on any page\\ +% \opt{=right} & \cs{iftrue} & \cs{cleardoubleoddstandardpage} & +% chapters on odd pages\\ +% \opt{=left} & \cs{iftrue} & \cs{cleardoubleevenstandardpage} & +% chapters on even pages\\ +% \end{tabular} +% \end{center} +% \begin{macrocode} +%<*book|report> +%<*prepare> +\newif\if@openright +%<report>\@openrightfalse +%<book>\@openrighttrue +%</prepare> +%<*option> +\KOMA@key{open}{% + \KOMA@set@ncmdkey{open}{@tempa}{% + {any}{0},% + {right}{1},% + {left}{2}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \KOMA@kav@xreplacevalue{.\KOMAClassFileName}{open}{#1}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{openany}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{openright}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{openleft}% + \ifcase \@tempa\relax + \KOMA@kav@add{.\KOMAClassFileName}{headings}{openany}% + \@openrightfalse + \renewcommand*{\cleardoublestandardpage}{\cleardoubleoddstandardpage}% + \or + \KOMA@kav@add{.\KOMAClassFileName}{headings}{openright}% + \@openrighttrue + \renewcommand*{\cleardoublestandardpage}{\cleardoubleoddstandardpage}% + \or + \KOMA@kav@add{.\KOMAClassFileName}{headings}{openleft}% + \@openrighttrue + \renewcommand*{\cleardoublestandardpage}{\cleardoubleevenstandardpage}% + \fi + \fi +} +%</option> +%<*execoption> +%<book>\KOMAExecuteOptions{headings=openright} +%<report>\KOMAExecuteOptions{headings=openany} +%</execoption> +% \end{macrocode} +% \end{macro}^^A \if@openright +% \end{option}^^A open +% +% \begin{option}{openright,openany} +% \changes{v2.98c}{2008/03/05}{obsolete} +% \changes{v3.01a}{2008/11/21}{standard instead of obsolete} +% Two deprecated options of \KOMAScript{} 2. +% \begin{macrocode} +%<*option> +\KOMA@DeclareStandardOption{openright}{open=right} +\KOMA@DeclareStandardOption{openany}{open=any} +%</option> +%</book|report> +% \end{macrocode} +% \end{option}^^A openright,openany +% +% +% \subsection{Numbers and the auto dot feature} +% +% Not only parts, chapter, section etc.\@ are numbered. But several other +% numbers are related to these numbers. The feature we define here is also +% known as the auto dot feature. +% +% \begin{option}{numbers} +% \changes{v2.98c}{2008/03/07}{added} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/09}{using internal value storage} +% \begin{macro}{\scr@dotchangeatdocument} +% \changes{v2.98c}{2008/03/07}{added} +% The \opt{numbers} option provides several settings for the dot at the end of +% such numbers. But because the setting is always document global, this option +% cannot be changed inside the document, but in the document preamble only. If +% you try to change it inside the document, the error of +% \cs{scr@dotchangedatdocument} will be raised. Currently following values to +% the option are supported: +% \begin{center} +% \begin{tabular}{ll} +% \opt{numbers} & meaning\\\hline +% \opt{=auto} & automatically detect, if the dot has to be added\\ +% \opt{=enddot} & always use a dot at the end\\ +% \opt{=noenddot}& don't use a dot at the end\\ +% \end{tabular} +% \end{center} +% The criterion for automatically adding a dot is: Does any sectioning number +% contain something else but an Arabic number for a number portion? +% \begin{macrocode} +%<*prepare> +\newcommand*{\scr@dotchangeatdocument}[1]{% + \ClassError{\KOMAClassName}{% + change of end dot feature after \string\begin{document}% + }{% + You've tried to set `numbers=#1' after \string\begin{document},\MessageBreak + but this option is only allowed at the document preamble.\MessageBreak + See KOMA-Script manual for more information about.% + }% +} +%</prepare> +%<*option> +\KOMA@key{numbers}{% + \KOMA@set@ncmdkey{numbers}{@tempa}{% + {autoendperiod}{0},{autoenddot}{0},{auto}{0},% + {endperiod}{1},{withendperiod}{1},{periodatend}{1},% + {enddot}{1},{withenddot}{1},{dotatend}{1},% + {noendperiod}{2},{noperiodatend}{2},% + {noenddot}{2},{nodotatend}{2}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \KOMA@kav@xreplacevalue{.\KOMAClassFileName}{numbers}{#1}% + \ifcase \@tempa\relax + \if@atdocument\scr@dotchangeatdocument{#1}\else + \let\scr@altsecnumhook\@empty + \fi + \or + \if@atdocument\scr@dotchangeatdocument{#1}\else + \let\scr@altsecnumhook\scr@altsecnumhooktrue + \fi + \or + \if@atdocument\scr@dotchangeatdocument{#1}\else + \let\scr@altsecnumhook\scr@altsecnumhookfalse + \fi + \fi + \fi +} +%</option> +%<execoption>\KOMAExecuteOptions{numbers=autoendperiod} +% \end{macrocode} +% \end{macro}^^A \scr@dotchangeatdocument +% \end{option}^^A numbers +% +% \begin{option}{pointednumbers,pointlessnumbers} +% \changes{v2.3h}{1995/01/19}{added} +% \changes{v2.4g}{1996/11/04}{option name fixed} +% \changes{v2.4g}{1996/11/04}{immediate setting \cs{@altsecnumformatfalse} +% to \cs{@altsecnumformattrue}} +% \changes{v2.98c}{2008/03/07}{obsolete} +% \changes{v3.01a}{2008/11/20}{deprecated} +% Two deprecated options. +% \begin{macrocode} +%<*option> +\KOMA@DeclareDeprecatedOption{pointednumbers}{numbers=enddot} +\KOMA@DeclareDeprecatedOption{pointlessnumbers}{numbers=noenddot} +%</option> +% \end{macrocode} +% \end{option}^^A pointednumbers,pointlessnumbers +% +% \begin{command}{\autodot} +% \changes{v2.7}{2001/01/03}{added} +% \begin{macro}{\@altsecnumformattrue,\@altsecnumformatfalse,\if@altsecnumformat} +% \changes{v2.3c}{1995/08/06}{added} +% \begin{macro}{\@autodottrue,\@autodotfalse,\if@autodot} +% \changes{v2.8e}{2001/07/10}{added} +% \changes{v2.9k}{2003/01/12}{write to \cs{@mainaux}} +% \changes{v2.95}{2004/01/15}{write to \cs{@mainaux} just before closing the +% file} +% \changes{v2.96a}{2006/12/07}{using \cs{immediate}} +% \changes{v3.00}{2008/10/07}{global} +% \changes{v3.20}{2016/03/25}{using \cs{csname}\dots\cs{endcsname}} +% Depending on \cs{if@altsecnumformat} \cs{autodot} shows a dot or nothing. +% \begin{description} +% \item[ToDo:] Add an optional look forward feature to also not add a dot, if +% the next character is a punctuation character, e.g. a dot, semicolon, +% comma etc. +% \end{description} +% \cs{if@autodot} is the current result of the inspection of all sectioning +% numbers. If it is \cs{iftrue}, switching on the dot will be written to the +% main \file{aux}-file. +% \begin{macrocode} +%<*prepare> +\newif\if@altsecnumformat\@altsecnumformatfalse +\newif\if@autodot +\renewcommand*{\@autodottrue}{\global\let\if@autodot\iftrue} +\renewcommand*{\@autodotfalse}{\global\let\if@autodot\iffalse} +\@autodotfalse +%</prepare> +%<*body> +\BeforeClosingMainAux{% + \if@autodot\if@filesw\immediate\write\@mainaux{% + \string\global\string\csname\space @altsecnumformattrue\string\endcsname}% + \fi\fi} +%</body> +% \end{macrocode} +% \end{macro}^^A \if@autodot +% \end{macro}^^A \if@altsecnumformat +% +% \begin{macro}{\scr@altsecnumhook,\scr@altsecnumhooktrue,\scr@altsecnumhookfalse} +% \changes{v2.98c}{2008/03/07}{added} +% Used by option \opt{numbers} for (de-)activation of the dot in the document +% preamble and to overwrite the setting found in the \file{aux}-file. +% \begin{description} +% \item[Note:] The hook is executed after reading the main \file{aux}-file. So +% the overwriting of the setting does work. It is needed as long a boolean +% switch is used, because otherwise option \opt{numbers=auto} would not be +% able to reset option \opt{numbers=enddot} ot \opt{numbers=noenddot}. With +% this code we simply can use an empty \cs{scr@altsecnumhook} for +% \opt{numbers=auto} and two compellent definitions for the other cases. +% \end{description} +% \begin{macrocode} +%<*prepare> +\newcommand*{\scr@altsecnumhook}{} +\AtBeginDocument{\scr@altsecnumhook} +\newcommand*{\scr@altsecnumhooktrue}{% + \@altsecnumformattrue\global\let\@altsecnumformatfalse\@altsecnumformattrue +} +\newcommand*{\scr@altsecnumhookfalse}{% + \@altsecnumformatfalse\global\let\@altsecnumformattrue\@altsecnumformatfalse +} +%</prepare> +% \end{macrocode} +% \end{macro}^^A \scr@altsecnumhook,\scr@altsecnumhooktrue,\scr@altsecnumhookfalse +% +% \begin{macro}{\@maybeautodot,\@@maybeautodot} +% \changes{v2.8e}{2001/07/10}{added} +% \changes{v3.00}{2008/10/07}{not any longer needed \cs{aftergroup} removed} +% We scan a \cs{the\meta{counter}} command to decide, if the automatic dot has +% to be added (later). It sets \cs{@autodottrue}, if there is any kind of +% alphabetic or Roman numbering command inside the one time expansion of the +% \cs{the\meta{counter}} given as argument. +% \begin{description} +% \item[Note:] This is a heuristic only. It would, e.g., fail, if you are +% using another macro, that expands to the output of the counter, e.g., +%\begin{verbatim} +% \def\myalph{\alph}\def\thesection{\myalph{section}} +%\end{verbatim} +% However, it seems that the heuristic is so good, that in more than twenty +% years nobody has complained about. +% \end{description} +% \begin{macrocode} +%<*body> +\newcommand{\@maybeautodot}[1]{\if@autodot\else\begingroup% + \expandafter\@@maybeautodot #1\@stop\endgroup\fi +} +\newcommand*{\@@maybeautodot}[1]{% + \ifx #1\@stop\let\@@maybeautodot\relax + \else + \ifx #1\Alph \@autodottrue\fi + \ifx #1\alph \@autodottrue\fi + \ifx #1\Roman \@autodottrue\fi + \ifx #1\roman \@autodottrue\fi + \ifx #1\@Alph \@autodottrue\fi + \ifx #1\@alph \@autodottrue\fi + \ifx #1\@Roman \@autodottrue\fi + \ifx #1\@roman \@autodottrue\fi + \ifx #1\romannumeral \@autodottrue\fi + \fi + \@@maybeautodot +} +%</body> +% \end{macrocode} +% \end{macro}^^A \@maybeautodot,\@@maybeautodot +% +% \begin{macrocode} +%<*body> +\newcommand*\autodot{\if@altsecnumformat.\fi} +%</body> +% \end{macrocode} +% \end{command}^^A \autodot +% +% +% \subsection{Definition and handling of sectioning commands} +% +% Some of the \LaTeX{} kernel features are used here too. But almost none of +% these features is enough to implement all the functionality of \KOMAScript{} +% classes. So we redefine several of the \LaTeX{} kernel macros to extend them +% and define several new features. +% \begin{description} +% \item[ToDo:] Don't redefine \LaTeX{} kernel macros, but define new macros +% for the interface. Maybe this should also be swapped to a new package used +% by the classes. +% \end{description} +% +% \begin{counter}{secnumdepth} +% The counter rules down to which section level the headings should be +% numbered. +% \begin{description} +% \item[ToDo:] Move this behind the declaration of the section levels to be +% able to use symbolic value \cs{subsectionnumdepth}. It is not related to +% the auto dot feature. +% \end{description} +% \begin{macrocode} +%<*body> +%<book|report>\setcounter{secnumdepth}{2} +%<article>\setcounter{secnumdepth}{3} +%</body> +% \end{macrocode} +% \end{counter} +% +% +% \begin{command}{\ifnumbered,\Ifnumbered} +% \changes{v3.12}{2013/12/16}{added} +% \changes{v3.28}{2019/11/19}{\cs{ifnumbered} renamed to \cs{Ifnumbered}} +% \begin{command}{\ifunnumbered,\Ifunnumbered} +% \changes{v3.12}{2013/12/16}{added} +% \changes{v3.28}{2019/11/19}{\cs{ifunnumbered} renamed to \cs{Ifunnumbered}} +% Commands +% \begin{quote}\raggedright +% \cs{Ifnumbered}\marg{section level name}\marg{numbered}\marg{not numbered}\\ +% \cs{Ifunnumbered}\marg{section level name}\marg{not numbered}\marg{numbered}\\ +% \end{quote} +% If \meta{section level name} has to be numbered, execute code \meta{numbered} +% otherwise execute code \meta{not numbered}. +% \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}% +} +%</body> +% \end{macrocode} +% \end{command}^^A \Ifunnumbered +% \end{command}^^A \ifnumbered +% +% +% \begin{macro}{\scr@activate@xsection,\scr@osectarg} +% \changes{v3.10}{2011/08/30}{added} +% Option \opt{headings=optiontotocandhead}, \opt{headings=optiontotoc} and +% \opt{headings=optiontohead} used +% \begin{quote} +% \cs{scr@activate@xsection}\marg{value} +% \end{quote} +% with the values 3, 2 and 1 to activate the extended optional argument. This +% sets \cs{scr@osectarg} to the corresponding value. The initial value 0 +% deactivates the extended optional argument. +% \begin{description} +% \item[ToDo:] Do we really need \cs{scr@activate@xsection}, that is used +% inside option \opt{headings} only? +% \end{description} +% \begin{macrocode} +%<*prepare> +\newcommand*{\scr@osectarg}{0} +\newcommand*{\scr@activate@xsection}[1]{% + \renewcommand*{\scr@osectarg}{#1}% +} +%</prepare> +% \end{macrocode} +% \end{macro}^^A \scr@activate@xsection,\scr@osectarg +% +% +% \begin{macro}{\@startsection} +% \changes{v3.13a}{2014/09/11}{re-definition for extended optional argument} +% \begin{macro}{\scr@startsection} +% \changes{v3.13a}{2014/09/11}{added} +% \changes{v3.18}{2015/05/22}{using \cs{numexpr} for argument 2} +% \changes{v3.18}{2015/05/22}{using \cs{glueexpr} for arguments 3--5} +% \changes{v3.20}{2016/04/12}{\cs{@ifstar} replaced by \cs{kernel@ifstar}} +% \changes{v3.26}{2018/09/18}{supporting \opt{afterindent}} +% \begin{macro}{\scr@saved@startsection} +% \changes{v3.13a}{2014/09/11}{added} +% \changes{v3.20}{2016/04/12}{supporting \pkg{amsgen}} +% \begin{macro}{\startsection@sectionname,\startsection@secnumdepth, +% \startsection@indent,\startsection@beforeskip, +% \startsection@afterskip,\startsection@afterindent, +% \@startsection@runintrue,\@startsection@runinfalse, +% \if@startsection@runin} +% \changes{v3.26}{2018/05/14}{added} +% The \cs{@startsection} of the \LaTeX{} kernel does not provide all the +% features we need for \KOMAScript. And the generic hooks of \LaTeX{} do not +% allow to change it wide enough. So we either have to use \pkg{xparse} to +% patch it very much or we have to define our own version. In this case +% patching is too fragile, so we define \cs{scr@startsection} and store the +% original definition in \cs{scr@saved@startsection}. +% \begin{description} +% \item[Note:] Package \pkg{amsgen} redefines \cs{@ifstar}. The new version +% does not ignore white spaces. So testing the original definition using +% \cs{@ifstar} may fail. It is better to use \cs{kernel@ifstar}. +% \item[ToDo:] All the testing here doesn't make much sense, because we are +% inside a class and packages like \pkg{amsgen} should not yet have been +% loaded. So the test only needs to test, if the \LaTeX{} kernel has been +% changed. +% \item[Note:] In our own \cs{scr@startsection} the macros +% \cs{startsection@sectionname}, \cs{startsection@secnumdepth}, +% \cs{startsection@indent}, \cs{startsection@beforeskip}, +% \cs{startsection@afterskip}, \cs{if@afterindent}, +% \cs{if@startsection@runin}, and \cs{startsection@afterindent} are valid +% from executing the do hook \dhook{heading/postinit}. So they can be used +% inside all the hooks. +% \item[Note:] \cs{startsection@indent}, \cs{startsection@beforeskip}, +% \cs{startsection@afterskip} and \cs{startsection@afterindent} are either +% skips or \cs{glueexpr}, that can be used like skips. +% \item[Note:] \cs{startsection@beforeskip} and \cs{startsection@afterskip} +% are effective values already. Not special treatment for negative or +% positive values must be done. +% \item[Note:] \cs{if@startsection@runin} +% are either \cs{iftrue} or \cs{iffalse}. +% \item[Note:] \cs{if@startsection@indentafter} does not exist and is not +% needed, because \cs{if@afterindent} is already valid and also either +% \cs{iftrue} or \cs{iffalse}. +% \item[Note:] Using one of the \cs{startsection@\dots} +% resp. \cs{if@startsection@\dots} macros outside \cs{scr@startsection} is +% not allowed and the result is unspecified. Inside \cs{scr@startsection} +% they have to be interpreted as constants, so changing them is not allowed! +% \end{description} +% \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}{added} +% Depending on sectioning feature \opt{runin} the macro expands to the first +% argument, if a in-text heading aka run-in heading has to used, the second +% argument, if a free-standing heading has to be used, or the third argument, +% of run-in or free-standing depends on the sign of \opt{afterskip}. The +% initial definition is depending on the sign of \opt{afterskip}. This initial +% definition is also done inside \cs{@xsect}. \cs{scr@startsection} also +% redefines \cs{scr@sect@runin}. So it should always be the currently valid +% definition, even if \cs{scr@startsection} is used with a section command, +% that does not provide all the variable of \KOMAScript. +% \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}{added} +% This is the initial error message for using one of the internal macros +% before \cs{scr@startsection}. This should never happen. +% \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 \startsection@sectionname … \scr@startsection@runin +% \begin{macro}{\At@startsection} +% \changes{v3.14}{2014/09/11}{added} +% \changes{v3.27}{2019/02/04}{using \cs{AddtoDoHook}} +% \changes{v3.27}{2019/02/04}{deprecated} +% This is deprecated now. You should use the corresponding +% \dhook{heading/postinit} do hook. However the do hooks are command specific, +% but the argument of \cs{At@startsection} is style specific. +% \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}{added} +% Execute the first argument only, of the style of the third argument is the +% second argument. +% \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}{added} +% \changes{v3.27}{2019/02/04}{using \cs{AddtoDoHook}} +% \changes{v3.27}{2019/02/04}{deprecated} +% \changes{v3.35}{2021/10/15}{\cs{ClassWarning} instead of \cs{ClassInfo}} +% \changes{v3.35}{2021/10/15}{Usage of \cs{scr@doonlyifstyleofargis} fixed} +% This is deprecated now. You should use the corresponding +% \dhook{heading/branch/star} do hook. However the do hooks are command +% specific, but the argument of \cs{Before@ssect} is style specific. +% \begin{macrocode} +\newcommand*{\Before@ssect}[1]{% + \ClassWarning{\KOMAClassName}{% + Usage of deprecated command `\string\Before@ssect' + mapped to\MessageBreak + `\string\AddtoDoHook{heading/branch/star}% + {...\string\@gobble}'% + }% + \AddtoDoHook{heading/branch/star}{\scr@doonlyifstyleofargis{#1}{section}}% +} +% \end{macrocode} +% \end{macro}^^A \Before@ssect +% \begin{macro}{\Before@sect} +% \changes{v3.14}{2014/09/11}{added} +% \changes{v3.27}{2019/02/04}{using \cs{AddtoDoHook}} +% \changes{v3.27}{2019/02/04}{deprecated} +% \changes{v3.35}{2021/10/15}{\cs{ClassWarning} instead of \cs{ClassInfo}} +% \changes{v3.35}{2021/10/15}{Usage of \cs{scr@doonlyifstyleofargis} fixed} +% This is deprecated now. You should use the corresponding +% \dhook{heading/branch/nostar} do hook. However the do hooks are command +% specific, but the argument of \cs{Before@sect} is style specific. +% \begin{macrocode} +\newcommand*{\Before@sect}[1]{% + \ClassWarning{\KOMAClassName}{% + Usage of deprecated command `\string\Before@sect' + mapped to\MessageBreak + `\string\AddtoDoHook{heading/branch/nostar}% + {...\string\@gobble}'% + }% + \AddtoDoHook{heading/branch/nostar}{\scr@doonlyifstyleofargis{#1}{section}}% +} +% \end{macrocode} +% \end{macro}^^A \Before@sect +% \begin{macro}{\scr@section@dblarg,\scr@section@xdblarg} +% \changes{v3.13a}{2014/09/11}{added} +% Similar to the \LaTeX{} kernel macros \cs{@dblarg} and \cs{@xdblarg} but +% preserve the definition of \cs{scr@osectarg}. So changes of +% \cs{scr@osectarg} inside the definition of the command of the first +% argument, are locally to the execution of that command. +% \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@dblarg,\scr@section@xdblarg +% \end{macro}^^A \scr@saved@startsection +% \end{macro}^^A \scr@startsection +% \begin{description} +% \item[ToDo:] Currently we still redefine \cs{@startsection} to use either +% \cs{scr@saced@startsection} or \cs{scr@startsection}. But it would be +% better to not redefine a \LaTeX{} kernel macro. However, if not doing so, +% packages, that use \cs{@startsection} would not support \KOMAScript{} +% features without detecting \KOMAScript{} and using \cs{scr@startsection}. +% \end{description} +% \begin{macrocode} +\renewcommand*{\@startsection}{% + \ifnum \scr@osectarg=\z@ + \expandafter\scr@saved@startsection + \else + \expandafter\scr@startsection + \fi +} +%</body> +% \end{macrocode} +% \end{macro}^^A \@startsection +% +% \begin{command}{\UseNumberUsageError} +% \changes{v3.27}{2019/02/02}{added} +% \begin{command}{\IfUseNumber} +% \changes{v3.27}{2019/02/02}{error if used outside sectioning command} +% Command \cs{IfUseNumner} is defined only inside sectioning commands. Using +% it outside is not specified. To report an error in this case, it should be +% set to \cs{UseNumberUsageError} outside a sectioning command. +% \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 +%</body> +% \end{macrocode} +% \end{command}^^A \IfUseNumnr +% \end{command}^^A \UseNumberUsageError +% +% +% \begin{command}{\SecDef} +% \changes{v3.13a}{2014/09/11}{added} +% \changes{v3.20}{2016/04/12}{\cs{@ifstar} replaced by \cs{kernel@ifstar}} +% \begin{command}{\secdef} +% \changes{v3.13a}{2014/09/11}{re-definition because of extended optional argument} +% \begin{macrocode} +%<*body> +\newcommand*{\SecDef}[2]{\kernel@ifstar{#2}{\scr@section@dblarg{#1}}} +\CheckCommand*{\secdef}[2]{\@ifstar{#2}{\@dblarg{#1}}} +\let\secdef\SecDef +%</body> +% \end{macrocode} +% \end{command}^^A \secdef +% \end{command}^^A \SecDef +% \begin{macro}{\scr@sect} +% \changes{v3.10}{2011/08/30}{removed} +% \end{macro}^^A \scr@sect +% \begin{macro}{\@sect} +% \changes{v3.10}{2011/08/30}{re-definition because of extended optional argument} +% \changes{v3.10}{2011/08/30}{using +% \cs{csname}\texttt{add\#1tocentry}\cs{endcsname} +% resp. \cs{addtocentrydefault}} +% \changes{v3.18}{2015/05/20}{defines \cs{IfUsePrefixLine} locally} +% \changes{v3.18}{2015/05/22}{using \cs{numexpr} for argument 2} +% \changes{v3.18}{2015/05/22}{using \cs{gluexpr} for arguments 3--5} +% \changes{v3.19}{2015/07/17}{using \cs{sectionlinesformat} and +% \cs{sectioncatchphraseformat}} +% \changes{v3.27}{2019/07/08}{new optional \opt{nonumber}} +% \changes{v3.30}{2020/02/25}{orphan spaces removed} +% \begin{macro}{\scr@latex@sect} +% \changes{v3.27}{2019/07/24}{added to be used by \pkg*{scrhack}} +% Because we want to support the extended optional argument for all commands +% defined using \cs{@startsection} we also have to redefine \cs{@sect}. Once +% again several security tests are done, before redefining an internal +% \LaTeX{} kernel macro. +% \begin{description} +% \item[ToDo:] It would be better not to redefine an internal \LaTeX{} kernel +% macro, but use a own definition in our own \cs{scr@startsection}. But in +% this case packages, that use \cs{@sect} would not automatically support +% several \KOMAScript{} features. +% \item[Note:] \cs{chapter} and \cs{part} do not use \cs{@sect} but +% \cs{SecDef}. +% \end{description} +% \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} +%<trace>\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro \string\@sect} +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum \scr@osectarg=\z@ + \@scr@tempswafalse + \else + \scr@istest#7=\@nil + \fi + \@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 \pkg{minitoc}} +% \changes{v3.23}{2017/03/24}{usage of \cs{ext@figure} and \cs{ext@table} +% instead of \texttt{lof} and \texttt{lot}} +% Add the \texttt{xsect} entries to \texttt{lof} and \texttt{lot}. Note, that +% the original \cs{starsection} tests of \pkg{minitoc} has a bug and so +% does not work. And the original code of \pkg{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 +% \end{macrocode} +% \changes{v3.31}{2020/06/02}{execute counter reset list} +% Even for not numbered sections, the reset list für the section counter has +% to be executed. +% \begin{macrocode} + \expandafter\ifnum\scr@v@is@lt{3.31}\relax\else + \begingroup + \let\@elt\@stpelt + \csname cl@#1\endcsname + \endgroup + \fi +% \end{macrocode} +% \changes{v3.31}{2020/06/02}{\cs{hy@insteadofrefstepcounter} added} +% At this point we have to make sure, that the \pkg{hyperref} code for not +% increasing a counter is executed. +% \begin{macrocode} + \hy@insteadofrefstepcounter{#1}% + \else + \refstepcounter{#1}% + \expandafter\@maybeautodot\csname the#1\endcsname + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi +% \end{macrocode} +% \changes{v3.26}{2018/09/18}{support for \cs{scr@sect@runin}} +% \changes{v3.27}{2019/02/02}{\cs{IfUseNumber} defined locally} +% \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}{missing \cs{nobreak} added} +% \changes{v3.27}{2019/02/02}{\cs{scr@do@at} added} +% \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}'}% +%</trace> + \expandafter\csname #1mark\expandafter\endcsname\expandafter{\@currentheadentry}% + \ifx\@currenttocentry\@empty\else + \scr@ifundefinedorrelax{add#1tocentry}{% + \expandafter\gdef\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 +% \end{macrocode} +% \changes{v3.31}{2020/06/06}{using \cs{\dots tocformat}}% +% \begin{description} +% \item[ToDo:] Move \cs{autodot} to the definition of \cs{\dots tocformat}. +% \end{description} +% \begin{macrocode} + \@ifundefined{#1tocformat}{% + \expandafter\gdef\csname #1tocformat\endcsname + {\csname the#1\endcsname}% + }{}% + \csname add#1tocentry\endcsname{\csname #1tocformat\endcsname}{% + \@currenttocentry}% + \fi + \fi + \else +% \end{macrocode} +% \changes{v3.21}{2016/06/12}{missing \cs{nobreak} added} +% \changes{v3.27}{2019/02/02}{\cs{ExecuteDoHook} added} +% \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}'}% +%</trace> + \expandafter\csname #1mark\expandafter\endcsname + \expandafter{\@currentheadentry}% + \ifx\@currenttocentry\@empty\else + \scr@ifundefinedorrelax{add#1tocentry}{% + \expandafter\gdef\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 +% \end{macrocode} +% \changes{v3.31}{2020/06/06}{using \cs{\dots tocformat}}% +% \begin{description} +% \item[ToDo:] Move \cs{autodot} to the definition of \cs{\dots tocformat}. +% \end{description} +% \begin{macrocode} + \@ifundefined{#1tocformat}{% + \expandafter\gdef\csname #1tocformat\endcsname + {\csname the#1\endcsname}% + }{}% + \csname add#1tocentry\endcsname{\csname #1tocformat\endcsname}{% + \@currenttocentry}% + \fi + \fi + \ExecuteDoHook{heading/endgroup/#1}% + }% + \fi + \let\IfUsePrefixLine\scr@IfUsePrefixLineWarning + \@xsect{\glueexpr #5\relax}% +} +% \end{macrocode} +% \begin{macro}{\scr@ds@tocentry,\@currenttocentry} +% \changes{v3.10}{2011/08/30}{added} +% \changes{v3.22}{2016/07/12}{\cs{scr@ds@tocentry} renamed to \cs{@currenttocentry}} +% \begin{macro}{\scr@ds@head,\@currentheadentry} +% \changes{v3.10}{2011/08/30}{added} +% \changes{v3.22}{2016/07/12}{\cs{scr@ds@head} renamed to \cs{@currentheadentry}} +% \begin{macro}{\@currentlabelname} +% \changes{v3.22}{2016/07/12}{added} +% \begin{macro}{\@scr@tempswatrue,\@scr@tempswafalse,\if@scr@tempswa} +% \changes{v3.10}{2011/08/30}{added} +% \begin{macro}{\@currentusenumbertrue,\@currentusenumberfalse,\if@currentusenumber} +% \changes{v3.27}{2019/07/08}{added} +% \begin{macro}{\scr@istest} +% \changes{v3.10}{2011/08/30}{added} +% We are using several \pkg*{scrbase} options to handle the extended +% optional argument features. +% \begin{description} +% \item[ToDo:] Is there a general initialization hook to make additional such +% options at package author level possible? +% \end{description} +% \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 \scr@ds@head,\@currentheadentry +% \end{macro}^^A \scr@ds@tocentry,\@currenttocentry +% +% \begin{command}{\sectionlinesformat,\sectioncatchphraseformat} +% \changes{v3.19}{2015/07/17}{added} +% Headings with style \texttt{section} can either be free-standing or +% in-line. Free-standing headings are printed using: +% \begin{quote} +% \cs{sectionlinesformat}\marg{level name}\marg{indent}\marg{number}\marg{text} +% \end{quote} +% The in-line headings are printed using: +% \begin{quote} +% \cs{sectioncatchphraseformat}\marg{level name}\marg{indent}\marg{number}\marg{text} +% \end{quote} +% The \meta{level name} can also be interpreted as the section command +% name. The \meta{indent} is the horizontal indent of the first line of the +% heading. The \meta{number} is either empty for not numbered headings or the +% formatted number to be used. \meta{text} is the formatted text to be +% used. Formatted text means, the fonts are already set and \cs{@@par} for the +% end of paragraph already has been added to the \meta{text} of +% \cs{sectionlinesformat}. But if the user uses more paragraphs than this +% final one, the user is responsible to prevent page breaks! +% \begin{description} +% \item[Note:] Argument \meta{indent} is a kind of design mistake. It would +% have been better to get the indent by the attributes of the \meta{level +% name}. However having an argument makes it easier for users to redefine +% the command. +% \end{description} +% \begin{macrocode} +\newcommand{\sectionlinesformat}[4]{% + \@hangfrom{\hskip #2#3}{#4}% +} +\newcommand{\sectioncatchphraseformat}[4]{% + \hskip #2#3#4% +} +% \end{macrocode} +% \end{command}^^A \sectionlinesformat,\sectioncatchphraseformat +% \end{macro}^^A \@sect +% +% \begin{macro}{\@ssect} +% \changes{v3.19}{2015/07/17}{re-definition because of several new features} +% \begin{macro}{\scr@latex@ssect} +% \changes{v3.27}{2019/07/24}{added to be used by \pkg*{scrhack})} +% \changes{v3.30}{2020/02/25}{orphan space removed} +% The star variant of section commands do not use \cs{@sect} but +% \cs{@ssect}. Here we have the problem, that the command name argument is +% missing. The whole definition is very similar to \cs{@sect} but without a +% number, ToC entry or running head. +% \begin{description} +% \item[Note:] we do not have to support an extended optional argument, +% because there isn't an optional argument. +% \item[ToDo:] It would be better not to redefine an internal \LaTeX{} kernel +% macro, but use a own definition in our own \cs{scr@startsection}. But in +% this case packages, that use \cs{@ssect} would not automatically support +% several \KOMAScript{} features. +% \item[Note:] \cs{chapter} and \cs{part} do not use \cs{@ssect} but +% \cs{SecDef}. +% \end{description} +% \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} +%<trace>\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro +%<trace> \string\@ssect} +\def\@ssect#1#2#3#4#5{% + \scr@ifundefinedorrelax{scr@s@ct@@nn@m@}{% + \ClassWarning{\KOMAClassName}{Incompatible usage of + \string\@ssect\space detected.\MessageBreak + You've used the KOMA-Script implementation of + \string\@ssect\MessageBreak + from within a non compatible caller, that does not\MessageBreak + \string\scr@s@ct@@nn@m@\space locally.\MessageBreak + This could result in several error messages}% + \def\scr@s@ct@@nn@m@{\string\scr@s@ct@@nn@m@}% + }{% +% \end{macrocode} +% \changes{v3.31}{2020/06/02}{execute counter reset list} +% Even for not numbered sections, the reset list für the corresponding section +% counter has to be executed. +% \begin{macrocode} + \expandafter\ifnum\scr@v@is@lt{3.31}\relax\else + \begingroup + \let\@elt\@stpelt + \csname cl@\scr@s@ct@@nn@m@\endcsname + \endgroup + \fi + }% +% \end{macrocode} +% \changes{v3.26}{2018/09/18}{support for \cs{scr@sect@runin}} +% \changes{v3.27}{2019/02/02}{defining \cs{IfUseNumber} locally} +% \begin{macrocode} + \ifdim + \scr@sect@runin{\z@}{\p@}{\glueexpr #3\relax}>\z@ + \begingroup + \let\IfUseNumber\@secondoftwo +% \end{macrocode} +% \changes{v3.21}{2016/06/12}{missing \cs{nobreak} added} +% \changes{v3.27}{2019/02/02}{\cs{ExecuteDoHook} added} +% \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}{missing \cs{nobreak} added} +% \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}% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \@ssect +% \begin{macro}{\@xsect} +% \changes{v3.26}{2018/09/18}{re-definition} +% \changes{v3.30}{2020/02/25}{orphan space removed} +% \begin{macro}{\scr@latex@xsect} +% \changes{v3.27}{2019/07/24}{added to be used by \pkg*{scrhack}} +% We need a differentiation with \cs{scr@sect@runin} to be initialized in +% \cs{@xsect} and also need to reset this internal macro at the end. +% \begin{description} +% \item[ToDo:] It would be better not to redefine the internal \LaTeX{} kernel +% macro, but to define and use our own one. +% \end{description} +% \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} +%<trace>\ClassInfo{\KOMAClassName}{redefining LaTeX kernel macro +%<trace> \string\@xsect} +\def\@xsect#1{% + \@ifundefined{scr@sect@runin}{% + \def\scr@sect@runin##1##2##3{##3}% + }% + \@tempskipa #1\relax + \ifdim \scr@sect@runin{\z@}{\p@}{\@tempskipa}>\z@ + \par \nobreak + \vskip \@tempskipa + \@afterheading + \else + \@nobreakfalse + \global\@noskipsectrue + \everypar{% + \if@noskipsec + \global\@noskipsecfalse + {\setbox\z@\lastbox}% + \clubpenalty\@M + \begingroup \@svsechd \endgroup + \unskip + \@tempskipa #1\relax + \ifdim \@tempskipa<\z@ + \hskip -\@tempskipa + \else + \hskip \@tempskipa + \fi + \else + \clubpenalty \@clubpenalty + \everypar{}% + \fi}% + \fi + \def\scr@sect@runin##1##2##3{##3}% + \ignorespaces +} +%</body> +% \end{macrocode} +% \end{macro}^^A \@xsect +% +% \begin{command}{\IfUsePrefixLine} +% \changes{v3.18}{2015/06/09}{added} +% \begin{macro}{\scr@IfUsePrefixLineWarning} +% \changes{v3.18}{2015/06/09}{added} +% This command makes sense inside the section commands only. But users often +% tried to use it outside instead of \cs{ifnumbered}. This mostly has resulted +% in a undefined command sequence error users did not understand. So now, we +% use an internal definition to be uses outside the section commands, that +% results in a warning with more information about the mistake and that does +% neither use the first nor the second argument (instead of using both of them). +% \begin{macrocode} +%<*body> +\newcommand*{\scr@IfUsePrefixLineWarning}[2]{% + \ClassWarning{\KOMAClassName}{% + Usage of \string\IfUsePrefixLine\space outside + section command\MessageBreak + style makes no sense, because the behaviour not only\MessageBreak + depends on class options but also on the run-time\MessageBreak + section command style.\MessageBreak + Neither the then-code nor the else-code will be\MessageBreak + executed.\MessageBreak + You may change this and avoid the warning by LOCALLY\MessageBreak + setting \string\IfUsePrefixLine\space to either + \string\@firstoftwo\space or\MessageBreak + \string\@secondoftwo\space before using it% + }% +} +\newcommand*{\IfUsePrefixLine}[2]{} +\let\IfUsePrefixLine\scr@IfUsePrefixLineWarning +%</body> +% \end{macrocode} +% \end{macro}^^A \scr@IfUsePrefixLineWarning +% \end{command}^^A \IfUsePrefixLine +% +% +% \begin{command}{\raggedsection} +% \changes{v2.3h}{1996/01/20}{added} +% Should be either \cs{raggedleft}, \cs{raggedright}, \cs{centering} or +% empty. Empty means no change, which is usually justified. Users could also +% use other alignment/justification commands like the commands of package +% \pkg{ragged2e}. The initial value is \cs{raggedright}. +% \begin{description} +% \item[Note:] We are here in the class. So usually \cs{raggedright} is the +% \cs{raggedright} of the \LaTeX{} kernel. This also means: no hyphenation. +% \item[Note:] We define is already here, because it is not only used for +% style \texttt{section} but also as initial default of the \emph{higher +% level} styles. +% \end{description} +% \begin{macrocode} +%<*body> +\newcommand*{\raggedsection}{} +\let\raggedsection\raggedright +%</body> +% \end{macrocode} +% \end{command}^^A \raggedsection +% +% +% All the options of \cs{DeclareSectionCommand} are options of family +% \texttt{KOMAarg} member \texttt{.dsc}. +% \begin{macrocode} +%<*body> +\DefineFamily{KOMAarg} +\DefineFamilyMember[.dsc]{KOMAarg} +% \end{macrocode} +% \begin{command}{\DeclareSectionCommandStyleOption} +% \changes{v3.17}{2015/03/23}{added} +% \begin{command}{\AddToSectionCommandOptionsDoList,\RelaxSectionCommandOptions} +% \changes{v3.20}{2015/11/18}{added} +% \begin{macro}{\@AddToSectionCommandOptionsDoList,\scr@dsc@doopts} +% \changes{v3.20}{2015/11/18}{added} +% The basic command to define a section command style option is: +% \begin{quote} +% \cs{DeclareSectionCommandStyleOption}\marg{style}\marg{option}\marg{definition} +% \end{quote} +% Is similar to a corresponding \cs{DefineFamilyKey}. But the option +% definition is not done immediately but added to +% \cs{scr@dsc@style@\meta{style}@options} which is executed later inside +% \cs{DeclareSectionCommand} after detection of the \opt{style} option. The +% option is also added to the \emph{section command options do list} of +% \cs{scr@dsc@doopts} using +% \begin{quote} +% \cs{AddToSectionCommandOptionsDoList}\marg{option} +% \end{quote} +% This is used, e.g., to relax all options inside \cs{DeclareSectionCommand} +% using \cs{RelaxSectionCommandOptions} to not have options defined, that are +% used by one style, while declaring a command of another style, that does not +% support the option. +% \begin{description} +% \item[Note:] We also could have used another option member for every style +% to avoid such problems. With \LaTeX3 also usage of +% \pkg[https://www.ctan.org/pkg/l3kernel]{l3keys}, which provides a kind of +% hierarchical options, would have been possible. +% \end{description} +% \begin{macrocode} +\newcommand*{\DeclareSectionCommandStyleOption}[3]{% + \AddToSectionCommandOptionsDoList{#2}% + \expandafter\g@addto@macro\csname scr@dsc@style@#1@options\endcsname{% + \DefineFamilyKey[.dsc]{KOMAarg}{#2}{#3}% + }% +} +\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}{} +\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 \@AddToSectionCommandOptionsListWithDefault,\scr@dsc@dooptions +% \end{command}^^A \AddToSectionCommandOptionsDoList,\RelaxSectionCommandOptions +% \end{command}^^A \DeclareSectionCommandStyleOption +% We provide several kinds of options: +% \begin{command}{\DeclareSectionCommandDummyOption} +% \changes{v3.17}{2015/03/23}{added} +% \changes{v3.20}{2015/11/18}{removed} +% \end{command}^^A \DeclareSectionCommandDummyOption +% \begin{command}{\DeclareSectionCommandStyleLengthOption, +% \DeclareSectionCommandStyleNumberOption, +% \DeclareSectionCommandStyleFontOption} +% \changes{v3.17}{2015/03/23}{added} +% \changes{v3.20}{2016/04/25}{argument expansion} +% All these commands have the four arguments: +% \begin{quote} +% \marg{style}\marg{option}\marg{prefix}\marg{postfix} +% \end{quote} +% Most of the commands all correspond to \pkg*{scrbase} option declaration +% commands: +% \begin{center} +% \begin{tabular}{lll} +% \cs{DeclareSectionCommand} & \pkg*{scrbase} & meaning \\\hline +% \cs{DeclareSectionCommandStyleLengthOption} +% & \cs{FamilyLengthMacroKey} & length option\\ +% \cs{DeclareSectionCommandStyleNumberOption} +% & \cs{FamilyCounterMacroKey} & numerical option\\ +% \cs{DeclareSectionCommandStyleFontOption} +% & & font element option\\ +% \end{tabular} +% \end{center} +% The \meta{macro} of the corresponding \pkg*{scrbase} command is build by +% \meta{prefix}\cs{scr@dsc@current}\meta{postfix}. For +% \cs{DeclareSectionCommandStyleOption} the build name is the font +% element instead. However, before using (setting) the option, +% \cs{scr@dsc@current} has to be defined to be \meta{level name} +% (aka \emph{section command name}). Depending on \cs{ifscr@dsc@expandtopt} +% (see option \opt{expandtopt}) lengths given as argument to the option of +% \cs{DeclareSectionCommandStyleLengthOption} is expanded to a \texttt{pt} +% value instead of used as it is. +% \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 + }% +} +\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 + }% +} +\newcommand*{\DeclareSectionCommandStyleFontOption}[4]{% + \DeclareSectionCommandStyleOption{#1}{#2}{% + \IfExistskomafont{#3\scr@dsc@current#4}{% + \setkomafont + }{% + \newkomafont + }{#3\scr@dsc@current#4}{##1}% + \FamilyKeyStateProcessed + }% +} +% \end{macrocode} +% \end{command}^^A \DeclareSectionCommandStyleLengthOption … +% \begin{command}{\DeclareSectionCommandStyleFuzzyOption} +% \changes{v3.26}{2018/09/18}{added} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}} +% We also have a kind of fuzzy option. A fuzzy option defined by +% \begin{quote} +% \cs{DeclareSectionCommandStyleFuzzyOption}\meta{style}\meta{option}% +% \meta{prefix}\meta{postfix}\meta{also} +% \end{quote} +% is an option, that provides three values: \texttt{true} (and the aliases +% \texttt{on} and \texttt{yes}), \texttt{false} (and the aliases \texttt{off} +% and \texttt{no}), and a third one \meta{also}. It defines a macro with the +% name \meta{prefix}\cs{scr@dsc@current}\meta{postfix} and three arguments. If +% the option is true, the macro expands to the first argument. If the option +% is false, the macro expands to the second argument. If the option is +% \meta{also} the macro expands to the third argument. +% \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{command}^^A \DeclareSectionCommandStyleFuzzyOptions +% +% These types of options are used to define all the options of a style, e.g., +% \begin{macro}{\scr@dsc@style@section@options} +% \changes{v3.17}{2015/03/23}{added} +% the option declarations of style \texttt{section}: +% \begin{macrocode} +\newcommand*{\scr@dsc@style@section@options}{} +% \end{macrocode} +% \begin{description} +% \item[\opt{indent=\meta{length}}:] +% the left indent of the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{section} + {indent}{scr@}{@sectionindent} +% \end{macrocode} +% \begin{description} +% \item[\opt{afterindent=\meta{fuzzy}}:] +% \changes{v3.26}{2018/09/18}{option \opt{afterindent}} +% fuzzy logic. A boolean value states whether to indent the first line +% after the heading. With additional \opt{afterindent=bysign} the decision +% depends on the sign of \opt{beforeskip}. Negative values of +% \opt{beforeskip} result in no paragraph indent. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleFuzzyOption{section} + {afterindent}{scr@}{@afterindent} + {bysign} +% \end{macrocode} +% \begin{description} +% \item[\opt{beforeskip=\meta{length}}:] +% The vertical distance before the heading. If \opt{afterindent=bysign}, the +% absolute value of \meta{length} is used. Otherwise the \meta{length} can +% also be negative to move up the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{section} + {beforeskip}{scr@}{@beforeskip} +% \end{macrocode} +% \begin{description} +% \item[\opt{runin=\meta{fuzzy}}:] +% \changes{v3.26}{2018/09/18}{option \opt{runin}} +% fuzzy logic. A boolean value states whether the heading is run-in (or +% free-standing). With additional \opt{runin=bysign} the decision depends on +% the sign of \opt{afterskip}. Negative values of \opt{afterskip} result in +% a run-in heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleFuzzyOption{section} + {runin}{scr@}{@runin} + {bysign} +% \end{macrocode} +% \begin{description} +% \item[\opt{afterskip=\meta{length}}:] +% In case of a run-in heading (see option \opt{runin}) the horizontal +% distance after the heading. In case of a free-standing heading the +% vertical distance after the heading. If the run-in heading is activated by +% a negative \meta{length}, the absolute value is used. Otherwise the +% \meta{length} can also be negative, which usually does not make much +% sense. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{section} + {afterskip}{scr@}{@afterskip} +% \end{macrocode} +% \begin{description} +% \item[\opt{font=\meta{font settings}}:] +% The font setting for the font element of the heading. +% \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}{added} +% \changes{v3.20}{2016/01/19}{inline section test fixed} +% Macro +% \begin{quote} +% \cs{scr@dsc@def@style@section@command}\marg{command name} +% \end{quote} +% defines a section command \cs{\meta{command name}} of style +% \texttt{section}. +% \begin{description} +% \item[Note:] Here we already use our own \cs{scr@startsection} instead of +% \cs{@startsection}. So maybe not redefining \cs{@startsection} or +% redefining \cs{@startsection} only optionally wouldn't be a big step. +% \end{description} +% \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}{added} +% Now, the option declaration of style \texttt{chapter} (similar, but not the +% same): +% \begin{macrocode} +%<*book|report> +\newcommand*{\scr@dsc@style@chapter@options}{} +% \end{macrocode} +% \begin{description} +% \item[\opt{pagestyle=\meta{name}}:] +% The page style, that should be used for the starting page of the chapter +% like outline level. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleOption{chapter}{pagestyle}{% + \@namedef{\scr@dsc@current pagestyle}{#1}% + \FamilyKeyStateProcessed +}% +% \end{macrocode} +% \begin{description} +% \item[\opt{afterindent=\meta{fuzzy}}:] +% \changes{v3.26}{2018/09/18}{option \opt{afterindent}} +% fuzzy logic. A boolean value states whether to indent the first line +% after the heading. With additional \opt{afterindent=bysign} the decision +% depends on the sign of \opt{beforeskip}. Negative values of +% \opt{beforeskip} result in no paragraph indent. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleFuzzyOption{chapter} + {afterindent}{scr@}{@afterindent} + {bysign} +% \end{macrocode} +% \begin{description} +% \item[\opt{beforeskip=\meta{length}}:] +% The vertical distance before the heading. If \opt{afterindent=bysign}, the +% absolute value of \meta{length} is used. Otherwise the \meta{length} can +% also be negative to move up the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{chapter} + {beforeskip}{scr@}{@beforeskip} +% \end{macrocode} +% \begin{description} +% \item[\opt{innerskip=\meta{length}}:] +% The vertical distance between the prefix line and the text (if a prefix +% line is used). +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{chapter} + {innerskip}{scr@}{@innerskip} +% \end{macrocode} +% \begin{description} +% \item[\opt{afterskip=\meta{length}}:] +% The vertical distance after the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{chapter} + {afterskip}{scr@}{@afterskip} +% \end{macrocode} +% \begin{description} +% \item[\opt{font=\meta{font settings}}:] +% The font setting for the font element of the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleFontOption{chapter}{font}{}{} +% \end{macrocode} +% \begin{description} +% \item[\opt{prefixfont=\meta{font settings}}:] +% The font setting for the font element of the prefix line of the heading. +% \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}{added} +% Macro +% \begin{quote} +% \cs{scr@dsc@def@style@chapter@command}\marg{command name} +% \end{quote} +% defines a section command \cs{\meta{command name}} of style +% \texttt{chapter}. We need some more macros to be initialized than with +% \cs{scr@dsc@def@style@section@command}. +% \begin{description} +% \item[ToDo:] Make a more generic (and general) interface for this. +% \end{description} +% \begin{macrocode} +\newcommand*{\scr@dsc@def@style@chapter@command}[1]{% + \@namedef{#1}{\scr@startchapter{#1}}% + \@namedef{@#1}{\scr@@startchapter{#1}}% + \@namedef{@s#1}{\scr@@startschapter{#1}}% + \@namedef{@make#1head}{\scr@makechapterhead{#1}}% + \@namedef{@makes#1head}{\scr@makeschapterhead{#1}}% + \@namedef{@@make#1head}{\scr@@makechapterhead{#1}}% + \@namedef{@@makes#1head}{\scr@@makeschapterhead{#1}}% + \@namedef{set#1preamble}{\set@preamble{#1}}% +} +%</book|report> +% \end{macrocode} +% \begin{macro}{\scr@dsc@style@chapter@subcommands} +% \changes{v3.30}{2020/04/08}{added} +% Internal name list of additional commands to be defined for style +% \texttt{chapter} commands. This is used, to decide, if a new section command +% declaration is really new or already redefines some commands. This should +% help to avoid, e.g., defining a new chapter command \cs{schapter}, if +% \cs{chapter} is already defines, because \cs{schapter} would redefine the +% \cs{@schapter} of \cs{chapter}. +% \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}{added} +% Now the options for style \texttt{part} (very similar to \texttt{chapter}): +% \begin{macrocode} +\newcommand*{\scr@dsc@style@part@options}{} +% \end{macrocode} +% \begin{description} +% \item[\opt{pagestyle=\meta{name}}:] +% The page style, that should be used for the starting page of the chapter +% like outline level. +% \end{description} +% \begin{macrocode} +%<*report|book> +\DeclareSectionCommandStyleOption{part}{pagestyle}{% + \@namedef{\scr@dsc@current pagestyle}{#1}% + \FamilyKeyStateProcessed +}% +%</report|book> +% \end{macrocode} +% \begin{description} +% \item[\opt{afterindent=\meta{fuzzy}}:] +% \changes{v3.26}{2018/09/18}{option \opt{afterindent}} +% fuzzy logic. A boolean value states whether to indent the first line +% after the heading. With additional \opt{afterindent=bysign} the decision +% depends on the sign of \opt{beforeskip}. Negative values of +% \opt{beforeskip} result in no paragraph indent. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleFuzzyOption{part} + {afterindent}{scr@}{@afterindent} + {bysign} +% \end{macrocode} +% \begin{description} +% \item[\opt{beforeskip=\meta{length}}:] +% The vertical distance before the heading. If \opt{afterindent=bysign}, the +% absolute value of \meta{length} is used. Otherwise the \meta{length} can +% also be negative to move up the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{part} + {beforeskip}{scr@}{@beforeskip} +% \end{macrocode} +% \begin{description} +% \item[\opt{innerskip=\meta{length}}:] +% The vertical distance between the prefix line and the text (if a prefix +% line is used). +% \end{description} +% \begin{macrocode} +%<*book|report> +\DeclareSectionCommandStyleLengthOption{part} + {innerskip}{scr@}{@innerskip} +%</book|report> +% \end{macrocode} +% \begin{description} +% \item[\opt{afterskip=\meta{length}}:] +% The vertical distance after the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleLengthOption{part} + {afterskip}{scr@}{@afterskip} +% \end{macrocode} +% \begin{description} +% \item[\opt{font=\meta{font settings}}:] +% The font setting for the font element of the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleFontOption{part}{font}{}{} +% \end{macrocode} +% \begin{description} +% \item[\opt{prefixfont=\meta{font settings}}:] +% The font setting for the font element of the prefix line of the heading. +% \end{description} +% \begin{macrocode} +\DeclareSectionCommandStyleFontOption{part}{prefixfont}{}{prefix} +% \end{macrocode} +% \end{macro}^^A \scr@dsc@style@part@options +% \begin{macro}{\scr@dsc@def@style@part@command} +% \changes{v3.18}{2015/05/23}{added} +% Macro +% \begin{quote} +% \cs{scr@dsc@def@style@part@command}\marg{command name} +% \end{quote} +% defines a section command \cs{\meta{command name}} of style +% \texttt{part}. This looks like a mixture of +% \cs{scr@dsc@def@style@section@command} and +% \cs{scr@dsc@def@style@chapter@command}. +% \begin{description} +% \item[ToDo:] Make a more generic (and general) interface for this. +% \end{description} +% \begin{macrocode} +\newcommand*{\scr@dsc@def@style@part@command}[1]{% + \@namedef{#1}{\scr@startpart{#1}}% + \@namedef{@#1}{\scr@@startpart{#1}}% + \@namedef{@s#1}{\scr@@startspart{#1}}% +%<book|report> \@namedef{@end#1}{\scr@@endpart{#1}}% +%<book|report> \@namedef{set#1preamble}{\set@preamble{#1}}% +} +% \end{macrocode} +% \begin{macro}{\scr@dsc@style@part@subcommands} +% \changes{v3.30}{2020/04/08}{added} +% 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}{added} +% \changes{v3.24}{2017/04/25}{initial values of \opt{indent} and +% \opt{font}} +% \changes{v3.26}{2018/09/18}{supporting \opt{runin} and \opt{afterindent}} +% This macro checks, that all attributes needed for the definition of a +% section command (with style \texttt{section}) are properly setup. If not, an +% error is reported and the definition is prevented (using +% \cs{aftergroup}\cs{@gobbletwo} inside \cs{scr@declaresectioncommanderror}). +% \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}{added} +% \changes{v3.24}{2017/04/25}{initial values for all but level +% \texttt{chapter}} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}} +% This macro checks, that all attributes needed for the definition of a +% chapter command (with style \texttt{chapter}) are properly setup. If not, an +% error is reported and the definition is prevented (using +% \cs{aftergroup}\cs{@gobbletwo} inside \cs{scr@declaresectioncommanderror}). +% \begin{macrocode} +%<*book|report> +\newcommand*{\scr@dsc@style@chapter@neededoptionstest}{% + \scr@ifundefinedorrelax{\scr@dsc@current pagestyle}{% + \Ifstr{\scr@dsc@current}{chapter}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {initial page style}{pagestyle}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {initial page style}{pagestyle}% + {\chapterpagestyle}% + {\@namedef{\scr@dsc@current pagestyle}{\chapterpagestyle}}% + }% + }{}% + \scr@ifundefinedorrelax{scr@\scr@dsc@current @innerskip}{% + \Ifstr{\scr@dsc@current}{chapter}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {inner chapter skip}{innerskip}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {inner chapter skip}{innerskip}% + {\scr@chapter@innerskip}% + {\@namedef{scr@\scr@dsc@current @innerskip}{\scr@chapter@innerskip}}% + }% + }{}% + \scr@ifundefinedorrelax{scr@\scr@dsc@current @beforeskip}{% + \Ifstr{\scr@dsc@current}{chapter}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {before chapter skip}{beforeskip}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {before chapter skip}{beforeskip}% + {\scr@chapter@beforeskip}% + {\@namedef{scr@\scr@dsc@current @beforeskip}{\scr@chapter@beforeskip}}% + }% + }{}% + \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterskip}{% + \Ifstr{\scr@dsc@current}{chapter}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {after chaper skip}{afterskip}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {after chaper skip}{afterskip}% + {\scr@chapter@afterskip}% + {\@namedef{scr@\scr@dsc@current @afterskip}{\scr@chapter@afterskip}}% + }% + }{}% + \IfExistskomafont{\scr@dsc@current}{}{% + \Ifstr{\scr@dsc@current}{chapter}{% + \scr@declaresectioncommanderror{\scr@dsc@current}{font}{font}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {font}{font}% + {\usekomafont{chapter}}% + {\newkomafont{\scr@dsc@current}{\usekomafont{chapter}}}% + }% + }% + \IfExistskomafont{\scr@dsc@current prefix}{}{% + \Ifstr{\scr@dsc@current}{chapter}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {prefix line font}{prefixfont}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {prefix line font}{prefixfont}% + {\usekomafont{chapterprefix}}% + {\newkomafont{\scr@dsc@current prefix}{\usekomafont{chapterprefix}}}% + }% + }{}% + \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterindent}{% + \l@addto@macro\local@endgroup{% + \ClassInfo{\KOMAClassName} + {using compatibility default `afterindent=bysign'\MessageBreak + for `\expandafter\string\csname \scr@dsc@current\endcsname}% + \expandafter\gdef\csname scr@\scr@dsc@current @afterindent\endcsname + ##1##2##3{##3}% + }% + }{}% +} +%</book|report> +% \end{macrocode} +% \end{macro}^^A \scr@dsc@style@chapter@neededoptionstest +% +% \begin{macro}{\scr@dsc@style@part@neededoptionstest} +% \changes{v3.17}{2015/03/24}{added} +% \changes{v3.24}{2017/04/25}{initial values for all but level \texttt{part}} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}} +% This macro checks, that all attributes needed for the definition of a +% part command (with style \texttt{part}) are properly setup. If not, an +% error is reported and the definition is prevented (using +% \cs{aftergroup}\cs{@gobbletwo} inside \cs{scr@declaresectioncommanderror}). +% \begin{macrocode} +\newcommand*{\scr@dsc@style@part@neededoptionstest}{% +%<*book|report> + \scr@ifundefinedorrelax{\scr@dsc@current pagestyle}{% + \Ifstr{\scr@dsc@current}{part}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {initial page style}{pagestyle}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {initial page style}{pagestyle}% + {\partpagestyle}% + {\@namedef{\scr@dsc@current pagestyle}{\partpagestyle}}% + }% + }{}% + \scr@ifundefinedorrelax{scr@\scr@dsc@current @innerskip}{% + \Ifstr{\scr@dsc@current}{part}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {inner part skip}{innerskip}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {inner part skip}{innerskip}% + {\scr@part@innerskip}% + {\@namedef{scr@\scr@dsc@current @innerskip}{\scr@part@innerskip}}% + }% + }{}% +%</book|report> + \scr@ifundefinedorrelax{scr@\scr@dsc@current @beforeskip}{% + \Ifstr{\scr@dsc@current}{part}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {before part skip}{beforeskip}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {before part skip}{beforeskip}% + {\scr@part@beforeskip}% + {\@namedef{scr@\scr@dsc@current @beforeskip}{\scr@part@beforeskip}}% + }% + }{}% + \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterskip}{% + \Ifstr{\scr@dsc@current}{part}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {after part skip}{afterskip}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {after part skip}{afterskip}% + {\scr@part@afterskip}% + {\@namedef{scr@\scr@dsc@current @afterskip}{\scr@part@afterskip}}% + }% + }{}% + \IfExistskomafont{\scr@dsc@current}{}{% + \Ifstr{\scr@dsc@current}{part}{% + \scr@declaresectioncommanderror{\scr@dsc@current}{font}{font}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}{font}{font}% + {\usekomafont{part}}% + {\newkomafont{\scr@dsc@current}{\usekomafont{part}}}% + }% + }{}% + \IfExistskomafont{\scr@dsc@current prefix}{}{% + \Ifstr{\scr@dsc@current}{part}{% + \scr@declaresectioncommanderror{\scr@dsc@current}% + {number font}{prefixfont}% + }{% + \scr@declaresectioncommandwarning{\scr@dsc@current}% + {number font}{prefixfont}% + {\usekomafont{partprefix}}% + {\newkomafont{\scr@dsc@current prefix}{\usekomafont{partprefix}}}% + }% + }{}% + \scr@ifundefinedorrelax{scr@\scr@dsc@current @afterindent}{% + \l@addto@macro\local@endgroup{% + \ClassInfo{\KOMAClassName}{% + using compatibility default +%<article> `afterindent=false'\MessageBreak +%<book|report> `afterindent=true'\MessageBreak + for `\expandafter\string\csname \scr@dsc@current\endcsname}% + \expandafter\gdef\csname scr@\scr@dsc@current @afterindent\endcsname + ##1##2##3% +%<article> {##2}% +%<book|report> {##1}% + }% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \scr@dsc@style@part@neededoptionstest +% +% \begin{macro}{\scr@dsc@parametersonlytrue,\scr@dsc@parametersonlyfalse, +% \ifscr@dsc@parametersonly} +% \changes{v3.17}{2015/03/24}{added} +% \changes{v3.20}{2015/11/18}{dummy options removed} +% In the first option pass of \cs{DeclareSectionCommand} this is set to true, +% if the \opt{style} option is used without value, to change the settings of a +% command without running \cs{scr@dsc@def@style@\meta{style}@command} and +% therefore without defining the command itself. +% \begin{description} +% \item[ToDo:] Is this a not documented feature? What's the sense? +% \end{description} +% \begin{macrocode} +\newif\ifscr@dsc@parametersonly +% \end{macrocode} +% \end{macro}^^A \ifscr@dsc@parametersonly +% +% \begin{command}{\DeclareSectionCommand} +% \changes{v3.15}{2014/11/21}{added} +% \changes{v3.17}{2015/03/23}{re-implemented because of style depending +% options} +% \changes{v3.18}{2015/05/22}{\cs{scr@dsc@def@style@\dots @command} +% defines style depending macros} +% \changes{v3.20}{2015/10/03}{using \cs{DeclareTOCStyleEntry}} +% The main command to define new section commands or redefine existing section +% commands. Incidentally it also defines the corresponding ToC entry command. +% \begin{quote} +% \cs{DeclareSectionCommand}\oarg{options}\marg{command name} +% \end{quote} +% is used to define \cs{\meta{command name}}. The \meta{options} are used to +% specify the behave of the command. It is declared as optional +% argument. However for new commands not all the options are really optional. +% \begin{description} +% \item[Note:] Don't forget to declare all options, that are defined for +% \cs{DeclareSectionCommand} also for \cs{ProvideSectionCommands}! +% \end{description} +% \begin{macrocode} +\newcommand*{\DeclareSectionCommand}[2][]{% + \edef\scr@dsc@current{#2}% +% \end{macrocode} +% The first pass to get the: +% \begin{description} +% \item[\opt{style=\meta{name}}:] +% style of the section command. +% \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[\opt{tocstyle=\meta{name}}:] \changes{v3.20}{2015/11/12}{early +% evaluation of option \opt{tocstyle}} \changes{v3.27}{2019/10/02}{prefix +% for storing directory style changed} style of the ToC entry. From +% \pkg*{tocbasic} 3.27 the style name macro has been changed from +% \cs{scr@dte@\meta{level name}@style} to \cs{scr@tso@\meta{level +% name}@style}. +% \begin{description} +% \item[ToDo:] Don't support deprecated \cs{scr@dte@\meta{level name}@style} +% any longer. +% \end{description} +% \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 + }{% +%<trace> \typeout{TRACE: option tocstyle=##1}% +%<trace> \typeout{TRACE: command=\scr@dsc@current}% + \scr@ifundefinedorrelax{scr@dte@def@l@##1}{% +%<trace> \typeout{TRACE: style not defined}% + \FamilyKeyStateUnknownValue + }{% +%<trace> \typeout{TRACE: style defined}% + \@namedef{scr@dte@\scr@dsc@current @style}{##1}% + \@namedef{scr@tso@\scr@dsc@current @style}{##1}% + \FamilyKeyStateProcessed + }% + }% + }% +% \end{macrocode} +% \begin{description} +% \item[\texttt{@else@=\meta{value}}:] +% \changes{v3.20}{2015/11/18}{early evaluation of option \opt{tocstyle}} +% All other options are ignored using the \opt{@else@} option, which simply +% accepts every option. So the first pass does not report any unknown +% options. +% \end{description} +% \begin{macrocode} + \DefineFamilyKey[.dsc]{KOMAarg}{@else@}{% +%<*trace> + \typeout{TRACE: ignoring option `@else@=\detokenize{##1}'}% + \typeout{TRACE: + \string\scr@key@atlist=`\detokenize\expandafter{\scr@key@atlist}'}% + \typeout{TRACE: + \string\scr@key@name=`\detokenize\expandafter{\scr@key@name}'}% + \typeout{TRACE: + \string\scr@key@value=`\detokenize\expandafter{\scr@key@value}'}% +%</trace> + \FamilyKeyStateProcessed + }% + \FamilyExecuteOptions[.dsc]{KOMAarg}{#1}% +% \end{macrocode} +% \changes{v3.20}{2015/11/18}{Resetting options after first pass} +% After the first pass we have to reset these options. +% \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}{dummy options for main pass removed} +% Now, we know the style and can activate all the options of the style. +% \begin{macrocode} +%<trace> \typeout{TRACE: style=\@nameuse{scr@\scr@dsc@current @style}}% + \@nameuse{scr@dsc@style@\@nameuse{scr@\scr@dsc@current @style}@options}% +% \end{macrocode} +% And initialize the ToC style. +% \begin{macrocode} +%<trace> \typeout{TRACE: tocstyle=% +%<trace> \@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}} +% \changes{v3.21}{2016/06/12}{support for prefix \opt{tocentry} instead of +% \opt{toc}} +% We also have to define options for all the ToC style options by adding the +% prefix \opt{toc} to the names of these options. This also means a ToC style +% option \opt{style} must not exist (because we already have an option +% \opt{tocstyle}). This is the main reason, \cs{DeclareTOCStyleEntry} has not +% such an option but a corresponding argument. Additionally ToC style options +% should never start with \opt{toc} (because of the ugly resulting +% \opt{toctoc\dots}). +% \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} +% Make option \opt{style} and \opt{tocstyle} (fast) dummies, because they +% already have been handled completely. +% \begin{macrocode} + \DefineFamilyKey[.dsc]{KOMAarg}{style}{\FamilyKeyStateProcessed}% + \DefineFamilyKey[.dsc]{KOMAarg}{tocstyle}{\FamilyKeyStateProcessed}% +% \end{macrocode} +% Some options exist for all section command styles and therefore are defined +% here and not a part of the style options: +% \begin{description} +% \item[\opt{expandtopt=\meta{boolean}}:] +% If \texttt{true} all lengths are expanded at setting time to unit pt +% instead of used unchanged. With this, the lengths are not depending on the +% font size of usage time but on the current font size. +% \end{description} +% \begin{macrocode} + \FamilyBoolKey[.dsc]{KOMAarg}{expandtopt}{scr@dsc@expandtopt}% + \scr@dsc@expandtoptfalse +% \end{macrocode} +% \begin{description} +% \item[\opt{increaselevel=\meta{number}}:] +% Automatically increase \opt{level} by \meta{number} (with default 1). This +% is needed for \cs{DeclareSectionCommands} and therefore only defined if +% \cs{scr@local@levelincrease} is defined. +% \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[\opt{level=\meta{number}}:] +% The numerical outline level of the command. +% \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} +% \begin{description} +% \item[\opt{counterwithout=\meta{name}}:] +% \changes{v3.19}{2015/09/09}{option \opt{counterwithout}} +% The counter of this command should not depend on the counter +% \cnt{name} any longer. +% \end{description} +% \begin{macrocode} + \FamilyStringKey[.dsc]{KOMAarg}{counterwithout}{\scr@local@counterwithout}% + \let\scr@local@counterwithout\relax +% \end{macrocode} +% \begin{description} +% \item[\opt{counterwithin=\meta{name}}:] +% The counter of this command depends on the counter \cnt{name}. +% \end{description} +% \begin{macrocode} + \FamilyStringKey[.dsc]{KOMAarg}{counterwithin}{\scr@local@counterwithin}% + \let\scr@local@counterwithin\relax +% \end{macrocode} +% \begin{description} +% \item[\opt{toclevel=\meta{number}}:] +% The numerical ToC entry level. Default is \opt{level}. This option exists +% only, if the ToC style supports it. But because with +% \cs{DeclareSectionCommands} we need an offset for this (similar to the +% increase of \opt{level}). So we have to redefine it in case of existing +% \cs{scr@local@tocleveloffset}. +% \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}{only temporary definition of options} +% The main pass of options execution. Afterwards reset all the options. +% \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} +% Now, we can test, if all needed options has been defined. +% \changes{v3.27}{2019/02/07}{\opt{level} must no be -\cs{maxdimen}} +% Also test, that \opt{level} is not -\len{maxdimen}, because this value is +% used internally to switch of numbering locally. +% \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} +% If the configuration is compete, we are ready for the (re-)definition of the +% command. +% \begin{macrocode} + \@firstofone{% +% \end{macrocode} +% \changes{v3.20}{2015/10/15}{missing \cs{expandafter} added} +% First of all we need a counter: +% \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} +% Then the command itself (but only, if the \opt{style} was not empty): +% \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} +% We also need commands for the running head and a corresponding number +% formatting. With \pkg*{scrlayer} this can and should be done using +% \cs{DeclareSectionNumberDepth}. Otherwise we do it step by step. +% \changes{v3.15a}{2015/01/21}{\cs{endskip} instead of \cs{enskip}} +% \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} +% We also need macros to generate and print the ToC entry. +% \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}{support for ToC levels with \pkg{hyperref}} +% \changes{v3.26}{2018/06/27}{overwrite ToC levels of \pkg{hyperref}} +% \changes{v3.26}{2018/06/27}{fallback handling of gaps in the bookmark +% levels} +% And we need extra code for \pkg{hyperref} and the bookmarks. +% \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}{added} +% It there were not enough options to \cs{DeclareSectionCommand} to define the +% command, we report an error and also execute +% \cs{aftergroup}\cs{@gobbletwo}. So the |\@firstofone{…}| code after +% |\endgroup| resp. |\local@endgroup| inside \cs{DeclareSectionCommand} that +% defines the new section command etc. will never be used in such a case. +% \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}{added} +% Sometimes a warning and extension of \cs{local@endgroup} is enough. +% \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{command}^^A \DeclareSectionCommand +% +% +% \begin{command}{\DeclareNewSectionCommand} +% \changes{v3.15}{2014/11/21}{added} +% \changes{v3.25}{2018/03/10}{additional tests and errors about +% \cs{the\dots}, \cs{\dots mark}, \cs{\dots format}, +% \cs{\dots markformat}} +% \changes{v3.30}{2020/04/08}{orphan spaces removed} +% This is similar to \cs{DeclareSectionCommand} but reports an error, if the +% command or a main helper already exist. So it can be used for new commands +% only. +% \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}{extended test for really new} +% After the general user commands, we just have to detect the style \dots +% \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} +% \dots{} to gut through the \cs{scr@dsc@style@\meta{style}@subcommands} and +% test, if one of them exists. +% \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 +% \end{macrocode} +% If not, we can use \cs{DeclareSectionCommand}. Otherwise just report an +% error. +% \begin{macrocode} + \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{command}^^A \DeclareNewSectionCommand +% +% \begin{command}{\RedeclareSectionCommand} +% \changes{v3.15}{2014/11/21}{added} +% This is much easier than \cs{DeclareNewSectionCommand} because it tests only +% for the main command and uses \cs{DeclareSectionCommand} if the main command +% already exists. So all the additional commands and main helpers do not need +% to exist. +% \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{command}^^A \RedeclareSectionCommand +% +% \begin{command}{\ProvideSectionCommand} +% \changes{v3.15}{2014/11/21}{added} +% This is much easier than \cs{DeclareNewSectionCommand} because currently it +% tests only for the command itself but nor for the helpers. +% \begin{description} +% \item[ToDo:] This is dangerous, because +% e.g. |\ProvideSectionCommand{schapter}| would break \cs{chapter} (because +% of \cs{@schapter}). So maybe it should do the same tests as +% \cs{DeclareNewSectionCommand} and at least warn. +% \end{description} +% 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{command}^^A \ProvideSectionCommand +% +% \begin{command}{\DeclareSectionCommands} +% \changes{v3.15}{2014/12/03}{added} +% \changes{v3.26}{2018/08/29}{using \cs{scr@trim@spaces}} +% Based on \cs{DeclareSectionCommand} this one can be used to define several +% commands at once. The commands are given as a comma-separated list of +% commands. There is one additional option \opt{increaselevel=\meta{number}} +% to add \meta{number} to the \opt{level} at each call of +% \cs{DeclareSectionCommand} but the first one. The definition of this option +% is done inside \cs{DeclareSectionCommand} if \cs{scr@local@levelincrease} is +% defined. Because of the first run, we initialize it with 0. The same has to +% be done for \cs{scr@local@leveloffset} and \cs{scr@local@tocleveloffset}. +% At the end we also have to un-define these local commands. Otherwise later +% usage of \cs{DeclareSectionCommand} would be detected as part of +% \cs{DeclareSectionCommands}. +% \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{command}^^A \DeclareSectionCommands +% +% \begin{command}{\DeclareNewSectionCommands} +% \changes{v3.15}{2014/12/03}{added} +% \changes{v3.26}{2018/08/29}{using \cs{scr@trim@spaces}} +% Because of \opt{increaselevel} we cannot simply use +% \cs{DeclareNewSectionCommand} inside, but have to use +% \cs{DeclareSectionCommand} even for already defined commands (but +% nevertheless report an error). +% \begin{description} +% \item[ToDo:] Is this really the correct error action? Does it really matter, +% if \opt{increaselevel} would be wrong after already reporting an error? +% \end{description} +% \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{command}^^A \DeclareNewSectionCommands +% +% \begin{command}{\RedeclareSectionCommands} +% \changes{v3.15}{2014/12/03}{added} +% \changes{v3.26}{2018/08/29}{using \cs{scr@trim@spaces}} +% Because of \opt{increaselevel} we cannot simply use +% \cs{RedeclareSectionCommand} inside, but have to use +% \cs{DeclareSectionCommand} even for not yet defined commands (but +% nevertheless report an error). +% \begin{description} +% \item[ToDo:] Is this really the correct error action? Does it really matter, +% if \opt{increaselevel} would be wrong after already reporting an error? +% \end{description} +% \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{command}^^A \RedeclareSectionCommands +% +% \begin{command}{\ProvideSectionCommands} +% \changes{v3.15}{2014/12/03}{added} +% \changes{v3.17}{2015/03/23}{re-implemented because of style depending +% options} +% \changes{v3.26}{2018/08/29}{using \cs{scr@trim@spaces}} +% This is the real problematic case, because \opt{increaselevel} should be +% used even for commands, that must not be defined. However, maybe a solution +% like this should be used for the two previous commands too. +% \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} +% If the command already exists, process options \opt{level}, \opt{toclevel} +% and \opt{increaselevel} and ignore all others using an \opt{@else@} option. +% \begin{macrocode} + \DefineFamilyKey[.dsc]{KOMAarg}{@else@}{\FamilyKeyStateProcessed}% + \FamilyCounterMacroKey[.dsc]{KOMAarg}{increaselevel}[1]% + {\scr@local@levelincrease}% + \DefineFamilyKey[.dsc]{KOMAarg}{level}{% + \FamilySetCounterMacro{KOMAarg}{level}{\reserved@b}{##1}% + \edef\scr@local@leveloffset{% + \the\numexpr\scr@local@leveloffset+\scr@local@levelincrease\relax + }% + }% + \DefineFamilyKey[.dsc]{KOMAarg}{toclevel}{% + \FamilySetCounterMacro{KOMAarg}{toclevel}{\reserved@b}{##1}% + \edef\scr@local@tocleveloffset{% + \the\numexpr\scr@local@tocleveloffset+\scr@local@levelincrease\relax + }% + }% + \FamilyExecuteOptions[.dsc]{KOMAarg}{#1}% + \RelaxFamilyKey[.dsc]{KOMAarg}{toclevel}% + \RelaxFamilyKey[.dsc]{KOMAarg}{level}% + \RelaxFamilyKey[.dsc]{KOMAarg}{increaselevel}% + \RelaxFamilyKey[.dsc]{KOMAarg}{@else@}% + }% + }% + \let\scr@local@levelincrease\relax + \let\scr@local@leveloffset\relax + \let\scr@local@tocleveloffset\relax +} +%</body> +% \end{macrocode} +% \end{command}^^A \ProvideSectionCommands +% +% \begin{command}{\IfSectionCommandStyleIs} +% \changes{v3.27}{2019/02/04}{added} +% 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}% +} +%</body> +% \end{macrocode} +% \end{command} +% +% \begin{option}{bookmarkpackage} +% \changes{v3.26}{2018/06/27}{added} +% Package \pkg{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 \pkg{bookmark}. So if we load this package, we can use the same +% value for bookmark levels and TOC levels even within +% \cls*{scrartcl}. Nevertheless we allow the user to decide not to use +% \pkg{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 \pkg{hyperref} driver to +% \pkg{bookmark} driver option} +% The name of the \pkg{hyperref} driver is in \cs{Hy@driver}. But +% \pkg{bookmark} does not provide the same drivers, so we try to translate +% the curreny known \pkg{hyperref} drivers to \pkg{bookmark} +% drivers. Also we do not load \pkg{bookmark} with a driver option but +% define \pkg{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} renamed to \cs{Ifstr}} +% Note: \texttt{hpdftex}, \texttt{hluatex}, \texttt{hxetex} and \texttt{hvtex} +% do not need to be translated, because they are autodetected by +% \pkg{bookmark} as well. \texttt{hypertex}, \texttt{hdviwindo}, +% \texttt{htex4ht} and \texttt{latex2html} are not known by \pkg{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}% + }% +% \end{macrocode} +% \changes{v3.33}{2021/02/17}{workaround for catcode changes of +% \pkg{babel-spanish}} +% For \pkg{babel-spanish} we need to deactivate quoting before loading +% \pkg{bookmark}. +% \begin{macrocode} + \@ifundefined{es@quoting}{% + \RequirePackage{bookmark}% + }{% + \ifx\es@quoting\activatequoting + \ClassInfo{\KOMAClassName}{% + temporary deactivation of babel-spanish quoting + }% + \deactivatequoting + \RequirePackage{bookmark}% + \ClassInfo{\KOMAClassName}{% + reactivation of babel-spanish quoting + }% + \activatequoting + \else + \RequirePackage{bookmark}% + \fi + }% +% \end{macrocode} +% \changes{v3.26b}{2019/01/17}{workaround for \cs{@beginmainauxhook} added} +% Sometimes \pkg{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 + }% + }% +} +%</option> +% \end{macrocode} +% \end{option}^^A bookmarkpackage +% +% +% \subsection{Preambles of parts or chapters} +% +% The \KOMAScript{} classes \cls*{scrbook} and \cls*{scrreprt} provide +% preambles above and below the headings of parts and chapters. The preamble +% above is printed into the usual distance above the headings. It does not +% increase this distance to avoid \emph{jumping headings}. However here we +% have only the generic code for preambles. The user commands are defined by +% \cs{scr@dsc@style@chapter@command} and \cs{scr@dsc@style@part@command}. +% +% \begin{macro}{\use@preamble} +% \changes{v2.8p}{2001/09/25}{added} +% Used as a general macro to print the stored preamble code and clean the +% storage. Preambles are only printed, if the storage is defined. But an empty +% defined storage would be printed. The argument is the name of the storage, +% e.g., \texttt{chapter@o}, \texttt{chapter@u}, \texttt{part@o}, +% \texttt{part@u}. +% \begin{macrocode} +%<*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}{added} +% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by +% \cs{kernel@ifnextchar}} +% Macro +% \begin{quote} +% \cs{set@preamble}\marg{level name}\oarg{position}\oarg{width}\marg{text} +% \end{quote} +% defines a preamble code stored into \cs{\meta{preamble name}@preamble}. The +% \meta{preamble name} is build depending on the \meta{level name} and the +% \meta{position}. The \meta{position} is a combination of vertical and +% horizontal position and used to generate not only the \meta{preamble name} +% but also options for the \cs{parbox} used to encapsulate the \meta{text} +% into a preamble code. The \meta{width} is also used for the \cs{parbox}. +% \begin{description} +% \item[Note:] The definition of a preamble is global and the definition of a +% new preamble of the same \meta{preamble name} overwrite an existing one. +% \end{description} +% \begin{macro}{\set@@preamble} +% \changes{v2.8p}{2001/09/25}{added} +% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by +% \cs{kernel@ifnextchar}} +% \begin{macro}{\set@@@preamble} +% \changes{v2.8p}{2001/09/25}{added} +% \begin{macro}{\set@@@@preamble} +% \changes{v2.8p}{2001/09/25}{added} +% \changes{v2.8q}{2001/11/27}{missing brace added} +% \changes{v3.12}{2012/10/16}{allow \texttt{o} as alias for \texttt{b}} +% \changes{v3.12a}{2014/02/14}{\texttt{b} fixed} +% We need a lot of helpers because of not using \pkg*{xparse} but having +% several optional arguments. At least one optional argument? If not use an +% empty default for the first one and \len{hsize} for the second one. +% \begin{macrocode} +\newcommand*{\set@preamble}[1]{% + \kernel@ifnextchar [%] + {\set@@preamble{#1}}{\set@@@preamble{#1}[][\hsize]}% +} +% \end{macrocode} +% Or even two optional argument? If not use default \len{hsize}. +% \begin{macrocode} +\newcommand*{\set@@preamble}{} +\def\set@@preamble#1[#2]{% + \kernel@ifnextchar [%] + {\set@@@preamble{#1}[{#2}]}{\set@@@preamble{#1}[{#2}][\hsize]}% +} +% \end{macrocode} +% From here we know all optional arguments and have to process the composite +% \meta{position}. +% \begin{macrocode} +\newcommand{\set@@@preamble}{} +\long\def\set@@@preamble#1[#2][#3]#4{% + \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} +% If the horizontal or vertical position is still unclear use defaults. +% \begin{macrocode} + \@ifundefined{prmbl@hpos}{\def\prmbl@hpos{0}}{}% + \@ifundefined{prmbl@vpos}{\def\prmbl@vpos{0}}{}% +% \end{macrocode} +% From the vertical position we can build the \meta{preamble name} and the +% vertical position of the \cs{parbox} the horizontal is used for the +% horizontal skip before and after the \cs{parbox}. +% \begin{macrocode} + \ifcase\prmbl@hpos + \ifcase\prmbl@vpos + \set@@@@preamble{#1@u}{t}{#3}{}{\hfil}{#4}% + \else + \set@@@@preamble{#1@o}{b}{#3}{}{\hfil}{#4}% + \fi + \or + \ifcase\prmbl@vpos + \set@@@@preamble{#1@u}{t}{#3}{\hfil}{\hfil}{#4}% + \else + \set@@@@preamble{#1@o}{b}{#3}{\hfil}{\hfil}{#4}% + \fi + \else + \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} +% Last but not least add the horizontal aligned \cs{parbox} to the preamble +% storage. +% \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}{added} +% Either store the horizontal preamble position if not yet defined or if +% already defined but illegal report it as an error. +% \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}{added} +% Either store the vertical position if not yet defined or if already defined +% but illegal report it as an error. +% \begin{macrocode} +\newcommand*{\set@preamble@vpos}[2]{% + \@ifundefined{prbml@vpos}{% + \def\prmbl@vpos{#1}% + }{% + \ifnum \prmbl@vpos=0\relax\else% + \ClassError{\KOMAClassName}{% + inconsistent vpos options% + }{% + You've said `#2' as position option. But you have + to\MessageBreak + use only one of `t', `o', `b', or `u' not two of + these.\MessageBreak + If you'll continue only first vpos option will be + used% + }% + \fi + }% +} +%</body> +%</book|report> +% \end{macrocode} +% \end{macro}^^A \set@preamble@vpos +% \end{macro}^^A \set@@@@preamble +% \end{macro}^^A \set@@@preamble +% \end{macro}^^A \set@@preamble +% \end{macro}^^A \set@preamble +% +% +% \subsection{Deprecated code for the ToC} +% +% Before using \pkg*{tocbasic} we needed additional code for our extended +% version of \cs{@dottedtocline}. However this has been removed in +% \KOMAScript~v3.36. +% +% \begin{description} +% \item[ToDo:] This should be moved to \file{scrkernel-listsof.dtx} or should +% be removed. +% \end{description} +% +% \begin{macro}{\bprot@dottedtocline} +% \changes{v2.96a}{2006/11/30}{added} +% \changes{v3.27}{2019/02/25}{deprecated} +% \changes{v3.36}{2022/03/15}{removed} +% \end{macro} +% +% +% \subsection{Rough structuring of books} +% +% Some books have a kind of rough structuring into front matter, main matter +% and back matter. This has consequences for the page numbering and the +% numbering of headings and other elements. +% +% \begin{macro}{\@mainmattertrue,\@mainmatterfalse,\if@mainmatter} +% For the numbering of headings and other elements we only need to know +% whether we are in the main matter or not, because chapters outside the main +% matter do not provide a number. A boolean switch is best for this. By +% default we already start with the main matter. +% \begin{macrocode} +%<*book> +%<*body> +\newif\if@mainmatter\@mainmattertrue +% \end{macrocode} +% \end{macro}^^A \@mainmattertrue,\if@mainmatter +% +% \begin{command}{\frontmatter} +% \changes{v2.4e}{1996/07/02}{support for \opt{open\quotechar=any}} +% \changes{v2.5h}{1999/12/29}{support for \opt{twoside}} +% \changes{v3.00}{2008/09/27}{\cs{cleardoublepage} replaced by +% \cs{cleardoubleoddpage}} +% Switching to the front matter always needs a new odd page, because we change +% the page numbering to lowercase Roman numbers. +% \begin{macrocode} +\newcommand*\frontmatter{% + \if@twoside\cleardoubleoddpage\else\clearpage\fi + \@mainmatterfalse\pagenumbering{roman}% +} +% \end{macrocode} +% \end{command}^^A \frontmatter +% \begin{command}{\mainmatter} +% \changes{v2.4e}{1996/07/02}{support for \opt{open\quotechar=any}} +% \changes{v2.5h}{1999/12/29}{support for \opt{twoside}} +% \changes{v3.00}{2008/09/27}{\cs{cleardoublepage} replaced by +% \cs{cleardoubleoddpage}} +% Switching back to main matter always needs a new odd page, because we change +% the page numbering to Arabic numbers. +% \begin{macrocode} +\newcommand*\mainmatter{% + \if@twoside\cleardoubleoddpage\else\clearpage\fi + \@mainmattertrue\pagenumbering{arabic}% +} +% \end{macrocode} +% \end{command}^^A \mainmatter +% \begin{command}{\backmatter} +% \changes{v3.00}{2008/09/27}{\cs{cleardoublepage} replaced by +% \cs{cleardoubleoddpage}} +% Only with \opt{open=right} we start a new odd page when starting the back +% matter. +% \begin{description} +% \item[ToDo:] This does not make any sense, because the page numbering is not +% changed. And it seems to be even wrong for \opt{open=left}! So why does +% \cls*{book} use this and why shall we do so too? +% \end{description} +% \begin{macrocode} +\newcommand*\backmatter{% + \if@openright\cleardoubleoddpage\else\clearpage\fi\@mainmatterfalse +} +%</body> +%</book> +% \end{macrocode} +% \end{command} +% +% +% \subsection{Appendix} +% +% The classes (except \cls*{scrlttr2}) does provide an appendix switch, +% similar but not identical to the standard classes. +% +% \begin{command}{\appendix} +% Activation of the appendix switch over to numbering of chapters +% resp. sections with uppercase letters. +% \changes{v2.2d}{1995/05/28}{\cls*{scrartcl} doesn't have a chapter +% counter} +% \changes{v2.3c}{1995/08/06}{alternative section numbering in appendix} +% \changes{v2.8}{2001/06/15}{new \cs{appendixmore}} +% \changes{v2.8e}{2001/07/10}{\cs{@altsecnumformattrue} removed} +% \changes{v2.8o}{2001/09/19}{initial \cs{par} added} +% \changes{v2.95}{2006/07/04}{\cs{newcommand*} replaced by \cs{gdef}} +% \changes{v2.95}{2006/07/04}{simplified usage of \cs{appendixmore}} +% \changes{v3.20}{2016/12/05}{improved warning} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}} +% \changes{v3.34}{2021/04/30}{\LaTeX{} hook added} +% \begin{command}{\appendixmore} +% \changes{v2.8}{2001/06/15}{added} +% \cs{appendixmore} is deprecated with \LaTeX{} 2020/10/01 (or newer) but +% still executed as a kind of hook. +% \begin{macrocode} +%<*body> +\newcommand*\appendix{% + \Ifstr{\@currenvir}{appendix}{% + \ClassWarning{\KOMAClassName}{% + You are using + `\string\begin{appendix}...\string\end{appendix}'.\MessageBreak + You should note, that `\string\appendix' is a mostly + globally\MessageBreak + working command not an enviroment with only local\MessageBreak + effects. Therefore `\string\end{appendix}' will neither\MessageBreak + switch back to normal section numbering nor finish\MessageBreak + every other effect of `\string\begin{appendix}'.\MessageBreak + Nevertheless, some effects may end with\MessageBreak + `\string\end{appendix}' and the document may become\MessageBreak + inconsistent.\MessageBreak + Because of this, you should remove `\string\end{appendix}'\MessageBreak + and replace `\string\begin{appendix}' by command\MessageBreak + `\string\appendix'% + }% + }{}% + \par +%<*article> + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \gdef\thesection{\@Alph\c@section}% +%</article> +%<*report|book> + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \gdef\@chapapp{\appendixname}% + \gdef\thechapter{\@Alph\c@chapter}% +%</report|book> +} +\IfLTXAtLeastTF{2020/10/01}{% + \g@addto@macro{\appendix}{\UseOneTimeHook{\KOMAClassName/appendix}}% +}{} +\g@addto@macro{\appendix}{\csname appendixmore\endcsname} +%</body> +%<*prepare> +\IfLTXAtLeastTF{2020/10/01}{\NewHook{\KOMAClassName/appendix}}{} +%</prepare> +% \end{macrocode} +% \end{command} +% \end{command} +% +% +% \subsection{Parts} +% +% \begin{macro}{\@thepart} +% \changes{v2.8e}{2001/07/10}{removed} +% \end{macro} +% +% The definition of parts depends on the class. +% +% \begin{fontelement}{partnumber,part} +% \changes{v2.8o}{2001/09/14}{pre-added as macro} +% \changes{v2.8p}{2001/09/23}{added} +% \changes{v2.96a}{2006/12/02}{undocumented support for last macro expects an +% argument} +% \begin{fontelement}{partprefix} +% \changes{v3.18}{2015/06/10}{alias added} +% Definition of the font elements used by \cs{part}. The settings are done by +% option \texttt{headings} later. Everything is prepared before this option is +% used the first time. The elements are defined manually because of +% compatibility with \KOMAScript~v2.8o before font elements has been +% implemented in \KOMAScript~v2.8p. +% \begin{macrocode} +%<*prepare> +\newcommand*{\size@part}{} +\newcommand*{\scr@fnt@part}{\size@part} +\newcommand*{\size@partnumber}{} +\newcommand*{\scr@fnt@partnumber}{\size@partnumber} +\aliaskomafont{partprefix}{partnumber} +%</prepare> +% \end{macrocode} +% \end{fontelement}^^A partprefix +% \end{fontelement}^^A partnumber,part +% +% +% \begin{command}{\partheadstartvskip,\partheadendvskip} +% \changes{v2.95a}{2006/07/10}{added} +% \changes{v3.15}{2014/11/24}{\cls*{scrartcl} defines and uses +% \cs{scr@part@beforeskip} resp. \cs{scr@part@afterskip}} +% \begin{command}{\partheadmidvskip} +% \changes{v2.95a}{2006/07/10}{added} +% \begin{command}{\parheademptypage} +% \changes{v3.02}{2009/01/01}{added} +% These commands are the distance before and after a part heading, between the +% prefix line and the text line of the heading and also the empty retro page +% of a part. +% +% \begin{macro}{\scr@part@sectionbeforeskip,\scr@part@beforeskip} +% \changes{v3.15}{2014/11/24}{added} +% \changes{v3.17}{2015/03/25}{\cs{scr@part@sectionbeforeskip} renamed to +% \cs{scr@part@beforeskip}} +% \begin{macro}{\scr@part@sectionafterskip,\scr@part@sectionbeforeskip} +% \changes{v3.15}{2014/11/24}{added} +% \changes{v3.17}{2015/03/25}{\cs{scr@part@sectionafterskip} renamed to +% \cs{scr@part@afterskip}} +% \begin{macro}{\scr@part@sectionindent} +% \changes{v3.15}{2014/11/24}{added} +% \changes{v3.17}{2015/03/24}{removed} +% \end{macro}^^A \scr@part@sectionindent +% \begin{macro}{\scr@part@innerskip} +% \changes{v3.17}{2015/03/24}{added} +% \begin{macro}{\scr@part@style} +% \changes{v3.15}{2014/11/24}{added} +% All the skips and the page style are used by \cs{DeclareSectionCommand} +% resp. the style \texttt{part}. We define it as early as possible. Even the +% style of \cs{part} is already defined here. +% \begin{description} +% \item[ToDo:] Do we need them in the \texttt{prepare} run or can we move then +% even to the \texttt{body} run? +% \item[ToDo:] Do we really need to define \cs{scr@part@style}? +% \end{description} +% \begin{macrocode} +%<*prepare> +\newcommand*{\scr@part@beforeskip}{% +%<article> 4ex +% \end{macrocode} +% \begin{description} +% \item[Note:] The |+\baselineskip| is needed, to stay as compatible as +% possible with prior definitions of \cs{chapterheadstartvskip}. +% \end{description} +% \begin{macrocode} +%<report|book> \z@ \@plus 1fil + \baselineskip +} +%<book|report>\newcommand*{\scr@part@innerskip}{20\p@} +\newcommand*{\scr@part@afterskip}{% +%<article> 3ex +%<report|book> \z@ \@plus 1fil +} +\newcommand*{\scr@part@style}{part} +% \end{macrocode} +% \end{macro}^^A \scr@part@style +% \end{macro}^^A \scr@part@afterskip +% \end{macro}^^A \scr@part@innerskip +% \end{macro}^^A \scr@part@beforeskip +% \begin{macrocode} +\newcommand*{\partheadstartvskip}{% +%<article> \addvspace{\@tempskipa}% +%<report|book> \null\vskip-\baselineskip\vskip\@tempskipa +} +\newcommand*{\partheadmidvskip}{% + \par\nobreak +%<book|report> \vskip\@tempskipa +} +\newcommand*{\partheadendvskip}{% +%<article> \vskip\@tempskipa +%<report|book> \vskip\@tempskipa\newpage +} +%<*report|book> +\newcommand*{\partheademptypage}{% + \if@twoside\if@openright + \null% + \thispagestyle{empty}% + \newpage + \fi\fi +} +%</report|book> +%</prepare> +% \end{macrocode} +% \end{command}^^A \partheademptypage +% \end{command}^^A \partheadmidvskip +% \end{command}^^A \partheadstartvskip,\partheadendvskip +% +% +% \begin{macro}{\scr@startpart} +% \changes{v2.8d}{2001/07/05}{using \cs{partpagestyle}} +% \changes{v2.8p}{2001/09/27}{preamble above heading} +% \changes{v3.13a}{2014/09/11}{using \cs{SecDef}} +% \changes{v3.18}{2015/05/23}{added} +% \changes{v3.19}{2015/08/25}{ignoring empty \cs{partpagestyle}} +% \changes{v3.26}{2018/10/14}{supporting option \opt{afterindent}} +% \changes{v3.28}{2019/11/18}{\cs{ifstr} renamed to \cs{Ifstr}} +% The macro +% \begin{quote} +% \cs{scr@startpart}\marg{part command name} +% \end{quote} +% is now part of the style \texttt{part}. However, the main parts +% of the code are from the original definition of \cs{part}. It has only one +% argument: The name of the part command, i.e., \texttt{part}. All arguments +% to the part command will be processed later. +% \begin{macrocode} +%<*body> +\newcommand*{\scr@startpart}[1]{% + \ExecuteDoHook{heading/preinit/#1}% +%<article> \par +%<*book|report> + \if@openright\cleardoublepage\else\clearpage\fi + \scr@ifundefinedorrelax{#1pagestyle}{}{% + \Ifstr{#1pagestyle}{}{}{% + \thispagestyle{\@nameuse{#1pagestyle}}% + }% + }% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi +%</book|report> + \@tempskipa=\glueexpr\@nameuse{scr@#1@beforeskip}\relax + \@ifundefined{scr@#1@afterindent}{\@afterindentfalse}{% + \csname scr@#1@afterindent\endcsname + {\@afterindenttrue}{\@afterindentfalse}{% + \@afterindenttrue + \ifdim\@tempskipa<\z@ + \@tempskipa=-\@tempskipa + \@afterindentfalse + \fi + }% + }% + \ExecuteDoHook{heading/postinit/#1}% + \partheadstartvskip +%<*book|report> + \vbox to\z@{\vss\use@preamble{#1@o}\strut\par}% + \vskip-\baselineskip\nobreak +%</book|report> + \expandafter\SecDef\csname @#1\expandafter\endcsname\csname @s#1\endcsname +} +% \end{macrocode} +% +% \begin{macro}{\scr@@startpart} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.95}{2002/08/13}{\cs{centering} and \cs{@parskipfalse}% +% \cs{@parskip@indent} switched} +% \changes{v2.95}{2004/11/05}{\cs{@parskipfalse} and \cs{@parskip@indent} +% replaced} +% \changes{v3.18}{2015/05/23}{added} +% \changes{v3.27}{2019/07/08}{support for option \opt{nonumber}} +% The macro +% \begin{quote} +% \cs{scr@@startpart}\marg{part command name}\oarg{extended optional +% argument}\marg{part heading} +% \end{quote} +% is now part of the style \texttt{part}. However, the main parts +% of the code are from the original definition of \cs{@part}. Therefore it has +% the mandatory and optional arguments of a non-star variant of, i.e., +% \cs{part} but an additional first argument. +% \begin{description} +% \item[Note:] \meta{extended optional argument} is named as optional, however +% here it is already mandatory, because it is a delimited argument. +% \end{description} +% \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}{extended optional argument} +% First of all, depending in \opt{headings=optionto\dots} we have different +% defaults for the options. +% \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} +% \changes{v2.8e}{2001/07/10}{using \cs{@maybeautodot}} +% \changes{v3.28}{2019/11/19}{\cs{ifnumbered} renamed to +% \cs{Ifnumbered}} +% \changes{v3.31}{2020/06/02}{\cs{@maybeautodot}\cs{thepart} removed} +% For numbered headings we have to increase the counter and write a process +% information to the \file{log} and the terminal. +% \begin{macrocode} + \Ifnumbered{#1}{% + \refstepcounter{#1}% + \expandafter\@maybeautodot\csname the#1\endcsname + \typeout{#1 \csname the#1\endcsname.}% +% \end{macrocode} +% \changes{v3.08}{2010/11/01}{using \cs{addparttocentry}} +% \changes{v3.18}{2015/05/20}{using \cs{add\meta{Name}tocentry} for +% \cs{typeout}} +% \changes{v3.31}{2020/06/06}{using \cs{\dots tocformat}} +% And if the ToC entry is not empty add a numbered entry to the table of +% contents. +% \begin{description} +% \item[ToDo:] Move \cs{autodot} to the definition of \cs{\dots tocformat}. +% \end{description} +% \begin{macrocode} + \ifx\@currenttocentry\@empty\else + \@ifundefined{#1tocformat}{% + \expandafter\gdef\csname #1tocformat\endcsname + {\csname the#1\endcsname}% + }{}% + \scr@ifundefinedorrelax{add#1tocentry}{% + \addtocentrydefault{#1}% + }{% + \@nameuse{add#1tocentry}% + }{\csname\@ifundefined{#1tocformat}{the#1}{#1tocformat}\endcsname}% + {\@currenttocentry}% + \fi + }{% +% \end{macrocode} +% \changes{v3.18}{2015/05/23}{execute counter reset list for not numbered +% headings} +% For not numbered headings we still have to process the reset list of the +% counter and write a process information to the \file{log} and the terminal. +% \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}% +% \end{macrocode} +% \changes{v3.08}{2010/11/01}{using \cs{addparttocentry}} +% \changes{v3.18}{2015/05/23}{generalized \cs{addparttocentry}} +% And before writing a not numbered entry to the table of contents we have to +% execute also the \pkg{hyperref} hook \cs{hy@insteadofrefstepcounter}. +% \begin{description} +% \item[Note:] \pkg*{scrhack} uses the existence of this command to detect a +% \KOMAScript{} class. Shouldn't this be changed using, e.g., +% \cs{KOMAClassName}? +% \end{description} +% \begin{macrocode} + \ifx\@currenttocentry\@empty\else + \hy@insteadofrefstepcounter{#1}% + \scr@ifundefinedorrelax{add#1tocentry}{% + \addtocentrydefault{#1}% + }{% + \@nameuse{add#1tocentry}% + }{}{\@currenttocentry}% + \fi + }% +% \end{macrocode} +% \changes{v2.2c}{1995/05/25}{support for CJK} +% \changes{v2.4b}{1996/03/29}{\cs{size@partnumer} replaced by +% \cs{size@partnumber}} +% \changes{v2.8p}{2001/09/22}{\cs{sectfont} used before \cs{size@part} or +% \cs{size@partnumber}} +% \changes{v2.8q}{2002/02/28}{\cs{nobreak} after \cs{sectfont}} +% \changes{v3.18}{2015/05/23}{\cs{size@\dots} replaced by \cs{usekomafont}} +% \changes{v3.21}{2016/06/12}{missing \cs{nobreak} added} +% \changes{v3.25}{2017/09/07}{defining \cs{IfUseNumber} locally} +% \changes{v3.25}{2017/09/07}{\cs{sectfont} replaced by \cs{usekomafont}} +% \changes{v3.25}{2017/09/07}{using \cs{partlineswithprefixformat}} +% \changes{v3.25}{2018/02/12}{using correct fontelement} +% \changes{v3.28}{2019/11/19}{\cs{ifnumbered} renamed to +% \cs{Ifnumbered}} +% Now the main printing code. +% \begin{description} +% \item[ToDo:] This code is almost the same as \cs{scr@@startchapter}. Only +% the procession of the reset list was there already with +% \KOMAScript~v3.15. And in \cs{scr@@startchapter} we are using +% \cs{@make\meta{name}head} here. So maybe we should do the same here and +% really use the same definition instead of having it twice. +% \end{description} +% \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}}% +%<book|report> \setlength{\@tempskipa}{\@nameuse{scr@#1@innerskip}}% + \partheadmidvskip + }{% + \usekomafont{#1}{\nobreak\interlinepenalty \@M#3\strut\@@par}% + }% + }{% + \partlineswithprefixformat{#1}{}{% + \usekomafont{#1}{\nobreak\interlinepenalty \@M#3\strut\@@par}% + } + }% +% \end{macrocode} +% \changes{v3.10}{2011/08/30}{using\cs{@mkboth{}{}} if \cs{partmark} is +% \cs{@gobble}} +% The running head. +% \begin{macrocode} + \expandafter\ifx\csname #1mark\endcsname\@gobble + \@mkboth{}{}% + \else + \csname #1mark\expandafter\endcsname\expandafter{\@currentheadentry}% + \fi + }% + \ExecuteDoHook{heading/endgroup/#1}% + \endgroup +% \end{macrocode} +% The final distance. +% \begin{macrocode} +%<*article> + \nobreak + \@tempskipa=\glueexpr\@nameuse{scr@#1@afterskip}\relax\relax + \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi + \partheadendvskip +%</article> +%<book|report> \@nameuse{@end#1}% +% \end{macrocode} +% \changes{v3.26}{2018/10/14}{using \@cs{@afterheading} with +% \cls*{scrbook} or \cls*{scrreprt}} +% And \cs{@afterheading} for all classes. +% \begin{macrocode} + \@afterheading +} +% \end{macrocode} +% \end{macro}^^A \scr@@startpart +% +% \begin{macro}{\scr@@startspart} +% \changes{v2.4n}{1997/05/28}{added \cs{chaptermark} resp. +% \cs{sectionmark} to star variant} +% \changes{v2.6a}{2000/01/20}{using \cs{@mkboth} to delete the running head} +% \changes{v2.8q}{2001/11/13}{\cs{@parskipfalse}\cs{@parskip@indent}} +% \changes{v2.95}{2002/08/13}{\cs{centering} and +% \cs{@parskipfalse}\cs{@parskip@indent} swapped} +% \changes{v2.95}{2004/11/05}{\cs{@parskipfalse} and\cs{@parskip@indent} +% replaced} +% \changes{v3.18}{2015/05/23}{added} +% The macro +% \begin{quote} +% \cs{scr@@startspart}\marg{part command name}\marg{part heading} +% \end{quote} +% is now part of the style \texttt{part}. However, the main parts +% of the code are from the original definition of \cs{@spart}. Therefore it has +% the mandatory argument of a star variant of, i.e., \cs{part} but an +% additional first argument. +% \begin{macrocode} +\newcommand{\scr@@startspart}[2]{% + \ExecuteDoHook{heading/branch/star/#1}% +% \end{macrocode} +% Some users don't learn to use \cs{addpart} for not numbered parts with entry +% to the table of contents but insist in using \cs{addcontentsline}. Despite +% this should not be used, because at least \cs{addparttocentry} should be +% used, we tolerate this by using our \pkg{hyperref} hook. +% \begin{description} +% \item[ToDo:] I don't understand why \pkg{hyperref} uses a group here and +% locally sets \cs{@mkboth} to \cs{@gobbletwo}. However, I've copied this. +% \end{description} +% \begin{macrocode} + \begingroup + \let\@mkboth\@gobbletwo + \hy@insteadofrefstepcounter{#1}% + \endgroup +% \end{macrocode} +% \changes{v3.21}{2016/06/12}{missing \cs{nobreak} added} +% \changes{v3.25}{2017/09/07}{difining \cs{IfUseNumber} locally} +% \changes{v3.25}{2017/09/07}{\cs{sectfont} replaced by \cs{usekomafont}} +% \changes{v3.25}{2017/09/07}{using \cs{partlineswithprefixformat}} +% Now the printing similar to \cs{scr@@startpart}. +% \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 +%</article> +%<book|report> \@nameuse{@end#1}% +} +% \end{macrocode} +% \end{macro}^^A \scr@@startspart +% +% \begin{command}{\partlineswithprefixformat} +% \changes{v3.25}{2017/09/07}{added} +% Command +% \begin{quote} +% \cs{partlineswithprefixformat}\marg{command name}\marg{number}\marg{text} +% \end{quote} +% is used to print a part heading with a prefix line. \meta{number} is the +% completely formatted prefix line inclusive the vertical distance below. The +% \meta{text} is the text of the heading also formatted and with final +% \cs{@@par}. But if the user uses more paragraphs than this final one, the +% user is responsible to prevent page breaks! +% \begin{macrocode} +\newcommand{\partlineswithprefixformat}[3]{% + #2#3% +} +% \end{macrocode} +% \end{command}^^A \partlineswithprefixformat +% +% \begin{macro}{\scr@@endpart} +% \changes{v2.3g}{1996/01/14}{\cs{@endpart} not defined for \cls*{scrartcl}} +% \changes{v2.4e}{1996/07/02}{supporting option \opt{openany}} +% \changes{v2.6c}{2000/06/10}{\cs{@endpart} respects \opt{open\quotechar=right}} +% \changes{v2.8p}{2001/09/27}{\cs{vbox} added} +% \changes{v2.8p}{2001/09/27}{\cs{@part@preamble} replaced by \cs{use@preamble}} +% \changes{v3.02}{2009/01/01}{using \cs{partheademptypage}} +% \changes{v3.18}{2015/05/23}{added} +% Before \KOMAScript~v3.18 this code was part of \cs{part}. \cls*{scrbook} and +% \cls*{scrreprt} use this macro to finalize the heading, e.g., print a +% preamble, to the final distance or new page and add an empty retro +% page. \cls*{scrartcl} does not have such a command, because with +% \cls*{scrartcl} parts are simple headings not pages. As usual the argument +% is the name of the part command, e.g., \texttt{part}. +% \begin{macrocode} +%<*book|report> +\newcommand*{\scr@@endpart}[1]{% + \vbox to\z@{\use@preamble{#1@u}\vss}% + \@tempskipa=\glueexpr\csname scr@#1@afterskip\endcsname\relax\relax + \ifdim\@tempskipa<\z@\@tempskipa-\@tempskipa\fi + \partheadendvskip + \partheademptypage + \if@tempswa + \twocolumn + \fi +} +%</book|report> +% \end{macrocode} +% \end{macro}^^A \scr@@endpart +% \end{macro}^^A \scr@startpart +% +% +% \begin{macro}{\hy@insteadofrefstepcounter} +% \changes{v3.18}{2015/05/22}{added to be used by \pkg{hyperref}} +% \begin{macro}{\scr@chapter@before@hyperref@patch} +% \changes{v3.27}{2019/07/24}{added to be used by \pkg*{scrhack}} +% \begin{macro}{\scr@chapter@after@hyperref@patch} +% \changes{v3.27}{2019/07/24}{added to be used by \pkg*{scrhack}} +% \changes{v3.32}{2020/09/11}{\cs{AfterPackage!} replaced by +% \cs{AfterAtEndOfPackage}} +% Usually \pkg{hyperref} uses \cs{refstepcounter} to process extra codes for +% anchors and bookmarks. However, if a not numbered heading is used, +% \pkg{hyperref} cannot use \cs{refstepcounter} but still has to add +% code. Usually \pkg{hyperref} patchs several commands like \cs{@chapter}, +% \cs{@schapter}, \cs{@part}, \cs{@spart} etc. to do so. But I think, it would +% be better to provide a hook for this, \pkg*{hyperref} can change. So we've +% designed \cs{hy@insteadofrefstepcounter}. Unfortunately \pkg{hyperref} +% currently does not care for this, but still does its patches. So we need to +% prevent \pkg{hyperref} from doing so and additionally define +% \cs{hy@insteadofrefstepcounter} ourselves. But because \cs{autoref} is +% nonsense for not numbered headings, I do not use \cs{Hy@chapapp} for +% \cs{Hy@MakeCurrentHrefAuto}. +% \begin{description} +% \item[ToDo:] Explain the Oberdiek support team, what we are doing here and +% what they should do. +% \end{description} +% \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 +} +\AfterAtEndOfPackage{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{command}{\addparttocentry} +% \changes{v3.08}{2010/11/01}{added} +% We do not use \cs{addcontentsline} directly for the entries to the table of +% contents. Using +% \begin{quote} +% \cs{addparttocentry}\marg{number}\marg{text} +% \end{quote} +% allows easy manipulation of such entries and additional actions. If the +% \meta{number} is completely empty no number should be used. Internally the +% generic \cs{addtocentrydefault} it used, which uses \cs{nonumberline} +% instead of \cs{numberline} in this case. See \file{scrkernel-listsof.dtx} +% for more information. +% \begin{macrocode} +\newcommand*{\addparttocentry}[2]{% + \addtocentrydefault{part}{#1}{#2}% +} +% \end{macrocode} +% \end{command}^^A \addparttocentry +% +% +% \begin{command}{\part} +% \changes{v3.18}{2015/05/23}{indirect definition} +% \begin{macro}{\@part,\@spart,\@endpart} +% \changes{v3.18}{2015/05/23}{indirect definition} +% \begin{command}{\setpartpreamble} +% \changes{v2.8f}{2001/07/12}{added} +% \changes{v2.8p}{2001/09/27}{using \cs{use@preamble}} +% \changes{v3.18}{2015/05/23}{indirect definition} +% \begin{macro}{\part@preamble,\part@u@preamble} +% \changes{v2.8p}{2001/09/27}{added} +% \changes{v2.8p}{2001/09/27}{\cs{part@preamble} renamed to \cs{part@u@preamble}} +% \changes{v3.12a}{2014/02/14}{name fixed} +% \changes{v3.18}{2015/05/23}{indirect definition} +% \begin{macro}{\part@o@preamble} +% \changes{v2.8p}{2001/09/27}{added} +% \changes{v3.12a}{2014/02/14}{name fixed} +% \changes{v3.18}{2015/05/23}{indirect definition} +% All these commands and macros are not defined explicitly but by using +% \cs{DeclareSectionCommand} later. See also +% \cs{scr@dsc@def@style@part@command} and \cs{setpartpreamble}. +% \end{macro}^^A \part@o@preamble +% \end{macro}^^A \part@u@preamble +% \end{command}^^A \setpartpreamble +% \end{macro}^^A \@part,\@spart,\@endpart +% \end{command}^^A \part +% +% \begin{command}{\addpart} +% \changes{v2.8c}{2001/06/29}{added} +% \changes{v2.8d}{2001/07/05}{using \cs{partpagestyle}} +% \changes{v2.95a}{2006/07/10}{support of preamble added} +% \changes{v3.11b}{2012/07/29}{missing negativ \cs{vskip} added} +% \changes{v3.13a}{2014/09/11}{using \cs{SecDef}} +% \changes{v3.15a}{2015/01/22}{distance adaption} +% \changes{v3.18}{2015/05/25}{redefinition} +% \begin{macro}{\@addpart} +% \changes{v2.8c}{2001/06/29}{added} +% \changes{v2.8l}{2001/08/17}{first ToC then output} +% \changes{v2.95}{2004/07/20}{support for running head} +% \changes{v3.00}{2008/07/01}{\pkg{hyperref} workaround} +% \changes{v3.08}{2010/11/02}{using \cs{addparttocentry}} +% \changes{v3.10}{2011/08/30}{extended optional argument} +% \changes{v3.10}{2011/08/30}{using \cs{@mkboth{}{}} if \cs{partmark} is +% \cs{@gobble}} +% \changes{v3.17}{2015/04/20}{using \cs{addpartmark} but never \cs{@mkboth}} +% \changes{v3.18}{2015/05/25}{redefinition} +% \begin{macro}{\@saddpart} +% \changes{v2.8c}{2001/06/29}{added} +% \changes{v3.18}{2015/05/25}{redefinition} +% The improved not numbered version of \cs{part}. Note: This could also be +% done using the extended optional argument of \cs{part} and option +% \opt{nonumber=true}. So this command becomes more and more deprecated. +% \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{command}^^A \addpart +% +% +% \begin{macro}{\l@part} +% \changes{v2.97c}{2007/06/21}{\cs{sectfont}\cs{large} replaced by font +% element \fnt{partentry}} +% \changes{v2.97c}{2007/06/21}{using font element \fnt{partentrypagenumber}} +% \changes{v3.15}{2014/12/23}{using \cs{parttocdepth} and +% \cs{scr@part@numwidth}} +% \changes{v3.20}{2015/10/06}{replaced by usage of ToC style} +% \begin{macro}{\scr@part@tocindent} +% \changes{v3.15}{2014/12/02}{added} +% \changes{v3.18}{2015/06/09}{indirect by \cs{DeclareSectionCommand}} +% \end{macro}^^A \scr@part@tocindent +% \begin{macro}{\scr@part@tocnumwidth} +% \changes{v3.15}{2014/12/02}{added} +% \changes{v3.18}{2015/06/09}{indirect by\cs{DeclareSectionCommand}} +% These macros are not longer defined explicitly but by +% \cs{DeclareTOCEntryStyle} and indirectly by \cs{DeclareSectionCommand}. +% \end{macro} +% \end{macro}^^A \l@part +% +% +% \begin{counter}{part} +% \begin{command}{\thepart} +% \begin{command}{\partformat} +% \changes{v2.3c}{1995/08/06}{auto dot feature} +% \changes{v2.5f}{1999/02/14}{orphan spaces removed} +% \changes{v2.7h}{2001/04/22}{missing backslash of \cs{autodot} fixed} +% Because we don't use the default Arabic numbering, we still define the +% counter for \cs{part}, it's printing and the formatting explicitly. +% \begin{macrocode} +\newcounter{part} +\renewcommand*{\thepart}{\@Roman\c@part} +\newcommand*{\partformat}{\partname~\thepart\autodot} +% \end{macrocode} +% \end{command}^^A \partformat +% \end{command}^^A \thepart +% \end{counter}{part} +% +% +% \begin{command}{\partname} +% \changes{v3.36}{2022/03/15}{explicit definition for English languages} +% The name of a part used for the prefix line and maybe for the ToC entry. +% \begin{macrocode} +\newcommand*\partname{Part} +\providecaptionname{american,australian,british,canadian,english,newzealand,% + UKenglish,ukenglish,USenglish,usenglish}\partname{Part} +% \end{macrocode} +% \end{command}^^A \partname +% +% +% \begin{command}{\partmark} +% \changes{v2.9r}{2004/07/20}{added} +% \changes{v3.18}{2015/05/24}{default changed from \cs{@gobble} to +% \cs{@mkboth{}{}}} +% Initially \cs{part} should simply empty the left and right mark if an +% automatic running head is used. This is independent from the page style. +% \begin{macrocode} +\newcommand*{\partmark}[1]{\@mkboth{}{}} +% \end{macrocode} +% \end{command}^^A \partmark +% +% \begin{command}{\addpartmark} +% \changes{v3.17}{2015/04/20}{added} +% \changes{v3.18}{2015/05/24}{depends on \cs{partnumdepth}} +% To be used to add the marks with \cs{addpart}. Locally we define +% \cs{if@mainmatter}, because it makes life easier for users or package +% authors, who (re-)define \cs{partmark}. +% \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{command}^^A \addpartmark +% +% +% \begin{command}{\raggedpart} +% \changes{v2.95a}{2006/07/10}{added} +% Style \texttt{part} does not use \cs{raggedsection} but +% \cs{raggedpart}. However for \cls*{scrartcl} the default is the same. But +% \cls*{scrbook} and \cls*{scrreprt} use \cs{centering} as default. +% \begin{description} +% \item[Note:] Because of using \cs{let} inside a class, \cs{raggedright} +% should be without hyphenation when we define \cs{raggedpart}. +% \end{description} +% \begin{macrocode} +\newcommand*{\raggedpart}{} +%<article>\let\raggedpart\raggedsection +%<report|book>\let\raggedpart\centering +% \end{macrocode} +% \end{command} +% +% \begin{fontelement}{partentry} +% \changes{v2.97c}{2007/06/21}{added} +% \changes{v3.06}{2010/06/09}{\fnt{sectioning} replaced by \fnt{disposition}} +% \cs{part} entries to the table of contents are \cs{large}. +% \begin{macrocode} +\newkomafont{partentry}{\usekomafont{disposition}\large} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{partentrypagenumber} +% \changes{v2.97c}{2007/06/21}{added} +% The page number of the ToC entry should be unchanged. +% \begin{macrocode} +\newkomafont{partentrypagenumber}{} +%</body> +% \end{macrocode} +% \end{fontelement} +% +% +% \subsection{Chapters} +% +% Classes \cls*{scrbook} and \cls*{scrreprt} provide chapters. These are +% realized by \cs{DeclareSectionCommand} and the \texttt{chapter} style. The +% style is represented by \cs{scr@dsc@def@style@chapter@command} and several +% helpers. +% \begin{description} +% \item[Note:] Package \pkg{hyperref} is not really compatible with +% \KOMAScript{} classes, because it redefines \cs{@schapter} and +% \cs{@chapter} incompatible. However, currently \KOMAScript{} has a build +% in workaround for this. But this workaround itself depends on internal +% code of \pkg{hyperref}. It would be better, if \pkg{hyperref} would +% provide an interface for class authors and would redefine internal macros +% of classes only as fallback if classes do not use this +% interface. \KOMAScript{} also provides an alternative. \pkg*{hyperref} +% could redefine a single command \cs{hy@insteadofrefstepcounter}. +% \item[Note:] Any package, that changes internal macros like \cs{@chapter}, +% \cs{@schapter}, \cs{@makechapterhead}, \cs{@makeschapterhead} is +% incompatible with \KOMAScript{} classes. Neither \KOMAScript{} nor the +% \KOMAScript{} author is responsible for this. Package authors are welcome +% to ask for interfaces they need, e.g., a good idea would be to define a +% own headings style. +% \end{description} +% +% \begin{option}{chapterprefix} +% \changes{v2.8}{2001/06/15}{added} +% \changes{v2.95c}{2006/08/21}{changed to \pkg{keyval} option} +% \changes{v3.18}{2015/05/22}{option correlates with style not level} +% \begin{macro}{\@chapterprefixtrue,\@chapterprefixfalse,\if@chapterprefix} +% Initially \KOMAScript{} does not use the enormous chapter headings with +% prefix line ``Chapter \meta{number}'' but a more subtle one. However, either +% \opt{chapterprefix} or \opt{headings=twolinechapter} can be used to +% reactivate the prefix line. The current setting is available via the boolean +% switch \cs{if@chapterprefix}. +% \begin{macrocode} +%<*book|report> +%<prepare>\newif\if@chapterprefix +%<*option> +\KOMA@key{chapterprefix}[true]{% + \KOMA@set@ifkey{chapterprefix}{@chapterprefix}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \KOMA@kav@replacebool{.\KOMAClassFileName}% + {chapterprefix}{@chapterprefix}% + \KOMA@kav@remove{.\KOMAClassFileName}% + {headings}{twolinechapter}% + \KOMA@kav@remove{.\KOMAClassFileName}% + {headings}{onelinechapter}% + \KOMA@kav@xadd{.\KOMAClassFileName}% + {headings}{% + \if@chapterprefix twolinechapter\else onelinechapter\fi + }% + \fi +} +\KOMA@kav@add{.\KOMAClassFileName}{headings}{onelinechapter}% +% \end{macrocode} +% \begin{option}{nochapterprefix} +% \changes{v2.8}{2001/06/15}{added} +% \changes{v2.95c}{2006/08/21}{obsolete} +% \changes{v3.01a}{2008/11/20}{deprecated} +% Deprecated option for compatibility with \KOMAScript~2.9u only. +% \begin{macrocode} +\KOMA@DeclareDeprecatedOption{nochapterprefix}{chapterprefix=false} +%</option> +% \end{macrocode} +% \end{option}^^A nochapterprefix +% \end{macro}^^A \if@chapterprefix +% \end{option}^^A chapterprefix +% +% +% \begin{option}{appendixprefix} +% \changes{v2.8}{2001/06/15}{added} +% \changes{v2.95c}{2006/08/21}{re-implementation as \pkg{keyval} option} +% \changes{v3.12}{2013/03/05}{usage of \cs{FamilyKeyState}} +% \changes{v3.17}{2015/03/09}{internal value storage} +% \changes{v3.34}{2021/04/30}{usage of \LaTeX{} hook, if available} +% \changes{v3.34}{2021/04/30}{new value \opt{\quotechar=default} with \LaTeX{} +% hooks} +% If the appendix chapters should be with or without prefix line independent +% from the chapters of the main part, option \opt{appendixprefix} can be +% used. This does not set up a new boolean but just activates or deactivates +% the boolean for chapters inside \cs{appendix}. From \KOMAScript{} v3.34 and +% \LaTeX{} 2020/10/01 this is done using a new \LaTeX{} hook. Otherwise still +% \cs{appendixmore} is used. Default is, using the settings for chapters. +% \begin{macrocode} +%<*option> +\IfLTXAtLeastTF{2020/10/01}{% + \KOMA@key{appendixprefix}[true]{% + \Ifstr{#1}{default}{% + \KOMA@kav@removekey{.\KOMAClassFileName}{appendixprefix}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{twolineappendix}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{onelineappendix}% + \IfHookEmptyTF{\KOMAClassName/appendix}{}{% + \RemoveFromHook{\KOMAClassName/appendix}[appendixprefix]% + }% + \FamilyKeyStateProcessed + }{% + \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}% + \IfHookEmptyTF{\KOMAClassName/appendix}{}{% + \RemoveFromHook{\KOMAClassName/appendix}[appendixprefix]% + }% + \if@tempswa + \KOMA@kav@add{.\KOMAClassFileName}{headings}{twolineappendix}% + \AddToHook{\KOMAClassName/appendix}[appendixprefix]% + {\@chapterprefixtrue}% + \else + \KOMA@kav@add{.\KOMAClassFileName}{headings}{onelineappendix}% + \AddToHook{\KOMAClassName/appendix}[appendixprefix]% + {\@chapterprefixfalse}% + \fi + \fi + }% + }% +}{% + \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 + }% +} +% \end{macrocode} +% \begin{option}{noappendixprefix} +% \changes{v2.8}{2001/06/15}{added} +% \changes{v2.95c}{2006/08/21}{obsolete} +% \changes{v3.01a}{2008/11/20}{deprecated} +% \begin{macrocode} +\KOMA@DeclareDeprecatedOption{noappendixprefix}{appendixprefix=false} +%</option> +% \end{macrocode} +% \end{option}^^A noappendixprefix +% \end{option}^^A appendixprefix +% +% +% \begin{fontelement}{chapter} +% \changes{v2.8o}{2001/09/14}{added} +% \changes{v2.96a}{2006/12/02}{undocumented support for last macro expects an +% argument} +% \begin{fontelement}{chapterprefix} +% \changes{v2.8o}{2001/09/14}{added by macro} +% \changes{v2.96a}{2006/12/02}{added} +% Definition of the font elements used by \cs{chapter}. The settings are done +% by option \opt{headings} later. Everything is prepared before this option +% is used the first time. The manual definition is used, because of +% compatibility with \KOMAScript{} 2.9u. However, using the old macros is +% deprecated and not supported any longer. +% \begin{macrocode} +%<*prepare> +\newcommand*{\size@chapter}{} +\newcommand*{\scr@fnt@chapter}{\size@chapter} +\newcommand*{\size@chapterprefix}{\size@chapter} +\newcommand*{\scr@fnt@chapterprefix}{\size@chapterprefix} +%</prepare> +% \end{macrocode} +% \end{fontelement}^^A chapterprefix +% \end{fontelement}^^A chapter +% +% +% \begin{command}{\chapterheadstartvskip} +% \changes{v3.15}{2014/11/24}{defining and using \cs{scr@chapter@beforeskip}} +% \begin{command}{\chapterheadmidvskip} +% \changes{v3.15}{2014/11/20}{added} +% \changes{v3.17}{2015/03/25}{defining and using \cs{scr@chapter@innerskip}} +% \begin{command}{\chapterheadendvskip} +% \changes{v3.11c}{2013/02/13}{\cs{chapterheadstartvskip} and +% \cs{chapterheadendvskip} removed from \cls*{scrartcl}} +% \changes{v3.15}{2014/11/24}{defining and using \cs{scr@chapter@afterskip}} +% \changes{v3.15}{2014/12/10}{\cs{vspace} replaced by \cs{vskip} because of +% \cs{lastskip}} +% These commands are the distance before a chapter heading, between the +% prefix line and the text line of the heading and after the chapter heading. +% \cs{chapterheadmidvskip} is only used with option \opt{chapterprefix} +% resp. \opt{headings=twolinechapter}. +% +% \begin{macro}{\scr@chapter@sectionbeforeskip,\scr@chapter@beforeskip} +% \changes{v3.15}{2014/11/24}{added} +% \changes{v3.17}{2015/03/25}{\cs{scr@chapter@sectionbeforeskip} renamed to +% \cs{scr@chapter@beforeskip}} +% \begin{macro}{\scr@chapter@innerskip} +% \changes{v3.17}{2015/03/25}{added} +% \begin{macro}{\scr@chapter@sectionafterskip,\scr@chapter@afterskip} +% \changes{v3.15}{2014/11/24}{added} +% \changes{v3.17}{2015/03/25}{\cs{scr@chapter@sectionafterskip} renamed to +% \cs{scr@chapter@afterskip}} +% \begin{macro}{\scr@chapter@sectionindent} +% \changes{v3.15}{2014/11/24}{added} +% \changes{v3.17}{2015/04/24}{removed} +% \end{macro}^^A \scr@chapter@sectionindent +% \begin{macro}{\scr@chapter@style} +% \changes{v3.15}{2014/11/24}{added} +% All the skips and the page style are used by \cs{DeclareSectionCommand} +% resp. the style \texttt{chapter}. We define it as early as possible. Even the +% style of \cs{chapter} is already defined here. +% \begin{description} +% \item[ToDo:] Do we need them in the \texttt{prepare} run or can we move then +% even to the \texttt{body} run? +% \item[ToDo:] Do we really need to define \cs{scr@chapter@style}? +% \end{description} +% \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@afterskip +% \end{macro}^^A \scr@chapter@innerskip +% \end{macro}^^A \scr@chapter@beforeskip +% \begin{macrocode} +\newcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}} +\newcommand*{\chapterheadendvskip}{\vskip\@tempskipa} +\newcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa} +%</prepare> +% \end{macrocode} +% \end{command}^^A \chapterheadendvskip +% \end{command}^^A \chapterheadmidvskip +% \end{command}^^A \chapterheadstartvskip +% +% +% \begin{macro}{\scr@startchapter} +% \changes{v3.18}{2015/05/22}{added} +% \changes{v3.19}{2015/08/25}{ignore empty page styles} +% The macro +% \begin{quote} +% \cs{scr@startchapter}\marg{chapter command name} +% \end{quote} +% is now part of the style \texttt{chapter}. However, the main parts +% of the code are from the original definition of \cs{chapter}. It has only one +% argument: The name of the chapter command, i.e., \texttt{chapter}. All +% arguments to the part command will be processed later. +% \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}{added} +% The macro +% \begin{quote} +% \cs{scr@@startchapter}\marg{chapter command name}\oarg{extended optional +% argument}\marg{chapter heading} +% \end{quote} +% is now part of the style \texttt{chapter}. However, the main parts +% of the code are from the original definition of \cs{@chapter}. Therefore it +% has the mandatory and optional arguments of a non-star variant of, i.e., +% \cs{chapter} but an additional first argument. +% \begin{description} +% \item[Note:] \meta{extended optional argument} is named as optional, however +% here it is already mandatory, because it is a delimited argument. +% \end{description} +% \begin{macrocode} +\newcommand*{\scr@@startchapter}{} +\def\scr@@startchapter#1[#2]#3{% + \ExecuteDoHook{heading/branch/nostar/#1}% +% \end{macrocode} +% \changes{v3.10}{2011/08/30}{extended optional argument} +% \changes{v3.27}{2019/07/08}{option \opt{nonumber} added} +% First of all, depending in \opt{headings=optionto\dots} we have different +% defaults for the options. +% \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} +% \changes{v2.8e}{2001/07/10}{using \cs{@maybeautodot}} +% \changes{v3.08}{2010/11/01}{using \cs{addchaptertocentry}} +% \changes{v3.18}{2015/05/20}{using \cs{add\meta{name}tocentry}} +% \changes{v3.18}{2015/05/22}{using \meta{name} instead of \cs{@chapapp} +% in \cs{typeout}} +% \changes{v3.28}{2019/11/19}{\cs{ifnumbered} renamed to +% \cs{Ifnumbered}} +% For numbered headings we have to increase the counter and write a process +% information to the \file{log} and the terminal. +% \begin{macrocode} + \Ifnumbered{#1}{% +%<book> \if@mainmatter + \@tempswatrue +%<book> \else\@tempswafalse\fi + }{\@tempswafalse}% + \if@tempswa + \refstepcounter{#1}% + \expandafter\@maybeautodot\csname the#1\endcsname + \typeout{#1 \csname the#1\endcsname.}% + \ifx\@currenttocentry\@empty\else +% \end{macrocode} +% \changes{v3.31}{2020/06/06}{using \cs{\dots tocformat}}% +% \begin{description} +% \item[ToDo]: Move \cs{autodot} to the definition of \cs{\dots tocformat}. +% \end{description} +% \begin{macrocode} + \@ifundefined{#1tocformat}{% + \expandafter\gdef\csname #1tocformat\endcsname + {\csname the#1\endcsname}% + }{}% + \scr@ifundefinedorrelax{add#1tocentry}{% + \addtocentrydefault{#1}% + }{% + \@nameuse{add#1tocentry}% + }{\csname\@ifundefined{#1tocformat}{the#1}{#1tocformat}\endcsname}% + {\@currenttocentry}% + \fi + \else +% \end{macrocode} +% For not numbered headings we still have to process the reset list of the +% counter and write a process information to the \file{log} and the terminal. +% \begin{macrocode} + \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} +% And before writing a not numbered entry to the table of contents we have to +% execute also the \pkg{hyperref} hook \cs{hy@insteadofrefstepcounter}. +% \begin{description} +% \item[Note:] \pkg*{scrhack} uses the existence of this command to detect a +% \KOMAScript{} class. Shouldn't this be changed using, e.g., +% \cs{KOMAClassName}? +% \end{description} +% \begin{macrocode} + \hy@insteadofrefstepcounter{#1}% + \scr@ifundefinedorrelax{add#1tocentry}{% + \addtocentrydefault{#1}% + }{% + \@nameuse{add#1tocentry}% + }{}{\@currenttocentry}% + \fi + \fi +% \end{macrocode} +% Set the mark for the running head. Here we have to do a one step expansion +% of \cs{@currentheadentry}, because otherwise it would change with every +% \cs{section}, \cs{subsection} \dots +% \begin{macrocode} + \csname #1mark\expandafter\endcsname\expandafter{\@currentheadentry}% +% \end{macrocode} +% \changes{v2.8g}{2001/07/18}{support for \cs{float@addtolists}} +% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by \cs{Iftocfeature}} +% Depending on feature \texttt{chapteratlist} we have to add a vertical space +% to other directories. And for compatibility we also support the deprecated +% \cs{float@addtolists} but not without warning. +% \begin{description} +% \item[ToDo:] Why do we add the gap here but also use \cs{addctontentsline} +% in \cs{addchaptertocentry}? Is this a bug? Should this be standardized? +% \end{description} +% \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} +% \changes{v3.18}{2015/05/22}{\cs{@makechapterhead} replaced by +% \cs{@make\meta{Name}head}} +% \changes{v3.36}{2022/03/16}{warning about deprecated \cs{@makechapterhead}} +% Setting the heading itself is more or less a call of \cs{@make\meta{command +% name}head}. +% \begin{description} +% \item[ToDo:] Using \cs{scr@makechapterhead}\marg{command name} would be the +% better solution. However in this case, every redefinition of +% \cs{@makechapterhead} would be ignored. So currently we support such +% deprecated redefinition of internal macro \cs{@makechapterhead} for +% \cs{chapter}. But this will be changed in future. +% \end{description} +% \begin{macrocode} + \scr@t@st@nd@w@rn@m@k@ch@pt@rh@@d{#1}% + \if@twocolumn + \if@at@twocolumn + \@nameuse{@make#1head}{#3}% + \else + \@topnewpage[\@nameuse{@make#1head}{#3}]% + \fi + \else + \@nameuse{@make#1head}{#3}% + \fi +% \end{macrocode} +% \changes{v3.18}{2015/05/21}{always using \cs{@afterheading}} +% And finally the end of every outline command. +% \begin{macrocode} + \@afterheading +} +% \end{macrocode} +% \begin{macro}{\scr@t@st@nd@w@rn@m@k@ch@pt@rh@@d} +% \changes{v3.36}{2022/03/16}{added} +% The test and warning used inside \cs{scr@@startchapter}. +% \begin{macrocode} +\expandafter\ifnum\scr@v@is@ge{3.36}% + \newcommand*{\scr@t@st@nd@w@rn@m@k@ch@pt@rh@@d}[1]{% + \Ifstr{#1}{chapter}{% + \begingroup + \def\reserved@a{\scr@makechapterhead{chapter}}% + \ifx\@makechapterhead\reserved@a\else + \ClassWarningNoLine{\KOMAClassName}{% + Redefinition of \string\@makechapterhead\space detected.\MessageBreak + Note: KOMA-Script does use styles for commands like\MessageBreak + \string\chapter. Currently it internally still provides and\MessageBreak + uses \string\@makechapterhead, but a completely different\MessageBreak + definition compared to the standard classes.\MessageBreak + So redefining or using internal \string\@makechapterhead\MessageBreak + by users or package authors may already break\MessageBreak + KOMA-Script and will not work with a coming version,\MessageBreak + that will remove this deprecated code}% + \let\scr@t@st@nd@w@rn@m@k@ch@pt@rh@@d\@gobbble + \fi + \endgroup + }{}% + } +\else + \let\scr@t@st@nd@w@rn@m@k@ch@pt@rh@@d\@gobble +\fi +% \end{macrocode} +% \end{macro}^^A \scr@t@st@nd@w@rn@m@k@ch@pt@rh@@d +% \end{macro}^^A \scr@@startchapter +% +% \begin{macro}{\scr@@startschapter} +% \changes{v3.18}{2015/05/22}{added} +% The macro +% \begin{quote} +% \cs{scr@@startschapter}\marg{chapter command name}\marg{chapter heading} +% \end{quote} +% is now part of the style \texttt{chapter}. However, the main parts +% of the code are from the original definition of \cs{@schapter}. Therefore it +% has the mandatory argument of a star variant of, i.e., \cs{chapter} but an +% additional first argument. +% \begin{macrocode} +\newcommand*{\scr@@startschapter}[2]{% + \ExecuteDoHook{heading/branch/star/#1}% +% \end{macrocode} +% Some users don't learn to use \cs{addchapter} for not numbered parts with +% entry to the table of contents but insist in using +% \cs{addcontentsline}. Despite this should not be used, because at least +% \cs{addchaptertocentry} should be used, we tolerate this by using our +% \pkg{hyperref} hook. +% \begin{description} +% \item[ToDo:] I don't understand why \pkg{hyperref} uses a group here and +% locally sets \cs{@mkboth} to \cs{@gobbletwo}. However, I've copied this. +% \end{description} +% \begin{macrocode} + \begingroup + \let\@mkboth\@gobbletwo + \hy@insteadofrefstepcounter{#1}% + \endgroup +% \end{macrocode} +% Setting the heading itself is more or less a call of \cs{@makes\meta{command +% name}head}. +% \begin{description} +% \item[ToDo:] Using \cs{scr@makeschapterhead}\marg{command name} would be the +% better solution. However in this case, every redefinition of +% \cs{@makeschapterhead} would be ignored. So currently we support such +% deprecated redefinition of internal macro \cs{@makeschapterhead} for +% \cs{chapter}. But this will be changed in future. +% \end{description} +% \begin{macrocode} + \scr@t@st@nd@w@rn@m@ks@ch@pt@rh@@d{#1}% + \if@twocolumn + \if@at@twocolumn + \@nameuse{@makes#1head}{#2}% + \else + \@topnewpage[\@nameuse{@makes#1head}{#2}]% + \fi + \else + \@nameuse{@makes#1head}{#2}% + \fi +% \end{macrocode} +% \changes{v3.18}{2015/05/21}{always using \cs{@afterheading}} +% And finally the end of every outline command. +% \begin{macrocode} + \@afterheading +} +% \end{macrocode} +% \begin{macro}{\scr@t@st@nd@w@rn@m@ks@ch@pt@rh@@d} +% \changes{v3.36}{2022/03/16}{added} +% The test and warning used inside \cs{scr@@startschapter}. +% \begin{macrocode} +\expandafter\ifnum\scr@v@is@ge{3.36}% + \newcommand*{\scr@t@st@nd@w@rn@m@ks@ch@pt@rh@@d}[1]{% + \Ifstr{#1}{chapter}{% + \begingroup + \def\reserved@a{\scr@makeschapterhead{chapter}}% + \ifx\@makeschapterhead\reserved@a\else + \ClassWarningNoLine{\KOMAClassName}{% + Redefinition of \string\@makeschapterhead\space detected.\MessageBreak + Note: KOMA-Script does use styles for commands like\MessageBreak + \string\chapter. Currently it internally still provides and\MessageBreak + uses \string\@makeschapterhead, but a completely different\MessageBreak + definition compared to the standard classes.\MessageBreak + So redefining or using internal \string\@makeschapterhead\MessageBreak + by users or package authors may already break\MessageBreak + KOMA-Script and will not work with a coming version,\MessageBreak + that will remove this deprecated code}% + \let\scr@t@st@nd@w@rn@m@ks@ch@pt@rh@@d\@gobble + \fi + \endgroup + }{}% + } +\else + \let\scr@t@st@nd@w@rn@m@ks@ch@pt@rh@@d\@gobble +\fi +% \end{macrocode} +% \end{macro}^^A \scr@t@st@nd@w@rn@m@ks@ch@pt@rh@@d +% \end{macro}^^A \scr@@startschapter +% +%% \begin{macro}{\@at@twocolumntrue,\@at@twocolumnfalse,\if@at@twocolumn} +% \changes{v2.7b}{2001/01/05}{added} +% \begin{macro}{\scr@topnewpage} +% \changes{v2.7b}{2001/01/05}{added} +% \changes{v2.8q}{2001/11/27}{braces fixed} +% \begin{macro}{\@topnewpage} +% \changes{v2.7b}{2001/01/05}{added} +% \changes{v2.7g}{2001/04/17}{missing \cs{long} added} +% In the code above we use \cs{if@at@twocolumn} to detect, if we already +% inside the optional argument of \cs{twocolumn}. A clean definition of this +% feature would redefine \LaTeX{} command \cs{twocolumn}. Here we use the ugly +% hack to redefine the internal macro \cs{@topnewpage} of the \LaTeX{} kernel +% instead. This macro is used to print the optional argument. So we can add +% switching on and of the boolean switch before and after it. With this, +% packages can simply use chapter commands also inside the optional argument +% of \cs{twocolumn} instead of need to use an internal command like +% \cs{@makechapterhead}. +% \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{v2.7b}{2001/01/05}{support for chapter preamble} +% \changes{v2.8p}{2001/09/25}{support for different kinds of preambles} +% \changes{v3.15}{2014/12/10}{\cs{nobreak} removed} +% \changes{v3.18}{2015/05/22}{added} +% \begin{macro}{\scr@@makechapterhead} +% \changes{v3.18}{2015/05/22}{added} +% \changes{v2.8q}{2002/04/18}{\cs{raggedsection} also for the prefix} +% \changes{v2.9p}{2003/06/28}{setting \cs{parfillskip} to \cs{fill}} +% \changes{v2.96a}{2006/12/02}{distance after the prefix line only if prefix line} +% \changes{v2.97b}{2007/03/09}{\cs{endgraf} fixed} +% \changes{v3.15}{2014/11/20}{re-implementation} +% \changes{v3.15}{2014/12/09}{\cs{raggedchapter} replaced by \cs{raggedsection}} +% \changes{v3.17}{2015/04/03}{using \cs{usefontofkomafont} for initial font +% changed} +% Macros +% \begin{quote}\raggedright +% \cs{scr@makechapterhead}\marg{chapter command name}\marg{heading}\\ +% \cs{scr@@makechapterhead}\marg{chapter command name}\marg{heading} +% \end{quote} +% are used inside the definition of style \texttt{chapter} and replace +% \cs{@makechapterhead} resp. \cs{@@makechapterhead} there. So they have one +% more argument than \cs{@makechapterhead} of the standard classes. +% \begin{macrocode} +\newcommand*{\scr@makechapterhead}[2]{% + \use@chapter@o@preamble{#1}% + \@nameuse{@@make#1head}{#2}% + \use@preamble{#1@u}% +} +\newcommand*{\scr@@makechapterhead}[2]{% +% \end{macrocode} +% \changes{v3.22}{2016/12/21}{\cs{@afterindentrue} if \opt{beforeskip} is +% positive} +% \changes{v3.26}{2018/09/18}{using \opt{afterindent}} +% Depending on \opt{afterindent} we set \cs{if@afterindent} and set the +% initial vertical skip using \cs{@tempskipa} and \cs{chapterheadstartvskip}. +% \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} +% \changes{v3.19}{2015/08/02}{using \cs{chapterlinesformat} and +% \cs{chapterlineswithprefixformat}} +% \changes{v3.19}{2015/08/02}{using font element \fnt{disposition} instead of +% \cs{sectfont}} +% \changes{v3.19a}{2015/10/03}{missing local definition of \cs{IfUseNumber} +% added} +% \changes{v3.20}{2015/12/23}{setting \cs{parfillskip} to \texttt{\cs{z@} plus +% 1fil}} +% \changes{v3.27}{2019/02/02}{setting of \cs{parindent} and \cs{parfillskip} +% moved} +% \changes{v3.27}{2019/02/02}{\cs{ExecuteDoHook} added} +% \changes{v3.28}{2019/11/19}{\cs{ifnumbered} renamed to +% \cs{Ifnumbered}} +% For the heading itself a group is used. Using group braces instead of +% \cs{begingroup} makes it possible to do a very ugly hack inside a +% redefinition of \cs{chapterheadstartvskip}. Nevertheless, such hacks are not +% recommended. +% \begin{macrocode} + {% + \def\IfUseNumber{\Ifnumbered{#1}}% +%<book> \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} +% \changes{v3.26}{2018/09/20}{no absolute value} +% Last but not least the final skip. +% \begin{description} +% \item[Note:] \cs{@afterheading} will be added by \cs{scr@@startchapter}. +% \end{description} +% \begin{macrocode} + \@tempskipa=\glueexpr \csname scr@#1@afterskip\endcsname\relax\relax + \chapterheadendvskip +} +% \end{macrocode} +% \end{macro}^^A \scr@makechapterhead +% \end{macro}^^A \scr@@makechapterhead +% +% \begin{macro}{\scr@makeschapterhead} +% \changes{v3.18}{2015/05/22}{added} +% \begin{macro}{\scr@@makeschapterhead} +% \changes{v2.9p}{2003/06/28}{to \cs{parfillskip} to \cs{fill}} +% \changes{v2.9q}{2004/03/24}{same braces like \cs{@@makechapterhead}} +% \changes{v3.15}{2014/12/09}{\cs{raggedchapter} replaced by +% \cs{raggedsection}} +% \changes{v3.18}{2015/05/22}{added} +% \changes{v3.19}{2015/08/02}{same changes like \cs{scr@@makechapterhead}} +% \changes{v3.20}{2015/12/23}{setting \cs{parfillskip} to \texttt{\cs{z@} plus +% 1fil}} +% \changes{v3.25}{2017/09/07}{\cs{IfUseNumber} fixed} +% \changes{v3.26}{2018/09/20}{no absolute of \opt{afterskip}} +% Macros +% \begin{quote}\raggedright +% \cs{scr@makeschapterhead}\marg{chapter command name}\marg{heading}\\ +% \cs{scr@@makeschapterhead}\marg{chapter command name}\marg{heading} +% \end{quote} +% are used inside the definition of style \texttt{chapter} and replace +% \cs{@makeschapterhead} resp. \cs{@@makeschapterhead} there. So they have one +% more argument than \cs{@makeschapterhead} of the standard classes. +% \begin{macrocode} +\newcommand*{\scr@makeschapterhead}[2]{% + \use@chapter@o@preamble{#1}% + \@nameuse{@@makes#1head}{#2}% + \use@preamble{#1@u}% +} +\newcommand*{\scr@@makeschapterhead}[2]{% +% \end{macrocode} +% \changes{v3.22}{2016/12/21}{\cs{@afterindentrue} if positive +% \opt{beforeskip}} +% \changes{v3.26}{2018/09/18}{supporting \opt{afterindent}} +% This is a simplified version of \cs{scr@@makechapterhead}. +% \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 + {% + \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 +% \end{macro}^^A \scr@makeschapterhead +% +% \begin{command}{\chapterlinesformat,\chapterlineswithprefixformat} +% \changes{v3.19}{2015/08/02}{added} +% Commands +% \begin{quote}\raggedright +% \cs{chapterlinesformat}\marg{command name}\marg{number}\marg{text}\\ +% \cs{chapterlineswithprefixformat}\marg{command name}\marg{number}\marg{text} +% \end{quote} +% are used to print a chapter heading either a free standing one or a free +% stranding one with prefix line. \meta{number} is the completely formatted +% prefix line inclusive the vertical distance below. The \meta{text} is the +% text of the heading also formatted and with final \cs{@@par}. But if the +% user used more paragraphs than this is final one, the user is responsible to +% prevent page breaks! +% \begin{macrocode} +\newcommand{\chapterlinesformat}[3]{% + \@hangfrom{#2}{#3}% +} +\newcommand{\chapterlineswithprefixformat}[3]{% + #2#3% +} +% \end{macrocode} +% \end{command}^^A \chapterlinesformat,\chapterlineswithprefixformat +% +% \begin{macro}{\use@chapter@o@preamble} +% \changes{v3.15}{2014/12/08}{distances adapted} +% \changes{v3.15a}{2015/02/02}{avoiding \texttt{overfull \cs{vbox}}} +% \changes{v3.18}{2015/05/20}{using command depending distances and warnings} +% \changes{v3.18}{2015/05/22}{has an argument and prints the preamble of the +% command instead of the style} +% Used by \cs{scr@makechapterhead} and \cs{scr@makeschapterhead} to set the +% preamble above chapter headings. +% \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{command}{\addchaptertocentry} +% \changes{v3.08}{2010/11/01}{added} +% \changes{v3.12}{2013/09/24}{support for \cs{if@chaptertolists}} +% \changes{v3.12}{2013/09/24}{using\cs{addxcontentsline}} +% \changes{v3.28}{2019/11/19}{\cs{iftocfeature} replaced by +% \cs{Iftocfeature}} +% We do not use \cs{addcontentsline} directly for the entries to the table of +% contents. Using +% \begin{quote} +% \cs{addchaptertocentry}\marg{number}\marg{text} +% \end{quote} +% allows easy manipulation of such entries and additional actions. If the +% \meta{number} is completely empty no number should be used. Internally the +% generic \cs{addtocentrydefault} it used, which uses \cs{nonumberline} +% instead of \cs{numberline} in this case. See \file{scrkernel-listsof.dtx} +% for more information. +% \begin{description} +% \item[ToDo:] Here we also do the entries to other directories. But we have +% also code for this in \cs{scr@@startchapter} at least for the vertical +% space. Shouldn't we combine both places to one place? And shouldn't this +% be done here only, because of handling of user calls of +% \cs{addchaptertocentry}? +% \end{description} +% \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{command}^^A \addchaptertocentry +% +% \begin{macro}{\@chapter,\@makechapterhead,\@@makechapterhead, +% \@schapter,\@makeschapterhead,\@@makeschapterhead} +% \changes{v3.18}{2015/05/22}{indirect by \cs{DeclareSectionCommand}} +% \begin{command}{\setchapterpreamble} +% \changes{v2.7b}{2001/01/05}{added} +% \changes{v3.18}{2015/05/22}{indirect by \cs{DeclareSectionCommand}} +% \begin{macro}{\chapter@u@preamble,\chapter@o@preamble} +% \changes{v2.8p}{2001/09/25}{added} +% \changes{v3.18}{2015/05/22}{indirect by \cs{DeclareSectionCommand}} +% All these commands and macros are not defined explicitly but by using +% \cs{DeclareSectionCommand} later. See also +% \cs{scr@dsc@def@style@chapter@command} and \cs{setchapterpreamble}. +% \end{macro}^^A \chapter@u@preamble,\chapter@o@preamble +% \end{command}^^A \setchapterpreamble +% \end{macro}^^A \@chapter … \@@makeschapterhead +% +% \begin{command}{\addchap} +% \changes{v2.0e}{1994/08/10}{\cs{sectdef} replaced by h \cs{secdef}} +% \changes{v2.0e}{1994/08/10}{\cs{addcontensline} replaced by +% \cs{addcontentsline}} +% \changes{v2.0e}{1994/08/10}{\cs{@makechapterhead} replaced by +% \cs{@makeschapterhead}} +% \changes{v2.0e}{1994/08/10}{\cs{afterheadings} replaced by +% \cs{@afterheading}} +% \changes{v2.1a}{1994/10/29}{argument of \cs{chaptermark} removed from +% \cls*{scrbook}} +% \changes{v2.0e}{1994/10/12}{several \cs{markboth} replaced by +% \cs{sectionmark}} +% \changes{v2.2b}{1995/03/20}{several \cs{chaptermark} replaced by +% \cs{@mkboth}} +% \changes{v2.8d}{2001/07/05}{using \cs{chapterpagestyle}} +% \changes{v3.08}{2010/11/01}{using \cs{addchaptertocentry}} +% \changes{v3.10}{2011/08/30}{extended optional argument} +% \changes{v3.13a}{2014/09/11}{using \cs{SecDef}} +% \changes{v3.18}{2015/05/22}{redefinition} +% \begin{macro}{\@addchap} +% \changes{v3.12}{2013/02/26}{using \cs{addchapmark}} +% \changes{v3.17}{2015/04/20}{expanding \cs{scr@ds@head} in \cs{addchapmark}} +% \changes{v3.18}{2015/05/22}{redefinition} +% \begin{macro}{\@saddchap} +% \changes{v3.12}{2013/02/26}{using \cs{addchapmark}} +% \changes{v3.18}{2015/05/22}{redefinition} +% Since \KOMAScript{} 3.18 using +% \begin{quote} +% \cs{addchap}\oarg{head or ToC entry}\marg{heading} +% \end{quote} +% is very similar to +% |\chapter[nonumber=true,…]{…}| but also works if the extended optional +% argument is not activated. And +% \begin{quote} +% \cs{addchap*}\marg{heading} +% \end{quote} +% is just a \cs{chapter*}\marg{heading} with additional |\addchapmark{}| to +% empty the running head. +% \begin{description} +% \item[Note:] Because of simply manipulating \cnt{secnumdepth} this should +% also work with packages like \pkg{hyperref} as long as they support +% chapters without numbering. +% \end{description} +% \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} +% \changes{v2.7e}{2001/04/16}{braces fixed} +% \changes{v2.7f}{2001/04/17}{braces fixed} +% \changes{v2.8q}{2001/11/17}{using \cs{AfterPackage} to test for +% \pkg{hyperref} version} +% \changes{v3.27a}{2019/11/11}{warning fixed} +% \begin{description} +% \item[ToDo:] Unfortunately \pkg{hyperref} until version 6.71a has a big fat +% bug. It redefines the internal \KOMAScript{} macro \cs{@addchap} without +% testing the definition. From version 6.71b this is done only, if a very +% old \KOMAScript{} is used. However, I would prefer removing all such code +% from \pkg{hyperref}. Currently we warn, if such an old \pkg{hyperref} is +% used. But this will be removed in future. +% \end{description} +% \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% + }% + }% +} +%</book> +%</body> +% \end{macrocode} +% \end{macro}^^A \@saddchap +% \end{macro}^^A \@addchap +% \end{command}^^A \addchap +% +% +% \begin{macro}{\l@chapter} +% \changes{v2.9k}{2003/01/02}{supporting option \opt{tocleft}} +% \changes{v2.96b}{2006/11/30}{prevent page break between chapter entry and +% parent} +% \changes{v2.96b}{2006/11/30}{prevent page break between chapter entry and +% child} +% \changes{v2.97c}{2007/06/21}{\cs{sectfont} replaced by font element +% \fnt{chapterentry}} +% \changes{v2.97c}{2007/06/21}{using font element +% \fnt{chapterentrypagenumber}} +% \changes{v2.97c}{2007/06/21}{re-implemented to support left aligned entries} +% \changes{v3.15}{2014/12/22}{using \cs{chaptertocdepth} and +% \cs{scr@chapter@tocnumwidth}} +% \changes{v3.15}{2014/12/10}{initial skip with \cs{addvspace} instead of +% \cs{vskip}} +% \changes{v3.20}{2015/10/06}{re-implemented using ToC styles} +% \begin{macro}{\scr@chapter@tocindent} +% \changes{v3.15}{2014/12/02}{added} +% \changes{v3.18}{2015/05/20}{indirect definition by \cs{DeclareSectionCommand}} +% \changes{v3.20}{2015/11/06}{really used} +% \end{macro}^^A \scr@chapter@tocindent +% \begin{macro}{\scr@chapter@tocnumwidth} +% \changes{v3.15}{2014/12/02}{added} +% \changes{v3.18}{2015/05/20}{indirect definition by \cs{DeclareSectionCommand}} +% \end{macro} +% \begin{option}{chapterentrydots} +% \changes{v3.15}{2014/12/10}{added} +% Option +% \begin{quote} +% \opt{chapterentrydots=\meta{boolean}} +% \end{quote} +% is the main difference of ToC entry style \texttt{chapter} to ToC entry +% style \texttt{tocline}. It activates the dots between the entry text and the +% page number. +% \begin{description} +% \item[ToDo:] This should be moved to \file{scrkernel-tocstyle.dtx}. +% \end{description} +% \begin{macrocode} +%<*option> +\KOMA@ifkey{chapterentrydots}{@chapterentrywithdots} +%</option> +% \end{macrocode} +% \end{option}^^A chapterentrydots +% \begin{command}{\raggedchapterentry} +% \changes{v2.97c}{2007/06/21}{added} +% \changes{v3.20}{2016/02/23}{removed} +% \changes{v3.21}{2016/06/06}{see \file{scrkernel-tocstyle.dtx}, +% style \texttt{tocline}, option \opt{raggedentrytext}} +% The initial setting of option \opt{raggedtext} of chapter ToC entry style +% \texttt{tocline} resp. \texttt{chapter}. +% \begin{description} +% \item[ToDo:] Do we really need this definition? Every definition but +% \cs{raggedright} results in justified text. So not defining it would be +% almost the same. It just would not reserve the macro. But this could be +% done in \file{scrkernel-tocstyle.dtx}. +% \end{description} +% \begin{macrocode} +%<*body> +\newcommand*{\raggedchapterentry}{} +% \end{macrocode} +% \end{command}^^A \raggedchapterentry +% \end{macro}^^A \l@chapter +% +% \begin{macro}{\l@chapteratlist} +% \changes{v2.96a}{2006/12/03}{added} +% This is used for chapter entries to other directories by the table of +% contents. By default it uses \cs{l@chapter}. But users can redefine it +% using, i.e., \cs{DeclareTOCStyleEntry}. However in this case they have to +% setup all the attributes/options on their own. +% \begin{macrocode} +\newcommand*{\l@chapteratlist}{\l@chapter} +% \end{macrocode} +% \end{macro}^^A \l@chapteratlist +% +% \begin{counter}{chapter} +% \begin{command}{\thechapter} +% \begin{command}{\chapterformat} +% \changes{v2.3c}{1995/08/06}{auto dot feature} +% \changes{v2.7}{2000/01/03}{white space replaced by \cs{enskip}} +% \changes{v2.8}{2001/06/15}{\cs{chapappifprefix} added} +% \changes{v2.8o}{2001/09/19}{\cs{chapappifprefix} replaced by +% \cs{chapappifchapterprefix}} +% \changes{v2.96a}{2006/12/02}{\cs{mbox} added} +% \changes{v3.17}{2015/03/08}{\cs{enskip} not in prefix line mode} +% \begin{command}{\chaptermarkformat} +% \changes{v2.3a}{1995/07/08}{space after chapter number increased} +% \changes{v2.3c}{1995/08/06}{auto dot feature} +% \changes{v2.8}{2001/06/15}{\cs{chapappifprefix} added} +% \changes{v2.8o}{2001/09/19}{\cs{chapappifprefix} replaced by +% \cs{chapappifchapterprefix}} +% \changes{v3.03a}{2009/04/03}{tilde replaced by \cs{nobreakspace} for better +% \pkg{babel-spanish} support} +% The counter would also be defined by \cs{DeclareSectionCommand}. But because +% of handling \cs{frontmatter} and \cs{backmatter} and prefix lines we cannot +% use the default definition of the formatting. So we define it already before +% calling \cs{DeclareSectionCommand} for \cs{chapter}. +% \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{command}^^A \chaptermarkformat +% \end{command}^^A \chapterformat +% \end{command}^^A \thechapter +% \end{counter}^^A chapter +% +% +% \begin{command}{\chaptername} +% \changes{v3.36}{2022/03/15}{explicit definition for English languages} +% The name of a chapter, e.g., used for the prefix line and maybe for the ToC +% entry. +% \begin{macrocode} +\newcommand*\chaptername{Chapter} +\providecaptionname{american,australian,british,canadian,english,newzealand,% + UKenglish,ukenglish,USenglish,usenglish}\chaptername{Chapter} +% \end{macrocode} +% \end{command}^^A \chaptername +% +% +% \begin{command}{\appendixname} +% \changes{v3.36}{2022/03/15}{explicit definition for English languages} +% The same for appendix chapters. +% \begin{macrocode} +\newcommand*\appendixname{Appendix} +\providecaptionname{american,australian,british,canadian,english,newzealand,% + UKenglish,ukenglish,USenglish,usenglish}\appendixname{Appendix} +% \end{macrocode} +% \end{command}^^A \appendixname +% +% +% \begin{command}{\chapappifprefix} +% \changes{v2.8}{2001/06/15}{added} +% \changes{v2.8o}{2001/09/19}{deprecated} +% \changes{v3.36}{2022/03/18}{removed} +% \begin{description} +% \item[Note:] Command \cs{chapappifprefix} has been removed in \KOMAScript{} +% v3.36, because it is deprecated from \KOMAScript{} v2.8o and there never has +% been a compatibility switch for versions before \KOMAScript{} v2.9. +% \end{description} +% \end{command}^^A \chapappifprefix +% +% +% \begin{command}{\chapappifchapterprefix} +% \changes{v2.8o}{2001/09/19}{added} +% \changes{v3.18}{2015/06/09}{using \cs{IfChapterUsePrefixLine}} +% \begin{command}{\IfChapterUsesPrefixLine} +% \changes{v3.18}{2015/06/09}{added} +% \begin{command}{\chapapp} +% \changes{v2.8}{2001/06/15}{added} +% \begin{macro}{\@chapapp} +% The \LaTeX{} standard classes provide an internal macro \cs{@chapapp} that +% is either \cs{chaptername} or \cs{appendixname} depending on whether we are +% inside or outside the appendix. For compatibility with lots of packages +% \KOMAScript{} does provide this too. But for the user level this is +% cumbersome. So \KOMAScript{} does also provide a \emph{read only specified} +% user command \cs{chapapp}. \KOMAScript{} itself uses \cs{chapapp} inside +% \begin{quote} +% \cs{chapappifchapterprefix}\marg{then string} +% \end{quote} +% that outputs \cs{then string} prefixed by \cs{chapapp} only, if +% \opt{chapterprefix} (resp. \opt{headings=twolinechapter}) has been activated +% and therefore a chapter prefix line has to be used. A more general version +% \cs{chapterifchapterprefix} is +% \begin{quote} +% \cs{IfChapterUsesPrefixLine}\marg{then code}\marg{else code} +% \end{quote} +% that executes \cs{then code} if a chapter prefix line has to be used and +% \cs{else code} otherwise (both without extra prefix). +% \begin{macrocode} +\newcommand*{\chapappifchapterprefix}[1]{% + \IfChapterUsesPrefixLine{\chapapp#1}{}% +} +\newcommand*{\IfChapterUsesPrefixLine}{% + \if@chapterprefix\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi +} +\newcommand*{\chapapp}{\@chapapp} +\newcommand*\@chapapp{\chaptername} +% \end{macrocode} +% \end{macro}^^A \@chapapp +% \end{command}^^A \chapapp +% \end{command}^^A \IfChapterUsePrefixLine +% \end{command}^^A \chapappifchapterprefix +% +% +% \begin{command}{\chaptermark} +% Before selecting a page style with automatic running head, \cs{chapter} +% should simply not change the left or right mark. +% \begin{description} +% \item[ToDo:] Do we really need this or would the later +% \cs{DeclareSectionCommand} be enough to do the initial definition? +% \end{description} +% \begin{macrocode} +\newcommand*\chaptermark[1]{} +% \end{macrocode} +% \end{command} +% +% \begin{command}{\addchapmark} +% \changes{v3.12}{2013/03/26}{added} +% \cs{addchap} and marks for running heads are a little bit more +% complicated. Currently we are using a local redefinition of +% \cs{if@mainmatter} and setting of \cnt{secnumdept} to switch of numbering +% and then using \cs{chaptermark}. So the \cs{chaptermark} definition should +% always respect at least one of these settings. +% \begin{description} +% \item[Note:] The ToDo note at \cs{chaptermark} is not relevant for this +% definition. +% \end{description} +% \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{command}^^A \addchapmark +% +% +% \begin{command}{\raggedchapter} +% \changes{v3.15}{2014/12/09}{added} +% Style \texttt{chapter} does not use \cs{raggedsection} but +% \cs{raggedchapter}. However, the initial value is \cs{raggedsection}, so a +% change of \cs{raggedsection} would also change the initial behave of +% \cs{raggedchapter}. Nevertheless the alignment of chapters in independent +% from the alignment of sections, if wanted. +% \begin{macrocode} +\newcommand*{\raggedchapter}{\raggedsection} +% \end{macrocode} +% \end{command} +% +% +% \begin{fontelement}{chapterentry} +% \changes{v2.97c}{2007/06/21}{added} +% \changes{v3.06}{2010/06/09}{font element \fnt{sectioning} replaced by +% \fnt{disposition}} +% \cs{chapter} entries to the table of contents initially using +% \fnt{disposition}, the basic font of all outlines. +% \begin{macrocode} +\newkomafont{chapterentry}{\usekomafont{disposition}} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{chapterentrypagenumber} +% \changes{v2.97c}{2007/06/21}{added} +% The page number of \cs{chapter} entries to the table of contents is +% initially the same as the entry at whole. +% \begin{macrocode} +\newkomafont{chapterentrypagenumber}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{chapterentrydots} +% \changes{v3.15}{2014/12/10}{added} +% \changes{v3.27}{2019/10/28}{\cs{normalfont} removed} +% If the optional dots for \cs{chapter} entries to the table of contents are +% used, we can change the font of the dots also. It is used for the +% \texttt{linefill} of \pkg*{tocbasic} ToC entry style \texttt{chapter}, that +% uses ToC entry style \texttt{tocline} where the line filler is always +% prefixed by \cs{normalfont}\cs{normalsize}. So the setting is relative to +% this. The color is relative to the color of \fnt{chapterentry}. +% \begin{macrocode} +\newkomafont{chapterentrydots}{} +%</body> +%</book|report> +% \end{macrocode} +% \end{fontelement} +% +% +% \subsection{Section, subsections and more} +% +% The outline levels of sections, subsections, subsubsection, paragraphs and +% subparagraphs are all very similar. There are only some special treatments +% of sections with \cls*{scrartcl}, because there \cs{section} is a high-level +% command. +% +% \begin{fontelement}{section,subsection,subsubsection, +% paragraph,subparagraph} +% \changes{v2.8o}{2001/09/14}{added} +% Definition of the font elements used by \cs{section}, \cs{subsection}, +% \cs{subsubsection}, \cs{paragraph} and \cs{subparagraph}. The settings are +% done by option \texttt{headings} later. Everything is prepared before this +% option is used the first time. The definition of the font element is done +% manually to stay compatible with old \KOMAScript{} versions using another +% internal macro than the default of \cs{newkomafont}. +% \begin{macrocode} +%<*prepare> +\newcommand*{\size@section}{} +\newcommand*{\scr@fnt@section}{\size@section} +\newcommand*{\size@subsection}{} +\newcommand*{\scr@fnt@subsection}{\size@subsection} +\newcommand*{\size@subsubsection}{} +\newcommand*{\scr@fnt@subsubsection}{\size@subsubsection} +\newcommand*{\size@paragraph}{} +\newcommand*{\scr@fnt@paragraph}{\size@paragraph} +\newcommand*{\size@subparagraph}{} +\newcommand*{\scr@fnt@subparagraph}{\size@subparagraph} +%</prepare> +% \end{macrocode} +% \end{fontelement}^^A section … subparagraph +% +% +% \begin{macro}{\l@section} +% \changes{v2.9k}{2003/01/02}{supporting option \opt{tocleft}} +% \changes{v2.96b}{2006/11/30}{preventing page break between section entry and +% parent} +% \changes{v2.96b}{2006/11/30}{preventing page break between section entry and +% child} +% \changes{v2.97c}{2007/06/21}{\cs{sectfont} replaced by font element +% \fnt{sectionentry}} +% \changes{v2.97c}{2007/06/21}{using font element +% \fnt{sectionentrypagenumber}} +% \changes{v2.97c}{2007/06/21}{re-implemented to support left aligned entries} +% \changes{v3.15}{2014/11/24}{using \cs{sectiontocdepth}, +% \cs{scr@section@tocindent} and \cs{scr@section@tocnumwidth}} +% \changes{v3.20}{2015/10/06}{re-implemented using ToC styles} +% \begin{option}{sectionentrydots} +% \changes{v3.15}{2014/12/10}{added} +% With \cls*{scrartcl} option +% \begin{quote} +% \opt{sectionentrydots=\meta{boolean}} +% \end{quote} +% is the main difference of ToC entry style \texttt{section} to ToC entry +% style \texttt{tocline}. It activates the dots between the entry text and the +% page number. +% \begin{description} +% \item[ToDo:] This should be moved to \file{scrkernel-tocstyle.dtx}. +% \end{description} +% \begin{macrocode} +%<*article> +%<*option> +\KOMA@ifkey{sectionentrydots}{@sectionentrywithdots} +%</option> +% \end{macrocode} +% \end{option}^^A sectionentrydots +% \begin{command}{\raggedsectionentry} +% \changes{v2.97c}{2007/06/21}{added} +% \changes{v3.20}{2016/02/23}{removed} +% The initial setting of option \opt{raggedtext} of section ToC entry style +% \texttt{tocline} resp. \texttt{section}. +% \begin{description} +% \item[ToDo:] Do we really need this definition? Every definition but +% \cs{raggedright} results in justified text. So not defining it would be +% almost the same. It just would not reserve the macro. But this could be +% done in \file{scrkernel-tocstyle.dtx}. +% \end{description} +% \begin{macrocode} +%<*body> +\newcommand*{\raggedsectionentry}{} +%</body> +%</article> +% \end{macrocode} +% \end{command}^^A \raggedsectionentry +% \end{macro}^^A \l@section +% +% +% \begin{command}{\addsec} +% \changes{v2.0e}{1994/10/12}{several \cs{markboth} replaced by +% \cs{sectionmark}} +% \changes{v2.2b}{1995/03/20}{\cs{sectionmark} replaced by \cs{@mkboth}} +% \changes{v2.3h}{1995/01/21}{also available with \cls*{scrbook} and +% \cls*{scrreprt}} +% \changes{v2.4g}{1996/11/04}{\cs{section*} moved because of page breaks in +% the table of contents} +% \changes{v2.5d}{1998/01/03}{\cs{@mkboth} replaced by conditional +% \cs{markright}} +% \changes{v2.7a}{2001/01/04}{supporting \pkg{hyperref}} +% \changes{v3.13a}{2014/09/11}{using \cs{SecDef}} +% \begin{macro}{\@addsec} +% \changes{v3.10}{2011/08/30}{using \cs{addsectiontocentry}} +% \changes{v3.10}{2011/08/30}{extended optional argument} +% \changes{v3.12}{2013/02/26}{using \cs{addsecmark}} +% \changes{v3.18}{2015/05/22}{redefinition} +% \begin{macro}{\@saddsec} +% \changes{v3.12}{2013/02/26}{using \cs{addsecmark}} +% \changes{v3.17}{2015/04/20}{expanding \cs{scr@ds@head} in \cs{addsecmark}} +% Since \KOMAScript{} 3.18 using +% \begin{quote} +% \cs{addsec}\oarg{head or ToC entry}\marg{heading} +% \end{quote} +% is very similar to +% |\section[nonumber=true,…]{…}| but also works if the extended optional +% argument is not activated. And +% \begin{quote} +% \cs{addsec*}\marg{heading} +% \end{quote} +% is just a \cs{section*}\marg{heading} with additional |\addsecmark{}| to +% empty the running head. +% \begin{description} +% \item[Note:] Because of simply manipulating \cnt{secnumdepth} this should +% also work with packages like \pkg{hyperref} as long as they support +% sections without numbering. +% \end{description} +% \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{command}^^A \addsec +% +% +% \begin{command}{\minisec} +% \changes{v2.8q}{2002/02/28}{\cs{nobreak} after \cs{sectfont} added} +% \changes{v2.9o}{2003/01/31}{\cs{nobreak} after group end} +% \changes{v2.96a}{2006/11/30}{initial value of \cs{parfillskip} depending on +% \opt{version}} +% \changes{v2.96a}{2006/12/03}{not needed \cs{nobreak} removed} +% \changes{v3.13a}{2014/08/07}{handling of distances of immediate following +% headings like \cs{@startsection}} +% \changes{v3.26}{2018/05/14}{missing \cs{interlinepenalty}\cs{@M} added} +% \begin{fontelement}{minisec} +% \changes{v2.8o}{2001/09/14}{using font element \fnt{minisec}} +% \changes{v3.21}{2016/06/12}{missing \cs{nobreak} added} +% \cs{minisec} is a very special additional outline of \KOMAScript. It is +% always free standing but without numbering. Something like +% \cs{sectionlinesformat} is not supported currently. Also entries to the +% table of contents or marks for an automatic running head are not +% supported. However a dedicated font element is provided. +% \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{fontelement}^^A minisec +% \end{command}^^A \minisec +% +% +% \begin{command}{\addsectiontocentry,\addsubsectiontocentry, +% \addsubsubsectiontocentry, +% \addparagraphtocentry,\addsubparagraphtocentry} +% \changes{v3.10}{2011/08/30}{added} +% We do not use \cs{addcontentsline} directly for the entries to the table of +% contents. Using +% \begin{quote}\raggedright +% \cs{addsectiontocentry}\marg{number}\marg{text}\\ +% \cs{addsubsectiontocentry}\marg{number}\marg{text}\\ +% \cs{addsubsubsectiontocentry}\marg{number}\marg{text}\\ +% \cs{addparagraphtocentry}\marg{number}\marg{text}\\ +% \cs{addsubparagraphtocentry}\marg{number}\marg{text}\\ +% \end{quote} +% allows easy manipulation of such entries and additional actions. If the +% \meta{number} is completely empty no number should be used. Internally the +% generic \cs{addtocentrydefault} it used, which uses \cs{nonumberline} +% instead of \cs{numberline} in this case. See \file{scrkernel-listsof.dtx} +% for more information. +% \begin{description} +% \item[ToDo:] Should this be moved to \file{scrkernel-listsof.dtx} or even to +% \file{scrkernel-tocstyle.dtx}? +% \item[ToDo:] Are these really needed or would the implicit definition by the +% later \cs{DeclareSectionCommand} be enough as it is already used for +% \cs{addsubsubsectiontocentry}? +% \end{description} +% \begin{macrocode} +\newcommand*{\addsectiontocentry}[2]{% + \addtocentrydefault{section}{#1}{#2}% +} +\newcommand*{\addsubsectiontocentry}[2]{% + \addtocentrydefault{subsection}{#1}{#2}% +} +\newcommand*{\addparagraphtocentry}[2]{% + \addtocentrydefault{paragraph}{#1}{#2}% +} +\newcommand*{\addsubparagraphtocentry}[2]{% + \addtocentrydefault{subparagraph}{#1}{#2}% +} +% \end{macrocode} +% \end{command} +% +% +% \begin{counter}{section} +% \begin{command}{\thesection} +% \changes{v2.97e}{2007/11/23}{chapter number prefix only in main matter} +% \changes{v3.03b}{2009/06/09}{\cs{relax} replaced by white space for better +% support of \pkg{hyperref}} +% \changes{v3.27}{2019/06/26}{using \cs{scr@v@is@gt}} +% \begin{command}{\sectionmarkformat} +% \changes{v2.3a}{1995/07/08}{space after number increased} +% \changes{v2.3c}{1995/08/06}{auto dot feature} +% \begin{counter}{subsection} +% \begin{command}{\thesubsection} +% \begin{command}{\subsectionmarkformat} +% \changes{v2.3a}{1995/07/08}{space after number increased} +% \changes{v2.3c}{1995/08/06}{auto dot feature} +% \begin{counter}{subsubsection} +% \begin{command}{\thesubsubsection} +% \begin{counter}{paragraph} +% \begin{command}{\theparagraph} +% \begin{counter}{subparagraph} +% \begin{command}{\thesubparagraph} +% The counter would also be defined by \cs{DeclareSectionCommand}. But because +% of handling \cs{frontmatter} and \cs{backmatter} and prefix lines we cannot +% use the default definition of the formatting of \cnt{section}. So we define +% it already before calling \cs{DeclareSectionCommand} for \cs{section}. +% \begin{description} +% \item[ToDo:] Do we really need the explicit definition of \cnt{subsection}, +% \cnt{subsubsection}, \cnt{paragraph}, and \cnt{subparagraph} of would the +% implicit definition by \cs{DeclareSectionCommand} be enough for these. +% \end{description} +% \begin{macrocode} +%<*book|report> +\newcounter{section}[chapter] +\renewcommand*\thesection{% +%<*book> + \expandafter\ifnum\scr@v@is@gt{2.97d}% + \if@mainmatter\thechapter.\fi + \else +%</book> + \thechapter.% +%<book> \fi + \@arabic\c@section +} +%</book|report> +%<*article> +\newcounter{section} +\renewcommand*{\thesection}{\@arabic\c@section} +%</article> +\newcommand*\sectionmarkformat{\thesection\autodot\enskip} +\newcounter{subsection}[section] +\renewcommand*{\thesubsection}{\thesection.\@arabic\c@subsection} +%<*article> +\newcommand*\subsectionmarkformat{\thesubsection\autodot\enskip} +%</article> +\newcounter{subsubsection}[subsection] +\renewcommand*{\thesubsubsection}{% + \thesubsection.\@arabic\c@subsubsection +} +\newcounter{paragraph}[subsubsection] +\renewcommand*{\theparagraph}{\thesubsubsection.\@arabic\c@paragraph} +\newcounter{subparagraph}[paragraph] +\renewcommand*{\thesubparagraph}{% + \theparagraph.\@arabic\c@subparagraph +} +% \end{macrocode} +% \begin{macro}{\@seccntformat} +% \changes{v2.3c}{1995/08/06}{CJK support extended} +% \changes{v2.9p}{2004/01/07}{\cs{protect} added} +% \changes{v2.97}{2007/01/24}{workaround for the ugly \cs{protect}} +% \changes{v3.17}{2015/02/23}{using \cs{\dots format} if exists} +% \changes{v3.17}{2015/03/31}{using \cs{protect} for \cs{\dots format}} +% \begin{command}{\othersectionlevelsformat} +% \changes{v2.7}{2000/01/03}{added} +% \changes{v2.7}{2000/01/03}{\cs{quad} replaced by \cs{enskip}} +% \changes{v2.7i}{2001/05/17}{\cs{let} replaced by \cs{def}} +% \changes{v2.97}{2007/01/24}{three arguments instead of only one} +% With \KOMAScript~2 \cs{othersectionlevelsformat} has had only one argument, +% the \cs{…format} command of the level. But with there has been expansion +% issues. So we have had to change the definition to +% \begin{quote} +% \cs{othersectionlevelsformat}\marg{level name}\marg{ignore +% command}\marg{the command} +% \end{quote} +% Users who use or redefine \cs{othersectionlevelsformat} should always ignore +% the \meta{ignore command}. It is used to internally handle deprecated +% definitions of \cs{othersectionlevelsformat} with only one +% argument. \meta{level name} is the name of the level command, e.g., +% |subsubsection|. \meta{the command} is the \cs{the…} command corresponding +% with \marg{level name}. See the definition of \cs{@seccntformat} for more +% information about the internal usage of \cs{othersectionlevelsformat}. +% \begin{description} +% \item[ToDo:] Can we somehow change this for \KOMAScript~4 to no longer +% support the second argument (unless a low compatibility level is used)? +% \end{description} +% \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{command}^^A \othersectonlevelsformat +% \end{macro}^^A \@seccntformat +% \end{command}^^A \thesubparagraph +% \end{counter}^^A subparagraph +% \end{command}^^A \theparagraph +% \end{counter}^^A paragraph +% \end{command}^^A \thesubsubsection +% \end{counter}^^A subsubsection +% \end{command}^^A \subsectionformat +% \end{command}^^A \thesubsection +% \end{counter}^^A subsection +% \end{command}^^A \sectionformat +% \end{command}^^A \thesection +% \end{counter}^^A section +% +% +% \begin{command}{\addsecmark} +% \changes{v3.12}{2013/03/26}{added} +% \cs{addsec} and marks for running heads are a little bit +% complicated. Currently we are using a local setting of \cnt{secnumdept} to +% switch of numbering and then using \cs{sectionmark}. So the \cs{sectionmark} +% definition should always respect \cnt{secnumdepth}. +% \begin{macrocode} +\newcommand*\addsecmark[1]{% + \begingroup + \c@secnumdepth=\numexpr \sectionnumdepth-1\relax + \sectionmark{#1}% + \endgroup +} +% \end{macrocode} +% \end{command}^^A \addsecmark +% +% +% \begin{fontelement}{sectionentry} +% \changes{v2.97c}{2007/06/21}{added} +% \changes{v3.06}{2010/06/09}{font element \fnt{sectioning} replaced by +% \fnt{disposition}} +% With \cls*{scrartcl} \cs{section} entries to the table of contents initially +% using \fnt{disposition}, the basic font of all outlines. +% \begin{macrocode} +%<*article> +\newkomafont{sectionentry}{\usekomafont{disposition}} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{sectionentrypagenumber} +% \changes{v2.97c}{2007/06/21}{added} +% The page number of \cs{section} entries to the table of contents is +% initially the same as the entry at whole with \cls*{scrartcl}. +% \begin{macrocode} +\newkomafont{sectionentrypagenumber}{} +% \end{macrocode} +% \end{fontelement} +% +% \begin{fontelement}{sectionentrydots} +% \changes{v3.15}{2014/12/10}{added} +% \changes{v3.27}{2019/10/28}{\cs{normalfont} removed} +% If the optional dots for \cs{section} entries to the table of contents are +% used, we can change the font of the dots also. It is used for the +% \texttt{linefill} of \pkg*{tocbasic} ToC entry style \texttt{section}, that +% uses ToC entry style \texttt{tocline} where the line filler is always +% prefixed by \cs{normalfont}\cs{normalsize}. So the setting is relative to +% this. The color is relative to the color of \fnt{sectionentry}. +% \begin{macrocode} +\newkomafont{sectionentrydots}{} +%</article> +% \end{macrocode} +% \end{fontelement} +% +% +% \begin{command}{\partnumdepth,\chapternumdepth, +% \sectionnumdepth,\subsectionnumdepth,\subsubsectionnumdepth, +% \paragraphnumdepth,\subparagraphnumdepth, +% \parttocdepth,\chaptertocdepth +% \sectiontocdepth,\subsectiontocdepth,\subsubsectiontocdepth, +% \paragraphtocdepth,\subparagraphtocdepth} +% \changes{v3.12}{2013/12/16}{added} +% \changes{v3.15}{2014/12/09}{indirect definition by +% \cs{DeclareSectionCommand}} +% The section numbering levels, to be compared with counter +% \cnt{secnumdepth}, and the table of contents entry levels, to be compared +% with counter \cs{tocdepth}, of all outline commands defined by the +% \KOMAScript{} classes. +% \begin{description} +% \item[Note:] These are specified to be \emph{read only}. They are defined by +% \cs{DeclareSectionCommand}. +% \end{description} +% \end{command}^^A \partnumdepth … \subparagraphtocdepth +% +% \begin{command}{\part} +% \changes{v3.18}{2015/05/25}{indirect definition by \cs{DeclareSectionCommand}} +% \changes{v3.26}{2018/06/27}{definition moved behind \cs{section} because of +% bookmark level workaround} +% \begin{command}{\chapter} +% \changes{v2.8d}{2001/07/05}{using \cs{chapterpagestyle}} +% \changes{v3.18}{2015/05/20}{indirect definition by \cs{DeclareSectionCommand}} +% \begin{command}{\section} +% \changes{v2.8p}{2001/09/22}{\cs{sectfont} before \cs{size@section}} +% \changes{v2.8q}{2002/02/28}{\cs{nobreak} after \cs{sectfont} added} +% \changes{v2.96a}{2006/11/30}{initial value of \cs{parfillskip} depending on +% option \opt{version}} +% \changes{v2.96a}{2006/12/03}{not needed \cs{nobreak} removed} +% \changes{v3.13a}{2014/09/11}{using \cs{scr@startsection}} +% \changes{v3.15}{2014/11/24}{indirect definition by \cs{DeclareSectionCommand}} +% \begin{command}{\subsection} +% \changes{v2.8p}{2001/09/22}{\cs{sectfont} before \cs{size@subsection}} +% \changes{v2.8q}{2002/02/28}{\cs{nobreak} after \cs{sectfont} added} +% \changes{v2.96a}{2006/11/30}{initial value of \cs{parfillskip} depending on +% option \opt{version}} +% \changes{v2.96a}{2006/12/03}{not needed \cs{nobreak} removed} +% \changes{v3.13a}{2014/09/11}{using \cs{scr@startsection}} +% \changes{v3.15}{2014/11/24}{indirect definition by \cs{DeclareSectionCommand}} +% \begin{command}{\subsubsection} +% \changes{v2.3d}{1995/08/19}{with \cls*{scrartcl} also numbered and added to +% ToC} +% \changes{v2.8p}{2001/09/22}{\cs{sectfont} added before +% \cs{size@subsubsection}} +% \changes{v2.8q}{2002/02/28}{\cs{nobreak} added after \cs{sectfont}} +% \changes{v2.96a}{2006/11/30}{initial value of \cs{parfillskip} depending on +% option \opt{version}} +% \changes{v2.96a}{2006/12/03}{not needed \cs{nobreak} removed} +% \changes{v3.13a}{2014/09/11}{using \cs{scr@startsection}} +% \changes{v3.15}{2014/11/24}{indirect definition by \cs{DeclareSectionCommand}} +% \begin{command}{\paragraph} +% \changes{v2.8p}{2001/09/22}{\cs{sectfont} added before +% \cs{size@paragraph}} +% \changes{v2.8q}{2002/02/28}{\cs{nobreak} added after \cs{sectfont}} +% \changes{v2.96a}{2006/12/03}{not needed \cs{nobreak} removed} +% \changes{v3.15}{2014/11/24}{indirect definition by \cs{DeclareSectionCommand}} +% \begin{command}{\subparagraph} +% \changes{v2.8p}{2001/09/22}{\cs{sectfont} added before +% \cs{size@subparagraph}} +% \changes{v2.8q}{2002/02/28}{\cs{nobreak} added after \cs{sectfont}} +% \changes{v2.96a}{2006/12/03}{not needed \cs{nobreak} removed} +% \changes{v3.13a}{2014/09/11}{using \cs{scr@startsection}} +% \changes{v3.15}{2014/11/24}{indirect definition by \cs{DeclareSectionCommand}} +% \changes{v3.15}{2014/11/24}{\cs{parindent} replaced by \cs{scr@parindent}} +% Commands \cs{part}, \cs{chapter}, \cs{section}, \cs{subsection}, +% \cs{subsubection}, \cs{paragraph} and \cs{subparagraph} are defined using +% \cs{DeclareSectionCommand}. The definition of \cs{part} must be \emph{after} +% \cs{section} because of the bookmark level workaround (see definition of +% \cs{DelcareSectionCommand}. The declaration of \cs{chapter} uses only those +% settings that do not depend on options, because settings by class options +% must no be overwritten here. So all settings that do depend on class options +% have to be initialized before the options (see the \texttt{prepare} code of +% such options above). For the lower levels this is only the case for the font. +% \begin{macrocode} +%<*book|report> +\DeclareSectionCommand[% + style=chapter,% + level=\z@,% + pagestyle=plain,% + tocstyle=chapter,% + tocindent=\z@,% + tocnumwidth=1.5em% +]{chapter} +%</book|report> +\DeclareSectionCommand[% + style=section,% + level=1,% + indent=\z@,% + beforeskip=-3.5ex \@plus -1ex \@minus -.2ex,% + afterskip=2.3ex \@plus.2ex,% + tocstyle=section,% +%<book|report> tocindentfollows=chapter,% +%<article> tocindent=0pt,% +%<book|report> tocindent=1.5em,% +%<article> tocnumwidth=1.5em% +%<book|report> tocnumwidth=2.3em% +]{section} +\DeclareSectionCommand[% + style=part,% +%<article> level=\z@,% +%<report|book> level=\m@ne,% +%<report|book> pagestyle=plain,% + tocstyle=part,% + toclevel=\m@ne,% + tocindent=\z@,% + tocnumwidth=2em% +]{part} +\DeclareSectionCommand[% + style=section,% + level=2,% + indent=\z@,% + beforeskip=-3.25ex\@plus -1ex \@minus -.2ex,% + afterskip=1.5ex \@plus .2ex,% +%<article> tocstyle=subsection,% +%<book|report> tocstyle=section,% +%<article> tocindent=1.5em,% +%<book|report> tocindent=3.8em,% +%<article> tocnumwidth=2.3em% +%<book|report> tocnumwidth=3.2em% +]{subsection} +\DeclareSectionCommand[% + style=section,% + level=3,% + indent=\z@,% + beforeskip=-3.25ex\@plus -1ex \@minus -.2ex,% + afterskip=1.5ex \@plus .2ex,% +%<article> tocstyle=subsection,% +%<book|report> tocstyle=section,% +%<article> tocindent=3.8em,% +%<book|report> tocindent=7.0em,% +%<article> tocnumwidth=3.2em% +%<book|report> tocnumwidth=4.1em% +]{subsubsection} +\DeclareSectionCommand[% + style=section,% + level=4,% + indent=\z@,% + beforeskip=3.25ex \@plus1ex \@minus.2ex,% + afterskip=-1em,% +%<article> tocstyle=subsection,% + tocindentfollows=subsubsection,% +%<book|report> tocstyle=section,% +%<article> tocindent=7.0em,% +%<book|report> tocindent=10em,% +%<article> tocnumwidth=4.1em% +%<book|report> tocnumwidth=5em% +]{paragraph} +\DeclareSectionCommand[% + style=section,% + level=5,% + indent=\scr@parindent,% + beforeskip=3.25ex \@plus1ex \@minus .2ex,% + afterskip=-1em,% +%<article> tocstyle=subsection,% +%<book|report> tocstyle=section,% +%<article> tocindent=10em,% +%<book|report> tocindent=12em,% +%<article> tocnumwidth=5em% +%<book|report> tocnumwidth=6em% +]{subparagraph} +\expandafter\ifnum\scr@v@is@lt{3.15}\relax + \let\scr@subparagraph@sectionindent\parindent +\else + \def\scr@subparagraph@sectionindent{\scr@parindent}% +\fi +%</body> +% \end{macrocode} +% \end{command}^^A \subparagraph +% \end{command}^^A \paragraph +% \end{command}^^A \subsubsection +% \end{command}^^A \subsection +% \end{command}^^A \section +% \end{command}^^A \chapter +% \end{command}^^A \part +% +% +% \subsection{Fonts} +% +% The font settings of dedicated elements of the the corresponding section +% levels already have been done. But there are also some elements that do not +% correspond with a single section level. +% +% \begin{fontelement}{disposition} +% \changes{v2.95b}{2006/07/30}{added} +% \begin{fontelement}{sectioning} +% \changes{v2.95b}{2006/07/30}{added} +% \begin{macro}{\sectfont} +% \changes{v2.8c}{2001/06/29}{\cs{normalcolor} added} +% \changes{v3.12}{2013/11/11}{earlier definition to support option +% \opt{headings\quotechar=standardclasses}} +% \changes{v3.20}{2016/01/29}{\cs{sffamily} replaced by \cs{@gr@gsffamily}} +% This element is not only used by all section levels before the dedicated +% element of the single level is used. It is also used by other elements like +% the \fnt{chaptertocentry}. The command \cs{sectfont} instead of the +% \cs{newkomafont} default is used for compatibility only. So it is specified +% as internal. Using it as user command is deprecated! +% \begin{macrocode} +%</class&!letter> +%<*(class&!letter)|(package&extend)> +%<*prepare> +\newcommand*{\sectfont}{\normalcolor\@gr@gsffamily\bfseries} +%</prepare> +%</(class&!letter)|(package&extend)> +%<*class&!letter> +%<*body> +\newcommand*{\scr@fnt@disposition}{\sectfont} +\aliaskomafont{sectioning}{disposition} +%</body> +% \end{macrocode} +% \end{macro}^^A \sectfont +% \end{fontelement}^^A sectioning +% \end{fontelement}^^A disposition +% +% +% \begin{option}{headings} +% \changes{v2.3h}{1996/01/20}{Size of \cs{chapter} decreased by one grade +% step} +% \changes{v2.3h}{1996/01/20}{using \cs{chapterheadstartvskip} and +% \cs{chapterheadendvskip}} +% \changes{v2.7c}{2000/01/19}{vertical distance after chapters slightly +% changed and glue added} +% \changes{v2.98c}{2008/03/10}{added} +% \changes{v3.10}{2011/08/30}{extended optional argument} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}} +% \changes{v3.12}{2013/08/26}{\cs{KOMA@options} replaced by \cs{KOMAoptions}} +% \changes{v3.12}{2013/11/11}{value \opt{\quotechar=standardclasses} added} +% \changes{v3.15}{2014/11/24}{using \cs{scr@chapter@beforeskip} and +% \cs{scr@chapter@afterskip}} +% \changes{v3.17}{2015/03/09}{using internal value storage} +% \changes{v3.18}{2015/05/20}{values of \cs{scr@chapter@beforeskip} negative} +% Option \opt{headings} is the main switch for the headings of all outlines. +% It provides the following values: +% \begin{macrocode} +%<*option> +\KOMA@key{headings}{% + \KOMA@set@ncmdkey{headings}{@tempa}{% +% \end{macrocode} +% \begin{description} +% \item[\opt{=big}:] use big sized headings. This also changes the distances +% of chapter and redefined \cs{chapterheadstartvskip} and +% \cs{chapterheadendvskip} (\cls*{scrbook} and \cls*{scrreprt} only). +% \end{description} +% \begin{macrocode} + {big}{0},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=normal}:] use medium sized headings. This also changes the +% distances of chapter and redefined \cs{chapterheadstartvskip} and +% \cs{chapterheadendvskip} (\cls*{scrbook} and \cls*{scrreprt} only). +% \end{description} +% \begin{macrocode} + {normal}{1},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=small}:] use small sized headings. This also changes the +% distances of chapter and redefined \cs{chapterheadstartvskip} and +% \cs{chapterheadendvskip} (\cls*{scrbook} and \cls*{scrreprt} only). +% \end{description} +% \begin{macrocode} + {small}{2},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=openany}:] same as \opt{open=any} for \cls*{scrbook} and +% \cls*{scrreprt}. +% \end{description} +% \begin{macrocode} +%<*book|report> + {openany}{3},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=openright}:] same as \opt{open=right} for \cls*{scrbook} and +% \cls*{scrreprt}. +% \end{description} +% \begin{macrocode} + {openright}{4},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=openleft}:] same as \opt{open=left} for \cls*{scrbook} and +% \cls*{scrreprt}. +% \end{description} +% \begin{macrocode} + {openleft}{5},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=twolinechapter}:] use chapter headings with two lines. The first +% line is a kind of prefix line with the number and a prefix text only. The +% second one is the heading text. +% \end{description} +% \begin{macrocode} + {twolinechapter}{6},{chapterprefix}{6},{chapterwithprefix}{6},% + {chapterwithprefixline}{6},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=onelinechapter}:] use chapter headings without the prefix line. +% \end{description} +% \begin{macrocode} + {onelinechapter}{7},{nochapterprefix}{7},{chapterwithoutprefix}{7},% + {chapterwithoutprefixline}{7},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=twolineappendix}:] use chapter headings with two lines in the +% appendix. This overwrites \opt{headings=onelinechapter} for the chapters +% of the appendix. +% \end{description} +% \begin{macrocode} + {twolineappendix}{8},{appendixprefix}{8},{appendixwithprefix}{8},% + {appendixwithprefixline}{8},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=onelineappendix}:] use chapter headings without prefix line in +% the appendix. This overwrites \opt{headings=twolinechapter} for the +% chapters of the appendix. +% \end{description} +% \begin{macrocode} + {onelineappendix}{9},{noappendixprefix}{9},{appendixwithoutprefix}{9},% + {appendixwithoutprefixline}{9},% +%</book|report> +% \end{macrocode} +% \begin{description} +% \item[\opt{=optiontotocandhead}:] activates the extended option handling of +% all outline commands and uses an unspecified optional argument as default +% of for the running head and the ToC entry. +% \end{description} +% \begin{macrocode} + {optiontotocandhead}{10},{optiontoheadandtoc}{10},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=optiontotoc}:] activates the extended option handling of all +% outline commands and uses an unspecified optional argument as default for +% the ToC entry only. +% \end{description} +% \begin{macrocode} + {optiontotoc}{11},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=optiontohead}:] activated the extended option handling of all +% outline commands and uses an unspecified optional argument as default fot +% the running head. +% \end{description} +% \begin{macrocode} + {optiontohead}{12},% +% \end{macrocode} +% \begin{description} +% \item[\opt{=standardclasses}:] reconfigure headings (at least the fonts) to +% look more like the headings of the standard classes than the defaults of +% \KOMAScript. +% \end{description} +% \begin{macrocode} + {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} +% First of all we handle the three size values. +% \begin{description} +% \item[Note:] These are redefining \cs{chapterheadstartvkip} and +% \cs{chapterheadendvskip}. +% \item[Note:] The |+\baselineskip+\parskip| is needed to stay compatible with +% old version of \KOMAScript{} not providing \cs{DeclareSectionCommand}. They +% are regarded inside setting of the preamble to print heading with +% |beforeskip=0pt| at the very beginning of the text area. +% \end{description} +% \begin{macrocode} +%<*book|report> + \renewcommand*{\scr@chapter@beforeskip}{-3.3\baselineskip-\parskip}% + \renewcommand*{\scr@chapter@afterskip}{% + 1.725\baselineskip \@plus .115\baselineskip \@minus .192\baselineskip + }% + \renewcommand*{\scr@chapter@innerskip}{.5\baselineskip}% + \renewcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}% + \renewcommand*{\chapterheadendvskip}{% + \expandafter\ifnum\scr@v@is@lt{3.15}\vspace\@tempskipa + \else\vskip\@tempskipa\fi + }% + \renewcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}% +%</book|report> + \setkomafont{part}{\Huge}% + \setkomafont{partnumber}{\huge}% +%<book|report> \setkomafont{chapter}{\huge}% +%<book|report> \setkomafont{chapterprefix}{\size@chapter}% + \setkomafont{section}{\Large}% + \setkomafont{subsection}{\large}% + \setkomafont{subsubsection}{\normalsize}% + \setkomafont{paragraph}{\normalsize}% + \setkomafont{subparagraph}{\normalsize}% + \or % normal + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{big}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{normal}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{small}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{standardclasses}% + \KOMA@kav@add{.\KOMAClassFileName}{headings}{normal}% +%<*book|report> + \renewcommand*{\scr@chapter@beforeskip}{-3\baselineskip-\parskip}% + \renewcommand*{\scr@chapter@afterskip}{% + 1.5\baselineskip \@plus .1\baselineskip \@minus .167\baselineskip + }% + \renewcommand*{\scr@chapter@innerskip}{.5\baselineskip}% + \renewcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}% + \renewcommand*{\chapterheadendvskip}{% + \expandafter\ifnum\scr@v@is@lt{3.15}\vspace\@tempskipa + \else\vskip\@tempskipa\fi + }% + \renewcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}% +%</book|report> + \setkomafont{part}{\huge}% + \setkomafont{partnumber}{\huge}% +%<*book|report> + \setkomafont{chapter}{\LARGE}% + \setkomafont{chapterprefix}{\size@chapter}% + \setkomafont{section}{\Large}% + \setkomafont{subsection}{\large}% +%</book|report> +%<*article> + \setkomafont{section}{\large}% + \setkomafont{subsection}{\normalsize}% +%</article> + \setkomafont{subsubsection}{\normalsize}% + \setkomafont{paragraph}{\normalsize}% + \setkomafont{subparagraph}{\normalsize}% + \or % small + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{big}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{normal}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{small}% + \KOMA@kav@remove{.\KOMAClassFileName}{headings}{standardclasses}% + \KOMA@kav@add{.\KOMAClassFileName}{headings}{small}% +%<*book|report> + \renewcommand*{\scr@chapter@beforeskip}{-2.8\baselineskip-\parskip}% + \renewcommand*{\scr@chapter@afterskip}{% + 1.35\baselineskip \@plus 0.09\baselineskip \@minus .15\baselineskip + }% + \renewcommand*{\scr@chapter@innerskip}{.5\baselineskip}% + \renewcommand*{\chapterheadstartvskip}{\vspace{\@tempskipa}}% + \renewcommand*{\chapterheadendvskip}{% + \expandafter\ifnum\scr@v@is@lt{3.15}\vspace\@tempskipa + \else\vskip\@tempskipa\fi + }% + \renewcommand*{\chapterheadmidvskip}{\par\nobreak\vskip\@tempskipa}% +%</book|report> + \setkomafont{part}{\LARGE}% + \setkomafont{partnumber}{\LARGE}% +%<*book|report> + \setkomafont{chapter}{\Large}% + \setkomafont{chapterprefix}{\size@chapter}% + \setkomafont{section}{\large}% +%</book|report> +%<*article> + \setkomafont{section}{\normalsize}% +%</article> + \setkomafont{subsection}{\normalsize}% + \setkomafont{subsubsection}{\normalsize}% + \setkomafont{paragraph}{\normalsize}% + \setkomafont{subparagraph}{\normalsize}% +% \end{macrocode} +% \cls*{scrbook} and \cls*{scrreprt} also provide settings that are delegated +% to option \opt{open}. +% \begin{macrocode} + \or % openany +%<*book|report> + \KOMAoptions{open=any}% +%</book|report> + \or % openright +%<*book|report> + \KOMAoptions{open=right}% +%</book|report> + \or % openleft +%<*book|report> + \KOMAoptions{open=left}% +%</book|report> +% \end{macrocode} +% \cls*{scrbook} and \cls*{scrreprt} also provide settings that are delegated +% to option \opt{chapterprefix} and \opt{appendixprefix}. +% \begin{macrocode} + \or % twolinechapter +%<*book|report> + \KOMAoptions{chapterprefix=true}% +%</book|report> + \or % onelinechapter +%<*book|report> + \KOMAoptions{chapterprefix=false}% +%</book|report> + \or % twolineappendix +%<*book|report> + \KOMAoptions{appendixprefix=true}% +%</book|report> + \or % onelineappendix +%<*book|report> + \KOMAoptions{appendixprefix=false}% +%</book|report> +% \end{macrocode} +% We have also options to handle the extended optional argument. +% \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} +% Last but not least the option to activate the standard class emulation of +% headings. +% \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}% + \setkomafont{part}{\Huge}% + \setkomafont{partnumber}{\huge}% + \setkomafont{chapter}{\Huge}% + \setkomafont{chapterprefix}{\huge}% +%</book|report> +%<*article> + \setkomafont{part}{\huge}% + \setkomafont{partnumber}{\Large}% +%</article> + \setkomafont{section}{\Large}% + \setkomafont{subsection}{\large}% + \setkomafont{subsubsection}{\normalsize}% + \setkomafont{paragraph}{\normalsize}% + \setkomafont{subparagraph}{\normalsize}% + \renewcommand*{\sectfont}{\bfseries}% +%<book|report> \KOMAoptions{open=right,chapterprefix=true}% + \fi + \fi +} +\KOMA@kav@add{.\KOMAClassFileName}{headings}{big} +%<book|report>\KOMA@kav@add{.\KOMAClassFileName}{headings}{onelinechapter} +% \end{macrocode} +% \end{option}^^A headings +% +% \begin{option}{bigheadings,normalheadings,smallheadings} +% \changes{v2.3h}{1996/01/20}{added} +% \changes{v2.4g}{1996/11/04}{option name fixed} +% \changes{v2.98c}{2008/03/10}{obsolete} +% \changes{v3.01a}{2008/11/20}{deprecated} +% \begin{macro}{\@bigheadings,\@normalheadings,\@smallheadings} +% \changes{v2.98c}{2008/03/10}{removed} +% \end{macro}^^A \@bigheadings … \@smallheadings +% We also have some deprecated options. +% \begin{macrocode} +\KOMA@DeclareDeprecatedOption{bigheadings}{headings=big} +\KOMA@DeclareDeprecatedOption{normalheadings}{headings=normal} +\KOMA@DeclareDeprecatedOption{smallheadings}{headings=small} +%</option> +% \end{macrocode} +% \end{option}^^A smallheading,normalheadings,bigheadings +% +% \begin{macrocode} +%</class&!letter> +% \end{macrocode} +% +% \Finale +% \PrintChanges +% +\endinput +% Local Variables: +% mode: doctex +% ispell-local-dictionary: "en_US" +% eval: (flyspell-mode 1) +% TeX-master: t +% TeX-engine: luatex-dev +% eval: (setcar (or (cl-member "Index" (setq-local TeX-command-list (copy-alist TeX-command-list)) :key #'car :test #'string-equal) (setq-local TeX-command-list (cons nil TeX-command-list))) '("Index" "mkindex %s" TeX-run-index nil t :help "makeindex for dtx")) +% End: |