Ich habe ein Dokument mit nicht nummerierten und nummerierten Kapiteln. Die Kapitel ohne Nummer sind nicht weiter unterteilt, aber alle nummerierten Kapitel sind noch in Abschnitte gegliedert.

Die Einträge der Kapitel im Inhaltsverzeichnis

alt text

sollen nun wie folgt verändert werden:

  • Für die Kapitel ohne Nummerierung soll der Abstand zwischen Text und Seitenzahl mit einer Punktlinie gefüllt sein.
  • Für Kapitel mit Nummer soll die Seitenzahl entfernt werden. Dafür soll es dann natürlich auch keine Linie mit Füllpunkten geben.

Code für das Beispiel:

Open in Online-Editor
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}

\begin{document}
\tableofcontents
\addchap{Einleitung}
\addchap{Hinweise}
\blinddocument
\end{document}

gefragt 06 Jun, 08:52

esdd's gravatar image

esdd
14.2k53251
Akzeptiert: 87%


Ich finde die Anforderung zwar ziemlich inkonsistent, aber es ist auch kein wirklich großes Problem, das umzusetzen:

Open in Online-Editor
\documentclass{scrbook}[2016/05/10]
\usepackage[ngerman]{babel}
\usepackage{blindtext}

\DeclareTOCStyleEntry[%
  level=\chaptertocdepth,
  indent=0pt,
  numwidth=1.5em,
  linefill=\TOCLineLeaderFill,
]{chapter}{xchapter}
\makeatletter
\RedeclareSectionCommand[%
  tocpagenumberbox=\@gobble
]{chapter}
\CheckCommand*{\addchaptertocentry}[2]{%
  \addtocentrydefault{chapter}{#1}{#2}%
  \if@chaptertolists
    \doforeachtocfile{%
      \iftocfeature{\@currext}{chapteratlist}{%
        \addxcontentsline{\@currext}{chapteratlist}[{#1}]{#2}%
      }{}%
    }%
    \@ifundefined{float@addtolists}{}{\scr@float@addtolists@warning}%
  \fi
}
\renewcommand*{\addchaptertocentry}[2]{%
  \IfArgIsEmpty{#1}{%
    \addtocentrydefault{xchapter}{#1}{#2}%
  }{%
    \addtocentrydefault{chapter}{#1}{#2}%
  }%
  \if@chaptertolists
    \doforeachtocfile{%
      \iftocfeature{\@currext}{chapteratlist}{%
        \addxcontentsline{\@currext}{chapteratlist}[{#1}]{#2}%
      }{}%
    }%
    \@ifundefined{float@addtolists}{}{\scr@float@addtolists@warning}%
  \fi
}
\makeatother

\begin{document}
\tableofcontents
\addchap{Einleitung}
\addchap{Hinweise}
\blinddocument
\end{document}

alt text

Der Trick dabei ist, dass über die Umdefinierung von \addchaptertocentry für nicht nummerierte Einträge, also dann, wenn das erste Argument leer ist, nicht mehr ein Eintrag der Ebene chapter sondern der Ebene xchapter erzeugt wird. Dieser Eintrag der Ebene xchapter kann unabhängig von den Einträgen der Ebene chapter mit \DeclareTOCStyleEntry deklariert werden.

Die Originaldefinition von \addchaptertocentry habe ich scrbook.cls entnommen. Natürlich könnte man das Patchen auch mit etoolbox oder xpatch erledigen:

Open in Online-Editor
\documentclass{scrbook}[2016/05/10]
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{xpatch}
\DeclareTOCStyleEntry[%
  level=\chaptertocdepth,
  indent=0pt,
  numwidth=1.5em,
  linefill=\TOCLineLeaderFill,
]{chapter}{xchapter}
\makeatletter
\RedeclareSectionCommand[%
  tocpagenumberbox=\@gobble
]{chapter}
\xpatchcmd{\addchaptertocentry}{%
  \addtocentrydefault{chapter}{#1}{#2}%
}{%
  \IfArgIsEmpty{#1}{%
    \addtocentrydefault{xchapter}{#1}{#2}%
  }{%
    \addtocentrydefault{chapter}{#1}{#2}%
  }%
}{}{\PatCHFaiLED}
\makeatother

\begin{document}
\tableofcontents
\addchap{Einleitung}
\addchap{Hinweise}
\blinddocument
\end{document}

Es sei noch darauf hingewiesen, dass es \DeclareTOCStyleEntry offiziell erst ab KOMA-Script v3.20 gibt. Das funktioniert derzeit also noch nicht im Online-Editor, aber sehr wohl mit TeX Live 2016 und mit einem aktuell gehaltenen MiKTeX.

Permanenter link

beantwortet 06 Jun, 10:23

saputello's gravatar image

saputello
18.4k22352

bearbeitet 06 Jun, 12:58

Danke, die Möglichkeit, dass chapteratlists verwendet wird, hätte ich vergessen und der Befehl \chaptertocdepth ist mir auch neu.

(06 Jun, 18:04) esdd

@esdd: \chaptertocdepth gibt es seit KOMA-Script 3.15 und wurde wohl auch in das \DeclareTOCEntryStyle-Zeitalter hinüber gerettet, wo es auch indirekt in einem Nebensatz dokumentiert und in einem Beispiel gezeigt ist. Natürlich hätte man da auch einfach 0 einsetzen können. Auf Einzug und Nummernbreite gibt es keinen Zugriff auf Benutzerebene. Deshalb habe ich es unterlassen, dort \scr@tso@chapter@indent und \scr@tso@chapter@numwidth einzusetzen.

(07 Jun, 01:47) saputello

@saputello Eigentlich kenne ich die Doku ja ganz gut, aber das ist nicht nur wirklich indirekt sondern auch noch an einer Stelle dokumentiert, die sich ausdrücklich an Entwickler und nicht Anwender wie mich richtet. Dabei würden sich die Befehle auch gut eignen, um tocdepth zu setzen, also zum Beispiel für \setcounter{tocdepth}{\sectiontocdepth}

(07 Jun, 04:26) esdd
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×108
×73
×46
×3

Frage gestellt: 06 Jun, 08:52

Frage wurde angeschaut: 1,279 Mal

Zuletzt aktualisiert: 07 Jun, 04:26