Menu

HowTo_ChapterVerticalLineAfterNumber

Wie man in Kapitelüberschriften Nummer und Text durch eine vertikale Linie trennen kann

Will man lediglich eine vertikale Linie fester Höhe nach der Kapitelnummer, so ist die einfachste Lösung, \chapterformat entsprechend umzudefinieren:

\documentclass{scrreprt}
\renewcommand*{\chapterformat}{%
  \thechapter\autodot\enskip\rule[-\dp\strutbox]{1pt}{\baselineskip}\enskip
}
\usepackage{blindtext}
\begin{document}
\chapter{Lorem ipsum}
\blindtext
\chapter{Lorem ipsum dolor sit amet, consectetur adipisici elit,
  sed eiusmod tempor incidunt}
\blindtext
\end{document}

Im Ergebnis erhält man so sowohl bei der einzeiligen Überschrift von Kapitel 1 als auch bei der mehrzeiligen Überschrift von Kapitel 2 eine gleich hohe vertikale Linie nach der Kapitelnummer.

Abbildung: Inhaltsverzeichnis, eine Seite mit einzeiliger Kapitelüberschriften, eine Seite mit mehrzeiliger Kapitelüberschriften, jeweils mit kurzer Linie nach der Nummer

Will man jedoch, dass sich die Tiefe der Linie im Fall von Kapitel 2 auf die gesamte Höhe der mehrzeiligen Überschrift erstreckt, so ist das nicht mehr einfach durch eine Umdefinierung von \chapterformat zu erreichen, weil man innerhalb von \chapterformat weder den Text der Überschrift noch dessen Höhe und Tiefe oder die Anzahl der benötigten Zeilen kennt. Hier bietet sich an, stattdessen die Anweisung \chapterlinesformat umzudefinieren, die sowohl Zugriff auf die (bereits formatierte) Nummer als auch auf den Text bietet:

\documentclass{scrreprt}
\usepackage{tabularx}
\renewcommand*{\chapterformat}{\thechapter\autodot}% Abstand nach \autodot entfernt
\renewcommand*{\chapterlinesformat}[3]{% #1 = chapter, #2 = formatierte Nummer, #3 Text
  \IfUseNumber{%
    \setlength{\arrayrulewidth}{1pt}%
    \begin{tabularx}{\linewidth}{@{}l|>{\raggedright}X@{}}
      #2 & #3
    \end{tabularx}%
  }{#3}% Keine Kapitelnummer
}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\chapter{Lorem ipsum}
\blindtext
\chapter{Lorem ipsum dolor sit amet, consectetur adipisici elit,
  sed eiusmod tempor incidunt}
\blindtext
\end{document}

Abbildung: Inhaltsverzeichnis, eine Seite mit einzeiliger Kapitelüberschriften, eine Seite mit mehrzeiliger Kapitelüberschriften, jeweils mit langer vertikalen Linie vor dem Text

Der Test mit \IfUseNumber dient dazu, im Falle einer Überschrift ohne Nummer, beispielsweise der des Inhaltsverzeichnisses, lediglich den Text der Überschrift auszugeben. Ohne die Fallunterscheidung würde stattdessen auch in diesem Fall eine Linie links neben dem Text erscheinen. Die tabularx ist die einfachste Möglichkeit, um die vertikale Linie zu erzeugen und die Spalte mit dem Text automatisch auf die maximale Breite zu setzen. Es sei erwähnt, dass \IfUseNumber nur innerhalb von Überschriften gültig ist.

Will man eine solche Formatierung für alle Überschriften, kann es hingegen sinnvoll sein, der linken Spalte mit der Nummer ebenfalls eine feste Breite zu geben. Dann kann man die Berechnung der Breite der rechten Spalte auch selbst vornehmen:

\documentclass{scrreprt}
\usepackage{array}
\renewcommand*{\chapterformat}{\thechapter\autodot}% Abstand nach \autodot entfernt
\renewcommand*{\chapterlinesformat}[3]{% #1 = chapter, #2 = formatierte Nummer, #3 Text
  \IfUseNumber{%
    \setlength{\arrayrulewidth}{1pt}%
    \begin{tabular}{@{}>{\raggedleft}p{\numcolwidth}|
                       >{\raggedright}p{\dimeval{\linewidth-\numcolwidth-2\tabcolsep-\arrayrulewidth}}@{}}
      #2 & #3
    \end{tabular}%
  }{#3}%
}
\renewcommand*{\sectionformat}{\thesection\autodot}
\renewcommand*{\subsectionformat}{\thesubsection\autodot}
\renewcommand*{\subsubsectionformat}{\thesubsubsection\autodot}
\setcounter{secnumdepth}{\subsubsectionnumdepth}
\renewcommand*{\sectionlinesformat}[4]{%
  \IfUseNumber{%
    \setlength{\arrayrulewidth}{1pt}%
    \begin{tabular}{@{}>{\raggedleft}p{\numcolwidth}|%
                       >{\raggedright}p{\dimeval{\linewidth-\numcolwidth-2\tabcolsep-\arrayrulewidth}}@{}}
      #3 & #4
    \end{tabular}%
  }{\hskip#2#4}%
}
\newlength{\numcolwidth}\setlength{\numcolwidth}{.5in}% für die Nummer reservierte Breite
\usepackage{mwe}
\begin{document}
\tableofcontents
\chapter{Lorem ipsum}
\lipsum[1][1-2]
\section{Nam dui ligula}
\lipsum[2][1-2]
\subsection{Nulla malesuada}
\lipsum[3][1-3]
\subsubsection{Quisque ullamcorper}
\lipsum[4]
\chapter{Lorem ipsum dolor sit amet, consectetur adipisici elit,
  sed eiusmod tempor incidunt}
\lipsum[1][1-2]
\section{Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi}
\lipsum[2][1-2]
\subsection{Nulla malesuada porttitor diam. Donec felis erat, congue non,
  volutpat at, tincidunt tristique, libero.}
\lipsum[3][1-3]
\subsubsection{Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel justo
  vitae lacus tincidunt ultrices.}
\lipsum[4]
\end{document}

Abbildung: Inhaltsvereichnis, eine Seite mit einzeiligen Überschriften von <code>\chapter</code> bis <code>\subsubsection</code>, eine Seite mit mehrzeiligen Überschriften von <code>\chapter</code> bis <code>\subsubsection</code>


Related

Wiki (Deutsch): HowTo_Headings

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.