diff options
Diffstat (limited to 'macros/latex/contrib/koma-script/scrkernel-paragraphs.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/scrkernel-paragraphs.dtx | 724 |
1 files changed, 724 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/scrkernel-paragraphs.dtx b/macros/latex/contrib/koma-script/scrkernel-paragraphs.dtx new file mode 100644 index 0000000000..6e3a43f3a1 --- /dev/null +++ b/macros/latex/contrib/koma-script/scrkernel-paragraphs.dtx @@ -0,0 +1,724 @@ +% \iffalse meta-comment +% ====================================================================== +% scrkernel-paragraphs.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-paragraphs.dtx 3874 2022-06-05 10:38:02Z kohm $ +%<option>%%% (run: option) +%<body>%%% (run: body) +%<*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-paragraphs.dtx}% + [\filedate\space\filerevision\space + KOMA-Script + (paragraphs)] + }% +\reserved@a +\documentclass[USenglish]{koma-script-source-doc} +\usepackage{babel} +\setcounter{StandardModuleDepth}{3} +\begin{document} +\DocInput{scrkernel-paragraphs.dtx} +\end{document} +%</dtx> +% \fi +% +% \changes{v2.95}{2002/06/25}{first version after splitting \file{scrclass.dtx}} +% \changes{v3.36}{2022/03/07}{switch over from \cls*{scrdoc} to +% \cls*{koma-script-source-doc}} +% \changes{v3.36}{2022/03/07}{whole implementation documentation in English} +% +% \GetFileInfo{scrkernel-paragraphs.dtx} +% \title{The Code Related to Paragraph Building and Page Building 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-paragraphs.dtx} does all the things about configuration of +% paragraphs and page breaking. Some of them are very special for +% \KOMAScript. +% \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 Paragraphs and Pages} +% +% Almost all of this code is for the classes only. +% \begin{macrocode} +%<*class> +% \end{macrocode} +% +% \subsection{Options and macros to handle the paragraph layout} +% +% Already from version 2.8i \KOMAScript can handle paragraph skips instead of +% indenting paragraphs. But the corresponding code has changed a lot over the +% years. +% +% \begin{command}{\setparsizes} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v3.17}{2015/03/10}{support for internal option value storage} +% \changes{v3.19}{2015/07/29}{\cs{par@update} should not reset itself to +% \cs{default@par@update} in the document preamble} +% \begin{macro}{\f@parindent} +% \changes{v2.95}{2004/11/05}{added} +% \begin{macro}{\f@parskip,\f@parfillskip} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v2.95}{2004/11/05}{meaning changed} +% \begin{macro}{\scr@parindent} +% \changes{v2.95}{2004/11/05}{added} +% \begin{macro}{\scr@parskip,\scr@parfillskip} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v2.95}{2004/11/05}{meaning changed} +% Command +% \begin{quote} +% \cs{setparsizes}\marg{indent}\marg{skip}\marg{fill} +% \end{quote} +% not only sets the three main paragraph parameters of \TeX: \len{parskip}, +% \len{parindent}, \len{parfillskip}. Because of option \opt{parskip=relative} +% it has to use a kind of delayed setting of these parameters at least at the +% document preamble. So these settings are not activated until +% \cs{selectfont}. To do so, not the \TeX{} parameters are changed, but the +% current values of the \TeX{} parameters are stored to \cs{f@parindent}, +% \cs{f@parskip} and \cs{f@parfillskip} and the new values are stored to +% \cs{scr@parindent}, \cs{scr@parskip} and \cs{scr@parfillskip} +% only. Additionally \cs{par@update} is used to activate these new +% values. Later we will use a hook to automatically execute \cs{par@update} +% with every \cs{selectfont}. The current value storage is initialized twice: +% First immediately and second inside at the end of the class. +% \begin{description} +% \item[ToDo:] Is the second initialization really needed? Wouldn't it be done +% with the class options? Here user changes are not to be expected, because +% we are still inside the class and therefore there is no user interaction. +% \end{description} +% \begin{macro}{\par@update} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v3.20}{2016/02/22}{\cs{AtBeginDocument} code added} +% \begin{macro}{\default@par@update} +% \changes{v2.95}{2004/11/05}{added} +% \begin{macro}{\par@updaterelative} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v3.36}{2022/03/07}{using \cs{reserved@a} instead of \cs{@tempa}} +% \begin{macro}{\parindent@update,\parskip@update,\parfillskip@update} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v3.36}{2022/03/07}{using \cs{reserved@a} and \cs{reserved@b} +% instead if \cs{@tempa} and \cs{@tempb}} +% The initial \cs{par@update} action is to do nothing. But with +% \opt{parskip=relative} it always and after \cs{setparsizes} it once (or in +% the document preamble also always) has to reactivate the new values. This is +% done using \cs{default@par@update} and +% \cs{par@updaterelative}. \cs{default@par@update} is either a do nothing +% (\opt{parskip=absolute}) or \cs{par@updaterelative} +% (\opt{parskip=relative}). \cs{par@updaterelative} does the real update. +% \begin{description} +% \item[ToDo:] Sometimes internally \cs{par@updaterelative} is used instead of +% \cs{selectfont} to do an immediate update after \cs{setparsizes}. But is +% this correct? Wouldn't be \cs{selectfont} the correct action, to also +% reset the definition of \cs{par@update}? +% \item[ToDO:] Does the \cs{AtBeginCode} execution of \cs{par@update} make +% sense? The \cs{par@update} is done after the initial \cs{normalsize} and +% the initial \cs{selectfont}. So shouldn't this be enough? +% \end{description} +% \begin{macrocode} +%<*option> +\newcommand*{\setparsizes}[3]{% + \edef\f@parindent{\the\parindent}% + \edef\f@parskip{\the\parskip}% + \edef\f@parfillskip{\the\parfillskip}% + \def\scr@parindent{#1}% + \def\scr@parskip{#2}% + \def\scr@parfillskip{#3}% + \def\par@update{% + \if@atdocument\let\par@update\default@par@update\fi + \par@updaterelative + }% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{false}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{never}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{full}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{full-}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{full+}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{full*}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{half}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{half-}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{half+}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{half*}% +} +\newcommand*{\f@parindent}{\the\parindent} +\newcommand*{\f@parskip}{\the\parskip} +\newcommand*{\f@parfillskip}{\the\parfillskip} +\newcommand*{\scr@parindent}{1em} +\newcommand*{\scr@parskip}{\z@} +\newcommand*{\scr@parfillskip}{\z@ \@plus 1fil} +\AtEndOfClass{% + \edef\f@parindent{\the\parindent}% + \edef\f@parskip{\the\parskip}% + \edef\f@parfillskip{\the\parfillskip}% +} +\newcommand*{\par@update}{} +\let\par@update\relax +\newcommand*{\default@par@update}{} +\let\default@par@update\relax +\AtBeginDocument{\par@update} +%</option> +% \end{macrocode} +% Because of the currently complicated initialization, i.e., when switching +% between \cs{parskip=absolute} and \cs{parskip=relative}, we currently define +% \cs{par@updaterelative} not before the class options has been processed. New +% values are only set, if between the last \cs{setparsizes} and the current +% \cs{par@updaterelative} (e.g. inside \cs{selectfont}) the user has not +% changed the \TeX{} variables. If he has changed the \TeX{} variables instead +% of using \cs{setparsizes} we think, he does not want any other change. And +% because of to be able to do the tests inside a group without permanent +% change of \cs{reserved@a} we use three additional helpers. +% \begin{macrocode} +%<*body> +\newcommand*{\par@updaterelative}{% + \begingroup + \edef\reserved@a{\the\parindent}\ifx\reserved@a\f@parindent + \aftergroup\parindent@update +%<*trace> + \else + \ClassInfo{\KOMAClassName}{\string\parindent\space not changed}% +%</trace> + \fi + \edef\reserved@a{\the\parskip}\ifx\reserved@a\f@parskip + \aftergroup\parskip@update +%<*trace> + \else + \ClassInfo{\KOMAClassName}{\string\parskip\space not changed}% +%</trace> + \fi + \edef\reserved@a{\the\parfillskip}\ifx\reserved@a\f@parfillskip + \aftergroup\parfillskip@update +%<*trace> + \else + \ClassInfo{\KOMAClassName}{\string\parfillskip\space not changed}% +%</trace> + \fi + \endgroup +} +\newcommand*{\parindent@update}{% + \scr@defaultunits\parindent\scr@parindent + \begingroup + \let\reserved@b\endgroup + \edef\reserved@a{\the\parindent}\ifx\reserved@a\f@parindent\else + \def\reserved@b{\endgroup\edef\f@parindent{\the\parindent}}% +%<trace> \ClassInfo{\KOMAClassName}{\string\parindent=\the\parindent}% + \fi + \reserved@b +} +\newcommand*{\parskip@update}{% + \scr@defaultunits\parskip\scr@parskip + \begingroup + \let\reserved@b\endgroup + \edef\reserved@a{\the\parskip}\ifx\reserved@a\f@parskip\else + \def\reserved@b{\endgroup\edef\f@parskip{\the\parskip}}% +%<trace> \ClassInfo{\KOMAClassName}{\string\parskip=\the\parskip}% + \fi + \reserved@b +} +\newcommand*{\parfillskip@update}{% + \scr@defaultunits\parfillskip\scr@parfillskip + \begingroup + \let\reserved@b\endgroup + \edef\reserved@a{\the\parfillskip}\ifx\reserved@a\f@parfillskip\else + \def\reserved@b{\endgroup\edef\f@parfillskip{\the\parfillskip}}% +%<trace> \ClassInfo{\KOMAClassName}{\string\parfillskip=\the\parfillskip}% + \fi + \reserved@b +} +%</body> +% \end{macrocode} +% \end{macro}^^A \parindent@update,\parskip@update,\parfillskip@update} +% \end{macro}^^A \par@updaterelative +% \end{macro}^^A \default@par@update +% \end{macro}^^A \par@update +% \end{macro}^^A \scr@parskip,\scr@parfillskip +% \end{macro}^^A \scr@parindent +% \end{macro}^^A \f@parskip,\f@parfillskip +% \end{macro}^^A \f@parindent +% \end{command}^^A \setparsizes +% +% \begin{option}{parskip} +% \changes{v2.8i}{2001/07/22}{added} +% \changes{v2.95}{2006/03/11}{changed into \pkg{keyval} option} +% \changes{v3.08}{2010/12/14}{value \opt{\quotechar=never} added} +% \changes{v3.12}{2013/03/05}{using \cs{FamilyKeyState}.} +% \changes{v3.17}{2015/03/10}{using value storage} +% \changes{v3.25}{2017/09/27}{typo fix in \cs{FamilyKeyStateUnknownValue}} +% \changes{v3.26b}{2019/02/01}{\cs{baselineskip} replaced by 1\cs{baselineskip}} +% \begin{option}{parindent,parskip-,parskip+,parskip*, +% halfparskip,halfparskip-,halfparskip+,halfparskip*} +% \changes{v2.8i}{2001/07/22}{added} +% \changes{v2.95}{2006/03/11}{obsolete} +% \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} replaced by +% \cs{PackageInfoNoLine}} +% \changes{v3.01a}{2008/11/20}{deprecated} +% Originally we have had nine options for all the paragraph indent and skip +% settings. Using \pkg*{scrbase} we have only one option with additional +% settings for relative and absolute values and paragraph indent without glue +% for paragraph skip. +% \begin{macrocode} +%<*option> +\KOMA@key{parskip}[true]{% + \begingroup + \KOMA@set@ncmdkey{parskip}{@tempa}{% + {never}{0},% + {false}{1},{off}{1},{no}{1},% + {full-}{2},% + {half-}{3},% + {full}{4},{true}{4},{on}{4},{yes}{4},% + {half}{5},% + {full+}{6},% + {half+}{7},% + {full*}{8},% + {half*}{9},% + {relative}{10},% + {absolute}{11}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed + \aftergroup\FamilyKeyStateProcessed + \ifcase\number\@tempa% 0 + \endgroup + \setparsizes{1em}{\z@}{\z@ \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{never}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 1 + \endgroup + \setparsizes{1em}{\z@ \@plus \p@}{\z@ \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{false}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 2 + \endgroup + \setparsizes{\z@}{1\baselineskip \@plus .1\baselineskip}{% + \z@ \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{full-}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 3 + \endgroup + \setparsizes{\z@}{.5\baselineskip \@plus .5\baselineskip}{% + \z@ \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{half-}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 4 + \endgroup + \setparsizes{\z@}{1\baselineskip \@plus .1\baselineskip}{% + 1em \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{full}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 5 + \endgroup + \setparsizes{\z@}{.5\baselineskip \@plus .5\baselineskip}{% + 1em \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{half}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 6 + \endgroup + \setparsizes{\z@}{1\baselineskip \@plus .1\baselineskip}{% + .3333\linewidth\@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{full+}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 7 + \endgroup + \setparsizes{\z@}{.5\baselineskip \@plus .5\baselineskip}{% + .3333\linewidth \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{half+}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 8 + \endgroup + \setparsizes{\z@}{1\baselineskip \@plus .1\baselineskip}{% + .25\linewidth \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{full*}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 9 + \endgroup + \setparsizes{\z@}{.5\baselineskip \@plus .5\baselineskip}{% + .25\linewidth \@plus 1fil}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{half*}% + \if@atdocument\AfterKOMAoptions{\selectfont}\fi + \or% 10 + \endgroup + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{absolute}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{relative}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{relative}% + \ifx\par@updaterelative\undefined + \expandafter\AtEndOfClass + \else + \expandafter\@firstofone + \fi + {% + \ifx\par@update\default@par@update + \let\par@update\par@updaterelative + \fi + \let\default@par@update=\par@updaterelative + }% + \or%11 + \endgroup + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{absolute}% + \KOMA@kav@remove{.\KOMAClassFileName}{parskip}{relative}% + \KOMA@kav@add{.\KOMAClassFileName}{parskip}{absolute}% + \ifx\par@updaterelative\undefined + \expandafter\AtEndOfClass + \else + \expandafter\@firstofone + \fi + {% + \ifx\par@update\default@par@update + \let\par@update\relax + \fi + \let\default@par@update=\relax + }% + \else% should never be + \endgroup + \fi + \else + \endgroup + \FamilyKeyStateUnknownValue + \fi +} +\KOMA@DeclareDeprecatedOption{parskip-}{parskip=full-} +\KOMA@DeclareDeprecatedOption{parskip+}{parskip=full+} +\KOMA@DeclareDeprecatedOption{parskip*}{parskip=full*} +\KOMA@DeclareDeprecatedOption{halfparskip}{parskip=half} +\KOMA@DeclareDeprecatedOption{halfparskip-}{parskip=half-} +\KOMA@DeclareDeprecatedOption{halfparskip+}{parskip=half+} +\KOMA@DeclareDeprecatedOption{halfparskip*}{parskip=half*} +\KOMA@DeclareDeprecatedOption{parindent}{parskip=false} +\KOMA@kav@add{.\KOMAClassFileName}{parskip}{false} +\KOMA@kav@add{.\KOMAClassFileName}{parskip}{absolute} +%</option> +% \end{macrocode} +% \end{option}^^A parindent … halfparskip* +% \end{option}^^A parskip +% +% \changes{v2.8i}{2001/07/22}{don't change \cs{baselinestretch}} +% +% \begin{length}{\lineskip,\normallineskip} +% The minimum line skip. +% \begin{macrocode} +%<*body> +\setlength{\lineskip}{\p@} +\setlength{\normallineskip}{\p@} +% \end{macrocode} +% \end{length} +% +% \begin{command}{\selectfont} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v3.33}{2021/01/21}{from \LaTeX{} 2021/06/01 use hook instead of +% patch} +% \begin{macro}{\scr@selectfont,\scr@new@selectfont} +% \changes{v2.95}{2006/04/14}{added} +% \changes{v3.10}{2010/09/28}{\pkg{everysel} support fixed} +% \changes{v3.10}{2010/09/28}{\pkg{tracefnt} supported} +% \changes{v3.10b}{2011/03/13}{\pkg{everysel} can be loaded inside +% \cs{begin\{document\}}} +% Because of \opt{parskip=relative} we need a hook to activate the changes of +% the paragraph values. A good place to do so is \cs{selectfont}. With +% \KOMAScript{} 3.00 we needed to patch this command. But from \LaTeX{} +% 2021/06/01 we can use a new generic hook. +% \begin{description} +% \item[Note:] We use 2021/05/01 instead of the official \LaTeX{} release date, +% because there were relevant earlier \LaTeX{} developer releases with that +% date. +% \end{description} +% \begin{macrocode} +\IfLTXAtLeastTF{2021/05/01}{% + \AddToHook{selectfont}{\par@update}% + \AfterPackage{everysel}{% + \IfPackageAtLeastTF{everysel}{2021/01/18}{}{% + \ClassError{\KOMAClassName}{% + incompatible `everysel' detected + }{% + You are using an old version of `everysel' in combination with a + LaTeX\MessageBreak + version >= 2021/06/01 and KOMA-Script >= 3.33. This combination + is\MessageBreak + not supported.\MessageBreak + You could switch back to an older LaTeX using package + `latexrelease'.\MessageBreak + But I recommend to update `everysel'% + }% + }% + }% + \AfterPackage{tracefnt}{% + \IfPackageAtLeastTF{tracefnt}{2020/12/22}{}{% + \ClassError{\KOMAClassName}{% + incompatible `tracefnt' detected + }{% + `tracefnt' is a LaTeX base package and therefore should be updated + together\MessageBreak + with LaTeX kernel. So this should never happen! Please check + your\MessageBreak + LaTeX installation% + }% + }% + }% +}{% + \newcommand*{\scr@selectfont}{} + \expandafter\let\expandafter\scr@selectfont\csname selectfont \endcsname + \BeforePackage{everysel}{% + \AtBeginDocument{% + \expandafter\ifx\csname selectfont \endcsname\scr@new@selectfont\else + \ClassWarningNoLine{\KOMAClassName}{% + discard change of \string\selectfont}% + \fi + \expandafter\let\csname selectfont \endcsname\scr@selectfont + }% + }% + \AfterPackage{everysel}{% + \scr@ifundefinedorrelax{@EverySelectfont@Init}{% + \expandafter\ifx\csname selectfont \endcsname\scr@new@selectfont + \ClassWarningNoLine{\KOMAClassName}{% + \string\selectfont\space already changed}% + \else + \expandafter\g@addto@macro\csname selectfont \endcsname{\par@update}% + \expandafter\let\expandafter\scr@new@selectfont + \csname selectfont \endcsname + \fi + }{% + \g@addto@macro\@EverySelectfont@Init{% + \expandafter\g@addto@macro\csname selectfont \endcsname{\par@update}% + \expandafter\let\expandafter\scr@new@selectfont + \csname selectfont \endcsname + }% + }% + }% + \AfterPackage{tracefnt}{% + \expandafter\let\expandafter\scr@selectfont\csname selectfont \endcsname + \expandafter\g@addto@macro\csname selectfont \endcsname{\par@update}% + \expandafter\let\expandafter\scr@new@selectfont\csname selectfont \endcsname + }% + \expandafter\g@addto@macro\csname selectfont \endcsname{\par@update} + \newcommand*{\scr@new@selectfont}{} + \expandafter\let\expandafter\scr@new@selectfont\csname selectfont \endcsname +} +% \end{macrocode} +% \end{macro}^^A \scr@selectfont,\scr@new@selectfont +% \end{command}^^A \selectfont +% +% \begin{macro}{\scr@defaultunits} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v3.19}{2015/08/22}{\cs{setlength} replaced because of \pkg{tikz}} +% \begin{macro}{\scr@@defaultunits} +% \changes{v2.95}{2004/11/05}{added} +% \begin{macro}{\scr@@@defaultunits} +% \changes{v2.95}{2004/11/05}{added} +% \changes{v3.19}{2015/08/22}{\cs{setlength} and \cs{addtolength} replaced +% because of \pkg{tikz}} +% Above we've already used \cs{scr@defaultunits} inside +% \cs{par@updaterelative}. This is very similar to the \LaTeX{} kernel macro +% \cs{@defaultunits}, but accepts dimensions or skips as first and second +% value. +% \begin{macrocode} +\newcommand*{\scr@defaultunits}[2]{% + \begingroup + \edef\@tempa{#2}% + \expandafter\scr@@defaultunits\expandafter#1\@tempa plusplus\@nnil + \edef\@tempa{\noexpand\endgroup\noexpand#1\the\glueexpr #1\relax}% + \@tempa +} +\newcommand*{\scr@@defaultunits}{} +\def\scr@@defaultunits#1#2plus#3plus#4\@nnil{% + \ifx\relax#3\relax + \scr@@@defaultunits#1{}#2minusminus\@nnil + \else + \scr@@@defaultunits#1{#2}#3minusminus\@nnil + \fi +} +\newcommand*{\scr@@@defaultunits}{} +\def\scr@@@defaultunits#1#2#3minus#4minus#5\@nnil{% + \ifx\relax#2\relax + \@defaultunits\@tempskipa#3pt\relax\@nnil + #1\@tempskipa + \else + \@defaultunits\@tempskipa\z@\@plus#3pt\relax\@nnil + #1\@tempskipa + \@defaultunits\@tempskipa#2pt\relax\@nnil + \advance#1\@tempskipa + \fi + \ifx\relax#4\relax\else + \@defaultunits\@tempskipa\z@\@minus #4pt\relax\@nnil + \advance#1\@tempskipa + \fi +} +%</body> +% \end{macrocode} +% \end{macro}^^A \scr@@@defaultunits +% \end{macro}^^A \scr@@defaultunits +% \end{macro}^^A \scr@defaultunits +% +% \subsection{Extra list code} +% +% \begin{macro}{\@list@extra} +% \changes{v2.8q}{2001/11/06}{added} +% \changes{v2.95c}{2006/08/03}{\len{parsep} fixed} +% \begin{macro}{\add@extra@listi} +% \changes{v2.9h}{2002/09/03}{added} +% Some parameters of lists have to change, depending on the settings for +% paragraphs. +% \begin{description} +% \item[ToDo:] Move this code to \file{scrkernel-listsandtabulars.dtx} or +% \file{scrkernel-fontsizes.dtx}. +% \end{description} +% \begin{macrocode} +%<*body> +\newcommand*{\@list@extra}{% + \ifdim\parskip>\z@\topsep\z@\parsep\parskip\itemsep\z@\fi +} +\newcommand*{\add@extra@listi}[1]{% + \expandafter\let\csname #1@listi\endcsname=\@listi + \def\@listi{\csname #1@listi\endcsname\@list@extra}% +} +%</body> +% \end{macrocode} +% \end{macro}^^A \@list@extra +% \end{macro}^^A \add@extra@listi +% +% \subsection{Patching other packages} +% +% \begin{macro}{\deferred@thm@head} +% \changes{v3.27}{2019/02/10}{new patch of \textsf{amsthm}} +% Unfortunatly \pkg{amsthm} has a problem if a class handles \len{topsep} +% this way, because it is only prepared for the case, that \len{parskip} and +% \len{parsep} are changed manually without influence to \len{topsep}. So the +% initial distance is missing. To avoid this problem, we need to patch the +% package's internal command \cs{deferred@thm@head}. This is not nice, but +% unfortunaltly needed. +% \begin{description} +% \item[ToDo:] Move this code to the package patch code of +% \file{scrkernel-miscellaneous.dtx} resp. a new file as noted there. +% \end{description} +% \begin{macrocode} +%<*body> +\AfterPackage{amsthm}{% + \RequirePackage{xpatch}% + \xpatchcmd{\deferred@thm@head}{\addvspace{-\parskip}}{}{% + \ClassInfoNoLine{\KOMAClassName}{% + amsthm's \string\deferred@thm@head\space patched}% + }{% + \ClassWarningNoLine{\KOMAClassName}{% + cannot patch amsthm's \string\deferred@thm@head.\MessageBreak + This could result in wrong spacing before theorem\MessageBreak + environments defined by package `amsthm'% + }% + }% +} +%</body> +% \end{macrocode} +% \end{macro} +% +% \subsection{Extra code for font sizes} +% +% \begin{description} +% \item[ToDo:] Move this to \file{scrkernel-fontsizes.dtx}. +% \end{description} +% \begin{macrocode} +% \end{macrocode} +% +% \changes{v2.98c}{2008/03/26}{changed to be used in font size files} +% \changes{v3.17}{2015/03/25}{update of paragraph settings} +% \begin{macro}{\@listi} +% \changes{v2.98c}{2008/03/27}{\cs{g@addto@macro} replaced by \cs{l@addto@macro}} +% \changes{v3.01}{2008/11/13}{\cs{@listi} wird auf jeden Fall ausgeführt} +% \begin{macro}{\@listI} +% \begin{macro}{\@listii,\@listiii} +% \changes{v2.98c}{2008/03/27}{\cs{g@addto@macro} replaced by \cs{l@addto@macro}} +% \begin{command}{\footnotesize,\small} +% \changes{v2.9h}{2002/09/03}{improved} +% \changes{v2.98c}{2008/03/27}{\cs{g@addto@macro} replaced by \cs{l@addto@macro}} +% \begin{macrocode} +%</class> +%<*class|clo> +%<*body|10pt|11pt|12pt> +%<10pt|11pt|12pt>\@ifundefined{@list@extra}{}{% +%<10pt|11pt|12pt> \expandafter\ifnum\scr@v@is@ge{3.17}\par@updaterelative\fi + \l@addto@macro{\@listi}{\@list@extra}% + \let\@listI=\@listi + \l@addto@macro{\@listii}{\@list@extra}% + \l@addto@macro{\@listiii}{\@list@extra}% + \l@addto@macro{\footnotesize}{\protect\add@extra@listi{ftns}}% + \l@addto@macro{\small}{\protect\add@extra@listi{sml}}% +%<10pt|11pt|12pt>} +%<10pt|11pt|12pt>\@listi +%</body|10pt|11pt|12pt> +%</class|clo> +%<*class> +% \end{macrocode} +% \end{command} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{Page layout parameters} +% +% \begin{length}{\columnsep,\columnseprule} +% Initial column separation. Note, we do not support two column letters. So +% this is not initialized for the letter class. +% \begin{macrocode} +%<*!letter&body> +\setlength{\columnsep}{10\p@} +\setlength{\columnseprule}{\z@} +%</!letter&body> +% \end{macrocode} +% \end{length} +% +% +% \subsection{Penalties} +% +% The initial values for the penalties are the same as for the standard classes. +% \begin{macrocode} +%<*body> +\@lowpenalty = 51 +\@medpenalty =151 +\@highpenalty =301 +%</body> +% \end{macrocode} +% +% +% \begin{macrocode} +%</class> +% \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: + |