Sie sind hier

Kann man bei KOMA-Script alle Überschrifte mit einer Präfixzeile setzen?

Bild von Markus Kohm

Wieder einmal hat mich eine Frage erreicht, die ich euch nicht vorenthalten will. Dieses Mal sucht der Fragesteller nach einer einfachen Möglichkeit, alle Überschriften von KOMA-Script mit einer Präfixzeile zu versehen. Dabei soll in der Präfixzeile nur die Nummer stehen, während darunter dann der Text steht. Zwischen den beiden Zeilen soll kein Abstand sein.

Wie so oft wurde auch gleich vermutet, dass das mit KOMA-Script nicht ginge oder sehr kompliziert sei. Wollen mal sehen …

Bild von Markus Kohm

Für die Kapitelebene ist das bekanntlich ganz einfach zu lösen:

\KOMAoptions{chapterprefix=true}
\renewcommand*{\chapterformat}{\thechapter\autodot}
\RedeclareSectionCommand[innerskip=0pt]{chapter}

Die erste Zeile schaltet die Präfixzeile ein, die zweite Zeile entfernt das »Kapitel« vor der Kapitelnummer der Präfixzeile, die dritte Zeile entfernt den Abstand. Keine Hexerei.

Schwierig wird es nun für die anderen Glliederungsebenen. Dort ist nämlich nicht vorgesehen, dass die Überschriften mehrzeilig sind. Man könnte nun natürlich einfach den Stil ändern, also

\RedeclareSectionCommands[style=chapter,innterskip=0pt]{section,subsection,subsubsection}

verwenden (wobei die Lister der notwendigen Optionen nicht vollständig ist, aber das merkt ihr selbst, wenn ihr es ausprobiert). Allerdings beginnt dann jede Überschrift eine neue Seite, was sicher nicht erwünscht ist.

Also bleibt leider nur ein Hack. Dazu muss man wissen, dass derzeit alle Überschriften im Stil section von KOMA-Script mit \@hangfrom hängend gesetzt werden. Man müsste also lediglich \@hangfrom (möglichst nur innerhalb der Überschrift) so umdefinieren, dass es nicht mehr hängend, sondern eine eine Extrazeile setzt. Die Frage ist, wo man das einbaut. Die einfachste Möglichkeit ist, \raggedsection zu patchen, da diese Anweisung im section-Stil einerseits lokal und andererseits natürlich vor \@hangfrom ausgeführt wird:

