diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/koma-script/source/scrhack.dtx |
Initial commit
Diffstat (limited to 'macros/latex/contrib/koma-script/source/scrhack.dtx')
-rw-r--r-- | macros/latex/contrib/koma-script/source/scrhack.dtx | 1314 |
1 files changed, 1314 insertions, 0 deletions
diff --git a/macros/latex/contrib/koma-script/source/scrhack.dtx b/macros/latex/contrib/koma-script/source/scrhack.dtx new file mode 100644 index 0000000000..7c89acf9ce --- /dev/null +++ b/macros/latex/contrib/koma-script/source/scrhack.dtx @@ -0,0 +1,1314 @@ +% \CheckSum{941} +% \iffalse meta-comment +% ====================================================================== +% scrhack.dtx +% Copyright (c) Markus Kohm, 2008-2019 +% +% 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. +% +% To create `scrhack.sty' run `tex scrhack.dtx'. Using LaTeX instead +% of TeX would generate the implementation documentation. +% ---------------------------------------------------------------------- +% scrhack.dtx +% Copyright (c) Markus Kohm, 2008-2019 +% +% 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. +% +% `scrhack.sty' kann durch den Aufruf `tex scrhack.dtx' erzeugt +% werden. Bei Verwendung von LaTeX statt TeX wird hingegen die +% Implementierungsdokumentation erzeugt. +% ====================================================================== +% \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: scrhack.dtx 3063 2019-02-01 07:39:11Z kohm $ +%<package&identify>%%% using: package,identify +%<package&option>%%% using: package,option +%<package&body>%%% using: package,body +%<package&identity>\NeedsTeXFormat{LaTeX2e}[1995/06/01] +%<*dtx> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\begingroup + \def\filedate$#1: #2-#3-#4 #5${\gdef\filedate{#2/#3/#4}} + \filedate$Date: 2019-02-01 08:39:11 +0100 (Fri, 01 Feb 2019) $ + \def\filerevision$#1: #2 ${\gdef\filerevision{r#2}} + \filerevision$Revision: 1962 $ +\endgroup +\ProvidesFile{scrhack.dtx}[\filedate\space\filerevision\space +%</dtx> +%<package&identify>\ProvidesPackage{scrhack}[% +%<hyperref&identify>\ProvidesFile{hyperref.hak}[% +%<float&identify>\ProvidesFile{float.hak}[% +%<floatrow&identify>\ProvidesFile{floatrow.hak}[% +%<listings&identify>\ProvidesFile{listings.hak}[% +%<setspace&identify>\ProvidesFile{setspace.hak}[% +%<lscape&identify>\ProvidesFile{lscape.hak}[% +%<nomencl&identify>\ProvidesFile{nomencl.hak}[% +%<*dtx|identify> +%!KOMAScriptVersion + package +%<*dtx> + source +%</dtx> +%<*!identify> + (hacking other packages)% +%</!identify> +%</dtx|identify> +%<hack&identify> (hacking package +%<hyperref&identify> hyperref)% +%<float&identify> float)% +%<floatrow&identify> floatrow)% +%<listings&identify> listings)% +%<setspace&identify> setspace)% +%<lscape&identify> lscape)% +%<nomencl&identify> nomencl)% +%<*dtx|identify> +] +%</dtx|identify> +%<*dtx> +\ifx\documentclass\undefined + \input scrdocstrip.tex + \@@input scrkernel-version.dtx + \@@input scrstrip.inc + \KOMAdefVariable{COPYRIGHTFROM}{2008} + \generate{\usepreamble\defaultpreamble + \file{scrhack.sty}{% + \from{scrkernel-version.dtx}{package,scrhack}% + \from{scrhack.dtx}{package,identify}% + \from{scrkernel-basics.dtx}{load}% + \from{scrhack.dtx}{package,option}% + \from{scrhack.dtx}{package,body}% + \from{scrlogo.dtx}{logo}% + }% + \file{hyperref.hak}{% + \from{scrkernel-version.dtx}{file,hyperref.hak}% + \from{scrhack.dtx}{hack,hyperref,identify}% + \from{scrhack.dtx}{hack,hyperref,body}% + }% + \file{float.hak}{% + \from{scrkernel-version.dtx}{file,float.hak}% + \from{scrhack.dtx}{hack,float,identify}% + \from{scrhack.dtx}{hack,float,body}% + }% + \file{floatrow.hak}{% + \from{scrkernel-version.dtx}{file,floatrow.hak}% + \from{scrhack.dtx}{hack,floatrow,identify}% + \from{scrhack.dtx}{hack,floatrow,body}% + }% + \file{listings.hak}{% + \from{scrkernel-version.dtx}{file,listings.hak}% + \from{scrhack.dtx}{hack,listings,identify}% + \from{scrhack.dtx}{hack,listings,body}% + }% + \file{setspace.hak}{% + \from{scrkernel-version.dtx}{file,setspace.hak}% + \from{scrhack.dtx}{hack,setspace,identify}% + \from{scrhack.dtx}{hack,setspace,body}% + }% + \file{lscape.hak}{% + \from{scrkernel-version.dtx}{file,lscape.hak}% + \from{scrhack.dtx}{hack,lscape,identify}% + \from{scrhack.dtx}{hack,lscape,body}% + }% + \file{nomencl.hak}{% + \from{scrkernel-version.dtx}{file,nomencl.hak}% + \from{scrhack.dtx}{hack,nomencl,identify}% + \from{scrhack.dtx}{hack,nomencl,body}% + }% + } + \@@input scrstrop.inc +\else + \let\endbatchfile\relax +\fi +\endbatchfile +\documentclass[parskip=half-]{scrdoc} +\usepackage[latin1]{inputenc} +\usepackage[english,ngerman]{babel} +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\newcommand*{\Environment}[1]{\texttt{\mbox{#1}}} +\CodelineIndex +\RecordChanges +\begin{document} +\GetFileInfo{scrhack.dtx} +\DocInput{scrhack.dtx} +\end{document} +%</dtx> +%\fi +% +% \selectlanguage{english} +% +% \let\PName\meta +% \let\Parameter\marg +% \providecommand*{\PParameter}[1]{\texttt{\{#1\}}} +% \providecommand*{\Counter}[1]{\texttt{\mbox{#1}}} +% \providecommand*{\Option}[1]{\texttt{#1}} +% \providecommand*{\OptionValue}[2]{\texttt{\mbox{#1=}\linebreak[3]\mbox{#2}}} +% \let\PValue\texttt +% +% \title{\KOMAScript{} \partname\ \texttt{\filename}% +% \thanks{This file is version \fileversion\ of \texttt{\filename}.}} +% \date{\filedate} +% \author{Markus Kohm\thanks{mailto:komascript(at)gmx.info}} +% \maketitle +% \begin{abstract} +% Some packages from other authors may have problems with \KOMAScript{}. In +% my opinion some packages could be improved. With some packages this makes +% only sense, if \KOMAScript{} was used. With some other packages the +% package author has another opinion. Sometimes proposals was never +% answered. Package \Package{scrhack} contains all those improvement +% proposals for other packages. This means, \Package{scrhack} redefines +% macros of packages from other authors! The redefinitions are only +% activated, if those packages were loaded. Users may prevent +% \Package{scrhack} from redefining macros of individual packages. +% \end{abstract} +% \tableofcontents +% +% \selectlanguage{ngerman} +% \StopEventually{\PrintIndex\PrintChanges} +% \changes{v3.03}{2009/03/12}{erste Version des Pakets}^^A +% +% \section{Implementation of \Package{scrhack}} +% +% \changes{v3.04b}{2009/08/05}{Die Reihenfolge von Anweisungen und Optionen +% grundlegend geändert, um das Paket \textsf{scrhack} unabhängiger von der +% Reihenfolge beim Laden von Paketen zu machen.}^^A +% +% \subsection{Optionen} +% +% \iffalse +%<*package&option> +% \fi +% +% Das Paket bedient sich \cs{KOMAoptions} etc. aus \textsf{scrkbase} (dieses +% wird übrigens direkt per \texttt{scrkbase.dtx} geladen). +% +% Per Option kann gewählt werden, welche Manipulationen geladen werden +% sollen. Alle diese Optionen können jedoch nur bis zum Laden des +% entsprechenden Pakets oder dem Laden von \textsf{scrhack} gesetzt +% werden (es zählt, was später kommt). Anschließend sind sie wirkungslos. +% +% \subsection{Verwendete Anweisungen} +% +% \iffalse +%</package&option> +%<*package&body> +% \fi +% +% \begin{macro}{\scr@ifexpected} +% Wenn die im ersten Argument angegebene Anweisung nach Ausführung der im +% zweiten Argument angegebenen Anweisungen unverändert ist, dann soll das +% dritte Argument ausgeführt werden, sonst das vierte. +% \begin{macrocode} +\newcommand{\scr@ifexpected}[2]{% + \begingroup + \let\@tempa#1 + #2 + \ifx\@tempa#1 + \aftergroup\@firstoftwo + \else + \aftergroup\@secondoftwo + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\scr@hack@load} +% Wenn die Datei mit dem Namen des zweiten Arguments und der Endung des ersten +% Arguments so geladen wurde, dass \LaTeX{} eine Versionsinfo dazu gespeichert +% hat, dann soll zusätzlich der entsprechende Hack geladen werden. +% \begin{macrocode} +\newcommand*{\scr@hack@load}[2]{% + \expandafter\ifx\csname ver@#2.#1\endcsname\relax + \expandafter\@secondoftwo + \else +% \end{macrocode} +% Allerdings wird jeder Hack nur genau einmal geladen: +% \begin{macrocode} + \expandafter\ifx\csname ver@#2.hak\endcsname\relax + \expandafter\expandafter\expandafter\@firstoftwo + \else + \expandafter\expandafter\expandafter\@secondoftwo + \fi + \fi + {% + \PackageInfo{scrhack}{loading #2 hack}% + \edef\reserved@a{% + \noexpand\makeatletter\noexpand\input{#2.hak}% + \noexpand\catcode`\noexpand\@\the\catcode`\@\relax + }\reserved@a + }{% + \PackageInfo{scrhack}{ignorring #2 hack}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \iffalse +%</package&body> +% \fi +% +% \subsection{Der \textsf{hyperref}-Hack} +% +% \textsf{hyperref} setzt den Anker zu der Stern-Variante einer Überschrift +% hinter die Überschrift, während es bei der nicht Stern-Variante den Anker +% auch dann vor die Überschrift setzt, wenn die Überschrift aufgrund von +% \texttt{secnumdepth} nicht nummeriert wird. Der Hack setzt den Anker +% einheitlich vor die Überschrift. +% +% \begin{option}{hyperref} +% \changes{v3.12}{2013/03/05}{Signalisierung mit +% \cs{FamilyKeyStateProcessed}}^^A +% \changes{v3.17}{2015/03/09}{Defaulteinstellung mit +% \cs{KOMAExecuteOptions}}^^A +% \begin{macrocode} +%<*package&option> +\KOMA@ifkey{hyperref}{@scrhack@hyperref}% +\KOMAExecuteOptions{hyperref=true}% +%</package&option> +%<*package&body> +% \end{macrocode} +% \changes{v3.04b}{2009/11/09}{\textsf{hyperref}-Hack wird früher geladen}^^A +% \changes{v3.17}{2015/03/09}{Neuere \textsf{hyperref}-Version deaktiviert +% ggf. Option \texttt{hyperref}}^^A +% \changes{v3.18}{2015/05/22}{Neuere \KOMAScript-Versionen deaktivieren +% ggf. Option \texttt{hyperref}}^^A +% Hier muss ein wenig trickreicher gearbeitet werden, weil \textsf{hyperref} +% die Treiberdatei per \cs{AtEndOfPackage} lädt und der Hack erst danach +% installiert werden darf. Mit \cs{AfterPackage*} alleine, würde der Hack aber +% vor dem Laden der Treiberdatei installiert. Dafür können wir aber sicher +% sein, dass ein innerhalb von \cs{AfterPackage*} aufgerufenes +% \cs{AtEndOfPackage} garantiert nach dem Laden der Treiberdatei ausgeführt +% wird. Das funktioniert auch noch, wenn \textsf{hyperref} bereits geladen +% wurde. In dem Fall wird der Code einfach nach dem Ende von \textsf{scrhack} +% statt nach dem Ende von \textsf{hyperref} ausgeführt. +% \begin{macrocode} +\BeforePackage{hyperref}{% + \scr@ifundefinedorrelax{hy@insteadofrefstepcounter}{}{% + \PackageInfo{scrhack}{hyperref hack deactivated because of\MessageBreak + detection of KOMA-Script class, that doesn't\MessageBreak + need that hack,}% + \KOMAExecuteOptions[.scrhack.sty]{hyperref=false}% + }% +} +\AfterPackage*{hyperref}{% + \if@scrhack@hyperref + \@ifpackagelater{hyperref}{2009/11/24}{% + \PackageInfo{scrhack}{hyperref hack deactivated because of\MessageBreak + detection of hyperref version, that doesn't\MessageBreak + need that hack,}% + \KOMAExecuteOptions[.scrhack.sty]{hyperref=false}% + }{% + \AtEndOfPackage{% + \KOMA@key[.scrhack.sty]{hyperref}{% + \PackageWarning{scrhack}{option `hyperref=#1' ignored}% + \FamilyKeyStateProcessed + }% + \if@scrhack@hyperref\scr@hack@load\@pkgextension{hyperref}\fi + }% + }% + \fi +} +%</package&body> +% \end{macrocode} +% \end{option} +% +% +% \begin{macro}{\@schapter} +% \begin{macro}{\@spart} +% \begin{macro}{\@ssect} +% Eigentlich wird hier gar nicht \texttt{hyperref.sty} verändert, sondern +% diverse Treiberdateien. Sobald das Paket \textsf{hyperref} geladen ist, ist +% auch die passende Treiberdatei geladen und außerdem sind alle +% Treiberdateien, die entsprechende Definitionen vornehmen, gleichermaßen +% betroffen. Also kann der entsprechende Patch einfach erfolgen, wenn hyperref +% geladen ist (was bereits von \cs{scr@hack@load} getestet wurde). Es muss +% also nur noch sichergestellt werden, dass die umzudefinierenden Macros +% derzeit den erwarteten Inhalt haben. +% \begin{macrocode} +%<*hyperref&body> +\scr@ifexpected\@schapter{% + \def\@schapter#1{% + \H@old@schapter{#1}% + \begingroup + \let\@mkboth\@gobbletwo + \Hy@GlobalStepCount\Hy@linkcounter + \xdef\@currentHref{\Hy@chapapp*.\the\Hy@linkcounter}% + \Hy@raisedlink{% + \hyper@anchorstart{\@currentHref}\hyper@anchorend + }% + \endgroup + }% +}{% + \PackageInfo{scrhack}{redefining \string\@schapter}% + \def\@schapter#1{% + \begingroup + \let\@mkboth\@gobbletwo + \Hy@GlobalStepCount\Hy@linkcounter + \xdef\@currentHref{\Hy@chapapp*.\the\Hy@linkcounter}% + \Hy@raisedlink{% + \hyper@anchorstart{\@currentHref}\hyper@anchorend + }% + \endgroup + \H@old@schapter{#1}% + }% +}{% + \scr@ifexpected\@schapter{% + \def\@schapter#1{% + \begingroup + \let\@mkboth\@gobbletwo + \Hy@GlobalStepCount\Hy@linkcounter + \xdef\@currentHref{\Hy@chapapp*.\the\Hy@linkcounter}% + \Hy@raisedlink{% + \hyper@anchorstart{\@currentHref}\hyper@anchorend + }% + \endgroup + \H@old@schapter{#1}% + }% + }{}{% + \PackageWarningNoLine{scrhack}{unknown \string\@schapter\space + definition found!\MessageBreak + Maybe you are using a unsupported hyperref version}% + }% +} + +\scr@ifexpected\@spart{% + \def\@spart#1{% + \H@old@spart{#1}% + \Hy@GlobalStepCount\Hy@linkcounter + \xdef\@currentHref{part*.\the\Hy@linkcounter}% + \Hy@raisedlink{% + \hyper@anchorstart{\@currentHref}\hyper@anchorend + }% + }% +}{% + \PackageInfo{scrhack}{redefining \string\@spart}% + \def\@spart#1{% + \Hy@GlobalStepCount\Hy@linkcounter + \xdef\@currentHref{part*.\the\Hy@linkcounter}% + \Hy@raisedlink{% + \hyper@anchorstart{\@currentHref}\hyper@anchorend + }% + \H@old@spart{#1}% + }% +}{% + \scr@ifexpected\@spart{% + \def\@spart#1{% + \Hy@GlobalStepCount\Hy@linkcounter + \xdef\@currentHref{part*.\the\Hy@linkcounter}% + \Hy@raisedlink{% + \hyper@anchorstart{\@currentHref}\hyper@anchorend + }% + \H@old@spart{#1}% + }% + }{}{% + \PackageWarningNoLine{scrhack}{unknown \string\@spart\space + definition found!\MessageBreak + Maybe you are using a unsupported hyperref version}% + }% +} + +\scr@ifexpected\@ssect{% + \def\@ssect#1#2#3#4#5{% + \H@old@ssect{#1}{#2}{#3}{#4}{#5}% + \phantomsection + }% +}{% + \PackageInfo{scrhack}{redefining \string\@ssect}% + \def\@ssect#1#2#3#4#5{% + \H@old@ssect{#1}{#2}{#3}{#4}{\phantomsection\ignorespaces#5}% + }% +}{% + \scr@ifexpected\@ssect{% + \def\@ssect#1#2#3#4#5{% + \H@old@ssect{#1}{#2}{#3}{#4}{\phantomsection\ignorespaces#5}% + }% + }{}{% + \PackageWarningNoLine{scrhack}{unknown \string\@ssect\space + definition found!\MessageBreak + Maybe you are using a unsupported hyperref version}% + }% +} +%</hyperref&body> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{Der \textsf{float}-Hack} +% +% Das \textsf{float}-Paket verwendet das Makro \cs{float@listhead} zum +% Setzen der Überschriften. Dies wird seit \KOMAScript~3 nicht mehr empfohlen +% und fliegt demnächst komplett aus der Unterstützung. Stattdessen wird +% empfohlen, dass Pakete \textsf{tocbasic} unterstützen. Der Aufwand dafür ist +% sehr gering und wird mit vielen neuen Möglichkeiten belohnt. +% +% Dieser Hack rüstet die \textsf{tocbasic}-Unterstützung für \textsf{float} +% nach. +% +% \begin{option}{float} +% \changes{v3.12}{2013/03/05}{Signalisierung mit +% \cs{FamilyKeyStateProcessed}}^^A +% \changes{v3.17}{2015/03/09}{Defaulteinstellung mit +% \cs{KOMAExecuteOptions}}^^A +% \begin{macrocode} +%<*package&option> +\KOMA@ifkey{float}{@scrhack@float}% +\KOMAExecuteOptions{float=true}% +%</package&option> +%<*package&body> +\AfterPackage*{float}{% + \KOMA@key[.scrhack.sty]{float}{% + \PackageWarning{scrhack}{option `float' ignored}% + \FamilyKeyStateProcessed + }% + \if@scrhack@float\scr@hack@load\@pkgextension{float}\fi +} +%</package&body> +% \end{macrocode} +% \end{option} +% +% +% \begin{macro}{\newfloat} +% Über die Anweisung \cs{newfloat} wird eine neue Gleitumgebung +% definiert. Hier muss die neue Erweiterung aus dem dritten Argument +% \textsf{tocbasic} bekannt gemacht werden. +% \begin{macro}{\listof} +% Über die Anweisung \cs{listof} wird ein Verzeichnis für Gleitumgebungen +% ausgegeben. Hier muss schlicht die entsprechende Anweisung von +% \textsf{tocbasic} verwendet werden. +% \begin{macro}{\float@addtolists} +% Diese Anweisung wird nicht länger benötigt und daher auf die ursprüngliche +% Definition zurückgesetzt. +% \begin{macrocode} +%<*float&body> +\scr@ifexpected{\newfloat}{% + \long\def\newfloat#1#2#3{\@namedef{ext@#1}{#3} + \let\float@do=\relax + \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}% + \@tempa + \floatplacement{#1}{#2}% + \@ifundefined{fname@#1}{\floatname{#1}{#1}}{} + \expandafter\edef\csname ftype@#1\endcsname{\value{float@type}}% + \addtocounter{float@type}{\value{float@type}} + \restylefloat{#1}% + \expandafter\edef\csname fnum@#1\endcsname% + {\expandafter\noexpand\csname fname@#1\endcsname{} + \expandafter\noexpand\csname the#1\endcsname} + \@ifnextchar[%] + {\float@newx{#1}}% + {\@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}% + {}}}% +}{% + \scr@ifexpected{\listof}{% + \def\listof#1#2{% + \@ifundefined{ext@#1}{\float@error{#1}}{% + \@namedef{l@#1}{\@dottedtocline{1}{1.5em}{2.3em}}% + \float@listhead{#2}% + \begingroup\setlength{\parskip}{\z@}% + \@starttoc{\@nameuse{ext@#1}}% + \endgroup}}% + }{% + \RequirePackage{tocbasic}% + \PackageInfo{scrhack}{redefining \string\newfloat}% + \renewcommand\newfloat[3]{% + \ifattoclist{#3}{% + \PackageError{scrhack}{extension `#3' already in use}{% + Each extension may be used only once.\MessageBreak + You, the class, or another package already uses extension + `#3'.\MessageBreak + \string\newfloat\space command will be ignored!}% + }{% + \addtotoclist[float]{#3}% + \setuptoc{#3}{chapteratlist}% + \@namedef{ext@#1}{#3}% + \let\float@do=\relax + \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}% + \@tempa + \floatplacement{#1}{#2}% + \@ifundefined{fname@#1}{\floatname{#1}{#1}}{}% + \expandafter\edef\csname ftype@#1\endcsname{\value{float@type}}% + \addtocounter{float@type}{\value{float@type}} + \restylefloat{#1}% + \expandafter\edef\csname fnum@#1\endcsname% + {\expandafter\noexpand\csname fname@#1\endcsname{} + \expandafter\noexpand\csname the#1\endcsname}% + \@ifnextchar[%] + {\float@newx{#1}}% + {\@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}% + {}}}% + }% + \PackageInfo{scrhack}{redefining \string\listof}% + \renewcommand*\listof[2]{% + \@ifundefined{ext@#1}{\float@error{#1}}{% + \@ifundefined{l@#1}{\expandafter\let\csname l@#1\endcsname\l@figure + \@ifundefined{l@#1}{% +% \end{macrocode} +% \changes{v3.25}{2018/03/16}{Verwendung von \cs{DeclareTOCStyleEntry}}^^A +% Bis Version 3.24 wurde hier nun wie üblich |\l@#1| unter Verwendung von +% \cs{@dottedtocline} definiert: +% \begin{verbatim} +% \@namedef{l@#1}{\@dottedtocline{1}{1.5em}{2.3em}}% +% \end{verbatim} +% Da aber \Package{tocbasic} inzwischen diese schöne Schnittstelle für die +% Verzeichniseinträge bietet, verwenden wir die hier nun auch: +% \begin{macrocode} + \DeclareTOCStyleEntry[level=1,numwidth=2.3em,indent=1.5em] + {default}{#1}% + }{}% + }{}% + \listoftoc[{#2}]{\csname ext@#1\endcsname}% + }% + }% + \scr@ifexpected{\float@addtolists}{% + \long\def\float@addtolists#1{% + \def\float@do##1{\addtocontents{##1}{#1}} \the\float@exts}% + }{% + \PackageInfo{scrhack}{undefining \string\float@addtolists}% + \let\float@addtolists\relax + }{% + \PackageWarningNoLine{scrhack}{unkown \string\float@addtolists\space + definition found!\MessageBreak + Maybe you are using a unsupported float version}% + }% + }{% + \PackageWarningNoLine{scrhack}{unknown \string\listof\space + definition found!\MessageBreak + Maybe you are using a unsupported float version}% + }% +}{% + \PackageWarningNoLine{scrhack}{unknown \string\newfloat\space + definition found!\MessageBreak + Maybe you are using a unsupported float version}% +} +%</float&body> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{Der \textsf{floatrow}-Hack} +% +% Das \textsf{floatrow}-Paket verwendet das Makro \cs{float@listhead} zum +% Setzen der Überschriften. Dies wird seit \KOMAScript~3 nicht mehr empfohlen +% und fliegt demnächst komplett aus der Unterstützung. Stattdessen wird +% empfohlen, dass Pakete \textsf{tocbasic} unterstützen. Der Aufwand dafür ist +% sehr gering und wird mit vielen neuen Möglichkeiten belohnt. +% +% Dieser Hack rüstet die \textsf{tocbasic}-Unterstützung für \textsf{floatrow} +% nach. +% +% \begin{option}{floatrow} +% \changes{v3.12}{2013/03/05}{Signalisierung mit +% \cs{FamilyKeyStateProcessed}}^^A +% \changes{v3.17}{2015/03/09}{Defaulteinstellung mit +% \cs{KOMAExecuteOptions}}^^A +% \begin{macrocode} +%<*package&option> +\KOMA@ifkey{floatrow}{@scrhack@floatrow} +\KOMAExecuteOptions{floatrow=true} +%</package&option> +%<*package&body> +\AfterPackage*{floatrow}{% + \KOMA@key[.scrhack.sty]{floatrow}{% + \PackageWarning{scrhack}{option `floatrow' ignored}% + \FamilyKeyStateProcessed + }% + \if@scrhack@floatrow\scr@hack@load\@pkgextension{floatrow}\fi +} +%</package&body> +% \end{macrocode} +% \end{option} +% +% +% \begin{macro}{\DeclareNewFloatType} +% Über die Anweisung \cs{DeclareNewFloatType} wird eine neue Gleitumgebung +% definiert. Hier muss die neue Erweiterung aus dem dritten Argument +% \textsf{tocbasic} bekannt gemacht werden. +% \begin{macro}{\listof} +% Über die Anweisung \cs{listof} wird ein Verzeichnis für Gleitumgebungen +% ausgegeben. Hier muss schlicht die entsprechende Anweisung von +% \textsf{tocbasic} verwendet werden. +% \begin{macro}{\float@addtolists} +% Diese Anweisung wird nicht länger benötigt und daher auf die ursprüngliche +% Definition zurückgesetzt. +% \begin{macrocode} +%<*floatrow&body> +\scr@ifexpected{\DeclareNewFloatType}{% + \long\def\DeclareNewFloatType#1#2{\def\FB@captype{#1}% + \expandafter\edef\csname ftype@#1\endcsname{\the\c@float@type}% + \addtocounter{float@type}{\value{float@type}}% + \@namedef{#1name}{#1}\newcounter{#1}% + \expandafter\edef\csname fnum@#1\endcsname + {\expandafter\noexpand\csname #1name\endcsname\nobreakspace + \expandafter\noexpand\csname the#1\endcsname}% + \@namedef{the#1}{\arabic{#1}}\flnew@ext{lo#1}\@namedef{fps@#1}{tbp}% + \@namedef{l@#1}{\@dottedtocline{1}{1.5em}{2.3em}}% + \caption@setkeys[floatrow]{newfloat}{#2}\let\FR@tmp=\relax + \xdef\@tempa{\noexpand\flrow@types{\the\flrow@types \FR@tmp{#1}}}% + \@tempa}% +}{% + \scr@ifexpected{\listof}{% + \def\listof#1#2{% + \@ifundefined{ext@#1}{\flrow@error{Unknown float style `#1'}}{% + \expandafter\providecommand\csname l@#1\endcsname + {\@dottedtocline{1}{1.5em}{2.3em}}% + \float@listhead{#2}% + \begingroup\setlength{\parskip}{\z@}% + \@starttoc{\@nameuse{ext@#1}}% + \endgroup}}% + }{% + \RequirePackage{tocbasic}% + \PackageInfo{scrhack}{redefining \string\DeclareNewFloatType}% +% \end{macrocode} +% Eigentlich wäre es besser, wie im \textsf{float}-Hack einen Test +% vorzuschalten, ob die Dateiendung bereits in Gebrauch ist. Aber das würde +% voraussetzen, dass die Reihenfolge der Anweisungen geändert wird. Dazu +% stecke ich aber im Code von \textsf{floatrow} zu wenig +% drin. (\emph{\foreignlanguage{english}{Note: It would be better to first +% test, if the new extension is already in use like done at the +% \textsf{float} hack. But I don't know the \textsf{floatrow} code good +% enough to make such a change!}}) +% \begin{macrocode} + \renewcommand\DeclareNewFloatType[2]{\def\FB@captype{#1}% + \expandafter\edef\csname ftype@#1\endcsname{\the\c@float@type}% + \addtocounter{float@type}{\value{float@type}}% + \@namedef{#1name}{#1}\newcounter{#1}% + \expandafter\edef\csname fnum@#1\endcsname + {\expandafter\noexpand\csname #1name\endcsname\nobreakspace + \expandafter\noexpand\csname the#1\endcsname}% + \@namedef{the#1}{\arabic{#1}}\flnew@ext{lo#1}\@namedef{fps@#1}{tbp}% +% \end{macrocode} +% \changes{v3.25}{2018/03/16}{Verwendung von \cs{DeclareTOCStyleEntry}}^^A +% Bis Version 3.24 wurde hier nun wie üblich |\l@#1| unter Verwendung von +% \cs{@dottedtocline} definiert: +% \begin{verbatim} +% \@namedef{l@#1}{\@dottedtocline{1}{1.5em}{2.3em}}% +% \end{verbatim} +% Da aber \Package{tocbasic} inzwischen diese schöne Schnittstelle für die +% Verzeichniseinträge bietet, verwenden wir die hier nun auch: +% \begin{macrocode} + \DeclareTOCStyleEntry[level=1,numwidth=2.3em,indent=1.5em]{default}{#1}% + \caption@setkeys[floatrow]{newfloat}{#2}\let\FR@tmp=\relax + \xdef\@tempa{\noexpand\flrow@types{\the\flrow@types \FR@tmp{#1}}}% + \@tempa + \xdef\@tempa{\noexpand\addtotoclist[float]{\@nameuse{ext@\FB@captype}}% + \noexpand\setuptoc{\@nameuse{ext@\FB@captype}}{chapteratlist}% + }% + \@tempa + }% + \PackageInfo{scrhack}{redefining \string\listof}% + \renewcommand*\listof[2]{% + \@ifundefined{ext@#1}{\flrow@error{Unknown float style `#1'}}{% + \@ifundefined{l@#1}{\expandafter\let\csname l@#1\endcsname\l@figure + \@ifundefined{l@#1}{% +% \end{macrocode} +% Siehe die Anmerkung zur Verwendung von \cs{DeclareTOCStyleEntry} oben. +% \begin{macrocode} + \DeclareTOCStyleEntry[level=1,numwidth=2.3em,indent=1.5em] + {default}{#1}% + }{}% + }{}% + \listoftoc[{#2}]{\csname ext@#1\endcsname}% + }% + }% + \scr@ifexpected{\float@addtolists}{% + \long\def\float@addtolists#1{% + \def\float@do##1{\addtocontents{##1}{#1}} \the\float@exts}% + }{% + \PackageInfo{scrhack}{undefining \string\float@addtolists}% + \let\float@addtolists\relax + }{% + \PackageWarningNoLine{scrhack}{unkown \string\float@addtolists\space + definition found!\MessageBreak + Maybe you are using a unsupported floatrow version}% + }% + }{% + \PackageWarningNoLine{scrhack}{unknown \string\listof\space + definition found!\MessageBreak + Maybe you are using a unsupported floatrow version}% + }% +}{% + \PackageWarningNoLine{scrhack}{unknown \string\DeclareNewFloatType\space + definition found!\MessageBreak + Maybe you are using a unsupported floatrow version}% +} +%</floatrow&body> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{Der \textsf{listings}-Hack} +% +% Das \textsf{listings}-Paket verwendet das Makro \cs{float@listhead} zum +% Setzen der Überschriften. Dies wird seit \KOMAScript~3 nicht mehr empfohlen +% und fliegt demnächst komplett aus der Unterstützung. Stattdessen wird +% empfohlen, dass Pakete \textsf{tocbasic} unterstützen. Der Aufwand dafür ist +% sehr gering und wird mit vielen neuen Möglichkeiten belohnt. +% +% Dieser Hack rüstet die \textsf{tocbasic}-Unterstützung für \textsf{listings} +% nach. +% +% \begin{option}{listings} +% \changes{v3.12}{2013/03/05}{Signalisierung mit +% \cs{FamilyKeyStateProcessed}}^^A +% \changes{v3.17}{2015/03/09}{Defaulteinstellung mit +% \cs{KOMAExecuteOptions}}^^A +% \begin{macrocode} +%<*package&option> +\KOMA@ifkey{listings}{@scrhack@listings} +\KOMAExecuteOptions{listings=true} +%</package&option> +%<*package&body> +\AfterPackage*{listings}{% + \KOMA@key[.scrhack.sty]{listings}{% + \PackageWarning{scrhack}{option `listings' ignored}% + \FamilyKeyStateProcessed + }% + \if@scrhack@listings\scr@hack@load\@pkgextension{listings}\fi +} +%</package&body> +% \end{macrocode} +% \end{option} +% +% +% \begin{macro}{\scr@do@hack@listings} +% \begin{macro}{\lstlistoflistings} +% Über dieses Macro wird das Verzeichnis der Listings gesetzt. Die gesamte +% Funktionalität dafür kann \Package{tocbasic} überlassen werden. +% \begin{macro}{\float@addtolists} +% Diese Anweisung wird nicht länger benötigt und daher auf die ursprüngliche +% Definition zurückgesetzt. Da \Package{listings} ihre Definition mit +% \Macro{AtBeginDocument} verzögert, muss dies hier ebenfalls geschehen. +% \begin{macrocode} +%<*listings&body> +\newcommand*{\scr@do@hack@listings}{% + \RequirePackage{tocbasic}% + \addtotoclist[float]{lol}% + \setuptoc{lol}{chapteratlist}% + \PackageInfo{scrhack}{redefining \string\lstlistoflistings}% + \renewcommand*{\lstlistoflistings}{\listoftoc[{\lstlistlistingname}]{lol}}% + \AtBeginDocument{% + \scr@ifexpected{\float@addtolists}{% + \def\float@addtolists##1{\addtocontents{lol}{##1}}% + }{% + \PackageInfo{scrhack}{undefining \string\float@addtolists}% + \let\float@addtolists\relax + }{% + \scr@ifexpected{\float@addtolists}{% + \def\float@addtolists##1{\addtocontents{lol}{##1}% + \orig@float@addtolists{##1}}% + }{% + \PackageInfo{scrhack}{setting \string\float@addtolists\MessageBreak + to \string\orig@float@addtolists}% + \let\float@addtolists\orig@float@addtolists + }{% + \PackageWarningNoLine{scrhack}{unkown \string\float@addtolists\space + definition found!\MessageBreak + Maybe you are using a unsupported listings version}% + }% + }% + }% + \let\scr@do@hack@listings\relax +} +\scr@ifexpected{\lstlistoflistings}{% + \def\lstlistoflistings{\bgroup + \let\contentsname\lstlistlistingname + \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}% + \tableofcontents \egroup}% +}{% + \scr@do@hack@listings +}{% + \scr@ifexpected{\lstlistoflistings}{% + \def\lstlistoflistings{% + \begingroup + \@ifundefined{@restonecoltrue}{}{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + }% + \float@listhead{\lstlistlistingname}% + \parskip\z@\parindent\z@\parfillskip \z@ \@plus 1fil% + \@starttoc{lol}% + \@ifundefined{@restonecoltrue}{}{% + \if@restonecol\twocolumn\fi + }% + \endgroup + }% + }{% + \scr@do@hack@listings + }{% + \PackageWarningNoLine{scrhack}{unknown \string\lstlistoflistings\space + definition found!\MessageBreak + Maybe you are using a unsupported listings version}% + }% +} +%</listings&body> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{Der \textsf{nomencl}-Hack} +% +% Das \textsf{nomencl}-Paket harmoniert eigentlich nur in einer Kleinigkeit +% bezüglich des Eintrags in das Inhaltsverzeichnis nicht sehr gut mit +% \KOMAScript-Klassen bzw. Paket \textsf{tocbasic}. Allerdings kann es von den +% Vorteilen von \textsf{tocbasic} auch in weiterer Hinsicht profitieren. +% +% Dieser Hack rüstet weitgehende \textsf{tocbasic}-Unterstützung für +% \textsf{nomencl} nach. Dafür wird Paket \textsf{xpatch} verwendet. +% +% \begin{option}{nomencl} +% \changes{v3.23}{2017/03/31}{neue Option für neuen Hack}^^A +% \begin{macrocode} +%<*package&option> +\RequirePackage{xpatch}% +\KOMA@ifkey{nomencl}{@scrhack@nomencl} +\KOMAExecuteOptions{nomencl=true} +%</package&option> +%<*package&body> +\AfterPackage*{nomencl}{% + \KOMA@key[.scrhack.sty]{nomencl}{% + \PackageWarning{scrhack}{option `nomencl' ignored}% + \FamilyKeyStateProcessed + }% + \if@scrhack@nomencl\scr@hack@load\@pkgextension{nomencl}\fi +} +%</package&body> +% \end{macrocode} +% \end{option}^^A nomencl +% +% \begin{macro}{\thenomenclature} +% \changes{v3.23}{2017/03/31}{Umgebung \texttt{thenomenclature} wird +% gepatcht}^^A +% Statt die Fallunterscheidung aus der Originaldefinition direkt hier +% nachzubilden, patchen wir diese komplett heraus und ersetzen sie durch eine +% neue Anweisung. +% \begin{macrocode} +%<*nomencl&body> +\RequirePackage{tocbasic} +% \end{macrocode} +% With \Package{nomencl} > 5.0 this should be all. +% \begin{macrocode} +\@ifpackagelater{nomencl}{2019/01/01}{% + \PackageInfo{scrhack}{only `tocbasic' loaded for `nomencl'}% + \expandafter\endinput +}{} +% \end{macrocode} +% Otherwise we have to patch it. +% \begin{macrocode} +\addtotoclist[nomencl]{nlo} +\addtotoclist[nomencl]{nls} +\xpatchcmd{\thenomenclature}{% + \@ifundefined{chapter}% + { + \section*{\nomname} + \if@intoc\addcontentsline{toc}{section}{\nomname}\fi% + }% + { + \chapter*{\nomname} + \if@intoc\addcontentsline{toc}{chapter}{\nomname}\fi% + }% +}{% + \scr@hack@nomencl@head +}{% + \PackageInfo{scrhack}{\string\thenomenclature\space successfully patched}% +}{% +% \end{macrocode} +% \changes{v3.26b}{2019/01/23}{new \textsf{nomencl} 5.0}^^A +% From \textsf{nomencl} 5.0 another code is used if the nomenclature is a +% chapter. So we need another patch: +% \begin{macrocode} + \xpatchcmd{\thenomenclature}{% + \@ifundefined{chapter}% + { + \section*{\nomname} + \if@intoc\addcontentsline{toc}{section}{\nomname}\fi% + }% + { + \chapter*{\nomname} + \markboth{\nomname}{\nomname}% + \if@intoc\addcontentsline{toc}{chapter}{\nomname}\fi% + }% + }{% + \scr@hack@nomencl@head + }{% + \PackageInfo{scrhack}{\string\thenomenclature\space successfully patched}% + }{% +% \end{macrocode} +% \changes{v3.26b}{2019/01/23}{prepared for hoply comming \textsf{nomencl}}^^A +% But this code is also wrong, because it breaks manual running heads, e.g., +% of page style \texttt{myheadings}. So I hope, there will be another code, +% that needs a somehow different patch: +% \begin{macrocode} + \xpatchcmd{\thenomenclature}{% + \@ifundefined{chapter}% + { + \section*{\nomname} + \if@intoc\addcontentsline{toc}{section}{\nomname}\fi% + }% + { + \chapter*{\nomname} + \@mkboth{\nomname}{\nomname}% + \if@intoc\addcontentsline{toc}{chapter}{\nomname}\fi% + }% + }{% + \scr@hack@nomencl@head + }{% + \PackageInfo{scrhack}{\string\thenomenclature\space successfully patched}% + }{% +% \end{macrocode} +% \changes{v3.25}{2019/01/23}{emergency patch added}^^A +% If this also does not work, we try an emergency patch, that could break +% things. +% \begin{macrocode} + \xpatchcmd{\thenomenclature}{% + \@ifundefined{chapter}% + }{% + \scr@hack@nomencl@head + \@gobbletwo + }{% + \PackageWarning{scrhack}{% + using emergency patch of \string\thenomenclature.\MessageBreak + This could happen if you are using an unknown\MessageBreak + release of package `nomencl'.\MessageBreak + Mostly this patch does work too, but it also could\MessageBreak + break `nomencl`. If this happens, please deactivate\MessageBreak + the `nomencl` hack of `scrhack` + }% + }{% + \PackageWarning{scrhack}{% + cannot patch \string\thenomenclature.\MessageBreak + This could happen if you are using an unknown\MessageBreak + release of package `nomencl'% + }% + }% + }% + }% +} +%</nomencl&body> +% \end{macrocode} +% \end{macro}^^A \thenomenclature +% +% \begin{macro}{\scr@hack@nomencl@head} +% \changes{v3.23}{2017/03/31}{Überschrift für \texttt{thenomenclature} unter +% Verwendung von \textsf{tocbasic}}^^A +% Im Gegensatz zu Gleitumgebungen benötigen wir hier keine Gruppe, weil +% \texttt{thenomenclature} bereits die Gruppe bereitstellt. +% \begin{macrocode} +%<*nomencl&body> +\newcommand*{\scr@hack@nomencl@head}{% + \providecommand*{\listofnlsname}{\nomname}% + \let\list@fname\listofnlsname + \def\@currext{nls}% + \tocbasic@listhead{\list@fname}% +} +%</nomencl&body> +% \end{macrocode} +% Es ist ggf. noch zu beachten, dass von den ganzen Haken, die +% \textsf{tocbasic} bereitstellt, für dieses Verzeichnis natürlich nur die +% Überschriftenhaken zum Einsatz kommen. Verzeichnishaken können zwar +% definiert werden, kommen aber nie zur Anwendung. +% \end{macro}^^A \scr@hack@nomencl@head +% +% \begin{macro}{\if@intoc} +% \changes{3.23}{2017/03/31}{Reaktion auf \cs{if@intoc}} +% Natürlich muss jetzt noch auf \textsf{nomencl}'s Option \texttt{intoc} +% reagiert werden, also entsprechend der Option das \textsf{tocbasic} +% Feature \texttt{totoc} passend gesetzt werden. Etwaige Änderungen des +% Features sind also erst nach dem Laden von \textsf{nomencl} und +% \textsf{scrhack} möglich. Spätere Änderungen von \cs{if@intoc} werden +% außerdem nicht berücksichtigt. +% \begin{macrocode} +%<*nomencl&body> +\if@intoc + \setuptoc{nls}{totoc} +\fi +%</nomencl&body> +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Der \textsf{setspace}-Hack} +% +% Das \textsf{setspace}-Paket verwendet \cs{@ptsize} auf ungünstige Art, indem +% es davon ausgeht, dass es immer eine ganze Zahl enthält. Das ist aber bei +% \KOMAScript{} keineswegs zwingend. Außerdem ist der Wert für \texttt{11pt} +% falsch, weil \LaTeX{} in diesem Fall tatsächlich eine 10,95\,pt-Schrift mit +% einem Zeilenabstand von 13,6\,pt einstellt. Damit wäre der korrekte Wert für +% \cs{onehalfspacing} beispielsweise: +% \[ 10{,}95\,\mathrm{pt} \dot 1{,5} / 13{,}6\,\mathrm{pt} \equiv 1{,}208 \] +% Tatsächlich stellt \textsf{setspace} aber einen Wert von 1,213 ein, was +% einer effektiven Schriftgröße von 11\,pt entsprechen würde. Ebenso stellt es +% den aktuellen Abstand bei \cs{onehalfspacing} nicht relativ zur aktuellen +% Schriftgröße ein, sondern zur Grundschriftgröße. Damit erhält man bei +% \begin{verbatim} +% \documentclass[10pt]{article} +% \usepackage{setspace} +% \begin{document} +% \large\onehalfspacing\raggedright +% Fontsize: \csname f@size\endcsname pt\\ +% Normal baselineskip: \csname f@baselineskip\endcsname\\ +% baselineskip: \the\baselineskip +% \end{document} +% \end{verbatim} +% einen anderen Abstand als bei +% \begin{verbatim} +% \documentclass[11pt]{article} +% \usepackage{setspace} +% \begin{document} +% \large\onehalfspacing\raggedright +% Fontsize: \csname f@size\endcsname pt\\ +% Normal baselineskip: \csname f@baselineskip\endcsname\\ +% baselineskip: \the\baselineskip +% \end{document} +% \end{verbatim} +% obwohl beide Male dieselbe Schriftgröße verwendet wird. Streng genommen +% müsste also bei jeder Änderung der Schriftgröße der Wert Abstand angepasst +% werden. So weit geht dieser Hack nicht. Stattdessen wird der Wert abhängig +% von der tatsächlichen Schriftgröße und dem tatsächlichen Basisabstand beim +% Aufruf der Anweisungen eingestellt. Das ergibt immerhin in den obigen +% Beispielen gleiche Ergebnisse. +% +% \begin{option}{setspace} +% \changes{v3.17}{2015/04/16}{Neu}^^A +% \begin{macrocode} +%<*package&option> +\KOMA@ifkey{setspace}{@scrhack@setspace} +\KOMAExecuteOptions{setspace=true} +%</package&option> +%<*package&body> +\AfterPackage*{setspace}{% + \KOMA@key[.scrhack.sty]{setspace}{% + \PackageWarning{scrhack}{option `setspace' ignored}% + \FamilyKeyStateProcessed + }% + \if@scrhack@setspace\scr@hack@load\@pkgextension{setspace}\fi +} +%</package&body> +% \end{macrocode} +% \end{option} +% +% +% \begin{macro}{\onehalfspacing} +% \changes{v3.17}{2015/04/16}{Neu}^^A +% Über diese Anweisung wird der eineinhalbzeilige Satz eingestellt. Ein auf +% drei Nachkommastellen genauer Wert erscheint mir ausreichend genau. +% \begin{macrocode} +%<*setspace&body> +\scr@ifexpected{\onehalfspacing}{% + \long\def\onehalfspacing{% + \setstretch{1.25}% default + \ifcase \@ptsize \relax % 10pt + \setstretch {1.25}% + \or % 11pt + \setstretch {1.213}% + \or % 12pt + \setstretch {1.241}% + \fi + }% +}{% + \renewcommand*{\onehalfspacing}{% + \@tempdima=\dimexpr (\f@size pt)*1500/ + (\dimexpr \f@baselineskip\relax)*\p@/1000\relax + \expandafter\setstretch\expandafter{\strip@pt\@tempdima}% + }% +}{% + \PackageWarning{scrhack}{unknown \string\onehalfspacing\space + definition found!\MessageBreak + Maybe you are using a unsupported setpace version}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\doublespacing} +% \changes{v3.17}{2015/04/16}{Neu}^^A +% Über diese Anweisung wird der zweizeilige Satz eingestellt. Ein auf +% drei Nachkommastellen genauer Wert erscheint mir ausreichend genau. +% \begin{macrocode} +\scr@ifexpected{\doublespacing}{% + \long\def\doublespacing{% + \setstretch{1.667}% default + \ifcase \@ptsize \relax % 10pt + \setstretch {1.667}% + \or % 11pt + \setstretch {1.618}% + \or % 12pt + \setstretch {1.655}% + \fi + }% +}{% + \renewcommand*{\doublespacing}{% + \@tempdima=\dimexpr (\f@size pt)*2000/ + (\dimexpr \f@baselineskip\relax)*\p@/1000\relax + \expandafter\setstretch\expandafter{\strip@pt\@tempdima}% + }% +}{% + \PackageWarning{scrhack}{unknown \string\doublespacing\space + definition found!\MessageBreak + Maybe you are using a unsupported setpace version}% +} +%</setspace&body> +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Der \textsf{lscape}-Hack} +% \changes{v3.18a}{2015/07/07}{Neuer \textsf{lscape}-Hack}^^A +% +% Das \textsf{lscape}-Paket setzt innerhalb der +% \texttt{landscape}-Umgebung die Länge \cs{textheight} auf den Wert +% von \cs{textwidth} obwohl es auf der anderen Seite \cs{textwidth} +% nicht auf den Wert von \cs{textheight} setzt. Das ist inkonsequent. Da +% David~Carlisle außerdem angibt, dass \cs{textwidth} nicht verändert wird, +% weil das zu Problemen führen konnte, ist es unverständlich, dass +% \cs{textheight} verändert wird, obwohl das ebenfalls zu Problemen führen +% kann, beispielsweise für \textsf{showframe} oder \textsf{scrpage}. Daher +% verändere ich die Definition so, dass auch \cs{textheight} unverändert +% bleibt. Dabei muss allerdings auch \textsf{pdflscape} berücksichtigt +% werden. Das ist am einfachsten mit \textsf{xpatch}. +% +% \begin{option}{lscape} +% \changes{v3.18a}{2015/07/07}{Neue Option für neuen Hack}^^A +% \changes{v3.20}{2016/05/07}{\textsf{xpatch} wird bereits im Optionenteil +% geladen}^^A +% \begin{macrocode} +%<*package&option> +\RequirePackage{xpatch}% +\KOMA@ifkey{lscape}{@scrhack@lscape}% +\KOMAExecuteOptions{lscape=true}% +%</package&option> +%<*package&body> +\AfterPackage*{lscape}{% + \if@scrhack@lscape\scr@hack@load\@pkgextension{lscape}\else + \KOMA@key[.scrhack.sty]{lscape}{% + \PackageWarning{scrhack}{option `lscape' ignored}% + \FamilyKeyStateProcessed + }% + \fi +} +%</package&body> +% \end{macrocode} +% \end{option} +% +% \begin{macro}{\landscape} +% \changes{v3.18a}{2015/07/07}{Neu}^^A +% \changes{v3.20}{2016/05/07}{\textsf{xpatch} wird bereits im Optionenteil +% geladen}^^A +% Über diese Anweisung wird die \texttt{landscape}-Umgebung von +% \textsf{lscape} gestartet. Genau diese muss gepatcht werden. Dafür wird das +% Paket \textsf{xpatch} benötigt. Da der Patch nur geladen wird, wenn die +% Option dafür gesetzt ist, kann die Option daher nur ein- und ausgeschaltet +% werden, wenn sie bis zum Laden des Pakets aktiviert wurde. +% \begin{macrocode} +%<*lscape&body> +\xpatchcmd{\landscape}{\textheight=\vsize}{% + \if@scrhack@lscape +% \end{macrocode} +% \changes{v3.18a}{2015/08/11}{Patchen von \cs{@outputpage}}^^A +% Es gibt allerdings in der Tat eine Stelle, an der ein verändertet Wert von +% \cs{textheight} benötigt wird. Das ist wenn innerhalb von \cs{@outputpage} +% der Wert von \cs{@colht} reinitialisiert wird. Also wird das entsprechend +% auch noch hinein gepatcht. +% \begin{macrocode} + \scrh@LT@textheight=\vsize + \let\scrh@LT@outputpage\@outputpage + \def\@outputpage{\scrh@LT@outputpage\global\@colht\scrh@LT@textheight}% + \else + \textheight=\vsize + \fi +}{% + \PackageInfo{scrhack}{\string\landscape\space patched to make + \string\textheight\space change optional}% +}{% + \PackageWarning{scrhack}{Cannot patch \string\landscape!\MessageBreak + Maybe you are using a unsupported lscape version}% + \@scrhack@lscapefalse +} +% \end{macrocode} +% \begin{Length}{\scrh@LT@textheight} +% \changes{v3.18a}{2015/08/11}{neue Länge (intern)}^^A +% \begin{macrocode} +\newlength{\scrh@LT@textheight} +%</lscape&body> +% \end{macrocode} +% \end{Length}^^A \scrh@LT@textheight +% \end{macro}^^A \landscape +% +% +% \subsection{Optionen ausführen} +% +% Zum Schluss noch die Optionen ausführen. Im Paket wird diese Anweisung +% allerdings vor den Anweisungen der Hacks und den Anweisungen aus dem +% Abschnitt »Verwendete Anweisungen« stehen. +% \begin{macrocode} +%<*package&option> +\KOMAProcessOptions\relax +%</package&option> +% \end{macrocode} +% +% +% \Finale +% +\endinput +% +% end of file `scrhack.dtx' +%%% Local Variables: +%%% mode: doctex +%%% mode: flyspell +%%% coding: iso-latin-1 +%%% ispell-local-dictionary: "en_GB" +%%% TeX-master: t +%%% End: + +% LocalWords: eineinhalbzeilige |