% ====================================================================== % scrhack.tex % Copyright (c) Markus Kohm, 2001-2017 % % 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-2017 % % 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: 2017-01-02 13:30:07 +0100 (Mon, 02 Jan 2017) $ 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. \section{Entwicklungsstand} \seclabel{draft} Obwohl das Paket bereits seit längerer Zeit Teil von \KOMAScript{} ist und auch bereits 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 weit mehr Vorteile und Möglichkeiten als die beiden alten Anweisungen. Obwohl der Aufwand zur Verwendung dieses Pakets sehr gering ist, haben bisher die Autoren der Pakete, die auf die beiden alten Anweisungen gesetzt haben, keine Anpassung vorgenommen. Daher enthält \Package{scrhack} selbst 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 das \Package{babel}-Paket\IndexPackage{babel}. Näheres zu den Möglichkeiten, die durch die Umstellung der Pakete auf \Package{tocbasic} nun 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~=\PValue{false}}, \OptionValue{floatrow}{false}\IndexOption[indexmain]{floatrow~=\PValue{false}} und \OptionValue{listings}{false}\IndexOption[indexmain]{listings~=\PValue{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 grundsätzlich 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 dabei \Macro{@ptsize} natürlich auch zu einem Dezimalbruch expandieren. Eines der Pakete, die damit nicht zurecht kommen, ist das Paket \Package{setspace}\IndexPackage[indexmain]{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~=\PValue{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 lies, 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 Paket \Package{lscape}\IndexPackage[indexmain]{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{textwidth} 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~=\PValue{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\textnote{Achtung!} wird \Package{lscape} auch von dem Paket \Package{pdflscape}\IndexPackage[indexmain]{pdflscape} verwendet, so dass \Package{scrhack} sich auch auf die Funktion dieses Pakets auswirkt.% % \EndIndexGroup %%% Local Variables: %%% mode: latex %%% coding: iso-latin-1 %%% 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