Menu

HowTo_HeaderSeparateNumberText

Wie in der Kopfzeile die Kapitelnummer außen und der Kapiteltitel innen ausgegeben werden kann

Die meisten Klassen verwenden \chaptermark, um die Marken für den lebenden Kolumnentitel, also üblicherweise die Kopfzeile, zu setzen. Bei scrreprt ist die voreingestellt Definition im Seitenstil headings:

\renewcommand*{\chaptermark}[1]{%
  \if@twoside\expandafter\markboth\else\expandafter\markright\fi
  {%
    \Ifnumbered{chapter}{%
      \MakeMarkcase{\chaptermarkformat}%
    }{}\MakeMarkcase{#1}%
  }{}%
}%

Bei scrbook kommt noch ein Test auf den Hauptteil (\mainmatter) hinzu. Bei Verwendung von scrlayer-scrpage sieht die Definition etwas komplizierter aus, läuft auf ebenfalls darauf hinaus, dass die (in \chaptermarkformat definierte Formatierung der) Nummer vor dem Titeltext (in #1) ausgegeben wird.

Wollte man die Nummer linksbündig und den Titel rechtsbündig setzen, könnte man einfach bei \chaptermarkformat ansetzen und in dessen Definition:

\newcommand*\chaptermarkformat{\chapappifchapterprefix{\ }%
  \thechapter\autodot\enskip}

den Abstand von einem halben Geviert \enskip durch einen unendlich dehnbaren Abstand \hspace{.5em plus 1fill} ersetzen:

\renewcommand*\chaptermarkformat{\chapappifchapterprefix{\ }%
  \thechapter\autodot\hspace{.5em plus 1fill}}

Wir wollen aber, dass bei einem doppelseitigen Dokument auf rechten (=ungerade) Seiten die Position von Nummer und Text vertauscht wird. Daher benötigen wir eine neue Anweisung, die genau das erledigt:

\documentclass[headsepline]{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\DeclareRobustCommand*{\FlipNumberText}[2]{%
  \ifodd\value{page}% Das funktioniert so nur im Kopf oder Fuß sonst wird
                    % stattdessen \Ifthispageodd benötigt!!!
    #2\hfill #1%
  \else
    #1\hfill #2%
  \fi
}
\renewcommand*{\chaptermark}[1]{%
  \csname @mkboth\endcsname
  {\MakeMarkcase{\FlipNumberText{\chaptermarkformat}{#1}}}
  {\MakeMarkcase{\FlipNumberText{\chaptermarkformat}{#1}}}
}
\renewcommand*{\sectionmark}[1]{}% \section soll keine Marke setzen
\begin{document}
\blinddocument 
\end{document}

Wichtig ist hier die Verwendung von \DeclareRobustCommand (oder alternativ \NewDocumentCommand), damit die Anweisung nicht zu früh expandiert. Bei Verwendung von \newcommand würde der Test, ob die Seite gerade oder ungerade ist, beim Setzen der Marke innerhalb von \chapter erfolgen und nicht erst bei deren Verwendung.

Selbstverständlich funktioniert das auch noch bei Verwendung von scrlayer-scrpage:

\documentclass[headsepline]{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{scrlayer-scrpage}
\automark[chapter]{chapter}
\NewDocumentCommand{\FlipNumberText}{m+m}{%
  \ifodd\value{page}% Das funktioniert so nur im Kopf oder Fuß sonst wird
                    % stattdessen \ifthispageodd benötigt!!!
    #2\hfill #1%
  \else
    #1\hfill #2%
  \fi
}
\renewcommand*{\chaptermark}[1]{%
  \csname @mkboth\endcsname
  {\MakeMarkcase{\FlipNumberText{\chaptermarkformat}{#1}}}
  {\MakeMarkcase{\FlipNumberText{\chaptermarkformat}{#1}}}
}
\begin{document}
\blinddocument 
\end{document}

Es geht auch mit scrlayer-scrpage und einer Standardklasse, allerdings muss man dann noch die Seitenzahl aus dem Kopf in den Fuß verschieben, da sich diese sonst wahlweise mit der Nummer oder dem Text der Kapitelmarke überschneidet:

\documentclass[headsepline]{book}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{scrlayer-scrpage}
\automark[chapter]{chapter}
\clearpairofpagestyles
\ohead{\headmark}
\ofoot*{\pagemark}
\NewDocumentCommand{\FlipNumberText}{m+m}{%
  \ifodd\value{page}% Das funktioniert so nur im Kopf oder Fuß sonst wird
                    % stattdessen \ifthispageodd benötigt!!!
    #2\hfill #1%
  \else
    #1\hfill #2%
  \fi
}
\renewcommand*{\chaptermark}[1]{%
  \csname @mkboth\endcsname
  {\MakeMarkcase{\FlipNumberText{\chaptermarkformat}{#1}}}
  {\MakeMarkcase{\FlipNumberText{\chaptermarkformat}{#1}}}
}
\begin{document}
\blinddocument 
\end{document}

Option headsepline habe ich in den Beispielen übrigens nur verwendet, um den Kopfbereich besser zu verdeutlichen. Was es mit dem \MakeMarkcase auf sich hat, kann in der KOMA-Script-Anleitung nachgelesen werden.


Related

Wiki (Deutsch): HowTo_PageHeadFoot

MongoDB Logo MongoDB