Menu

HowTo_PageHeadBackgroundColor

Wie eine Hintergrundfarbe für den Seitenkopf festgelegt werden kann

Die KOMA-Script-Anleitung scrguide-de.pdf zeigt eine Kopfzeile mit gefärbtem Hintergrund. Die Frage, wie man dergleichen für ein beliebiges Dokument erreichen kann, drängt sich daher fast auf.

Bei KOMA-Script sind für Kopf- und Fuß-Definitionen, die über die Möglichkeiten der KOMA-Script-Klassen hinaus gehen, die Paket scrlayer und scrlayer-scrpage zuständig. Dabei bietet das Paket scrlayer mit der Möglichkeit der Ebenen-Definition und der Definition von Seitenstilen, die sich aus der Anwendung dieser Ebenen zusammensetzen, die Grundlage. Das Paket scrlayer-scrpage stellt eine Anwendung dieser Grundlagen dar, die eine nahtlose und komfortable Integration der Ebenen-Seitenstile sowohl mit den KOMA-Script-Klassen als auch den Standardklassen und vielen anderen Klassen, die auf diesen beiden Familien basieren, bietet.

Um nun den Hintergrund des Seitenkopfes einzufärben, definiert man einfach eine neue Ebene:

\DeclareLayer[
  head,
  background,
  contents={\color{DeepSkyBlue3}\rule[-\dp\strutbox]{\layerwidth}{\layerheight}}
]{head.background}

Dabei legt die Eigenschaft head die Position und Größe der Ebene so fest, dass diese genau den Seitenkopf umfasst. Man könnte Position und Größe auch über die Eigenschaft area oder einzeln über voffset, hoffset, height und width festlegen. head ist hier eine willkommene Vereinfachung. In der Anleitung sind weitere solche Vereinfachungen für andere Bereiche der Seiten dokumentiert.

Die Eigenschaft background besagt, dass es sich um eine Hintergrundebene handelt, also eine Ebene, die vor dem eigentlichen Seitentext ausgegeben werden soll. scrlayer-scrpage gibt den Inhalt des Seitenkopfes selbst, also in der Regel den Kolumnentitel mit der Wiederholung von Kapitel- oder Abschnittsüberschriften, ebenfalls mit dieser Eigenschaft aus. Würde man stattdessen foreground verwenden, würde also der farbige Balken über dem eigentlichen Kopfinhalt ausgegeben und diesen somit überschreiben. Wird keine der beiden Eigenschaften explizit angegeben, so würde in der Voreinstellung der Inhalt sowohl im Hintergrund als auch im Vordergrund ausgegeben und damit ebenfalls der eigentliche Kopfinhalt überschrieben.

Als Inhalt wird nach der Änderung der aktuellen Farbe einfach eine \rule der Größe \layerwidth und \layerheight ausgegeben. Die beiden Anweisungen \layerwidth und \layerheight können innerhalb einer Ebenendefinition wie Längen verwendet werden und geben die Breite und Höhe der aktuellen Ebene wieder. Das ist insbesondere bei Ebenen praktisch, die nicht über die explizite Angabe von Position und Größe definiert wurden, sondern über Vereinfachungen wie head. Da eine \rule normalerweise auf der Grundlinie steht, wird diese noch um die Tiefe einer Standardtextzeile \dp\strutbox nach unten verschoben, so dass sie tatsächlich genau den Kopfbereich umfasst.

Alternativ zur Verschiebung über das optionale Argument von \rule könnte man die Ebene übrigens statt als Text-Ebene auch als Bild-Ebene deklarieren:

\DeclareLayer[
  background,
  mode=picture,
  head,
  contents={\color{DeepSkyBlue3}\rule{\layerwidth}{\layerheight}}
]{head.background}

Damit erfolgt die Ausgabe von contents nicht auf der Grundlinie, sondern ausgehend vom unteren Rand der Ebene. Dies ist auch nützlich, wenn man mit einer picture-Umgebung oder TikZ in die Ebene zeichnen will, beispielsweise um mit einem Farbverlauf statt einer einzelnen Farbe zu arbeiten.

Zusätzlich zur Deklaration der Ebene muss man natürlich noch dafür sorgen, dass die Ebene auch verwendet wird. Dazu fügt man die Ebene einem Seitenstil hinzu. scrlayer bietet die Möglichkeit, Ebenen wahlweise am Anfang oder am Ende eines Ebenen-Seitenstils oder auch vor oder nach einem bestimmten anderen Seitenstil einzufügen. Wir wollen, dass die Farbe im Hintergrund und damit als erstes ausgegeben wird, also fügen wir sie mit \AddLayersAtBeginOfPageStyle ganz am Anfang ein.

\documentclass{scrartcl}
\usepackage[x11names]{xcolor}
\usepackage[automark]{scrlayer-scrpage}

\usepackage{blindtext}

\DeclareLayer[
  background,
  mode=picture,
  head,
  contents={\color{DeepSkyBlue3}\rule{\layerwidth}{\layerheight}}
]{head.background}

\AddLayersAtBeginOfPageStyle{scrheadings}{head.background}

\begin{document}
\title{Titel}
\author{Autor}
\maketitle
\blinddocument
\end{document}

Da bei Verwendung von scrartcl die Voreinstellung von scrlayer-scrpage der plain-Seitenstil plain.scrheadings keinen Kopfinhalt hat, würde es keinen Sinn ergeben, diesen Seitenstil mit dem Kopfhintergrund zu versehen. Daher wird die Ebene im Beispiel nur dem headings-Stil scrheadings hinzugefügt.

Wollte man die Ebene allen Ebenen-Seitenstilen (auch empty!) hinzufügen, so könnte man einfach

\AddLayersAtBeginOfPageStyle{@everystyle@}{head.background}

verwenden.


Related

Wiki (Deutsch): HowTo_PageHeadFoot

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.