Sie sind hier

Wie man die Seitenzahl im Fuß durch randabfallende vertikale Striche abtrennt

Bild von Markus Kohm

In English: How to separate the page number in the foot by vertical lines falling off the edges

Bereits in der Voreinstellung setzen die KOMA-Script-Klassen die Seitenzahl im Fuß. Bei einseitigen Dokumenten geschieht dies in der Mitte. Um vor und hinter der Seitenzahl jeweils einen vertikalen Strich anzubringen, der bis an die Unterkante der Seite reicht, genügt es tatsächlich \pagemark umzudefinieren. Dazu müsste vor und hinter der eigentlichen Seitenzahl \thepage eine entsprechende \rule-Anweisung ergänzt werden.

Das erste Problem dabei ist die Frage, wie lang diese Linie sein soll und wie weit sie unter die Grundlinie ragen muss (sie soll ja nicht auf der Grundlinie stehen). Es gibt keine vordefinierte Länge für den unteren Rand der Seite. Allerdings kann man diesen berechnen: \paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip) wäre die Höhe von der Papierunterkante bis zur Grundlinie des Fußes. Es wird also von der Papierhöhe alles abgezogen, was über der Grundlinie des Fußes steht. Damit hätte man bereits die gewünschte Verschiebung der Linie unter die Grundlinie. Dazu kommt bei der Länge der Linie dann noch der Teil, der auf der Grundlinie stehen soll. Das wäre beispielsweise \ht\strutbox also die Höhe einer normalen Zeile (zum Vergleich: \normabaselineskip wäre die Gesamthöhe, also Höhe + Tiefe einer normalen Zeile und entspricht damit \ht\strutbox+\dp\strutbox).

Mit diesen Überlegungen ergibt sich beispielsweise:

\documentclass{scrreprt}
\usepackage{blindtext}
\renewcommand*{\pagemark}{%
  \rule[-\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)]
  {1pt}
  {\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)+\ht\strutbox}%
  \nobreakspace
  {\usekomafont{pagenumber}{\thepage}}%
  \nobreakspace
  \rule[-\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)]
  {1pt}
  {\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)+\ht\strutbox}%
}
\begin{document}
\blinddocument
\Blindtext
\end{document}

Wie zu sehen ist, wurde die Linie außerdem noch mit \nobreakspace um die Breite eines Wortabstands von der Seitenzahl abgetrennt. Hier wären auch andere Angaben wie \,, \enskip, \quad oder ein konkreter Abstand mit \hspace möglich.

Statt der Höhe einer Zeile zu verwenden, kann man auch die Höhe des Fußes verwenden. KOMA-Script hat für die Gesamthöhe die Länge \footheight, die man außerdem per Option einstellen kann. Davon ziehen wir die Tiefe einer normalen Zeile \dp\strutbox ab. Außerdem ist es nicht besonders schön, das Riesenkonstrukt für die Linie zweimal anzugeben. Also definieren wir dafür auch noch einen einen Befehl:

\documentclass{scrreprt}
\usepackage{blindtext}
\newcommand*{\pagenumberseparatorline}{%
  \rule[-\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)]
  {1pt}
  {\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)+\footheight-\dp\strutbox}%
}  
\renewcommand*{\pagemark}{%
  \pagenumberseparatorline\nobreakspace
  {\usekomafont{pagenumber}{\thepage}}%
  \nobreakspace\pagenumberseparatorline
}
\begin{document}
\blinddocument
\Blindtext
\end{document}

Bei doppelseitigen Dokumenten steht die Seitenzahl dagegen außen im Fuß. Natürlich könnten wir dort dasselbe Konstrukt verwenden. Allerdings sieht das sofort nicht mehr gut aus. Besser ist, wenn dort die Linie nur auf der Innenseite der Seitenzahl steht, aber nicht auf der Seite zum äußeren Rand hin. Um dazu zu erreichen, muss man in der Definition von \pagemark abfragen, ob man sich auf einer linken (in LaTeX-Terminologie geraden) oder auf einer rechten (in LaTeX-Terminologie ungeraden) Seite befindet, um dann entweder die eine oder die andere Linie (einschließlich Abstand) zu setzen:

\documentclass{scrbook}
\usepackage{blindtext}
\newcommand*{\pagenumberseparatorline}{%
  \rule[-\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)]
  {1pt}
  {\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)+\footheight-\dp\strutbox}%
}  
\renewcommand*{\pagemark}{%
  \ifodd\value{page}\pagenumberseparatorline\nobreakspace\fi
  {\usekomafont{pagenumber}{\thepage}}%
  \ifodd\value{page}\else\nobreakspace\pagenumberseparatorline\fi
}
\begin{document}
\blinddocument
\Blindtext
\end{document}

Mit dem TeX-Primitiv \ifodd wird hier getestet, ob der Wert des Zählers page, \value{page}, ungerade ist. Innerhalb des Textbereichs sollte niemals der Wert dieses Zählers direkt verwendet werden. Stattdessen wäre dort beispielsweise \Ifthispageodd zu verwenden. Im Kopf oder Fuß ist aber nicht zu befürchten, dass der Text auf eine andere Seite umbrochen wird. Daher ist der Zähler hier zuverlässig.

Keinesfalls darf man an dieser Stelle \thepage für den Test verwenden. Diese Anweisung gibt die Darstellung des Werts eines Zählers aus. Das können auch römische Zahlen oder Buchstaben oder sogar beispielsweise aus Kapitelnummer und Seitennummer zusammengesetzte Zeichenfolgen sein. Auch die Angabe von \arabic{page} wäre genau genommen nicht korrekt. Auch das ist eine Darstellung und kein Zählerwert.

Betrachtet man das Ergebnis etwas genauer, kommt sehr schnell der Wunsch auf, die Seitenzahl zusätzlich in den äußeren Rand zu verschieben. In der Regel soll dann die Zahl selbst quasi unter der Randnotizspalte stehen und die Linie im Zwischenraum zum Text. Dafür müssen wir etwas tiefer in die Trickkiste greifen. Aber mit einer \makebox der Breite 0 und passender Ausrichtungsoption kann man Material problemlos rechts oder links neben die aktuelle Position verschieben.

\documentclass{scrbook}
\usepackage{blindtext}
\newcommand*{\pagenumberseparatorline}{%
  \rule[-\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)]
  {1pt}
  {\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)+\footheight-\dp\strutbox}%
}  
\renewcommand*{\pagemark}{%
  \ifodd\value{page}%
    \makebox[0pt][l]{%
      \makebox[\marginparsep][r]{\pagenumberseparatorline\nobreakspace}%
      {\usekomafont{pagenumber}{\thepage}}%
    }%
  \else
    \makebox[0pt][r]{%
      {\usekomafont{pagenumber}{\thepage}}%
      \makebox[\marginparsep][l]{\nobreakspace\pagenumberseparatorline}%
    }%
  \fi
}
\begin{document}
\blinddocument
\Blindtext
\end{document}

Eine alternative Methode, ohne Tests auf gerade oder ungerade Seite und ohne Umdefinierung von \pagemark stellt die Verwendung von Paket scrlayer-scrpage dar. Dabei kann man die Anweisungen \lefoot und \rofoot verwenden, um auf linken und rechten Seiten unterschiedliche Ausgaben zu tätigen. Die Verschiebung in den äußeren Rand kann dabei wie oben erfolgen. Allerdings ergibt sich mit dem naiven Ansatz:

\documentclass{scrbook}
\usepackage[automark]{scrlayer-scrpage}
\usepackage{blindtext}
\newcommand*{\pagenumberseparatorline}{%
  \rule[-\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)]
  {1pt}
  {\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)+\footheight-\dp\strutbox}%
}  
\lefoot*{%
  \makebox[0pt][r]{%
    \pagemark
    \makebox[\marginparsep][l]{\nobreakspace\pagenumberseparatorline}%
  }%
}
\rofoot*{%
  \makebox[0pt][l]{%
    \makebox[\marginparsep][r]{\pagenumberseparatorline\nobreakspace}%
    \pagemark
  }%
}
\begin{document}
\blinddocument
\Blindtext
\end{document}

das Problem, dass die Seitenzahl ab der zweiten Seite am unteren Rand klebt. Ursache dafür ist die Warnung:

Package scrlayer-scrpage Warning: \footheight to low.
(scrlayer-scrpage)                At least 130.06195pt needed,
(scrlayer-scrpage)                but only 17.0pt found.
(scrlayer-scrpage)                I'll enlarge \footheight, for further
(scrlayer-scrpage)                processing, but you should do this yourself,
(scrlayer-scrpage)                e.g., setting typearea's option
(scrlayer-scrpage)                `footheight=130.06195pt'.
(scrlayer-scrpage)                I'll also increase \footskip on input line 22.

Da die Linie sehr tief reicht, geht scrlayer-scrpage fälschlich davon aus, dass der Fuß insgesamt mehr Platz benötigt und vergrößert ihn entsprechend. Tatsächlich soll die Linie aber aus dem eigentlichen Fuß nach unten hinaus ragen. Statt also dem Rat zu folgen, erklären wir besser, dass die eigentliche Tiefe keine Rolle spielt. Das ist mit dem zweiten optionalen Argument einer \raisebox sehr einfach zu erreichen:

\documentclass{scrbook}
\usepackage[automark]{scrlayer-scrpage}
\usepackage{blindtext}
\newcommand*{\pagenumberseparatorline}{%
  \raisebox{0pt}[0pt][0pt]{%
    \rule[-\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)]
    {1pt}
    {\dimexpr\paperheight-(1in+\topmargin+\headheight+\headsep+\textheight+\footskip)+\footheight-\dp\strutbox}%
  }%
}  
\lefoot*{%
  \makebox[0pt][r]{%
    \pagemark
    \makebox[\marginparsep][l]{\nobreakspace\pagenumberseparatorline}%
  }%
}
\rofoot*{%
  \makebox[0pt][l]{%
    \makebox[\marginparsep][r]{\pagenumberseparatorline\nobreakspace}%
    \pagemark
  }%
}
\begin{document}
\blinddocument
\Blindtext
\end{document}

Hier sehen wir den Vorteil, die Linie als eigenständigen Befehl zu definieren. So musste nur deren Definition um die \raisebox ergänzt werden. Da wir keine (weitere) vertikale Verschiebung der Linie wollen, ist das erste Argument 0 pt. Das erste optionale Argument gibt die resultierende Höhe an. Hier hätten wir eigentlich \dimexpr\footheight-\dp\strutbox einsetzen müssen. Genau genommen, soll aber die Höhe der Linie ebenfalls keine Rolle spielen. Also wurde auch die Höhe einfach mit 0 pt angegeben. Für die Tiefe hätten wir auch die normale Tiefe einer Zeile, \dp\strutbox angeben können. Aber, wie bereits erwähnt, soll die Linie insgesamt und insbesondere ihre Tiefe keine Rolle spielen. Also wurde auch für das zweite optionale Argument 0 pt verwendet. Damit ist die vertikale Ausdehnung der Linie für TeX 0. Sie hat so keinen Eunfluss mehr auf die Ermittlung der Höhe des Fußes durch scrlayer-scrpage. Alternativ hätte man die automatische Korrektur durch scrlayer-scrpage übrigens auch generell per Option abschalten können. In der Regel ist es jedoch besser, stattdessen den Einfluss von einzelnen Elementen gezielt auszuschalten.

Durch Verwendung der Sternformen \lefoot* und \rofoot* wurde sichergestellt, dass die veränderte Ausgabe der Seitenzahl auch auf Kapitelanfangsseiten verwendet wird. Diese werden mit dem plain-Seitenstil plain.scrheadings erstellt. Ohne den Stern würde die geänderte Ausgabe nur auf den übrigen Seiten mit dem Seitenstil headings verwendet werden.

Es sei an dieser Stelle noch darauf hingewiesen, dass im Buchdruck Material, das bis an den Seitenrand heranreicht, immer etwas über den Seitenrand hinaus gesetzt werden sollte. Anderenfalls kann es beim Buchdruck durch minimale Verschiebungen zu hässlichen weißen Rändern kommen. Daher sollten die Linie min. 3–6 mm oder 0,1–0,3 in verlängert und weiter nach unten verschoben werden. In der Regel stört es nicht, wenn man hier etwas großzügiger ist.

Comments for "Wie man die Seitenzahl im Fuß durch randabfallende vertikale Striche abtrennt" abonnieren