Überschriftenformate (titlesec)

Schrift, Nummerierung und Abstand um \section oder \chapter werden normalerweise von der Dokumentklasse festgelegt. Mit dem Paket titlesec von Javier Bezos kannst du all das in der eigenen Präambel neu gestalten. Die zwei zentralen Befehle sind \titleformat für das Aussehen der Überschrift und \titlespacing für die Abstände darum. Die Dokumentstruktur selbst behandelt „Structure, headings & ToC“; hier geht es nur darum, wie Überschriften *aussehen*.

Zuerst die schnelle Einrichtung

Vor den feinen Definitionen bietet titlesec eine einfache Einstellung, die das Aussehen allein über Paketoptionen ändert. \usepackage[sf,bf]{titlesec} macht zum Beispiel alle Überschriften serifenlos und fett. Die Optionen kommen in drei Gruppen mit jeweils einem Standardwert; du gibst nur an, was du ändern möchtest.

GruppeMögliche WerteStandard
font / shaperm sf tt md bf up it sl sc (Familie / Stärke / Form)bf
sizebig medium small tiny (Titelgröße)big (wie in den Standardklassen)
alignraggedleft center raggedright (Ausrichtung)(Klassenstandard)

Unabhängig davon verkleinert die Option compact den Abstand über und unter Überschriften. Wenn sich die Darstellung der *Nummer* ändern soll, verwende \titlelabel: \thetitle steht für die Überschriftennummer, der Standard der Klassen ist \titlelabel{\thetitle\quad}. Für einen Punkt nach der Nummer genügt Folgendes.

latex
\usepackage[sf,bf]{titlesec}     % 見出しをサンセリフ+ボールドに
\titlelabel{\thetitle.\quad}     % 「1.」のように番号のあとにピリオド

Wenn nur die Schrift geändert werden soll, Nummer und Abstand aber bleiben, ist die Sternform \titleformat* der kürzeste Weg. Übergib den Gliederungsbefehl und die gewünschte Schrift; die *shape* der Überschrift bleibt wie von der Klasse vorgegeben, nur die Erscheinung ändert sich.

latex
\titleformat*{\section}{\large\bfseries\sffamily}     % \section の書体だけ差し替え

Das Aussehen mit \titleformat definieren

Die vollständige Neugestaltung erledigt das nichtsternförmige \titleformat. Die Zahl der Argumente wirkt einschüchternd, aber einzeln betrachtet sind sie klar. Die Gesamtform lautet so.

latex
\titleformat{⟨command⟩}[⟨shape⟩]{⟨format⟩}{⟨label⟩}{⟨sep⟩}{⟨before-code⟩}[⟨after-code⟩]
  • ⟨command⟩ — der Gliederungsbefehl, den du neu gestaltest: \part, \chapter, \section, \subsection, \subsubsection, \paragraph oder \subparagraph.
  • [⟨shape⟩] (optional) — die „Form“ der Überschrift: hang, block, display, runin, leftmargin, frame und weitere. Standard ist hang.
  • {⟨format⟩} — Formatierung für Label und Text. Schrift, Größe und Ausrichtung werden hier zusammen gesetzt, etwa \normalfont\Large\bfseries.
  • {⟨label⟩} — wie die Nummer ausgegeben wird; hier stehen \thesection und Ähnliches. Für unnummerierte Ebenen kann es leer sein, dann fehlt die Nummer aber auch im Inhaltsverzeichnis.
  • {⟨sep⟩} — Abstand zwischen Label und Titeltext. Er muss eine Länge sein und darf nicht leer sein (horizontal in hang/block, vertikal in display, Text-zu-Rahmen-Abstand in frame).
  • {⟨before-code⟩} — Code, der direkt vor dem Titeltext ausgeführt wird. Der letzte Befehl darf ein Argument nehmen; dieses wird zum Titeltext.
  • [⟨after-code⟩] (optional) — Code direkt nach dem Titeltext (vertikaler Modus bei hang/block/display, horizontaler Modus bei runin/leftmargin).

⟨shape⟩ legt das grundlegende Layout der Überschrift fest. Diese Formen werden häufig verwendet.

shapeWirkung
hangStandard: hängendes Label, daneben ausgerichteter Text (wie bei Standard-\section)
blockSetzt den ganzen Titel als Block/Absatz; gut für zentrierte Titel und Sonderformate wie picture
displayStellt das Label in eine eigene Zeile/einen eigenen Absatz über den Text (wie Standard-\chapter)
runinEingelaufene Überschrift: Text läuft ohne Umbruch in derselben Zeile weiter (wie Standard-\paragraph)
leftmarginSetzt den Titel in den linken Rand (rightmargin ist die Variante für den rechten Rand)
frameWie display, aber der Titel wird gerahmt

Abstände mit \titlespacing definieren

Zum Aussehen gehört \titlespacing, das den Raum um eine Überschrift festlegt. Normalerweise verwendest du die Sternform \titlespacing*.

