% ====================================================================== % scrhack-de.tex % Copyright (c) Markus Kohm, 2001-2022 % % 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.md. % ====================================================================== % % Chapter about scrhack of the KOMA-Script guide % Maintained by Markus Kohm % % ============================================================================ \KOMAProvidesFile{scrhack-de.tex} [$Date: 2022-06-05 12:40:11 +0200 (So, 05. Jun 2022) $ 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. Es wird empfohlen, das Paket \Package{scrhack} so früh wie möglich zu laden. Insbesondere sollte das Laden vor den betroffenen Paketen erfolgen. \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 %%% TeX-master: "scrguide-en.tex" %%% coding: utf-8 %%% ispell-local-dictionary: "en_GB" %%% eval: (flyspell-mode 1) %%% 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