% ====================================================================== % scrlayer-scrpage-experts.tex % Copyright (c) Markus Kohm, 2013-2018 % % 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. % ---------------------------------------------------------------------- % scrlayer-scrpage-experts.tex % Copyright (c) Markus Kohm, 2013-2018 % % 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. % ====================================================================== % % Expert chapter about scrlayer-scrpage of the KOMA-Script guide % % ---------------------------------------------------------------------- % % Expertenkapitel über scrlayer-scrpage in der KOMA-Script-Anleitung % % ============================================================================ \KOMAProvidesFile{scrlayer-scrpage-experts.tex}% [$Date: 2018-01-31 09:21:42 +0100 (Wed, 31 Jan 2018) $ KOMA-Script guide (chapter: scrlayer-scrpage for experts)] \chapter[{Zusätzliche Möglichkeiten von \Package{scrlayer-scrpage}}] {Zusätzliche Möglichkeiten des Pakets\ChangedAt{v3.12}{\Package{scrlayer-scrpage}} \Package{scrlayer-scrpage}} \labelbase{scrlayer-scrpage-experts} % \BeginIndexGroup \BeginIndex{Package}{scrlayer-scrpage}% Über die Erklärungen in \autoref{cha:scrlayer-scrpage} von \autoref{part:forAuthors} diese\iffree{r Anleitung}{s Buches} hinaus bietet das Paket \Package{scrlayer-scrpage} viele weitere Möglichkeiten. Diese stellen jedoch Erweiterungen dar, die der durchschnittliche Anwender nicht zwingend benötigt oder die nur aus Gründen der Kompatibilität zu \Package{scrpage2} existieren. Ihre Dokumentation hier in \autoref{part:forExperts} dient der Vertiefung und der Erweiterung des Wissens. Ihre Beherrschung geht über grundlegende Fähigkeiten hinaus. \LoadCommonFile{pagestylemanipulation}% \section{Beeinflussung von definierten Seitenstilen} \section{Definition eigener Seitenstil-Paare} \seclabel{pagestyle.pairs} In \autoref{sec:scrlayer-scrpage.predefined.pagestyles} wurden die beiden Seitenstile \PageStyle{scrheadings} und \PageStyle{plain.scrheadings} vorgestellt. Diese bilden quasi ein Paar, bei dem \PageStyle{scrheadings} als Haupt-Seitenstil mit Kolumnentitel vorgesehen ist, während \PageStyle{plain.scrheadings} ein dazu passender \PageStyle{plain}-Seitenstil ohne Kolumnentitel aber üblicherweise mit Paginierung, also mit Seitenzahl ist. Neben der Konfiguration dieses vordefinierten Paares bietet \Package{scrlayer-scrpage} auch die Möglichkeit, zusätzliche Paare zu definieren. Der Name des Haupt-Seitenstils, beispielsweise \PageStyle{scrheadings}, dient dabei quasi auch als Name des Seitenstil-Paares. \iffree{Die allermeisten Anwender werden in der Regel mit dem einen vordefinierten Seitenstil-Paar \PageStyle{scrheadings} auskommen. Die in diesem Abschnitt dokumentierten Anweisungen sind daher eher Ergänzungen für besondere Fälle. Da mir während des Abfassens dieser Anleitung keine handlichen Anwendungsbeispiele eingefallen sind, gibt es auch keine ausführlichen Beispiele. Sollte mir im Support einmal eine besonders schöne Anwendung begegnen, werde ich solche aber in zukünftigen Fassungen gerne aufgreifen. Ich bin jedoch gleichzeitig sicher, dass sich all diese Fälle auch mit dem einen Paar \PageStyle{scrheadings} lösen lassen.}{} \begin{Declaration} \Macro{defpairofpagestyles}\OParameter{Eltern-Paar} \Parameter{Name}\Parameter{Definition} \Macro{newpairofpagestyles}\OParameter{Eltern-Paar} \Parameter{Name}\Parameter{Definition} \Macro{renewpairofpagestyles}\OParameter{Eltern-Paar} \Parameter{Name}\Parameter{Definition} \Macro{providepairofpagestyles}\OParameter{Eltern-Paar} \Parameter{Name}\Parameter{Definition} \end{Declaration} Mit diesen Anweisungen können Paare von Seitenstilen vergleichbar zu \PageStyle{scrheadings} und \PageStyle{plain.scrheadings} definiert werden. Dabei ist \PName{Name} der Name des zu \PageStyle{scrheadings} vergleichbaren Hauptseitenstils, der für die Verwendung mit Kolumnentiteln ausgelegt ist. Für den Namen des zugehörigen \PageStyle{plain}-Seitenstil wird \PName{Name} automatisch \PValue{plain.} vorangestellt. \PName{Name} ist also gleichzeitig der Name des Paares und des Hauptseitenstils dieses Paares, während \PValue{plain.}\PName{Name} der Name des \PageStyle{plain}-Seitenstils dieses Paares ist. Ist das optionale Argument \PName{Eltern-Paar} angegeben, so ist dies der Name eines Seitenstil-Paares, mit dessen Einstellungen das neue Paar initialisiert werden soll. Das neue Paar erbt also quasi die Konfiguration des \PName{Eltern-Paar}s. {\setlength{\emergencystretch}{1em}% Während in \autoref{sec:scrlayer-scrpage.predefined.pagestyles} der Eindruck entstanden sein mag, dass sich die dort erläuterten Anweisungen nur auf \PageStyle{scrheadings} und \PageStyle{plain.scrheadings} beziehen, gilt das tatsächlich nur, solange diese beiden Seitenstile das einzige Seitenstil-Paar darstellen. Sobald es mehrere Seitenstil-Paare gibt, beziehen sich \DescRef{scrlayer-scrpage.cmd.lehead}, \DescRef{scrlayer-scrpage.cmd.cehead}, \DescRef{scrlayer-scrpage.cmd.rehead}, \DescRef{scrlayer-scrpage.cmd.lohead}, \DescRef{scrlayer-scrpage.cmd.cohead}, \DescRef{scrlayer-scrpage.cmd.rohead}, \DescRef{scrlayer-scrpage.cmd.lefoot}, \DescRef{scrlayer-scrpage.cmd.cefoot}, \DescRef{scrlayer-scrpage.cmd.refoot}, \DescRef{scrlayer-scrpage.cmd.lofoot}, \DescRef{scrlayer-scrpage.cmd.cofoot}, \DescRef{scrlayer-scrpage.cmd.rofoot}, \DescRef{scrlayer-scrpage.cmd.ihead}, \DescRef{scrlayer-scrpage.cmd.chead}, \DescRef{scrlayer-scrpage.cmd.ohead}, \DescRef{scrlayer-scrpage.cmd.ifoot}, \DescRef{scrlayer-scrpage.cmd.cfoot} und \DescRef{scrlayer-scrpage.cmd.ofoot} auf das zuletzt aktive Paar.\par} {\setlength{\emergencystretch}{1em}% Neben den achtzehn vorgenannten sind auch die drei nachfolgend dokumentierten Anweisungen \DescRef{scrlayer-scrpage-experts.cmd.clearmainofpairofpagestyles}, \DescRef{scrlayer-scrpage-experts.cmd.clearplainofpairofpagestyles} und \DescRef{scrlayer-scrpage-experts.cmd.clearpairofpagestyles} für die Verwendung im letzten Parameter, \PName{Definition}, gedacht. In diesem Fall stellen sie eine Art Grundkonfiguration des Seitenstil-Paares dar, die immer dann ausgeführt wird, wenn das Seitenstil-Paar aktiviert wird. Ein Seitenstil-Paar wird aktiviert, indem einer der beiden Seitenstile des Paares aktiviert wird. Dies geschieht in der Regel mit Hilfe von \DescRef{maincls.cmd.pagestyle}\IndexCmd{pagestyle}.\par} Es sei darauf hingewiesen, dass die Anweisungen aus \autoref{sec:scrlayer-scrpage.pagestyle.content} ab \autopageref{sec:scrlayer-scrpage.pagestyle.content} ohnehin allgemeiner Natur sind und für alle mit \PageStyle{scrlayer-scrpage} definierten Seitenstile gelten. Während\textnote{Unterschiede} \Macro{defpairofpagestyles} das Seitenstil-Paar unabhängig davon, ob entsprechende Seitenstile bereits existieren, definiert, tun \Macro{newpairofpagestyles} und \Macro{providepairofpagestyles} dies nur, wenn die Seitenstile noch nicht definiert sind. Ist mindestens einer der beiden Seitenstile des Paares bereits definiert, so wird die neuerliche Definition bei \Macro{providepairofpagestyles} ignoriert, wohingegen sie bei \Macro{newpairofpagestyles} zu einem Fehler führt. Für die Umdefinierung bereits existierender Paare kann \Macro{renewpairofpagestyles} verwendet werden. Hier wird ein Fehler gemeldet, wenn einer der beiden Seitenstile oder beide Seitenstile des Paares noch nicht existieren.% \EndIndexGroup \begin{Declaration} \Macro{clearmainofpairofpagestyles} \Macro{clearplainofpairofpagestyles} \Macro{clearpairofpagestyles} \end{Declaration} Mit \Macro{clearmainofpairofpagestyles} wird der Hauptseitenstil des zuletzt aktivierten Seitenstil-Paares leer konfiguriert. Dagegen wird mit der Anweisung \Macro{clearplainofpairofpagestyles} der \PageStyle{plain}-Seitenstil des entsprechenden Seitenstil-Paares leer konfiguriert. Anweisung \Macro{clearpairofpagestyles} konfiguriert schließlich beide Seitenstile des entsprechenden Paares als leer. Es ist jedoch zu beachten\textnote{Achtung!}, dass keine dieser Anweisungen die Definitionen aus dem Parameter \PName{Definition}, der bei der Definition des Seitenstil-Paares angegeben wurde (siehe oben), entfernt. Bei der erneuten Auswahl eines Seitenstils des Paares werden jene Einstellungen also erneut ausgeführt! Die Anweisungen können ebenfalls innerhalb von \PName{Definition} bei der zuvor erklärten Definition eines Seitenstil-Paares verwendet werden. Sie können aber auch jederzeit außerhalb der Definition eines Seitenstil-Paares verwendet werden. In diesem Fall beziehen sie sich auf das zuletzt aktivierte Paar.% \EndIndexGroup \section{Definition komplexer Seitenstile} \seclabel{pagestyle.experts} Neben den vordefinierten Seitenstilen bietet \Package{scrlayer-scrpage} auch noch eine eher grundlegende Schnittstelle zur Definition von Seitenstilen. Die bisher erläuterten Konzepte greifen bei der Implementierung ebenso wie die von \autoref{sec:\LabelBase.pagestyle.triple} auf diese Möglichkeit zurück. Aufgrund ihrer hohen Komplexität wird sie jedoch nur erfahrenen Anwendern empfohlen. Weniger erfahrene Anwender können mit den vorgenannten Möglichkeiten bereits nahezu alles erreichen, was auch mit dieser grundlegenden Schnittstelle möglich ist. \begin{Declaration} \Macro{defpagestyle}\Parameter{Name} \Parameter{Kopfdefinition} \Parameter{Fußdefinition} \Macro{newpagestyle}\Parameter{Name} \Parameter{Kopfdefinition} \Parameter{Fußdefinition} \Macro{providepagestyle}\Parameter{Name} \Parameter{Kopfdefinition} \Parameter{Fußdefinition} \Macro{renewpagestyle}\Parameter{Name} \Parameter{Kopfdefinition} \Parameter{Fußdefinition} \end{Declaration} Diese Anweisungen dienen der Definition eines einzelnen Seitenstils mit maximaler Flexibilität. Dabei ist \PName{Name} der Name des Seitenstils, der definiert werden soll. Die beiden Parameter \PName{Kopfdefinition} und \PName{Fußdefinition} haben den identischen Aufbau: \begin{flushleft} \begin{addmargin}{1em}\raggedright\small \texttt{(\PName{Länge der oberen Linie},\PName{Dicke der oberen Linie})\%\\ \Parameter{Definition für linke Seiten im doppelseitigen Layout}\%\\ \Parameter{Definition für rechte Seiten im doppelseitigen Layout}\%\\ \Parameter{Definition für Seiten im einseitigen Layout}\%\\ (\PName{Länge der unteren Linie},\PName{Dicke der unteren Linie})% } \end{addmargin} \end{flushleft} Dabei sind die Argumente in den runden Klammern optional, das heißt, sie können zusammen mit den Klammern weggelassen werden. In\important[i]{\DescRef{scrlayer-scrpage.option.headtopline}\\ \DescRef{scrlayer-scrpage.option.headsepline}\\ \DescRef{scrlayer-scrpage.option.footsepline}\\ \DescRef{scrlayer-scrpage.option.footbotline}} diesem Fall richten sich die Längen und Dicken je nach Linie nach den Angaben der Optionen \DescRef{scrlayer-scrpage.option.headtopline}\IndexOption{headtopline}, \DescRef{scrlayer-scrpage.option.headsepline}\IndexOption{headsepline}, \DescRef{scrlayer-scrpage.option.footsepline}\IndexOption{footsepline} und \DescRef{scrlayer-scrpage.option.footbotline}\IndexOption{footbotline} (siehe \autoref{sec:scrlayer-scrpage.pagestyle.content}, \DescPageRef{scrlayer-scrpage.option.headtopline}). Die drei Argumente mit den Definitionen sind obligatorisch und werden je nach Seite und Layouteinstellung verwendet. Der Inhalt der Definitionen ist frei wählbar. Für Seitenstile mit Kolumnentitel wird jedoch die Verwendung von \DescRef{scrlayer-scrpage.cmd.headmark}, \DescRef{scrlayer-scrpage.cmd.leftmark} oder \DescRef{scrlayer-scrpage.cmd.rightmark} innerhalb der Definitionen empfohlen. Keinesfalls sollte man hier direkt eine Gliederungsnummer oder einen Überschriftentext als Kolumnentitel angeben. Aufgrund des asynchronen Seitenaufbaus von \LaTeX{} kann sonst die falsche Nummer oder der falsche Text im Seitenkopf oder Seitenfuß erscheinen. Bei\textnote{Unterschiede} \Macro{defpagestyle} wird der Seitenstil unabhängig davon, ob er bereits existiert oder nicht, neu definiert. Demgegenüber meldet \Macro{newpagestyle} einen Fehler, wenn bereits ein Seitenstil gleichen Namens existiert. Im Unterschied dazu wird die Definition bei \Macro{providepagestyle} ignoriert, falls der \PName{Name} bereits für einen Seitenstil verwendet wurde. Umgekehrt kann mit \Macro{renewpagestyle} nur ein bereits vorhandener Seitenstil umdefiniert werden. Für einen neuen Namen meldet diese Anweisung dagegen einen Fehler. Alle vier Anweisungen basieren auf \DescRef{scrlayer.cmd.DeclarePageStyleByLayers}% \IndexCmd{DeclarePageStyleByLayers} des Pakets \hyperref[cha:scrlayer]{\Package{scrlayer}}\IndexPackage{scrlayer}. Die dabei für einen Seitenstil \PName{Name} definierten Ebenen sind in \autoref{tab:scrlayer-scrpage-experts.layersperstyle} aufgeführt. Näheres zu Ebenen und Ebenen-Seitenstilen ist \autoref{cha:scrlayer} ab \autopageref{cha:scrlayer} zu entnehmen.% \begin{table} % \KOMAoptions{captions=topbeside} % \setcapindent{0pt} % \begin{captionbeside} \caption [{Von \Package{scrlayer-scrpage} zu einem Seitenstil definierte Ebenen}] {Die von \Package{scrlayer-scrpage} zu einem Seitenstil \PName{Name} definierten Ebenen\label{tab:scrlayer-scrpage-experts.layersperstyle}} % [l] \begin{tabular}{ll} \toprule Name der Ebene & Bedeutung der Ebene \\ \midrule \PName{Name}\PValue{.head.above.line} & die Linie über dem Kopf\\ \PName{Name}\PValue{.head.odd} & der Kopf von rechten Seiten im doppelseitigen Layout\\ \PName{Name}\PValue{.head.even} & der Kopf von linken Seiten im doppelseitigen Layout\\ \PName{Name}\PValue{.head.oneside} & der Kopf von Seiten im einseitigen Layout\\ \PName{Name}\PValue{.head.below.line} & die Linie unter dem Kopf\\ \PName{Name}\PValue{.foot.above.line} & die Linie über dem Fuß\\ \PName{Name}\PValue{.foot.odd} & der Fuß von rechten Seiten im doppelseitigen Layout\\ \PName{Name}\PValue{.foot.even} & der Fuß von linken Seiten im doppelseitigen Layout\\ \PName{Name}\PValue{.foot.oneside} & der Fuß von Seiten im einseitigen Layout\\ \PName{Name}\PValue{.foot.below.line} & die Linie unter dem Fuß\\ \bottomrule \end{tabular} % \end{captionbeside} \end{table} \begin{Example} Angenommen, Sie wollen den gesamten Kopf des Seitenstil \PageStyle{scrheadings} mit einer Farbe hinterlegen. Aufgrund der Einleitung zu diesem Kapitel und \autoref{tab:scrlayer-scrpage-experts.layersperstyle}, wissen Sie, dass \PageStyle{scrheadings} ein Ebenen-Seitenstil ist, der unter anderem aus den Ebenen \PValue{scrheadings.head.oneside}, \PValue{scrheadings.head.odd} und \PValue{scrheadings.head.even} besteht. Sie definieren nun drei weitere Ebenen für deren Hintergrund und fügen diese am Anfang des Seitenstils ein: \begin{lstcode} \documentclass{scrartcl} \usepackage[automark]{scrlayer-scrpage} \usepackage{xcolor} \usepackage{blindtext} \DeclareLayer[clone=scrheadings.head.oneside, contents={% \color{yellow}% \rule[-\dp\strutbox]% {\layerwidth}{\layerheight}% }% ]{scrheadings.head.oneside.background} \DeclareLayer[clone=scrheadings.head.odd, contents={% \color{yellow}% \rule[-\dp\strutbox]% {\layerwidth}{\layerheight}% }% ]{scrheadings.head.odd.background} \DeclareLayer[clone=scrheadings.head.even, contents={% \color{yellow}% \rule[-\dp\strutbox]% {\layerwidth}{\layerheight}% }% ]{scrheadings.head.even.background} \AddLayersAtBeginOfPageStyle{scrheadings}{% scrheadings.head.oneside.background,% scrheadings.head.odd.background,% scrheadings.head.even.background% } \pagestyle{scrheadings} \begin{document} \blinddocument \end{document} \end{lstcode} Wie Sie sehen, wurden in dem Beispiel drei Ebenen verwendet, damit Position und Größe der Hintergrund-Ebenen per Option \Option{clone}\important{\Option{clone}} einfach jeweils von der Ebene für den Kopf kopiert werden konnten. Das ist einfacher, als nur eine Hintergrundebene zu verwenden und für diese die Position umständlich dynamisch zu bestimmen. Der farbige Hintergrund selbst wurde in diesem Beispiel mit einer \Macro{rule}-Anweisung gesetzt. Für die Größe wurde dabei mit \DescRef{scrlayer.cmd.layerwidth}\IndexCmd{layerwidth}% \important[i]{\DescRef{scrlayer.cmd.layerwidth}\\ \DescRef{scrlayer.cmd.layerheight}} und \DescRef{scrlayer.cmd.layerheight}\IndexCmd{layerheight} die aktuelle Breite und Höhe der Ebene verwendet. Diese wurde per optionalem Argument um die Höhe der Unterlängen \Macro{dp}\Macro{strutbox} nach unten verschoben. \end{Example} % Statt wie im Beispiel für die Hintergrundfarbe neue Ebenen hinzuzufügen, hätte man das Problem übrigens auch mit \Macro{colorbox} und \DescRef{scrlayer-scrpage.cmd.chead} lösen können. Es wird empfohlen, eine entsprechende Lösung als Übung zu erarbeiten. Ebenso hätte man die Hintergrundebenen auch einzeln und jeweils unmittelbar vor der entsprechenden Inhaltsebene einfügen können. Eine entsprechende Umsetzung bietet sich als weitere Übung an.% \EndIndexGroup \section{Definition einfacher Seitenstile mit dreigeteiltem Kopf und Fuß} \seclabel{pagestyle.triple} \LoadNonFree{scrlayer-scrpage-experts}{1} \section{Das obsolete Erbe von \Package{scrpage2}} \seclabel{obsolete} \begin{Explain} Das Paket \Package{scrlayer-scrpage} enthält auch noch einige Altlasten, die von \Package{scrpage2} stammen und nur existieren, um möglichst kompatibel mit jenem Paket zu sein. Kenntnisse dazu benötigen Anwender nur, wenn sie ein altes Dokument, das noch auf \Package{scrpage2} basiert, bearbeiten wollen. Für\textnote{Achtung!} neue Dokumente sollten die hier dokumentieren Dinge dagegen nicht verwendet werden! \end{Explain} \begin{Declaration} \OptionVName{hmode}{Ein-Aus-Wert} \end{Declaration} Bei \Package{scrpage2} wurden die Köpfe und Füße der Seitenstile noch grundsätzlich im horizontalen Modus ausgegeben. Bei \Package{scrlayer-scrpage} wird hingegen in der Voreinstellung erst durch entsprechende Ausgaben selbst in den horizontalen Modus geschaltet. Aktiviert man jedoch Option \Option{hmode} verhält sich \Package{scrlayer-scrpage} auch in dieser Hinsicht kompatibel mit \Package{scrpage2} und schaltet bereits vor der Ausgabe in den horizontalen Modus. Dies kann Auswirkungen sowohl auf die Verarbeitung von Leerzeichen am Anfang der Ausgabe als auch auf die vertikale Ausrichtung haben. Die Option versteht die Standardwerte für einfache Schalter, die in \autoref{tab:truefalseswitch} auf \autopageref{tab:truefalseswitch} angegeben sind. In der Voreinstellung ist der Schalter deaktiviert.% \EndIndexGroup \LoadNonFree{scrlayer-scrpage-experts}{0} % \EndIndexGroup %%% Local Variables: %%% mode: latex %%% mode: flyspell %%% coding: iso-latin-1 %%% ispell-local-dictionary: "de_DE" %%% TeX-master: "../guide" %%% End: % LocalWords: Hintergrundebene Seitenkopf Seitenstils Kopfelement Seitenfuß % LocalWords: Seitenstile Seitenstilen