latex
\titlespacing*{⟨command⟩}{⟨left⟩}{⟨before-sep⟩}{⟨after-sep⟩}[⟨right⟩]
  • ⟨left⟩ — wie stark der linke Rand vergrößert wird (bei leftmargin-Formen die Titelbreite, bei runin der Einzug direkt vor dem Titel).
  • ⟨before-sep⟩ — der vertikale Abstand über dem Titel.
  • ⟨after-sep⟩ — der Abstand zwischen Titel und Text (vertikal bei hang/block/display, horizontal bei runin/leftmargin).
  • [⟨right⟩] (optional) — vergrößert den rechten Rand bei hang/block/display.

Die Bedeutung des Sterns ist hier entscheidend: \titlespacing* unterdrückt den Einzug des Absatzes nach der Überschrift. LaTeX kennt die Konvention, den ersten Absatz nach einer Überschrift nicht einzurücken; der Stern wählt dieses Verhalten. Bei drop, wrap und runin spielt das keine Rolle, daher hat der Stern dort keine Wirkung. Alle Argumente müssen Längen sein; Werte mit Befehlen wie \stretch führen zu Fehlern. Wenn volle Skip-Werte lästig sind, kannst du mit * und Zahl abkürzen, etwa *4; die Einheiten sind dann \beforetitleunit und \aftertitleunit.

Ein vollständiges Beispiel

\titleformat und \titlespacing werden meist als Paar geschrieben. Die folgende Präambel gestaltet \section so um, dass links eine dünne Linie steht und rechts daneben Nummer und Titel in größerer serifenloser Fettschrift gesetzt werden.

document.tex
\documentclass{article}
\usepackage{titlesec}

\titleformat{\section}            % 対象は \section
  [hang]                          % 形:番号をぶら下げる
  {\sffamily\Large\bfseries}      % 番号・本文に効く書式
  {\thesection}                   % ラベル(番号)
  {1em}                           % ラベルと本文の間隔
  {}                              % 本文直前のコード(ここでは無し)

\titlespacing*{\section}
  {0pt}                           % 左余白の追加なし
  {3.5ex plus 1ex minus .2ex}     % 見出しの上の空き
  {2.3ex plus .2ex}               % 見出しと本文の間の空き

\begin{document}
\section{はじめに}
本文がここから続きます。
\end{document}

In diesem \titleformat wählt [hang] die hängende Label-Form, und {\sffamily\Large\bfseries} gilt für Nummer und Titel. {\thesection} gibt die Nummer aus („1“, „2“, …), {1em} ist der Abstand zwischen Nummer und Titel. Das letzte {} ist Code vor dem Titeltext und tut hier nichts. Das folgende \titlespacing* fügt keinen linken Rand hinzu (0pt), setzt etwa 3.5ex über die Überschrift und etwa 2.3ex zwischen Überschrift und Text. plus/minus geben erlaubtes Dehnen und Schrumpfen an, damit LaTeX die Seite ausgleichen kann. Wegen des Sterns wird der Absatz direkt nach \section nicht eingerückt. Für eine Linie setzt man idiomatisch \titlerule von titlesec in {⟨before-code⟩} und verwendet die Form [display].

Standardmäßig folgt der Titeltext implizit auf {⟨before-code⟩}. Die Option explicit ändert das: Dann musst du den Titeltext mit #1 explizit platzieren, etwa \titleformat{\section}{..}{\thesection}{..}{#1.}. Das ist nützlich, wenn vor und nach dem Titel Schmuck stehen soll.

Inhaltsverzeichnis mit titletoc anpassen und Fallstricke

Wenn Überschriften umgestaltet sind, soll meist auch das Inhaltsverzeichnis passen. Dafür bringt titlesec das Schwesterpaket titletoc mit, das auch eigenständig nutzbar ist. Zentral sind \titlecontents, das einen Verzeichniseintrag vollständig definiert, und \dottedcontents, eine Voreinstellung mit Punktführungen. Beachte: Das erste Argument ⟨section⟩ ist der Name ohne Backslash (section, chapter, figure, …).

latex
\usepackage{titletoc}
% 節の目次項目:点線リーダー付き(左寄せ 1.5em、ラベル幅 2.3em、リーダー幅 1pc)
\dottedcontents{section}[1.5em]{}{2.3em}{1pc}

Zum Schluss zwei häufige Fallstricke. Erstens: \titlespacing wirkt bei \chapter und \part nicht, wenn du nicht zugleich ihr Format mit \titleformat (oder der einfachen Einrichtung) änderst. \part ist ohnehin nicht standardmäßig implementiert, daher lassen einfache Einstellungen es unangetastet; ändere es über \titleformat. Zweitens: titlesec verträgt sich schlecht mit KOMA-Script-Klassen wie scrartcl. KOMA-Script warnt vor der Kombination, und mehrere Funktionen brechen, darunter die Option headings und die erweiterten optionalen Argumente der Abschnittsbefehle. Mit KOMA-Script solltest du Überschriften über KOMAs eigene Mechanismen wie \setkomafont oder \RedeclareSectionCommand gestalten.