% \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}} % % \end{macrocode} % \end{option} % \end{option} % % \iffalse % % \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 } % % \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> \scr@ifundefinedorrelax{if@restonecol}{% \expandafter\newif\csname if@restonecol\endcsname \@restonecolfalse }{} % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \iffalse % % \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 % % \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 } % % \end{macrocode} % \end{macro} % % \iffalse % % \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'.% }% } % % \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} % % % \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'% }% }% } % % \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% } % % \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'% } % % % \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 } % % % \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'% }% } % % % \end{macrocode} % % % \iffalse % % \fi % % \Finale % \endinput % % end of file `scrkernel-miscellaneous.dtx' %%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% End: