% \iffalse meta-comment
% ======================================================================
% scrkernel-miscellaneous.dtx
% Copyright (c) Markus Kohm, 2002-2020
%
% This file is part of the LaTeX2e KOMA-Script bundle.
%
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, version 1.3c of the license.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later and of this work.
%
% This work has the LPPL maintenance status "author-maintained".
%
% The Current Maintainer and author of this work is Markus Kohm.
%
% This work consists of all files listed in manifest.txt.
% ----------------------------------------------------------------------
% scrkernel-miscellaneous.dtx
% Copyright (c) Markus Kohm, 2002-2020
%
% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz,
% Version 1.3c, verteilt und/oder veraendert werden.
% Die neuste Version dieser Lizenz ist
% http://www.latex-project.org/lppl.txt
% und Version 1.3c ist Teil aller Verteilungen von LaTeX
% Version 2005/12/01 oder spaeter und dieses Werks.
%
% Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained"
% (allein durch den Autor verwaltet).
%
% Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm.
%
% Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien.
% ======================================================================
% \fi
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
% \iffalse
%%% From File: $Id: scrkernel-miscellaneous.dtx 3487 2020-04-27 07:19:23Z kohm $
%%%% (run: init)
%
%<*option>
% \fi
%
% \subsection{Optionen für Entwürfe}
%
% \begin{option}{draft}
% \changes{v2.95}{2002/12/05}{mit \textsl{keyval} reimplementiert}%^^A
% \changes{v3.17}{2015/03/12}{interne Speicherung der Werte}%^^A
% \changes{v3.25}{2017/11/21}{Beachtung von Option \texttt{overfullrule}}%^^A
% \begin{option}{final}
% \changes{v2.95}{2002/12/05}{obsolete Option}%^^A
% \changes{v2.97d}{2007/10/03}{\cs{PackageInfo} durch \cs{PackageInfoNoLine}
% ersetzt}
% \changes{v3.01a}{2008/11/21}{standard statt obsolet}%^^A
% \changes{v3.02c}{2008/02/17}{optionales Argument im Fall von
% \textsf{scrextend} gesetzt}
% \changes{v3.12}{2013/03/05}{Nutzung der Status-Signalisierung mit
% \cs{FamilyKeyStateProcessed}}%
% Der einzige Unterschied zwischen Entwürfen und Endversionen ist aus
% Sicht der Klassen, ob Zeilenüberhänge mit einem schwarzen Balken
% angezeigt werden sollen oder nicht.
% \begin{macrocode}
%<*class|extend>
\KOMA@key{draft}[true]{%
\KOMA@set@ifkey{draft}{@tempswa}{#1}%
\ifx\FamilyKeyState\FamilyKeyStateProcessed
\if@tempswa
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{draft}{@tempswa}%
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{overfullrule}{@tempswa}%
\setlength{\overfullrule}{5pt}%
\else
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{draft}{@tempswa}%
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{overfullrule}{@tempswa}%
\setlength{\overfullrule}{\z@}%
\fi
\fi
}
%\KOMA@kav@add{.\KOMAClassFileName}{draft}{false}
%<*package&extend>
\KOMA@kav@xadd{.scrextend.\scr@pkgextension}{draft}{%
\ifdim\overfullrule>\z@ true\else false\fi
}
%
\KOMA@DeclareStandardOption
%[scrextend]
{final}{draft=false}
%
% \end{macrocode}
% \begin{option}{overfullrule}
% \changes{v3.25}{2017/11/21}{new option}%^^A
% \selectlanguage{english}%^^A
% Because option \texttt{draft} can result in unwanted effects I've added a
% new option to explicite only change the overfull rule setting. However for
% \textsf{scrextend} and the \KOMAScript{} classes the result is the same.
% \begin{macrocode}
%<*class|extend>
\KOMA@key{overfullrule}[true]{%
\KOMA@set@ifkey{overfullrule}{@tempswa}{#1}%
\ifx\FamilyKeyState\FamilyKeyStateProcessed
\if@tempswa
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{draft}{@tempswa}%
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{overfullrule}{@tempswa}%
\setlength{\overfullrule}{5pt}%
\else
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{draft}{@tempswa}%
\KOMA@kav@replacebool{.%
% \KOMAClassFileName
% scrextend.\scr@pkgextension
}{overfullrule}{@tempswa}%
\setlength{\overfullrule}{\z@}%
\fi
\fi
}
%\KOMA@kav@add{.\KOMAClassFileName}{overfullrule}{false}
%<*package&extend>
\KOMA@kav@xadd{.scrextend.\scr@pkgextension}{overfullrule}{%
\ifdim\overfullrule>\z@ true\else false\fi
}
%
%
% \end{macrocode}
% \selectlanguage{ngerman}%^^A
% \end{option}%^^A overfullrule
% \end{option}%^^A final
% \end{option}%^^A draft
%
%
% \subsection{Optionen für Gleichungen}
%
% Briefe haben derzeit keine Gleichungen.
% \iffalse
%<*!letter>
% \fi
%
% \begin{option}{leqno}
% \begin{option}{fleqno}
% Es können Gleichungsnummern links oder linksbündige Gleichungen
% eingestellt werden.
% \begin{macrocode}
%<*!extend>
\DeclareOption{leqno}{\input{leqno.clo}}
\DeclareOption{fleqn}{\input{fleqn.clo}}
%!extend>
% \end{macrocode}
% \end{option}
% \end{option}
%
% \iffalse
%!letter>
% \fi
%
% \subsection{Optionen für \texttt{egreg}}
%
% \texttt{egreg} hat in einem Kommentar zu
% \url{https://tex.stackexchange.com/questions/289853} verlauten lassen, dass
% er \KOMAScript{} u.\,a. deshalb nicht verwendet, weil \KOMAScript{}
% serifenlose Fonts für Überschriften voreingestellt hat. Er hätte lieber die
% hässlichen, fetten Antiqua-Fonts. Außerdem reicht es ihm nicht, dass man das
% einfach per \cs{setkomafont} ändern kann. Er will eine Option dafür. Nun,
% die soll er haben:
%
% \begin{option}{egegdoesnotlikesansseriftitles}
% \changes{v3.20}{2016/01/29}{neu (speziell)}
% \changes{v3.20a}{2016/05/19}{auch in der Briefklasse}
% \begin{macro}{\@gr@gsffamily}
% \changes{v3.20}{2016/01/29}{neu (intern)}
% \changes{v3.20a}{2016/05/19}{auch in der Briefklasse}
% Schaltet je nach Einstellung von Option
% \texttt{egegdoesnotlikesansseriftitles} entweder auf \cs{sffamily} um oder
% eben nicht.
% \begin{macrocode}
%<*!(package&letter)>
\KOMA@ifkey{egregdoesnotlikesansseriftitles}{@egregdoesnotlikesansseriftitles}
\newcommand*{\@gr@gsffamily}{%
\if@egregdoesnotlikesansseriftitles\else\sffamily\fi
}
%!(package&letter)>
% \end{macrocode}
% \end{macro}%^^A \@gr@gsffamily
% \end{option}%^^A egregdoesnotlikesansseriftitles
%
% \iffalse
%
%<*execoption>
% \fi
%
%
% \subsection{Standardeinstellungen für die Optionen}
%
% Am Ende aller Optionen wird zunächst die Standardeinstellungen der
% Optionen vorgenommen und dann alle Optionen ausgeführt. Dies
% geschieht zwischen den Optionen und dem Körper dieser Datei.
%
% Es müssen die Standardoptionen festgelegt und alle Optionen
% ausgewählt werden.
% \changes{v2.97c}{2007/04/19}{Verwendung von \cs{KOMAExecuteOptions} an
% Stelle von \cs{KOMAoptions} und \cs{KOMAProcessOptions} an Stelle von
% \cs{ProcessOptions}}
% \changes{v2.97c}{2007/04/19}{Optionen, die der Voreinstellung ohnehin
% entsprechen, werden nicht explizit gesetzt}%^^A
% \changes{v2.97c}{2007/07/18}{Option \texttt{twoside} bei den
% Voreinstellungen rausgenommen}
% \changes{v2.98c}{2008/03/10}{Option \texttt{headings!=big} zu den
% Voreinstellungen hinzugefügt}
% \changes{v3.11c}{2013/03/04}{Option \texttt{headings!=big} nicht für die
% Briefklasse}
% \begin{macrocode}
%<*class>
\KOMAExecuteOptions{%
parskip=false,%
% headings=big%
}
%
\KOMAProcessOptions\relax
% \end{macrocode}
%
%
% \iffalse
%
%<*body>
% \fi
%
%
% \subsection{Temporäre Umschaltung zwischen ein- und zweispaltigem
% Satz}
%
% Briefe sind immer einspaltig, benötigen also den Schalter nicht.
% \iffalse
%<*!letter>
% \fi
%
% \begin{macro}{\if@restonecol}
% \begin{macro}{\@restonecoltrue}
% \begin{macro}{\@restonecolfalse}
% Damit innerhalb einer Umgebung lokal auf ein- oder zweispaltigen
% Satz umgeschaltet werden kann, wird ein Schalter benötigt. Dieser
% wird dann dafür verwendet, sich zu merken, dass eine Umschaltung
% stattgefunden hat und am Ende der Umgebung wieder aufzuheben
% ist. Der Schalter wird nicht in Umgebungen verwendet, die
% geschachtelt werden. Verwendung findet er beispielsweise für
% Titelseiten und das Inhaltsverzeichnis.
% \begin{macrocode}
%<*!extend>
\newif\if@restonecol
%!extend>
%<*extend>
\scr@ifundefinedorrelax{if@restonecol}{%
\expandafter\newif\csname if@restonecol\endcsname
\@restonecolfalse
}{}
%
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \iffalse
%!letter>
% \fi
%
% \subsection{Definitionen für den schlauen Spruch}
%
% Den schlauen Spruch gibt es nicht bei Briefen.
% \iffalse
%<*!letter>
% \fi
%
% \begin{macro}{\dictum}
% \changes{v2.8q}{2001/20/04}{neu}%^^A
% \changes{v2.9l}{2003/01/28}{\cs{edef} durch \cs{def} ersetzt}
% \changes{v2.9q}{2004/04/19}{zur Vermeidung von Problemen durch
% \cs{raggeddictum} Gruppe eingef"ugt}
% \begin{macro}{\dictumwidth}
% \changes{v2.8q}{2001/20/04}{neu}%^^A
% \begin{macro}{\raggeddictum}
% \changes{v2.8q}{2001/20/04}{neu}%^^A
% \begin{macro}{\raggeddictumtext}
% \changes{v2.8q}{2001/20/04}{neu}%^^A
% \begin{macro}{\raggeddictumauthor}
% \changes{v2.8q}{2001/20/04}{neu}%^^A
% \begin{KOMAfont}{dictum}
% \changes{v2.8q}{2001/20/04}{neues Element}%^^A
% \changes{v3.20}{2016/01/29}{\cs{sffamily} durch \cs{@gr@gsffamily}
% ersetzt}%^^A
% \begin{KOMAfont}{dictumtext}
% \changes{v2.8q}{2001/20/04}{neues Element}%^^A
% \begin{KOMAfont}{dictumauthor}
% \changes{v2.8q}{2001/20/04}{neues Element}%^^A
% \begin{macro}{\dictumauthorformat}
% \changes{v2.8q}{2001/20/04}{neu}%^^A
% \begin{macro}{\dictumrule}
% \changes{v3.10}{2011/09/02}{neu}%^^A
% Ein \emph{dictum} ist ein Spruch. Er besteht aus dem Spruch selbst
% und verfügt optional über einen Autor, der dann mit einer Linie
% abgetrennt wird. Gibt es keinen Autor, gibt es auch keine Linie. Die
% Schriften für Autor und Spruch können getrennt voneinander
% eingestellt werden. Die Anordnung des Spruchs wird durch
% \cs{raggeddictumtext} gesetzt. Die des Autors durch
% \cs{raggeddictumauthor}. Die Formatierung selbst geschieht mit dem
% Makro \cs{dictumauthorformat}. Vordefiniert ist, den Namen des
% Autors in runde Klammern zu setzen. Die gesamte Geschichte von Text
% und Autor wird in eine Box der Breite \cs{dictumwidth}
% gepackt. Diese wird mit \cs{raggeddictum} angeordnet.
% \begin{macrocode}
\newcommand{\dictum}[2][]{\par%
\begingroup
\raggeddictum\parbox{\dictumwidth}{%
{\@dictumfont{\raggeddictumtext #2\strut\par}%
\def\@tempa{#1}\ifx\@tempa\@empty\else%
{\raggeddictumtext\dictumrule}%
\raggeddictumauthor\@dictumauthorfont\dictumauthorformat{#1}%
\strut\par%
\fi%
}%
}\par%
\endgroup
}
\newcommand*{\dictumrule}{\vskip-1ex\hrulefill\par}%
\newcommand*{\dictumwidth}{.3333\textwidth}
\newcommand*{\raggeddictum}{\raggedleft}
\newcommand*{\dictumauthorformat}[1]{(#1)}
\newcommand*{\raggeddictumtext}{\raggedright}
\newcommand*{\raggeddictumauthor}{\raggedleft}
\newkomafont{dictum}{\normalfont\normalcolor\@gr@gsffamily\small}
\newkomafont{dictumauthor}{\itshape}
\aliaskomafont{dictumtext}{dictum}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{KOMAfont}
% \end{KOMAfont}
% \end{KOMAfont}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \iffalse
%!letter>
% \fi
%
% \subsection{Längen für Minipages und Rahmen}
%
% \begin{Length}{@mpfootins}
% \begin{Length}{fboxsep}
% \begin{Length}{fboxrule}
% \cs{@mpfootins} entspricht \cs{footins} in Minipages. \cs{fboxsep}
% ist der Abstand zwischen dem Rahmen einer \cs{fbox} oder
% \cs{framebox} und dem Inhalt, \cs{fboxrule} ist die Dicke des
% Rahmens.
% \begin{macrocode}
%<*class>
\setlength{\skip\@mpfootins}{\skip\footins}
\setlength\fboxsep{3\p@}
\setlength\fboxrule{.4\p@}
%
% \end{macrocode}
% \end{Length}
% \end{Length}
% \end{Length}
%
%
% \subsection{Gleichungen}
%
% Gleichungen gibt es bei Briefen nicht.
% \iffalse
%<*!letter>
% \fi
%
% \begin{macro}{\theequation}
% \changes{v2.97e}{2007/11/23}{Kapitelnummer nur im Hauptteil}%^^A
% \changes{v3.27}{2019/06/26}{\cs{relax} replaced by percent}%^^A
% Darstellung der Gleichungsnummer:
% \begin{macrocode}
%<*!extend>
%\@addtoreset{equation}{chapter}
\renewcommand*\theequation{%
%<*book>
\expandafter\ifnum\scr@v@is@gt{2.97d}%
\if@mainmatter\thechapter.\fi
\else
%
% \thechapter.%
% \fi
\@arabic\c@equation
}
%!extend>
% \end{macrocode}
% \end{macro}
%
% \iffalse
%!letter>
% \fi
%
% \subsection{Definitionen zur Feststellung von linken und rechten
% Seiten}
%
% \begin{macro}{\ifthispageodd}
% \changes{v2.8q}{2001/11/22}{neu}%^^A
% \changes{v3.28}{2019/11/19}{umbenannt in \cs{Ifthispageodd}}%^^A
% \begin{macro}{\Ifthispageodd}
% \changes{v3.28}{2019/11/19}{neu aus Umbenennung von \cs{ifthispageodd}}%^^A
% Häufig wird mit \cs{ifodd}\cs{value\{page\}} getestet, ob man sich
% gerade auf einer rechten oder einer linken Seite
% befindet. Dummerweise funktioniert das aber genaugenommen nur
% zufällig manchmal. Ob man sich auf einer linken oder einer rechten
% Seite befindet, ergibt sich nämlich erst bei der Ausgabe. Deshalb
% wird hier ein Makro definiert, das über eine Art Label-Mechanismus
% arbeitet. Es werden bewusst keine echten \cs{label} und \cs{pageref}
% verwendet, weil diese Befehle von verschiedenen Paketen manipuliert
% werden.
%
% \begin{macro}{\new@tpo@label}
% \changes{v2.8q}{2001/11/22}{neu (intern)}%^^A
% \changes{v2.95b}{2006/07/28}{verwendet jetzt \cs{@newl@bel}}%^^A
% \changes{v3.20}{2016/03/25}{use after definition in \texttt{aux}-file}%^^A
% Definition eines neuen \emph{true}-\emph{page}-\emph{odd} Labels.
% Wird in der \texttt{aux}-Datei verwendet.
% \begin{macrocode}
%<*class|extend>
\newcommand*{\new@tpo@label}{\@newl@bel{tpo}}
\AtBeginDocument{%
\if@filesw
\immediate\write\@auxout{%
\string\providecommand*\string\new@tpo@label[2]{}%
}%
\fi
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\scr@tpo}
% \changes{v2.8q}{2001/11/22}{neu (intern)}%^^A
% Es wird ein Zähler benötigt, der die aktuelle Nummer der Anfrage
% beinhaltet.
% \begin{macrocode}
\newcommand*{\scr@tpo}{0}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\is@thispageodd}
% \changes{v2.8q}{2001/11/22}{neu (intern)}%^^A
% \changes{v2.9l}{2003/01/28}{renamed \cs{if@thispageodd}}%^^A
% \changes{v2.95b}{2006/07/28}{basiert nun auf \cs{@newl@bel}}%^^A
% \changes{v3.17}{2015/03/23}{in zwei Anweisungen ausgeteilt}%^^A
% \begin{macro}{\is@thispageodd@setlabel}
% \changes{v3.17}{2015/03/23}{neu (intern)}%^^A
% \changes{v3.20}{2016/03/25}{schreibe in die \texttt{aux}-Datei nur
% \cs{if@filesw}}%^^A
% \changes{v3.23}{2017/02/23}{Macro leert sich nach Benutzung selbst}%^^A
% Diese Makros machen die eigentliche Arbeit. Sie funktionieren nicht wie
% ein normales \cs{iffalse} oder \cs{iftrue}, denn es kann nicht
% geschachtelt innerhalb anderer \cs{if\dots} \dots \cs{fi}
% Klammerungen verwendet werden. Es sollte daher niemals außerhalb von
% \cs{ifthispageodd} verwendet werden. Da über die \texttt{aux}-Datei
% gearbeitet wird, funktioniert das Ganze nur, wenn die Datei auch
% geschrieben wird und min. zwei \LaTeX-Läufe erfolgen.
% \begin{macrocode}
\newcommand*{\is@thispageodd}[1][\is@thispageodd@setlabel]{%
\@bsphack
\begingroup
\@tempcnta=\scr@tpo
\advance\@tempcnta by\@ne
\xdef\scr@tpo{\the\@tempcnta}%
\expandafter\ifx\csname tpo@\scr@tpo\endcsname\relax
\protect\G@refundefinedtrue
% \ClassWarning{\KOMAClassName}{%
% \PackageWarning{scrextend}{%
odd/even page label number \scr@tpo\space undefined}%
\edef\@tempa{\the\value{page}}%
\else
\edef\@tempa{\csname tpo@\scr@tpo\endcsname}%
\fi
\ifodd\number\@tempa
\aftergroup\thispagewasoddtrue
\else
\aftergroup\thispagewasoddfalse
\fi
\endgroup
\edef\is@thispageodd@setlabel{%
\if@filesw
\unexpanded{\protected@write\@auxout{\let\arabic\relax}}{%
\noexpand\string
\noexpand\new@tpo@label{\scr@tpo}{\noexpand\arabic{page}}}%
\fi
\noexpand\def\noexpand\is@thispageodd@setlabel
{\unexpanded\expandafter{\is@thispageodd@setlabel}}%
}%
#1%
\@esphack
}
\newcommand*{\is@thispageodd@setlabel}{}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifthispagewasodd}
% \changes{v2.9l}{2003/01/20}{neuer Schalter}%^^A
% \begin{macro}{\thispagewasoddtrue}
% \begin{macro}{\thispagewasoddfalse}
% Dieser Schalter speichert auf Rolf Niepraschks speziellen Wunsch die
% letzte Entscheidung von \cs{ifthispageodd}. Vor dem ersten
% \cs{ifthispageodd} ist der Zustand undefiniert. Es ist auch nicht
% garantiert, dass die Entscheidung noch zutreffend ist.
% \begin{macrocode}
\newif\ifthispagewasodd
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% Nun fehlt nur noch das eigentliche oben versprochene
% Anwendermacro. Das ist nun aber auch kein Problem mehr:
% \changes{v3.31}{2020/04/27}{Klasse und Paket in der Ausgabe korrigiert}%^^A
% \begin{macrocode}
\providecommand*{\ifthispageodd}{%
% \ClassWarning{\KOMAClasSName}{%
% \PackageWarning{scrextend}{%
Usage of deprecated command
`\string\ifthispageodd'.\MessageBreak
The command has been renamed because of a\MessageBreak
recommendation of The LaTeX Project Team.\MessageBreak
Please replace `\string\ifthispageodd' by `\string\Ifthispageodd'%
}%
\Ifthispageodd
}
\newcommand{\Ifthispageodd}{%
\is@thispageodd
\ifthispagewasodd
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \subsection{Definitionen für tiefer gestellten Text}
%
% \begin{macro}{\textsubscript}
% \changes{v2.8h}{2001/07/19}{neu}%^^A
% \begin{macro}{\@textsubscript}
% \changes{v2.8h}{2001/07/19}{neu (intern)}%^^A
% \changes{v3.10}{2011/09/05}{\cs{providecommand} statt \cs{newcommand},
% damit das auch noch funktioniert, wenn \textsf{scrextend} nach
% \textsf{fixltx2e} geladen wird}%^^A
% \changes{v3.25}{2017/11/15}{wird nur noch definiert, wenn nicht vorhanden}%^^A
% Im \LaTeX-Kern wird zwar ein Makro \cs{textsuperscript} definiert,
% um Texte hochstellen zu können, die entsprechende Anweisung zum
% Tiefstellen fehlt jedoch. Das wird hier nachgeholt, wobei nahezu
% unverändert auf die Definition aus dem \LaTeX-Kern zurückgegriffen
% wird.
% \begin{macrocode}
%<*class|extend>
\scr@ifundefinedorrelax{textsubscript}{%
\DeclareRobustCommand*\textsubscript[1]{%
\@textsubscript{\selectfont#1}%
}%
}{%
\scr@ifundefinedorrelax{textsubscript }{%
\DeclareRobustCommand*\textsubscript[1]{%
\@textsubscript{\selectfont#1}%
}%
}{}%
}
\providecommand*{\@textsubscript}[1]{%
{\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}%
}
%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \subsection{Unsichtbare Stütze}
% \label{sec:strut}
%
% \begin{macro}{\scr@endstrut}
% \changes{v3.25}{2017/11/15}{neu (intern)}%^^A
% Wird am Ende eines vermutlich horizontalen Materials eine unsichtbare Stütze
% der Art \cs{strut} eingebaut, werden Leerzeichen, die davor stehen plötzlich
% zu Leerzeichen in der Ausgabe, auch wenn das gar nicht erwünscht wird. Das
% kann man verhindern, indem man \cs{unskip} davor setzt. Dummer Weise hat
% eine solche Stütze dann aber das Problem, dass das letzte Wort davor nicht
% mehr getrennt wird. Verrückter Weise kann man das wiederum mit \cs{nobreak}
% lösen. Das sollte dann auch nur im horizontalen Modus gemacht werden.
% \begin{macrocode}
%<*class|letter|extend>
\providecommand*{\scr@endstrut}{\unskip\ifhmode\nobreak\strut\fi}
%
% \end{macrocode}
% \end{macro}
%
%
%
% \subsection{Warnung vor Paketen}
% \label{sec:packagewarning}
%
% \changes{v3.12}{2013/07/08}{neue Warnungen vor bestimmten Paketen}%^^A
% \begin{macro}{\scr@package@not@recommended}
% \changes{v3.12}{2013/07/08}{neu (intern)}%^^A
% Beim Laden verschiedener Pakete wird nun eine Warnung ausgegeben. In der
% Regel mit einer Alternativempfehlung.
% \begin{macro}{\class@shoulddisablepackagewarning@list}
% \changes{v3.24}{2017/06/25}{neu (nur für Klassenautoren)}%^^A
% Ab \KOMAScript~3.24 ist für Klassenautoren und nur für diese dokumentiert,
% dass bei Vorhandensein des Makros
% \cs{class@shoulddisablepackagewarning@list} während dem Laden der
% \KOMAScript-Klasse für nicht empfohlene Pakete ein
% \cs{in@}-Vergleich gegen genau den Inhalt dieses Makros stattfindet. Wird
% der Paketname dabei gefunden, so unterbleibt das Absetzen der Warnung. Zur
% korrekten Syntax des zweiten Arguments von \cs{in@} sei ausdrücklich auf den
% Kernel hingewiesen. Ebenso sind Klassenautoren verantwortlich, eine bereits
% vorhandene Liste nicht einfach zu überschreiben, sondern korrekt zu
% ergänzen! Eine Definition von \cs{class@shoulddisablepackagewarning@list}
% nach dem Laden der \KOMAScript-Klasse ist wirkungslos. Da diese
% Schnittstelle Klassenautoren vorbehalten bleiben soll, die wissen, was sie
% tun, gibt es keine weitergehende Dokumentation dazu und natürlich auch kein
% Beispiel.
% \begin{macrocode}
%<*class>
\newcommand*{\scr@package@not@recommended}[2]{%
\scr@ifundefinedorrelax{class@shoulddisablepackagewarning@list}{%
\@firstofone
}{%
\edef\reserved@a{%
\noexpand\in@{#1}{\class@shoulddisablepackagewarning@list}}%
\reserved@a
\ifin@\expandafter\@gobble\else\expandafter\@firstofone\fi
}{%
\BeforePackage{#1}{%
\ClassWarning{\KOMAClassName}{%
Usage of package `#1' together\MessageBreak
with a KOMA-Script class is not recommended.\MessageBreak
\if\relax\detokenize{#2}\relax\else
I'd suggest to use #2.\MessageBreak
\fi
Nevertheless, using requested\MessageBreak
package `#1'%
}%
}%
}%
}%
% \end{macrocode}
% \end{macro}%^^A \class@shoulddisablepackagewarning@list
%
% \textsf{emptypage} wird nicht benötigt, weil es bereits entsprechende
% Einstellungen in \KOMAScript{} gibt. Darüber hinaus verwendet es
% \cs{thispagestyle} an Stelle von \cs{pagestyle} in einer Gruppe, was
% dazu führen kann, dass nach einem \cs{cleardoublepage}, das keine leere
% Seite erzeugt, die nächste Seite den entsprechenden Seitenstil bekommt.
% \begin{macrocode}
\scr@package@not@recommended{emptypage}{%
option\MessageBreak
`cleardoublepage' with one of it's\MessageBreak
several values}
% \end{macrocode}
%
% \textsf{fancyhdr} verwendet veraltete Font-Befehle und beachtet die
% Font-Einstellungen und diverse andere Befehle und Optionen von \KOMAScript{}
% nicht.
% \changes{v3.24}{2017/06/25}{improved \textsf{fancyhdr} warning}%^^A
% \begin{macrocode}
\scr@package@not@recommended{fancyhdr}{%
\MessageBreak
package `scrlayer' or `scrlayer-scrpage', because\MessageBreak
they support KOMA-Script classes.\MessageBreak
With `fancyhdr' several features of class `\KOMAClassName'\MessageBreak
like options `headsepline', `footsepline' or command\MessageBreak
`\string\MakeMarkcase' and the commands `\string\setkomafont' and\MessageBreak
`\string\addtokomafont' for the page style elements need\MessageBreak
explicite user intervention to work}
% \end{macrocode}
% \changes{v3.23}{2017/02/04}{Verwendung von \textsf{minitoc} kann nicht
% empfohlen werden}%^^A
% \textsf{minitoc} definiert u.\,a. \cs{@sect} hart um und zerstört so diverse
% Erweiterungen von \KOMAScript. Es ist nicht abschließend untersucht, was das
% Paket noch alles zerstört. Derzeit gibt es nur einen Workaround für das
% genannte Problem mit \cs{@sect} (siehe:
% Abschnitt~\ref{sec:packageworkarounds}).
% \begin{macrocode}
\scr@package@not@recommended{minitoc}{}
% \end{macrocode}
%
% \selectlanguage{english}%^^A
% \changes{v3.26}{2018/07/18}{\textsf{multitoc} not recommended}%^^A
% \textsf{multitoc} not recommended, because up to version 2.01 it breaks all
% additional list-ofs and even table of contents, list of figures and list of
% tables, if option \texttt{toc}, \texttt{lof} or \texttt{lot} has not been
% set. And it is not needed, because you can use \cs{BeforeStartingTOC} and
% \cs{AfterStartingTOC} to make two-column list-ofs.
% \begin{macrocode}
%<*!letter>
\scr@package@not@recommended{multitoc}{%
package `multicol' and, e.g.:\MessageBreak
\space\space
\string\BeforeStartingTOC{\string\begin{multicols}{2}}\MessageBreak
\space\space
\string\AfterStartingTOC{\string\end{multicols}}\MessageBreak
to make all ToCs two-columned.\MessageBreak
\@ifpackagelater{2018/07/18}{}{%
Note, package `multitoc' breaks additional\MessageBreak
ToCs generated by `\string\DeclareNewTOC' or\MessageBreak
packages like `listings' or `newcaption' and\MessageBreak
even the standard table of contents,\MessageBreak
list of figures or list of tables,\MessageBreak
if you omit the corresponding options `toc',\MessageBreak
`lof' or `lot'.%
}%
}
%!letter>
% \end{macrocode}
% \selectlanguage{ngerman}%^^A
%
% \textsf{parskip} ist nur ein Notfallpaket für Klassen, die selbst keinen
% Absatzabstand unterstützen.
% \begin{macrocode}
\scr@package@not@recommended{parskip}{%
option\MessageBreak
`parskip' with one of it's several values}
% \end{macrocode}
%
% \changes{v3.16}{2015/01/21}{Verwendung von \textsf{titleps} kann nicht
% empfohlen werden}%^^A
% \textsf{titleps} beachtet die Font-Einstellungen und diverse andere Befehle
% und Optionen von \KOMAScript{} nicht.
% \begin{macrocode}
\scr@package@not@recommended{titleps}{%
package `scrlayer-scrpage'}
% \end{macrocode}
%
% \textsf{titlesec} beschädigt diverse \KOMAScript{} Erweiterungen und
% benötigt eigene Workarounds (siehe Abschnitt~\ref{sec:packageworkarounds}),
% so dass es einfach nicht gut mit \KOMAScript{} harmoniert.
% \begin{macrocode}
%<*!letter>
%<*ignorethis>
\scr@package@not@recommended{titlesec}{%
the package only\MessageBreak
if you really need it, because it breaks several\MessageBreak
KOMA-Script features, i.e., option `headings' and\MessageBreak
the extended optional argument of the section\MessageBreak
commands}
%
%!letter>
% \end{macrocode}
%
% \selectlanguage{english}%^^A
% \changes{v3.27}{2019/07/24}{\textsf{sectsty} up to v2.0.2 is
% incompatible}%^^A
% \textsf{sectsty} up to version 2.0.2 uses internal commands of
% \KOMAScript{}, that has been removed already 2001 in \KOMAScript{} 2.8e. So
% it was never compatible with \KOMAScript~3.
% \begin{macrocode}
%<*!letter>
\AfterPackage*{sectsty}{%
\@ifpackagelater{sectsty}{2002/02/26}{%
\ClassInfo{\KOMAClassName}{Unknown `sectsty' release.\MessageBreak
Cross your fingers, that is compatible%
}%
}{%
\ClassWarning{\KOMAClassName}{%
Incompatible package `sectsty' loaded!\MessageBreak
Package `sectsty' up to version 2.0.2 is incompatible\MessageBreak
with KOMA-Script from version 2.8e released in 2001.\MessageBreak
You should avoid that package and configure the\MessageBreak
section titles of your document using the KOMA-Script\MessageBreak
user interface, e.g., \string\chapterlinesformat,\MessageBreak
\string\RedeclareSectionCommand\space etc. or you should ask\MessageBreak
the `sectsty' maintainer for a more compatible release.\MessageBreak
Ignoring this warning could result in several error\MessageBreak
messages and formatting issues after loading package\MessageBreak
`sectsty'%
}%
}%
}
%!letter>
% \end{macrocode}
%
% \changes{v3.25}{2017/11/21}{Usage of \textsf{tocbibind} not recommended}%^^A
% \textsf{tocbibind} does several things, that break \KOMAScript, i.e.:
% \begin{itemize}
% \item usage of \cs{MakeUppercase} within running heads,
% \item usage of hard codes \texttt{toc} for the ToC entries,
% \item hard redefinition of \texttt{thebibliography},
% \item hard redefinition of \texttt{theindex},
% \item hard redefinition of \cs{tableofcontents},
% \item hard redefinition of \cs{listoftables},
% \item hard redefinition of \cs{listoffigures},
% \item hard redefinition of \cs{@makechapterhead}
% \end{itemize}
% \begin{macrocode}
%<*!letter>
\scr@package@not@recommended{tocbibind}{%
options like `listof=totoc'\MessageBreak
or `bibliography=totoc', or commands like\MessageBreak
`\string\setuptoc{toc}{totoc}' instead of this package,\MessageBreak
because it breaks several KOMA-Script features of\MessageBreak
the list of figures, list of tables, bibliography,\MessageBreak
index and the running head%
}
%!letter>
% \end{macrocode}
%
% \changes{v3.26}{2018/07/18}{Usage of \textsf{tocloft} not recommended}%^^A
% \textsf{tocloft} does redefine \cs{tableofcontents}, \cs{listoffigures},
% \cs{listoftables}, \cs{l@part} \dots{} \cs{l@subparagraph} and breaks
% \KOMAScript, i.e.:
% \begin{itemize}
% \item commands \cs{BeforeTOCHead}, \cs{AfterTOCHead},
% \cs{BeforeStartingTOC}, \cs{AfterStartingTOC},
% \item almost all TOC features,
% \item options \texttt{listof=totoc}, \texttt{listof=numbered},
% \item option \texttt{listof=flat},
% \item option \texttt{listof=entryprefix},
% \item all options of \cs{DeclareTOCEntryStyle},
% \end{itemize}
% \begin{macrocode}
%<*!letter>
\scr@package@not@recommended{tocloft}{%
options like `listof=entryprefix',\MessageBreak
commands like `\string\listoflofentryname' or\MessageBreak
`\string\listoflotentryname',
and `\string\DeclareTOCStyleEntry' or\MessageBreak
`\string\RedeclareSectionCommand'
instead of this package,\MessageBreak
because it breaks several KOMA-Script features of\MessageBreak
the list of figures, list of tables and table of\MessageBreak
contents, i.e., options like `listof=numbered',\MessageBreak
`listof=flat or `toc=flat', commands like\MessageBreak
`\string\BeforeTOCHead{...}' and
`\string\AfterTOCHead{...}',\MessageBreak
`\string\BeforeStartingTOC{...}' and
\string\AfterStartingTOC{...}',\MessageBreak
all features of `\string\DeclareTOCStyleEntry',\MessageBreak
and the ToC entry features of `\string\DeclareSecionCommand'\MessageBreak
and `\string\RedeclareSectionCommand' of levels\MessageBreak
`part',
% `chapter',
`section', `subsection',\MessageBreak
`subsubsection', `paragraph' and `subparagraph'%
}
%!letter>
%
% \end{macrocode}
% \selectlanguage{ngerman}%^^A
% \end{macro}%^^A \scr@package@not@recommended
%
% \subsection{Workarounds für fremde Pakete}
% \label{sec:packageworkarounds}
%
% \changes{v3.23}{2017/02/04}{\textsf{minitoc} verursacht ein schwerwiegendes
% Problem}%^^A
% Das Paket \textsf{minitoc} verursacht ein schwerwiegendes Problem indem es
% \cs{@sect} hart umdefiniert, ohne zuvor zu testen, ob die Definition den
% Erwartungen entspricht. Ich werde hier einmal versuchen, mich darum herum zu
% lavieren. Eine wirklich gute Lösung ist das sicher nicht. Man sollte das
% Paket schlicht besser nicht mit \KOMAScript{} zusammen verwenden.
% \begin{macrocode}
%<*class>
%<*!letter>
\BeforePackage{minitoc}{%
\let\scr@mt@saved@sect\@sect
}
\AfterPackage{minitoc}{%
\def\@tempa#1#2#3#4#5#6[#7]#8{%
\ifnum #2<1 \relax
\addtocontents{toc}{\protect\sectbegin}
\fi
\stc@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}%
}%
\ifx\@sect\@tempa
% \end{macrocode}
% Note: There are several bugs in this definition (e.g. missing
% \cs{expandafter} and spurious spaced). Nevertheless its the original one
% from \textsf{minitoc} 61 and so I have to use it.
% \begin{macrocode}
\def\@tempa#1#2#3#4#5#6[#7]#8{
\expandafter
\ifx\csname #1\endcsname\section\relax
\addcontentsline{lof}{xsect}{#7}%
\addcontentsline{lot}{xsect}{#7}%
\fi
\ifx\csname #1\endcsname\starsection\relax
\addcontentsline{lof}{xsect}{#7}%
\addcontentsline{lot}{xsect}{#7}%
\fi
\ifnum #2>\c@secnumdepth\relax
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\edef\@svsec{\csname the#1\endcsname\hskip 1em}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup #6\relax
\@hangfrom{\hskip #3\relax\@svsec}%
{\interlinepenalty \@M #8\par}%
\endgroup
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth\relax
\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\relax
\else
\protect\numberline{\csname the#1\endcsname}
\fi
#7}%
}%
\fi
\@xsect{#5}%
}%
\ifx\stc@sect\@tempa
\ClassWarning{\KOMAClassName}{%
Redefining minitoc's internal command
`\string\stc@sect'\MessageBreak
to prevent minitoc to destroy several features\MessageBreak
of KOMA-Script%
}%
\let\stc@sect\scr@mt@saved@sect
\else
\ClassInfo{\KOMAClassName}{%
Deactivating the `minitoc' workaround,\MessageBreak
because of unexpected definition of\MessageBreak
`\string\stc@sect'%
}%
\let\scr@mt@saved@sect\relax
\fi
\else
\ifx\@sect\scr@mt@saved@sect
\ClassInfo{\KOMAClassName}{%
Deactivating the `minitoc' workaround for
`\string\@sect',\MessageBreak
because it is not needed%
}%
\else
\ClassInfo{\KOMAClassName}{%
Deactivating the `minitoc' workaround,\MessageBreak
because of unexpected definition of\MessageBreak
`\string\@sect'%
}%
\fi
\let\scr@mt@saved@sect\relax
\fi
}
%!letter>
%
% \end{macrocode}
%
% \changes{v3.13a}{2014/10/09}{\textsf{titlesec} hat ein schwerwiegendes
% Problem}%^^A
% Das Paket \textsf{titlesec} hat ein schwerwiegendes Problem, wenn
% Überschriften nicht per \cs{@startsection} definiert sind. Ich werde hier
% einmal versuchen, mich darum herum zu lavieren. Eine wirklich gute Lösung
% ist das sicher nicht. Man sollte das Paket schlicht besser nicht mit
% \KOMAScript{} zusammen verwenden.
% \begin{macrocode}
%<*class>
%<*!letter>
%<*ignorethis>
\BeforePackage{titlesec}{%
\let\scr@ttl@saved@section\section
\let\scr@ttl@saved@subsection\subsection
\let\scr@ttl@saved@subsubsection\subsubsection
\let\scr@ttl@saved@paragraph\paragraph
\let\scr@ttl@saved@subparagraph\subparagraph
}
%
\AfterPackage{titlesec}{%
% \end{macrocode}
% Hack getestet mit \textsf{titlesec} 2011/12/15 v2.10.0 bis 2016/03/21
% v2.10.2. Daher bis zu diesem Datum freigeschaltet.
% \changes{v3.20}{2016/03/22}{\textsf{titlesec}-Hack auch für Version
% 2016/03/15}%^^A
% \changes{v3.20}{2016/03/24}{\textsf{titlesec}-Hack auch für Version
% 2016/03/21}%^^A
% \selectlanguage{english}%^^A
% \changes{v3.27}{2019/07/23}{\textsf{titlesec} does not support KOMA-Script
% classes}%^^A
% After several years \textsf{titlesec} still does not really support
% \KOMAScript{} classes and \KOMAScript{} would still need an ugly hack using
% internal \texttt{titlesec} macros and deactivating several features of
% \KOMAScript{} to make the package work. So IMO the better solution is to
% remove such hacks from the \KOMAScript{} classes. Maybe the
% \textsf{titlesec} author will support the \KOMAScript{} classes in some
% future, maybe not. Maybe \textsf{scrhack} will provide an ugly workaround to
% make \texttt{titlesec} work in any kind with \KOMAScript{} classes. But the
% classes are the wrong place to provide such hacks. However, if you need such
% a hack, see the following code, that is not longer used or supported or copy
% the section commands code from a standard class.
% \begin{macrocode}
%<*ignorethis>
\@ifpackagelater{titlesec}{2016/03/22}{%
\ClassInfo{\KOMAClassName}{%
Deactivating the `titlesec' workaround,\MessageBreak
because package is newer than expected%
}%
}{%
\ClassWarning{\KOMAClassName}{%
Activating an ugly workaround for a missing\MessageBreak
feature of package `titlesec`%
}%
\def\scr@ttl@@extract#1\scr@startsection#2#3#4#5#6#7#8{%
\@tempskipa=#5
\@tempskipb=#6
\ifdim\@tempskipa<\z@
\toks@{\titlespacing*#8{#4}}%
\@tempskipa-\@tempskipa
\else
\toks@{\titlespacing#8{#4}}%
\fi
\@ifundefined{ttl@space}{}{%
\ttl@assign\@tempskipa*\ttl@space\relax\beforetitleunit}%
\ifdim\@tempskipb<\z@
\if@tempswa
\titleformat#8[runin]%
{\ttl@fonts\ttl@sizes{#3}}{\@seccntformat{#2}}%
{\z@}\ttl@passexplicit
\else
\titleformat#8[runin]%
{#7}{\@seccntformat{#2}}%
{\z@}\ttl@passexplicit
\fi
\@tempskipb-\@tempskipb
\else
\if@tempswa
\titleformat#8%
{\ttl@fil\ttl@fonts\ttl@sizes{#3}}{\@seccntformat{#2}}%
{\z@}\ttl@passexplicit
\else
\titleformat#8%
{#7}{\@seccntformat{#2}}%
{\z@}\ttl@passexplicit
\fi
\@ifundefined{ttl@space}{}{%
\ttl@assign\@tempskipb*\ttl@space\relax\aftertitleunit}%
\fi
\edef\ttl@a{\the\toks@{\the\@tempskipa}{\the\@tempskipb}}
\ttl@a}%
\expandafter\scr@ttl@@extract\scr@ttl@saved@section\section
\expandafter\scr@ttl@@extract\scr@ttl@saved@subsection\subsection
\expandafter\scr@ttl@@extract\scr@ttl@saved@subsubsection\subsubsection
\expandafter\scr@ttl@@extract\scr@ttl@saved@paragraph\paragraph
\expandafter\scr@ttl@@extract\scr@ttl@saved@subparagraph\subparagraph
\let\scr@ttl@saved@section\relax
\let\scr@ttl@saved@subsection\relax
\let\scr@ttl@saved@subsubsection\relax
\let\scr@ttl@saved@paragraph\relax
\let\scr@ttl@saved@subparagraph\relax
\let\scr@ttl@@extract\relax
}%
%
\@ifpackagelater{titlesec}{2019/07/17}{%
\ClassInfo{\KOMAClassName}{Unknown `titesec' release.\MessageBreak
Cross your fingers, that is compatible%
}%
}{%
\scr@class@titlesec@warning
}%
}
\providecommand*{\scr@class@titlesec@warning}{%
\ClassWarning{\KOMAClassName}{%
Usage of this version of package `titlesec'\MessageBreak
with KOMA-Script class `\KOMAClassName' is\MessageBreak
not recommended, because the package does not\MessageBreak
support KOMA-Script classes, but break them.\MessageBreak
If you want to use `titlesec' with KOMA-Script\MessageBreak
classes instead of using the KOMA-Script's\MessageBreak
user interface to configure the headings of\MessageBreak
parts,
% chapters, sections
% sections, subsections
... subparagraphs,\MessageBreak
please ask the author of `titlesec' for support.\MessageBreak
Expect errors like:\MessageBreak
\space\space- ``Illegal unit of measure (pt inserted).''\MessageBreak
\space\space- ``Missing number, treated as zero''\MessageBreak
after loading `titlesec'%
}%
}
%!letter>
%
% \end{macrocode}
%
%
% \iffalse
%
% \fi
%
% \Finale
%
\endinput
%
% end of file `scrkernel-miscellaneous.dtx'
%%% Local Variables:
%%% mode: doctex
%%% TeX-master: t
%%% End: