Sie sind hier

Formatierung der Einträge des Inhaltsverzeichnisses

Meine Anfrage ist allgemeiner Art. Wie ist der beste Weg mit KOMA-Script, das Aussehen der Einträge des Inhaltsverzeichnisses zu verändern? Es geht mir um einen zukunftssicheren Weg. Ich bin zu der Anfrage gekommen, nachdem ich bemerkte, dass eine von mir vorgenommene Umdefinition des Makros \l@chapter in der KOMA-Script-Version 3.20 im Unterschied zu 3.19 unwirksam bleibt (wohl eine Frage des Zeitpunkts). Ich versuchte u.a. die Seitenzahl an den Anfang der Zeile zu bekommen.

Es geht mir nicht um eine Lösung dieses speziellen Problems und auch nicht um eine Beschwerde, dass die noch nicht offizielle Version sich wie beschrieben verhält.

...Rolf

Bild von Markus Kohm

Prinzipiell sollte die Umdefinierung von \l@… durchaus funktionieren. Dabei interne Anweisungen von KOMA-Script zu verwenden, ist allerdings riskant. Falls Du das nicht machst, dann würde mich schon interessieren, was das mit der Vorabversion von 3.20 nicht funktioniert. Das ist auch deshalb von Interesse, weil es ggf. Auswirkungen auf Pakete wie tocstyle oder etoc haben könnte.

Es so zu machen, dass dadurch keine Featues von KOMA-Script deaktiviert werden, steht natürlich auf einem anderen Blatt.

Ab KOMA-Script 3.20 unterstützt KOMA-Script ja auch Verzeichnisstile bzw. verwendet diese zumindest intern. Ich kann nicht ausschließen, dass es dadurch zu einem Problem gekommen ist.

In Zukunft soll es irgend wann einmal möglich sein, sowohl eigene Überschriftenstile als auch eigene Verzeichnisstile definieren zu können. Davon bin ich aber noch ein gutes Stück entfernt. Bis dahin ist mein Mittel der Wahl für Verzeichniseinträge tocstyle. Allerdings ist das weder zukunftssicher noch dürfte damit Deine Anforderung zu erfüllen sein.

Auf die einschlägigen auf die Standard-Klassen abgestimmten Pakete würde ich hingegen eher nicht setzen. Mit denen habe ich schon heute so viele Probleme, ihre Verwendbarkeit mit KOMA-Script überhaupt möglich zu halten, dass ich diesbezüglich für gar nichts garantiere.

Ich hab mal versucht, ein einfaches Beispiel zu machen. Ob der gezeigte Effekt tatsächlich wichtig ist, weiß ich nicht. Das Beispiel verhält sich mit der Version 3.19a so, wie es soll, d.h. die Seitenzahlen für part und für chapter sind am Zeilenanfang. Mit der Version 3.20 hat meine Definition von \l@chapter keinen Effekt mehr. Verlagere ich die Definition nach hinterhalb von \RedeclareSectionCommand, funktioniert es wieder.

\documentclass[fontsize=11pt,paper=a4,pagesize]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\setcounter{secnumdepth}{\numexpr\partnumdepth-1\relax}
\setcounter{tocdepth}{\chapternumdepth}
 
\makeatletter
\renewcommand\l@chapter[2]{%
  \fbox{#2} #1\par
}
\renewcommand\l@part[2]{%
  \fbox{#2} #1\par
}
\makeatother
 
\RedeclareSectionCommand[%
  ,style=section
  ,indent=0pt %
  ,beforeskip=-2\baselineskip
  ,afterskip=1\baselineskip
]{chapter}
 
\begin{document}
  \tableofcontents
  \part{FOOBAR}
  \chapter{foo1}
  \section{bar11}
  \section{baz11}
  \chapter{foo2}
  \section{bar22}
  \section{baz22}
  \chapter{foo3}
  \section{bar33}
  \section{baz33}
\end{document}
Bild von Markus Kohm

Ab Version 3.20 wird von \RedeclareSectionCommand auch das zugehörige \l@… im für die Überschrift definierten Verzeichnisstil neu definiert. Ich könnte natürlich eine Option definieren, mit der das unterbleibt.

Ich glaube, dass eine spezielle Option nicht nötig ist. Ein Hinweis zu dem Einfluss auf \l@… in der Dokumentation wäre aber gut.

Bild von Markus Kohm

Ich habe gerade entdeckt, dass es die Option bereits gibt. Wenn man nämlich als tocstyle einen leeren Wert übergibt, dann wird nicht umdefiniert:

\documentclass[fontsize=11pt,paper=a4,pagesize]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\setcounter{secnumdepth}{\numexpr\partnumdepth-1\relax}
\setcounter{tocdepth}{\chapternumdepth}
 
\makeatletter
\renewcommand\l@chapter[2]{%
  \fbox{#2} #1\par
}
\renewcommand\l@part[2]{%
  \fbox{#2} #1\par
}
\makeatother
 
\RedeclareSectionCommand[%
  ,tocstyle={},% Verzeichniseinträge nicht neu definieren
  ,style=section
  ,indent=0pt %
  ,beforeskip=-2\baselineskip
  ,afterskip=1\baselineskip
]{chapter}
 
\begin{document}
  \tableofcontents
  \part{FOOBAR}
  \chapter{foo1}
  \section{bar11}
  \section{baz11}
  \chapter{foo2}
  \section{bar22}
  \section{baz22}
  \chapter{foo3}
  \section{bar33}
  \section{baz33}
\end{document}

Ist allerdings noch kein Verzeichnisbefehl definiert, dann wird dann der Stil default verwendet.

Wichtig ist so eine Option schon, denn sonst kann man nach dem Laden von beispielsweise Paket etoc die Überschriften nicht mehr umkonfigurieren, ohne dem Paket in die Quere zu kommen.

Comments for "Formatierung der Einträge des Inhaltsverzeichnisses" abonnieren