diff options
author | Karl Berry <karl@freefriends.org> | 2024-06-10 21:06:06 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-06-10 21:06:06 +0000 |
commit | 25685a373fa53a9fdcd16f9f346c466965d7ad03 (patch) | |
tree | 565fdae26cb5dc971f4c5b6d1b058a966852df03 /Master/texmf-dist/source | |
parent | 00558f3dac8676dda5160c2e885a0998779e1850 (diff) |
standardsectioning (7jun24)
git-svn-id: svn://tug.org/texlive/trunk@71479 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/standardsectioning/standardsectioning.dtx | 929 |
1 files changed, 929 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/standardsectioning/standardsectioning.dtx b/Master/texmf-dist/source/latex/standardsectioning/standardsectioning.dtx new file mode 100644 index 00000000000..d8030d2f221 --- /dev/null +++ b/Master/texmf-dist/source/latex/standardsectioning/standardsectioning.dtx @@ -0,0 +1,929 @@ +% \iffalse meta-comment +% ====================================================================== +% standardsectioning.dtx +% Copyright © 2008–2024 Markus Kohm +% +% This work is a KOMA-Script spin-off. For the original sources of +% KOMA-Script's `float.hak' see file `scrhack.dtx' in the KOMA-Script +% sources at <https://sourceforge.net/p/koma-script/code/>. +% +% Development is taking place as part of `scrhack' at +% <https://github.com/komascript/third-party-enhancements>. New issues +% should be reported there as well as known issues can be found. +% +% 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 "maintained". +% +% The Current Maintainer and author of this work is Markus Kohm. +% +% This work consists of the files `standardsectioning.dtx' and +% `README.md'. +% +% This work also uses code derived from the standard LaTeX classes. +% These classes have been released under the LaTeX Project Public +% License. For the copyright of the original code see `classes.dtx' +% <https://ctan.org/tex-archive/macros/latex/base/classes.dtx>. +% Note: For support of the derived code, do not contact the authors of +% the original code! They are not responsible for this work. +% +% The recommended way to install `standardsectioning' is to use +% the package manager of your TeX distribution. +% ====================================================================== +% +%<*dtx> +\ifx\ProvidesExplFile\undefined\def\ProvidesExplFile#1#2#3#4{}\fi +\ProvidesExplFile{standardsectioning.dtx} +%</dtx> +%<*dtx|package> +%<package>\ProvidesExplPackage{standardsectioning} + {2024-06-06}{0.9} + {% +%<*dtx> + sources and unpack driver of +%</dtx> + forcing standard class sectioning definitions% + } +%</dtx|package> +%<*dtx> +\ifx\documentclass\undefined + \input docstrip.tex + \generate{% + \file{standardsectioning.sty}{% + \from{standardsectioning.dtx}{package}% + }% + }% +\else + \let\endbatchfile\ExplSyntaxOff +\fi +\endbatchfile +\documentclass[ngerman,USenglish]{koma-script-source-doc} +\NewDocElement[% + macrolike = true, + toplevel = true, + idxtype = \textit{var.}, + idxgroup = Variable, + printtype = \textit{var.}, +]{Variable}{Variable} +\setcounter{IndexColumns}{2} +\usepackage{babel} +\usepackage{csquotes} +\usepackage[style=alphabetic]{biblatex} +\begin{filecontents}[force]{\jobname.bib} +@manual{pkg:scrhack:manual, + author={Markus Kohm}, + version={3.42}, + date={2023-07-26}, + title={Emulating Former \KOMAScript{} Package \pkg*{scrhack}}, + url={https://mirrors.ctan.org/macros/latex/contrib/scrhack/scrhack.pdf}, + urldate={2023-07-26}, +} +@online{pkg:koma-script, + author={Markus Kohm}, + version={3.41}, + date={2023-07-07}, + title={{\KOMAScript} --- A bundle of versatile classes and packages}, + url={https://ctan.org/pkg/koma-script}, + urldate={2023-07-14}, + note={The \KOMAScript{} bundle provides replacements for the \pkg*{article}, + \pkg*{report}, and \pkg*{book} classes with emphasis on typography and + versatility. There is also a letter class.}, +} +@manual{pkg:koma-script:manual:de, + author={Markus Kohm}, + date={2023-06-16}, + title={{\KOMAScript}}, + subtitle={Die Anleitung}, + url={http://mirrors.ctan.org/macros/latex/contrib/koma-script/scrguide-de.pdf}, + urldate={2023-07-04}, +} +@manual{pkg:koma-script:manual:en, + author={Markus Kohm}, + date={2023-06-16}, + title={{\KOMAScript}}, + subtitle={The Guide}, + url={http://mirrors.ctan.org/macros/latex/contrib/koma-script/scrguide-en.pdf}, + urldate={2023-07-14}, +} +\end{filecontents} +\addbibresource{\jobname.bib} +\setcounter{StandardModuleDepth}{2} +\begin{document} + \nocite{pkg:koma-script,pkg:koma-script:manual:en,pkg:koma-script:manual:de} + \DocInput{standardsectioning.dtx} +\end{document} +%</dtx> +%\fi +% +% \changes{v0.1}{2023/06/01}{start of \KOMAScript{} spin-off} +% \changes{v0.9}{2024/06/06}{first release} +% +% \GetFileInfo{standardsectioning.dtx} +% \title{Using the Sectioning Command Code of the Standard Classes} +% \author{\href{mailto:komascript@gmx.info}{Markus Kohm}} +% \date{Version \filedate{} \fileversion} +% \maketitle +% \begin{abstract} +% A long time ago +% \href{https://www.sourceforge.net/project/koma-script}{\KOMAScript} was +% more or less just a collection of replacements for the three standard +% classes \cls*{article}, \cls*{book} and \cls*{report}. Replacing a +% standard class with a +% \href{https://www.sourceforge.net/project/koma-script}{\KOMAScript} class +% was easy, even if users used a lot of additional packages. Over the years, +% the author has added many new features and user interfaces to the +% classes. This also led to completely different implementation of the +% sectioning commands. But some packages depend on an implementation similar +% to the standard classes. +% +% Package \pkg*{standardsectioning} implements these commands with the code +% of the standard classes and also deactivates parts of the +% \href{https://www.sourceforge.net/project/koma-script}{\KOMAScript} user +% interface, which should not be used with these changes. These are more or +% less all commands to configure sectioning commands. It also reverts some +% internal macros of +% \href{https://www.sourceforge.net/project/koma-script}{\KOMAScript}. +% \end{abstract} +% +% \tableofcontents +% +%\iffalse +%<*doc> +%\fi +\section{What are the typical reasons for using package + \texorpdfstring{\pkg*{standardsectioning}}{standardsectioning} and how to do + it?} +\label{sec:reasons} + +Sometimes replacing a standard class by a +\href{https://komascript.de/}{\KOMAScript} class results in new errors, +because of incompatibility of some of the packages or the already existing +preamble code with these classes. In such a case, you first should try out +package \pkg{scrhack} without passing any option to that package. Package +\pkg{scrhack} should be the first package after loading the document class, or +even be loaded \emph{before} the document class using \cs{RequirePackage} +instead of \cs{usepackage}. If this already fixes the issue, you can try to +find out which of the replacements and enhancements loaded by \pkg{scrhack} +solved the issue and load only these. + +Only if you cannot fix the issue this kind you can try loading +\pkg*{standardsectioning} either also using \pkg{scrhack} with +corresponding options (see \cite{pkg:scrhack:manual}) or just loading +\pkg*{standardsectioning}. + +Such errors happen, e.g., because +\pkg{titlesec}\index{Packages:>\pkg{titlesec}} makes assumptions about the +definition of the sectioning commands that simply do not apply to the +\href{https://komascript.de/}{\KOMAScript} classes. This leads, e.g., in the +following example: +\begin{verbatim} + \documentclass{scrartcl} + \usepackage{titlesec} + \begin{document} + \section{Test Section} + Test text. + \end{document} +\end{verbatim} +to the error message: +\begin{verbatim} + Package titlesec Error: No format for this command. + + See the titlesec package documentation for explanation. + Type H <return> for immediate help. + ... + + l.4 \section{Test Section} +\end{verbatim} +Several other errors can happen with combinations of \pkg{titlesec} and +\href{https://komascript.de/}{\KOMAScript} classes. Best solution for this, +would be to not use \pkg{titlesec} and instead use the class' interface to +configure the sectioning commands, e.g., \cs{RedeclareSectionCommand}, +\cs{setkomafont}, or redefining \cs{sectionlinesformat}. See +\cite{pkg:koma-script:manual:en} or \cite{pkg:koma-script:manual:de} for more +information. But if you do not use any of the enhanced sectioning features of +the \href{https://komascript.de/}{\KOMAScript} classes, a first-aid workaround +would be to load package \pkg*{standardsectioning} immediately \emph{after} +the class: +\begin{verbatim} + \documentclass{scrartcl} + \usepackage{standardsectioning} + \usepackage{titlesec} + \begin{document} + \section{Test Section} + Test text. + \end{document} +\end{verbatim} +Among other things, this redefines the sectioning commands to be compatible +with the standard classes. +\begin{description}\sloppy +\item[But note:] \leavevmode + \marginline{\raisebox{\dimexpr\ht\strutbox-\height\relax}{\Huge\textcolor{red}{!}}}% + This also means, that all the enhancements to these commands are broken! You + cannot use \cs{DeclareSectionCommand}, \cs{RedeclareSectionCommand}, + \cs{DeclareNewSectionCommand}, \cs{ProvideSectionCommand}, + \cs{DeclareSectionCommands}, \cs{RedeclareSectionCommands}, + \cs{DeclareNewSectionCommands}, or \cs{ProvideSectionCommands} any + longer. Other commands like \cs{partformat}, \cs{chapterformat}, + \cs{sectionformat}, \cs{subsectionformat}, \cs{subsubsectionformat}, + \cs{paragraphformat}, \cs{subparagraphformat} and many more are not used + anymore. +\end{description} + +Sometimes a wrapper classes loads a \href{https://komascript.de/}{\KOMAScript} +class and than also loads a package like \pkg{titlesec}. To load +\pkg*{standardsections} immediately after the class, you should use the +generic class hook available from \LaTeX{} 2020-10-01: +\begin{verbatim} + \AddToHook{class/scrartcl/after}{\RequirePackage{standardsectioning}} + \AddToHook{class/scrbook/after}{\RequirePackage{standardsectioning}} + \AddToHook{class/scrreprt/after}{\RequirePackage{standardsectioning}} +\end{verbatim} +These lines should be placed \texttt{before} \cs{documentclass}. If you are +using an older \LaTeX{} version you can use +\href{https://komascript.de/}{\KOMAScript} package \pkg{scrlfile} to do the +same: +\begin{verbatim} + \RequirePackage{scrlfile} + \AfterClass{scrartcl}{\RequirePackage{standardsectioning}} + \AfterClass{scrbook}{\RequirePackage{standardsectioning}} + \AfterClass{scrreport}{\RequirePackage{standardsectioning}} +\end{verbatim} +also \emph{before} loading the class. + +\section{How to select the correct sectioning code, if the automatism fails?} +\label{sec:options} + +By default, the package uses an automatism to decide which code of which +standard class should be used. If the \KOMAScript{} class \cls{scrartcl} is +detected, automatically the code of \cls{article} is used. If the +\KOMAScript{} class \cls{scrreprt} is detected, automatically the code of +\cls{report} is used. If the \KOMAScript{} class \cls{scrbook} is detected, +automatically the code of \cls{book} is used. If none of these classes is +detected, the existence of two commands is used. If \cs{chapter} is not +defined, the code of \cls{article} is used. If \cs{chapter} is defined, but +\cs{frontmatter} is not defined, the code of \cls{report} is used. If both +\cs{chapter} and \cs{frontmatter} are defined, the code of \cls{book} is used. + +%\DescribeOption{article} +%\DescribeOption{book} +%\DescribeOption{report} +Very seldom this automatism fails and the wrong code is used, which results in +error messages or printing mistakes. In this case you can load package +\pkg*{standardsectioning} with one of the options \opt{article}, \opt{report} +or \opt{book} to force the usage of the sectioning code of either +\cls{article}, \cls{report}, or \cls{book}. This could, e.g., be needed, if +you are using a class, that defines \cs{chapter} and \cs{frontmatter} but not +\cs{if@mainmatter}. In this case, you should use +\begin{verbatim} + \usepackage[report]{standardsectioning} +\end{verbatim} +instead of +\begin{verbatim} + \usepackage{standardsectioning} +\end{verbatim} +because otherwise the not defined \cs{if@mainmatter} will result in errors, +when using \cs{chapter}. +% \iffalse +%</doc> +% \fi +% +% \MaybeStop{\printbibliography[heading=bibintoc]\PrintIndex} +% +% \iffalse +%<*package> +%<@@=standardsectioning> +% \fi +% \section{Implementation} +% \label{sec:implementation} +% +% \subsection{Messages} +% \label{ssec:messages} +% +% There are some messages, that may be used several times: +% \begin{macrocode} +\msg_new:nnnn { standardsectioning } { wrong-package-order } + { + wrong~package~order~detected. + } + { + You've~loaded~this~package~after~package~#1.\iow_newline: + But~this~cannot~work.\iow_newline: + Loading aborted! + } + +\msg_new:nnn { standardsectioning } { deactivate-extended-section-commands } + { + extended~sectioning~option~handling~deactivated. + } + +\msg_new:nnn { standardsectioning } { no-force-with-KOMA-Script-class } + { + package~option~`#1'~is~ignored~due~to~usage~of~KOMA-Script~class~\KOMAClassName. + } +% \end{macrocode} +% +% \subsection{Package order} +% \label{ssec:packageorder} +% +% \pkg{hyperref} must not be loaded, because otherwise deactivation of +% \cs{scr@chapter@after@hyperref@patch} would not work. +% \begin{macrocode} +\@ifpackageloaded { hyperref } + { + \msg_critical:nnn { standardsectioning } { wrong-package-order } + { hyperref } + } { } +% \end{macrocode} +% \pkg{titlesec} must not be loaded, because otherwise the re-definitions +% would overwrite the definitions of this package. +% \begin{macrocode} +\@ifpackageloaded { titlesec } + { + \msg_critical:nnn { standardsectioning } { wrong-package-order } + { titlesec } + } { } +% \end{macrocode} +% \pkg{sectsty} must not be loaded, because otherwise the re-definitions +% would overwrite the definitions of this package. +% \begin{macrocode} +\@ifpackageloaded { sectsty } + { + \msg_critical:nnnn { standardsectioning } { wrong-package-order } + { sectsty } + } { } +% \end{macrocode} +% +% \subsection{\KOMAScript{} deactivation code} +% \label{ssec:deactivationcode} +% +% \ExplSyntaxOn +% \begin{macro}{\@@_common_komascript_deactivation_code:} +% \ExplSyntaxOff +% Some deactivation code is common for all \KOMAScript{} classes and +% therefore we use an auxiliary function to not need to copy it several +% times. +% \begin{macrocode} +\cs_new:Nn \@@_common_komascript_deactivation_code: + { +% \end{macrocode} +% \begin{macro}{\@startsection} +% \KOMAScript{} classes redefine this internal \LaTeX{} kernel macro. In this +% case \cs{scr@saved@startsection} is defined, differs from +% \cs{@startsection} and has the definition found before redefining the +% original macro. We do nothing else but resetting \cs{@startsection} to this +% saved definition. +% \begin{macrocode} + \RenewCommandCopy \@startsection \scr@saved@startsection +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@sect,\@ssect,\@xsect} +% All these should be resetted to their original definitions stored in +% \cs{scr@latex@\dots}. +% \begin{macrocode} + \RenewCommandCopy\@sect\scr@latex@sect + \RenewCommandCopy\@ssect\scr@latex@ssect + \RenewCommandCopy\@xsect\scr@latex@xsect +% \end{macrocode} +% \end{macro} +% \begin{command}{\DeclareSectionCommand,\RedeclareSectionCommand, +% \DeclareNewSectionCommand,\ProvideSectionCommand, +% \DeclareSectionCommands,\RedeclareSectionCommands, +% \DeclareNewSectionCommands,\ProvideSectionCommands} +% These \KOMAScript{} commands do not make sense any longer after forced +% redefinition of \cs{part} \dots{} \cs{subparagraph}. They even would not +% work correctly after resetting, e.g., \cs{@startsection}. So best reaction +% is to \emph{undefine} them. +% \begin{macrocode} + \cs_undefine:N \DeclareSectionCommand + \cs_undefine:N \DeclareSectionCommands + \cs_undefine:N \RedeclareSectionCommand + \cs_undefine:N \RedeclareSectionCommands + \cs_undefine:N \DeclareNewSectionCommand + \cs_undefine:N \DeclareNewSectionCommands + \cs_undefine:N \ProvideSectionCommand + \cs_undefine:N \ProvideSectionCommands +% \end{macrocode} +% \end{command} +% \begin{macro}{\minisec} +% This also has to be undefined, because it also uses internal \KOMAScript{} +% definitions, which are deactivated. +% \begin{macrocode} + \cs_undefine:N \minisec +% \end{macrocode} +% \end{macro} +% \begin{macro}{\scr@chapter@before@hyperref@patch, +% \scr@chapter@after@hyperref@patch} +% Now, definitions without respecting \pkg{hyperref} are used, so +% \pkg{hyperref} should again be able to patch them. So the hack should +% deactivate the patch deactivation of the \KOMAScript{} classes. +% \begin{macrocode} + \cs_gset_eq:NN \scr@chapter@before@hyperref@patch \relax + \cs_gset_eq:NN \scr@chapter@after@hyperref@patch \relax +% \end{macrocode} +% \end{macro} +% \begin{macro}{\scr@osectarg} +% The \KOMAScript{} classes use this macro to store how to use the optional +% argument of section commands. But with the standard class definition the +% only possibility is to use it as running head and write it into the table of +% contents without any extended handling. So the only value, that makes sense +% is 0. +% \begin{macrocode} + \int_if_zero:nF { \scr@osectarg } + { + \msg_warning:nn { standardsectioning } + { deactivate-extended-section-commands } + \cs_gset_eq:NN \scr@osectarg \c_zero_int + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\scr@activate@xsection} +% Further changing of the value has to be deactivated. +% \begin{macrocode} + \renewcommand*{\scr@activate@xsection}[1]{% + \int_if_zero:nF { ##1 } + { + \msg_warning:nn { standardsectioning } + { deactivate-extended-section-commands } + \cs_gset_eq:NN \scr@osectarg \c_zero_int + } + }% +% \end{macrocode} +% \end{macro} +% \begin{command}{\partlineswithprefixformat, +% \sectionlinesformat,\sectioncatchphraseformat} +% These \KOMAScript{} commands are not used any longer. To detect errors, +% because of redefining them, we undefine them. +% \begin{macrocode} + \cs_undefine:N \partlineswithprefixformat + \cs_undefine:N \sectionlinesformat + \cs_undefine:N \sectioncatchphraseformat +% \end{macrocode} +% \end{command} +% \begin{option}{headings} +% The \KOMAScript{} option does not make sense any longer. So it is +% deactivated and usage will throw an error. +% \begin{macrocode} + \RelaxFamilyKey[.\KOMAClassFileName]{KOMA}{headings}% + \KOMA@kav@removekey{\KOMAClassFileName}{headings}% +% \end{macrocode} +% \end{option} +% \begin{macro}{\scr@class@titlesec@warning} +% The warning about loading \pkg{titlesec} has to be removed, because we do +% not expect errors any longer. +% \begin{macrocode} + \cs_undefine:N \scr@class@titlesec@warning +% \end{macrocode} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \ExplSyntaxOff +% +% \subsection{Sectioning code of the standard classes} +% \label{ssec:standardsectioningcommands} +% +% \begin{command}{\part,\chapter,\section,\subsection,\subsubsection, +% \paragraph,\subparagraph} +% These commands are redefined using code from +% \href{https://ctan.org/tex-archive/macros/latex/base/classes.dtx} +% {\file{classes.dtx}} +% 2024/02/08 v1.4n. +% Only \cs{newcommand} is replaced by \cs{def} and \texttt{\#} are +% doubled. Depending on the class, we use different code: +% \ExplSyntaxOn +% \begin{macro}{\@@_article_sectioning_code:,\@@_book_sectioning_code:, +% \@@_report_sectioning_code:} +% \ExplSyntaxOff +% \begin{macrocode} +\cs_new:Nn \@@_article_sectioning_code: + { + \def\part{% + \if@noskipsec \leavevmode \fi + \par + \addvspace{4ex}% + \@afterindentfalse + \secdef\@part\@spart}% + \def\@part[##1]##2{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}##1}% + \else + \addcontentsline{toc}{part}{##1}% + \fi + {\parindent \z@ \raggedright + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >\m@ne + \Large\bfseries \partname\nobreakspace\thepart + \par\nobreak + \fi + \huge \bfseries ##2% + \markboth{}{}\par}% + \nobreak + \vskip 3ex + \@afterheading}% + \def\@spart##1{% + {\parindent \z@ \raggedright + \interlinepenalty \@M + \normalfont + \huge \bfseries ##1\par}% + \nobreak + \vskip 3ex + \@afterheading}% + + \def\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\Large\bfseries}}% + \def\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\large\bfseries}}% + \def\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\bfseries}}% + \def\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}}% + \def\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}}% + } + +\cs_new:Nn \@@_report_sectioning_code: + { + \def\part{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \thispagestyle{plain}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + + \def\@part[##1]##2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}##1}% + \else + \addcontentsline{toc}{part}{##1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname\nobreakspace\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries ##2\par}% + \@endpart} + \def\@spart##1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries ##1\par}% + \@endpart} + \def\@endpart{\vfil\newpage + \if@twoside + \if@openright + \null + \thispagestyle{empty}% + \newpage + \fi + \fi + \if@tempswa + \twocolumn + \fi} + \def\chapter{\if@openright\cleardoublepage\else\clearpage\fi + \thispagestyle{plain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} + \def\@chapter[##1]##2{\ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}##1}% + \else + \addcontentsline{toc}{chapter}{##1}% + \fi + \chaptermark{##1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{##2}]% + \else + \@makechapterhead{##2}% + \@afterheading + \fi} + \def\@makechapterhead##1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright \normalfont + \ifnum \c@secnumdepth >\m@ne + \huge\bfseries \@chapapp\space \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \interlinepenalty\@M + \Huge \bfseries ##1\par\nobreak + \vskip 40\p@ + }} + \def\@schapter##1{\if@twocolumn + \@topnewpage[\@makeschapterhead{##1}]% + \else + \@makeschapterhead{##1}% + \@afterheading + \fi} + \def\@makeschapterhead##1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright + \normalfont + \interlinepenalty\@M + \Huge \bfseries ##1\par\nobreak + \vskip 40\p@ + }} + \def\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\Large\bfseries}} + \def\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\large\bfseries}} + \def\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\bfseries}} + \def\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + \def\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + } + +\cs_new:Nn \@@_book_sectioning_code: + { + \def\part{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \thispagestyle{plain}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + + \def\@part[##1]##2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}##1}% + \else + \addcontentsline{toc}{part}{##1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname\nobreakspace\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries ##2\par}% + \@endpart} + \def\@spart##1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries ##1\par}% + \@endpart} + \def\@endpart{\vfil\newpage + \if@twoside + \if@openright + \null + \thispagestyle{empty}% + \newpage + \fi + \fi + \if@tempswa + \twocolumn + \fi} + \def\chapter{\if@openright\cleardoublepage\else\clearpage\fi + \thispagestyle{plain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} + \def\@chapter[##1]##2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}##1}% + \else + \addcontentsline{toc}{chapter}{##1}% + \fi + \else + \addcontentsline{toc}{chapter}{##1}% + \fi + \chaptermark{##1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{##2}]% + \else + \@makechapterhead{##2}% + \@afterheading + \fi} + \def\@makechapterhead##1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright \normalfont + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \huge\bfseries \@chapapp\space \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \Huge \bfseries ##1\par\nobreak + \vskip 40\p@ + }} + \def\@schapter##1{\if@twocolumn + \@topnewpage[\@makeschapterhead{##1}]% + \else + \@makeschapterhead{##1}% + \@afterheading + \fi} + \def\@makeschapterhead##1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright + \normalfont + \interlinepenalty\@M + \Huge \bfseries ##1\par\nobreak + \vskip 40\p@ + }} + \def\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\Large\bfseries}} + \def\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\large\bfseries}} + \def\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\bfseries}} + \def\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + \def\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + } +% \end{macrocode} +% \end{macro} +% \end{command} +% +% \subsection{Class dependent deactivation and implemention} +% \label{ssec:doit} +% +% If a \KOMAScript{} class has been loaded we need use the common deactivation +% code and the \cls*{article} sectioning code. +% \ExplSyntaxOn +% \begin{macro}{\@@_acticvation_code:} +% \ExplSyntaxOff +% \begin{macrocode} +\cs_new:Nn \@@_activation_code: + { + \@ifclassloaded { scrartcl } + { + \@@_common_komascript_deactivation_code: + \@@_article_sectioning_code: + } + { +% \end{macrocode} +% \begin{command}{\chapterlineswithprefixformat,\chapterlinesformat} +% For \cls*{scrbook} and \cls*{scrreprt} we need additional deactivation +% code and the \cls*{book} resp. \cls*{report} sectioning code. +% \begin{macrocode} + \@ifclassloaded { scrbook } + { + \@@_common_komascript_deactivation_code: + \cs_undefine:N \chapterlineswithprefixformat + \cs_undefine:N \chapterlinesformat + \@@_book_sectioning_code: + } + { + \@ifclassloaded { scrreprt } + { + \@@_common_komascript_deactivation_code: + \cs_undefine:N \chapterlineswithprefixformat + \cs_undefine:N \chapterlinesformat + \@@_report_sectioning_code: + } + { +% \end{macrocode} +% \end{command} +% For all other classes, we use a heuristic to either use the sectioning code +% of \cls*{article}, \cls*{book}, or \cls*{report} +% \begin{macrocode} + \cs_if_exist:NTF \chapter + { + \cs_if_exist:cTF { frontmatter } + { + \@@_book_sectioning_code: + } + { + \@@_report_sectioning_code: + } + } + { + \@@_article_sectioning_code: + } + } + } + } + } +% \end{macrocode} +% \end{macro} +% \ExplSyntaxOff +% +% \begin{option}{book,article,report} +% These options can be used to force the usage of one of the selection +% codes, but only if no \KOMAScript{} class has been used. So in the code +% section we first have to test for a \KOMAScript{} class and either throw a +% warning or do the redefinition of \cs{@@\_activation\_code:}. +% \begin{macrocode} +\DeclareKeys + { + article .meta:nn = { @@/internal } { force=article }, + article .usage = load, + book .meta:nn = { @@/internal } { force=book }, + book .usage = load, + report .meta:nn = { @@/internal } { force=report }, + report .usage = load, + } +\keys_define:nn { @@/internal } + { + force .code = + { + \cs_if_exist:NTF \KOMAClassName + { + \msg_warning:nnn { standardsectioning } + { no-force-with-KOMA-Script-class } + { #1 } + } + { + \cs_set_eq:Nc \@@_activation_code: { @@_#1_sectioning_code: } + } + } + } +\ProcessKeyOptions +\@@_activation_code: +% \end{macrocode} +% \end{option} +% +% \iffalse +%</package> +% \fi +% +% \Finale +% \PrintChanges +% +% \endinput +% Local Variables: +% mode: doctex +% ispell-local-dictionary: "en_US" +% eval: (flyspell-mode 1) +% TeX-master: t +% End: |