\documentclass[chapterprefix]{scrreprt}
\renewcommand*{\chapterformat}{\thechapter\autodot}
\RedeclareSectionCommand[innerskip=0pt]{chapter}
\makeatletter
\renewcommand*{\raggedsection}{\raggedright\renewcommand*{\@hangfrom}[1]{##1\\*}}
\makeatother
 
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}

Sauberer wäre natürlich, wenn man einen eigenen Überschriften-Stil definieren würde. Allerdings ist diese Möglichkeit bisher nicht dokumentiert.

Es sei darauf hingewiesen, dass die Lösung interne Informationen verwendet, die sich ändern können – von denen sogar konkrete Pläne bestehen, sie zu ändern. Ob der Hack anschließend noch funktioniert, hängt dann in erster Linie davon ab, was der Anwender noch alles ändert.

Bild von Markus Kohm

Ab KOMA-Script 3.19 sollte folgendes funktionieren:

\listfiles
\documentclass[chapterprefix]{scrreprt}
\renewcommand*{\chapterformat}{\thechapter\autodot}
\RedeclareSectionCommand[innerskip=0pt]{chapter}
\renewcommand*{\sectionlinesformat}[4]{%
  \hspace*{#2}%
  \parbox[t]{\dimexpr\linewidth-#2\relax}{\raggedsection
    \ifstr{#3}{}{}{#3\\}%
    #4}%
}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}

Dabei wird bei mehrzeiligen Überschriften im Falle eines definierten Einzugs, nicht nur die Nummer, sondern die gesamte Überschrift eingezogen. Will man, dass in diesem Fall nur die Nummer eingezogen wird, so gelingt das bereits mit:

\documentclass[chapterprefix]{scrreprt}
\renewcommand*{\chapterformat}{\thechapter\autodot}
\RedeclareSectionCommand[innerskip=0pt]{chapter}
\renewcommand*{\sectionlinesformat}[4]{%
  \hskip #2#3\\*
  #4%
}
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}

Den Unterschied zeigt:

\listfiles
\documentclass[chapterprefix]{scrreprt}
\renewcommand*{\chapterformat}{\thechapter\autodot}
\RedeclareSectionCommand[innerskip=0pt]{chapter}
\renewcommand*{\sectionlinesformat}[4]{%
  \hskip #2#3\\*
  #4%
}
\RedeclareSectionCommand[indent=2em]{section}
\usepackage{mwe}
\begin{document}
\chapter{Unterschiede}
Bei den folgenden beiden Abschnitten zeigen sich die Unterschiede der
Definition, die nur mit Einzug (siehe
\verb|\RedeclareSectionCommand[indent=2em]{section}|) eine Rolle spielen. Ich
empfehle die etwas kompliziertere Form.
\section{Das ist ein Abschnitt bei dem dieser Text mehr als eine Zeile hat}
\blindtext
\renewcommand*{\sectionlinesformat}[4]{%
  \hspace*{#2}%
  \parbox[t]{\dimexpr\linewidth-#2\relax}{\raggedsection
    \ifstr{#3}{}{}{#3\\}%
    #4}%
}
\section{Das ist ein Abschnitt bei dem dieser Text mehr als eine Zeile hat}
\blindtext
\chapter{Kein Unterschied}
Ohne Einzug ergeben beide Definitionen das gleiche Ergebnis:
\RedeclareSectionCommand[indent=0em]{section}
\renewcommand*{\sectionlinesformat}[4]{%
  \interlinepenalty10000\hskip #2#3\\*
  #4%
}
\section{Das ist ein Abschnitt bei dem dieser Text mehr als eine Zeile hat}
\blindtext
\renewcommand*{\sectionlinesformat}[4]{%
  \hspace*{#2}%
  \parbox[t]{\dimexpr\linewidth-#2\relax}{\raggedsection
    \ifstr{#3}{}{}{#3\\}%
    #4}%
}
\section{Das ist ein Abschnitt bei dem dieser Text mehr als eine Zeile hat}
\blindtext
 
\Blinddocument
\end{document}

Unter windows/miktex habe ich bisher erst Version 3.18, aber mit \newcommand*...¹ anstelle von \renewcommand* ...¹ scheint es auch zu funktionieren.

[Admin-Edit:]

  1. <code></code> Tags eingefügt (siehe Formatierungshinweise)

Heiner Richter

Bild von Markus Kohm

Man kann mit KOMA-Script 3.18 die Anweisung zwar definieren, sie wird dann aber nicht verwendet und damit hat man dann auch nicht die Präfixzeile.

KOMA-Script 3.19 existiert übrigens derzeit in freier Wildbahn insgesamt noch nicht. Das ist also (dieses Mal) kein Rückstand von MiKTeX. Derzeit stockt die Entwicklung von KOMA-Script 3.19 auch etwas, wegen des SourceForge-Ausfalls.

Ach so, dann war meine Freude, dadurch den Fehlerhinweis verhindert zu haben, vorschnell.

Heiner Richter

Bild von Markus Kohm

Da SourceForge jetzt wieder so weit läuft, dass auch die Subversion-Repositories wieder funktionieren, gibt es die neue Möglichkeit inzwischen im Quellcode-Repository. Das ist natürlich nicht für die Allgemeinheit, sondern ausschließlich für Beta-Tester gedacht, die in der Lage sind, sich KOMA-Script selbst aus den Quellen zu bauen.

Für die Allgemeinheit via Vorabversion wird es das wie immer erst geben, wenn die Dokumentation dazu fertig ist und einige grundlegende Tests durchgeführt wurden.

Comments for "Kann man bei KOMA-Script alle Überschrifte mit einer Präfixzeile setzen?" abonnieren