You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
330 lines
16 KiB
330 lines
16 KiB
% ======================================================================
|
|
% scrhack.tex
|
|
% Copyright (c) Markus Kohm, 2001-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.
|
|
% ----------------------------------------------------------------------
|
|
% scrhack.tex
|
|
% Copyright (c) Markus Kohm, 2001-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.
|
|
% ======================================================================
|
|
%
|
|
% Chapter about scrhack of the KOMA-Script guide
|
|
% Maintained by Markus Kohm
|
|
%
|
|
% ----------------------------------------------------------------------------
|
|
%
|
|
% Kapitel über scrhack in der KOMA-Script-Anleitung
|
|
% Verwaltet von Markus Kohm
|
|
%
|
|
% ============================================================================
|
|
|
|
\KOMAProvidesFile{scrhack.tex}
|
|
[$Date: 2019-11-26 11:13:57 +0100 (Tue, 26 Nov 2019) $
|
|
KOMA-Script guide (chapter: scrhack)]
|
|
|
|
\chapter{Fremdpakete verbessern mit \Package{scrhack}}
|
|
\labelbase{scrhack}
|
|
|
|
\BeginIndexGroup
|
|
\BeginIndex{Package}{scrhack}
|
|
Einige Pakete außerhalb von \KOMAScript{} arbeiten nicht sehr gut mit
|
|
\KOMAScript{} zusammen. Für den \KOMAScript-Autor ist es dabei oftmals sehr
|
|
mühsam, die Autoren der jeweiligen Pakete von einer Verbesserung zu
|
|
überzeugen. Das betrifft auch Pakete, deren Entwicklung eingestellt
|
|
wurde. Deshalb wurde das Paket \Package{scrhack} begonnen. Dieses Paket ändert
|
|
Anweisungen und Definitionen anderer Pakete, damit sie besser mit
|
|
\KOMAScript{} zusammenarbeiten. Einige Änderungen sind auch bei
|
|
Verwendung anderer Klassen nützlich.
|
|
|
|
\section{Entwicklungsstand}
|
|
\seclabel{draft}
|
|
|
|
Obwohl das Paket bereits seit längerer Zeit Teil von \KOMAScript{} ist und
|
|
von vielen Anwendern genutzt wird, hat es auch ein Problem: Bei
|
|
der Umdefinierung von Makros fremder Pakete ist es von der genauen Definition
|
|
und Verwendung dieser Makros abhängig. Damit ist es gleichzeitig auch von
|
|
bestimmten Versionen dieser Pakete abhängig. Wird eine unbekannte Version
|
|
eines der entsprechenden Pakete verwendet, kann \Package{scrhack} den
|
|
notwendigen Patch eventuell nicht ausführen. Im Extremfall kann aber umgekehrt
|
|
der Patch einer unbekannten Version auch zu einem Fehler führen.
|
|
|
|
Da also \Package{scrhack} immer wieder an neue Versionen fremder Pakete
|
|
angepasst werden muss, kann es niemals als fertig angesehen werden. Daher
|
|
existiert von \Package{scrhack} dauerhaft nur eine Beta-Version. Obwohl die
|
|
Benutzung in der Regel einige Vorteile mit sich bringt, kann die Funktion
|
|
nicht dauerhaft garantiert werden.
|
|
|
|
\LoadCommonFile{options}
|
|
|
|
\section{Verwendung von \Package{tocbasic}}
|
|
\seclabel{improvement}
|
|
|
|
In den Anfängen von \KOMAScript{} gab es von Anwenderseite den Wunsch, dass
|
|
Verzeichnisse von Gleitumgebungen, die mit dem Paket
|
|
\Package{float}\IndexPackage{float}\important{\Package{float}} erzeugt werden,
|
|
genauso behandelt werden wie das Abbildungsverzeichnis oder das
|
|
Tabellenverzeichnis, das von den \KOMAScript-Klassen selbst angelegt
|
|
wird. Damals setzte sich der \KOMAScript-Autor mit dem Autor von
|
|
\Package{float} in Verbindung, um diesem eine Schnittstelle für entsprechende
|
|
Erweiterungen zu unterbreiten. In etwas abgewandelter Form wurde diese in
|
|
Gestalt der beiden Anweisungen
|
|
\Macro{float@listhead}\IndexCmd[indexmain]{float@listhead} und
|
|
\Macro{float@addtolists}\IndexCmd[indexmain]{float@addtolists} realisiert.
|
|
|
|
Später zeigte sich, dass diese beiden Anweisungen nicht genug Flexibilität für
|
|
eine umfangreiche Unterstützung aller \KOMAScript-Möglichkeiten boten. Leider
|
|
hatte der Autor von \Package{float} die Entwicklung aber bereits eingestellt,
|
|
so dass hier keine Änderungen mehr zu erwarten sind.
|
|
|
|
Andere Paketautoren haben die beiden Anweisungen ebenfalls übernommen. Dabei
|
|
zeigte sich, dass die Implementierung in einigen Paketen, darunter auch
|
|
\Package{float}, dazu führt, dass all diese Pakete nur in einer bestimmten
|
|
Reihenfolge geladen werden können, obwohl sie ansonsten in keinerlei Beziehung
|
|
zueinander stehen.
|
|
|
|
Um all diese Nachteile und Probleme zu beseitigen, unterstützt \KOMAScript{}
|
|
diese alte Schnittstelle offiziell nicht mehr. Stattdessen wird bei Verwendung
|
|
dieser Schnittstelle von \KOMAScript{} gewarnt. Gleichzeitig wurde in
|
|
\KOMAScript{} das Paket
|
|
\Package{tocbasic}\IndexPackage{tocbasic}\important{\Package{tocbasic}} (siehe
|
|
\autoref{cha:tocbasic}) als zentrale Schnittstelle für die Verwaltung von
|
|
Verzeichnissen entworfen und realisiert. Die Verwendung dieses Pakets bietet
|
|
\iffalse weit \fi % Umbruchkorrektur
|
|
mehr Vorteile und Möglichkeiten als die
|
|
\iffalse beiden \fi % Umbruchkorrektur
|
|
alten Anweisungen.
|
|
|
|
Obwohl der Aufwand zur Verwendung dieses Pakets gering ist, haben bisher
|
|
die Autoren der Pakete, die auf die veralteten Anweisungen gesetzt haben,
|
|
keine Anpassung vorgenommen. Daher bietet \Package{scrhack}
|
|
entsprechende Anpassungen für die Pakete
|
|
\Package{float}\IndexPackage{float}\important{\Package{float},
|
|
\Package{floatrow}, \Package{listings}},
|
|
\Package{floatrow}\IndexPackage{floatrow} und
|
|
\Package{listings}\IndexPackage{listings}. Allein durch das Laden von
|
|
\Package{scrhack} reagieren diese Pakete dann nicht nur auf die Einstellungen
|
|
von Option
|
|
\DescRef{maincls.option.listof}\IndexOption{listof~=\PName{Einstellung}},
|
|
sondern beachten auch Sprachumschaltungen durch
|
|
\Package{babel}\IndexPackage{babel}. Näheres zu den Möglichkeiten, die
|
|
durch die Umstellung der Pakete auf \Package{tocbasic} zur Verfügung
|
|
stehen, ist \autoref{sec:tocbasic.toc} zu entnehmen.
|
|
|
|
Sollte diese Änderung für eines der Pakete nicht erwünscht sein oder zu
|
|
Problemen führen, so kann sie selektiv mit den Einstellungen
|
|
\OptionValue{float}{false}\IndexOption[indexmain]{float~=\textKValue{false}},
|
|
\OptionValue{floatrow}{false}%
|
|
\IndexOption[indexmain]{floatrow~=\textKValue{false}} und
|
|
\OptionValue{listings}{false}%
|
|
\IndexOption[indexmain]{listings~=\textKValue{false}} abgeschaltet
|
|
werden. Wichtig\textnote{Achtung!} dabei ist, dass eine Änderung der Optionen
|
|
nach dem Laden des zugehörigen Pakets keinen Einfluss mehr hat!
|
|
|
|
|
|
\section{Falsche Erwartungen an \Macro{@ptsize}}
|
|
\seclabel{ptsize}
|
|
|
|
Einige Pakete gehen \iffalse grundsätzlich \fi % Umbruchkorrektur
|
|
davon aus, dass das klasseninterne Makro \Macro{@ptsize}\IndexCmd{@ptsize}
|
|
sowohl definiert ist als auch zu einer ganzen Zahl expandiert. Aus
|
|
Kompatibilitätsgründen definiert \KOMAScript{} \Macro{@ptsize} auch bei
|
|
anderen Grundschriftgrößen als 10\Unit{pt}, 11\Unit{pt} oder 12\Unit{pt}. Da
|
|
\KOMAScript{} außerdem auch gebrochene Schriftgrößen erlaubt, kann
|
|
\iffalse dabei \fi % Umbruchkorrektur
|
|
\Macro{@ptsize} natürlich auch zu einem Dezimalbruch expandieren.
|
|
|
|
Eines\ChangedAt{v3.17}{\Package{scrhack}} der Pakete, die damit nicht zurecht
|
|
kommen, ist das Paket \Package{setspace}\IndexPackage[indexmain]{setspace}%
|
|
\important{\Package{setspace}}. Darüber hinaus sind die von diesem Paket
|
|
eingestellten Werte immer von der Grundschriftgröße abhängig, auch wenn die
|
|
Einstellung im Kontext einer anderen Schriftgröße erfolgt. Paket
|
|
\Package{scrhack} löst beide Probleme, indem es die Einstellungen von
|
|
\Macro{onehalfspacing} und \Macro{doublespacing} immer relativ zur aktuellen,
|
|
tatsächlichen Schriftgröße vornimmt.
|
|
|
|
Sollte diese Änderung nicht erwünscht sein oder zu Problemen führen, so kann
|
|
sie selektiv mit der Einstellung
|
|
\OptionValue{setspace}{false}\IndexOption[indexmain]{setspace~=\textKValue{false}}
|
|
abgeschaltet werden. Wichtig\textnote{Achtung!} dabei ist, dass eine Änderung
|
|
der Option nach dem Laden von \Package{setspace} keinen Einfluss mehr hat!
|
|
Ebenso muss \Package{scrhack} vor \Package{setspace} geladen werden, falls
|
|
\Package{setspace} mit einer der Optionen \Option{onehalfspacing} oder
|
|
\Option{doublespacing} geladen wird und dieser Hack sich bereits darauf
|
|
auswirken soll.
|
|
|
|
|
|
\section{Sonderfall \Package{hyperref}}
|
|
\seclabel{hyperref}
|
|
|
|
Ältere Versionen von
|
|
\Package{hyperref}\IndexPackage{hyperref}\important{\Package{hyperref}} vor
|
|
6.79h haben bei den Sternformen der Gliederungsbefehle hinter statt vor oder
|
|
auf die Gliederungsüberschriften verlinkt. Inzwischen ist dieses Problem auf
|
|
Vorschlag des \KOMAScript-Autors beseitigt. Da die entsprechende Änderung aber
|
|
über ein Jahr auf sich warten ließ, wurde in \Package{scrhack} ein
|
|
entsprechender Patch aufgenommen. Zwar kann dieser ebenfalls durch
|
|
\OptionValue{hyperref}{false} deaktiviert werden, empfohlen wird jedoch
|
|
stattdessen die aktuelle Version von \Package{hyperref} zu verwenden. In
|
|
diesem Fall wird die Änderung durch \Package{scrhack} automatisch verhindert.
|
|
|
|
|
|
\section{Inkonsistente Behandlung von \Length{textwidth} und \Length{textheight}}
|
|
\seclabel{lscape}
|
|
|
|
Das\ChangedAt{v3.18}{\Package{scrhack}} Paket
|
|
\Package{lscape}\IndexPackage[indexmain]{lscape}%
|
|
\important{\Package{lscape}} definiert eine Umgebung
|
|
\Environment{landscape}\IndexEnv{landscape}, um den Inhalt einer Seite aber
|
|
nicht deren Kopf und Fuß quer zu setzen. Innerhalb dieser Umgebung wird
|
|
\Length{textheight}\IndexLength{textheight} auf den Wert von
|
|
\Length{textwidth} gesetzt. Umgekehrt wird jedoch \Length{textwidth} nicht auf
|
|
den vorherigen Wert von \Length{textheight} gesetzt. Das ist
|
|
inkonsistent. Meines Wissens wird \Length{textwidth} nicht entsprechend
|
|
geändert, weil andere Pakete oder Anwenderanweisungen gestört werden
|
|
könnten. Jedoch hat auch die Änderung von \Length{textheight} dieses Potential
|
|
und in der Tat beschädigt sie die Funktion beispielsweise der Pakete
|
|
\Package{showframe}\IndexPackage{showframe} und
|
|
\Package{scrlayer}\IndexPackage{scrlayer}. Daher wäre es am besten, wenn
|
|
\Length{textheight} ebenfalls unverändert bliebe. \Package{scrhack} verwendet
|
|
Paket \Package{xpatch} (siehe \cite{package:xpatch}), um die Startanweisung
|
|
\Macro{landscape} der gleichnamigen Umgebung entsprechend zu ändern.
|
|
|
|
Falls diese Änderung nicht gewünscht wird oder Probleme verursacht, kann sie
|
|
mit Option
|
|
\OptionValue{lscape}{false}\IndexOption[indexmain]{lscape~=\textKValue{false}}
|
|
deaktiviert werden. Es ist zu beachten\textnote{Achtung!}, dass eine
|
|
nachträgliche Zuweisung an Option \Option{lscape} mit
|
|
\DescRef{\LabelBase.cmd.KOMAoption}\IndexCmd{KOMAoption} oder
|
|
\DescRef{\LabelBase.cmd.KOMAoptions}\IndexCmd{KOMAoptions} nur eine Wirkung
|
|
hat, wenn sie während des Ladens von \Package{lscape} nicht \PValue{false}
|
|
war.
|
|
|
|
Im übrigens wird \Package{lscape} auch von dem Paket
|
|
\Package{pdflscape}\IndexPackage[indexmain]{pdflscape}%
|
|
\important{\Package{pdflscape}} verwendet, so dass \Package{scrhack} sich auch
|
|
auf die Funktion dieses Pakets auswirkt.%
|
|
|
|
|
|
\section{Sonderfall \Package{nomencl}}
|
|
\seclabel{nomencl}
|
|
|
|
Eine\ChangedAt{v3.23}{\Package{scrhack}} Besonderheit stellt der Hack für das
|
|
Paket
|
|
\Package{nomencl}\IndexPackage[indexmain]{nomencl}\important{\Package{nomencl}}
|
|
dar. Dieser rüstet einerseits nach, dass der optionale
|
|
Inhaltsverzeichniseintrag für die Nomenklatur Option
|
|
\OptionValueRef{maincls}{toc}{indentunnumbered} beachtet. Quasi nebenbei
|
|
werden über das Paket \Package{tocbasic} auch gleich die Endungen \File{nlo}
|
|
und \File{nls} für den Besitzer \PValue{nomencl} reserviert (siehe
|
|
\DescRef{tocbasic.cmd.addtotoclist}, \autoref{sec:tocbasic.basics},
|
|
\DescPageRef{tocbasic.cmd.addtotoclist}).
|
|
|
|
Außerdem wird die Umgebung
|
|
\Environment{thenomenclature}\IndexEnv{thenomenclature} so geändert,
|
|
dass \DescRef{tocbasic.cmd.tocbasic@listhead}\IndexCmd{tocbasic@listhead} für
|
|
die Überschrift verwendet wird (siehe \autoref{sec:tocbasic.internals},
|
|
\DescPageRef{tocbasic.cmd.tocbasic@listhead}). Dadurch können mit dem Hack
|
|
diverse Attribute für die Endung \File{nls} über
|
|
\DescRef{tocbasic.cmd.setuptoc}\IndexCmd{setuptoc}%
|
|
\important{\DescRef{tocbasic.cmd.setuptoc}} gesetzt werden. So ist es
|
|
beispielsweise möglich, mit
|
|
\DescRef{tocbasic.cmd.setuptoc}\PParameter{nls}\PParameter{numbered} die
|
|
Nomenklatur nicht nur ins Inhaltsverzeichnis einzutragen, sondern auch gleich
|
|
zu nummerieren. Näheres zu \DescRef{tocbasic.cmd.setuptoc} und den damit
|
|
möglichen Einstellungen ist in \autoref{sec:tocbasic.toc}, ab
|
|
\DescPageRef{tocbasic.cmd.setuptoc} zu finden. Als kleiner aber wichtiger
|
|
Nebeneffekt erhält die Nomenklatur mit diesem Patch außerdem einen passenden
|
|
Kolumnentitel, falls lebende Kolumnentitel beispielsweise durch Verwendung von
|
|
Seitenstil \DescRef{maincls.pagestyle.headings} aktiviert wurden.
|
|
|
|
Dieser eher simple Patch ist damit ein Beispiel dafür, wie auch Pakete, die
|
|
keine Gleitumgebungen definieren, Nutzen aus der Verwendung von
|
|
\Package{tocbasic} ziehen könnten. Falls diese Änderung jedoch nicht
|
|
gewünscht wird oder Probleme verursacht, kann sie mit Option
|
|
\OptionValue{nomencl}{false}\IndexOption[indexmain]{nomencl~=\textKValue{false}}
|
|
deaktiviert werden. Entscheidend\textnote{Achtung!} ist dabei die Einstellung
|
|
der Option zum Zeitpunkt, zu dem \Package{nomencl} geladen wird! Spätere
|
|
Änderungen der Option mit \DescRef{\LabelBase.cmd.KOMAoption} oder
|
|
\DescRef{\LabelBase.cmd.KOMAoptions} haben also keinen Einfluss und führen zu
|
|
einer entsprechenden Warnung.%
|
|
|
|
|
|
\section{Sonderfall Überschriften}
|
|
\seclabel{sections}
|
|
|
|
Diverse\ChangedAt{v3.27}{\Package{scrhack}} Pakete gehen davon aus, dass
|
|
Überschriften auf eine ganz bestimmte Weise definiert sind, die weitgehend den
|
|
Definitionen der Standardklassen entsprechen. Dies ist jedoch nicht bei allen
|
|
Klassen der Fall. Beispielsweise sind bei den \KOMAScript-Klassen die
|
|
Überschriften komplett anders definiert, um viele zusätzliche Möglichkeiten zu
|
|
bieten. Das kann einige wenige Pakete aus dem Tritt bringen. Ab Version~3.27
|
|
bietet \Package{scrhack} daher die Möglichkeit, zwangsweise die
|
|
Überschriftenbefehle \DescRef{maincls.cmd.part}\IndexCmd{part},
|
|
\DescRef{maincls.cmd.chapter}\IndexCmd{chapter},
|
|
\DescRef{maincls.cmd.section}\IndexCmd{section},
|
|
\DescRef{maincls.cmd.subsection}\IndexCmd{subsection},
|
|
\DescRef{maincls.cmd.subsubsection}\IndexCmd{subsubsection},
|
|
\DescRef{maincls.cmd.paragraph}\IndexCmd{paragraph} und
|
|
\DescRef{maincls.cmd.subparagraph}\IndexCmd{subparagraph} kompatibel zu den
|
|
Standardklassen zu definieren. Dabei werden im Fall, dass
|
|
\DescRef{maincls.cmd.chapter} definiert ist, die Definitionen von \Class{book}
|
|
zugrunde gelegt. Ist \DescRef{maincls.cmd.chapter} nicht definiert, so werden
|
|
die Definitionen von \Class{article} herangezogen.
|
|
|
|
Bei Verwendung einer \KOMAScript-Klasse werden als Seiteneffekt zusätzlich
|
|
diverse Möglichkeiten dieser Klassen deaktviert. Beispielsweise stehen dann
|
|
die Befehle zur Neudefinition oder Änderung der Gliederungsbefehle aus
|
|
\autoref{sec:maincls-experts.sections} oder Option
|
|
\DescRef{maincls.option.headings} nicht mehr zur Verfügung und Befehle wie
|
|
\DescRef{maincls.cmd.partformat} erhalten eine neue Voreinstellung.
|
|
|
|
Da dieser Hack häufig mehr Schaden als Nutzen bringt, erzeugt er eine größere
|
|
Anzahl an Warnungen. Außerdem ist er nicht bereits durch das Laden von Paket
|
|
\Package{scrhack} aktiv, sondern muss beim Laden des Pakets mit Option
|
|
\Option{standardsections}\IndexOption[indexmain]{standardsections} explizit
|
|
aktiviert werden. Eine nachträgliche Aktivierung oder Deaktivierung ist nicht
|
|
möglich.
|
|
|
|
Da es für die eingangs erwähnten Probleme oft weniger invasive Lösungen gibt,
|
|
wird die Verwendung des Hacks ausdrücklich nicht empfohlen, sondern lediglich
|
|
als letzte Rettungschance für Notfälle angeboten.%
|
|
\EndIndexGroup
|
|
|
|
%%% Local Variables:
|
|
%%% mode: latex
|
|
%%% coding: utf-8
|
|
%%% TeX-master: "../guide"
|
|
%%% End:
|
|
|
|
% LocalWords: Eindateiensystem Schreibdatei Zieldatei Zielendung Quellendung
|
|
% LocalWords: Verzeichnisüberschrift Dateiendung Zielendungen Verzeichnisdatei
|
|
% LocalWords: Benutzeranweisungen Dokumentpräambel Kapitelebene Sternformen
|
|
% LocalWords: Sprachumschaltungen Gliederungsüberschriften Gliederungsbefehle
|
|
% LocalWords: Paketautoren
|
|
|