Ich möchte das Paket tocbasic nutzen, um mit der Standardklasse book folgendes Aussehen des Inhaltsverzeichnis zu erreichen:

alt text

Erreichen lässt sich das mit

Open in Online-Editor
\documentclass{book}
\usepackage{tocbasic}[2016/05/10]
\setcounter{tocdepth}{4}
\DeclareTOCStyleEntry[%
  linefill=\quad,%
  raggedpagenumber,%
  pagenumberformat=\bfseries\textit%
]{tocline}{chapter}
\DeclareTOCStyleEntry[%
  linefill=\quad,%
  raggedpagenumber,%
  pagenumberformat=\textit%
]{tocline}{section}
\DeclareTOCStyleEntry[%
  linefill=\quad,%
  raggedpagenumber,%
  pagenumberformat=\textit%
]{tocline}{subsection}
\DeclareTOCStyleEntry[%
  linefill=\quad,%
  raggedpagenumber,%
  pagenumberformat=\textit%
]{tocline}{subsubsection}
\DeclareTOCStyleEntry[%
  linefill=\quad,%
  raggedpagenumber,%
  pagenumberformat=\textit%
]{tocline}{paragraph}

\usepackage{blindtext}% nur für Fülltext
\begin{document}
\tableofcontents
\blinddocument
\end{document}

Allerdings nehme ich da für alle Ebenen von section bis paragraph einzeln die immer gleichen Anpassungen vor. Lässt sich das für eine Standardklasse effizienter erledigen?

Vorschläge mit anderen Paketen für ein ähnliches Ergebnis sind ebenfalls willkommen.

gefragt 06 Jul '16, 11:12

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 06 Jul '16, 14:36


Am einfachsten ist es, wenn man die Standardklasse durch eine KOMA-Script-Klasse mit Emulation der Standardklassen ersetzt:

Open in Online-Editor
\documentclass[emulatestandardclasses]{scrbook}
\setcounter{tocdepth}{4}
\RedeclareSectionCommands[%
  toclinefill=\quad,%
  tocraggedpagenumber,%
  tocpagenumberformat=\bfseries\textit%
]{chapter,section,subsection,subsubsection,paragraph,subparagraph}

\usepackage{blindtext}% nur für Fülltext
\begin{document}
\tableofcontents
\blinddocument
\end{document}

Damit bekommt man:

emulierte Standardklasse

Durch die Standardklassen-Emulation werden diverse Einstellungen der KOMA-Script-Klassen so geändert, dass sie optisch den Standardklassen möglichst entsprechen. Diese Option ist allerdings derzeit nur auf der KOMA-Script-Homepage, im Quelltext und der TODO-Liste von KOMA-Script dokumentiert. Sie muss also als experimentell betrachtet werden, das heißt: Am Ergebnis oder am Namen kann sich noch etwas ändern.

Bei weniger einfach gestrickten Beispielen kann es natürlich auch immer sein, dass trotz der Emulation der Standardklassen ein Wechsel zu einer KOMA-Script-Klasse nicht in Frage kommt. So kann es mit diesem Wechsel durchaus zu Problemen mit zusätzlichem Code oder zusätzlichen Paketen in der Dokumentpräambel oder zu Umbruchänderungen kommen, deren Lösung weiteren Aufwand bedeutet.

Permanenter link

beantwortet 06 Jul '16, 12:04

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 06 Jul '16, 12:46

Bei gesetzer Option emulatestandardclasses wird das Paket scrlayer-scrpage geladen, um die Kopf- und Fußzeilen wie bei den Standardklassen einzustellen. Daraus ergibt sich die Einschränkung, dass weder das Paket fancyhdr noch das veraltete scrpage2 verwendet werden können.

(06 Jul '16, 12:19) esdd
1

@esdd: Nicht jeder muss fancyhdr verwenden. Und scrpage2 braucht man schlicht nicht, wenn scrlayer-scrpage bereits verwendet wird. Ja, es gibt Einschränkungen. Teilweise sind sie sogar schwerwiegender als die von Dir genannten. Beispielsweise erkennt index die Klasse scrartcl nicht in gleicher Weise wie article. Auch ist der Umbruch nicht 100% identisch. Trotzdem sehe ich es als mögliche Lösung, die man immerhin ausprobieren kann. Eine alternative Lösung habe ich ebenfalls angeboten. Man muss abwägen: Ist es einfacher den Standardklassen KOMA-Script beizubringen oder umgekehrt?

(06 Jul '16, 12:29) saputello

Jetzt weiß ich dann gar nicht, was ich akzeptieren soll ;-): einerseits wollte ich diese Antwort urspünglich in der Frage ausschließen (habe ich aber nicht), andererseits hätte ich anderen genau das auch vorgeschlagen und es ist ohnehin eigentlich eine Frage in der Richtung probieren/zeigen wir mal, was mit den neuen Möglichkeiten von tocbasic geht.

(06 Jul '16, 12:30) esdd
1

@esdd: Warte mal ab. Vielleicht bringt noch jemand eine ganz tolle Lösung mit etoc oder tocloft oder … Natürlich können auch diese im Zusammenspiel mit weiteren Paketen oder eigenen Definitionen wieder neue Probleme mit sich bringen. ;-)

Ich finde gerade bei Archivfragen interessant, was es an unterschiedlichen Möglichkeiten gibt, weil natürlich ein wirklich Hilfesuchender nie dasselbe Problem hat und deshalb die beste Lösung immer von seinen Umständen abhängt.

(06 Jul '16, 12:43) saputello

@saputello Dann habe ich die Frage jetzt einfach mal so abgeändert, dass auch Lösungen mit anderen Paketen passen.

(06 Jul '16, 14:38) esdd

Hier ist mal zusätzlich noch ein Beispiel mit dem Paket tocstyle. Das wird seinen Alpha Status aber vermutlich nie loswerden, da es AFAIK irgendwann mehr oder weniger von tocbasic ersetzt werden soll.

Open in Online-Editor
\documentclass{book}
\setcounter{tocdepth}{4}

\usepackage{tocstyle}
\usetocstyle{nopagecolumn}
\settocstylefeature{pagenumberhook}{\itshape}
\settocstylefeature[0]{entryhook}{\bfseries}
\settocstylefeature[0]{pagenumberhook}{\itshape}

\usepackage{blindtext}% nur für Fülltext
\begin{document}
\tableofcontents
\blinddocument
\end{document}

alt text

Permanenter link

beantwortet 06 Jul '16, 14:27

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

Wenn man bis auf die Verzeichnisebene tatsächlich immer dieselben Argumente verwendet, kann man sich natürlich ein abkürzendes Makro definieren, das genau diese Argumente enthält, also beispielsweise:

Open in Online-Editor
\newcommand*{\ChangeTOCEntry}[1]{%
  \DeclareTOCStyleEntry[
    linefill=\quad,
    raggedpagenumber,
    pagenumberformat=\textit
  ]{tocline}{#1}%
}

Danach sind die Aufrufe leicht kürzbar:

Open in Online-Editor
\ChangeTOCEntry{chapter}
\ChangeTOCEntry{section}
\ChangeTOCEntry{subsection}

etc.

Man kann sich auch eine etwas allgemeinere Listenoperation definieren, der man zusätzlich das optionale und das erste obligatorische Argument übergeben kann:

Open in Online-Editor
\documentclass{book}
\usepackage{tocbasic}[2016/05/10]
\setcounter{tocdepth}{4}
\usepackage{xparse}
\DeclareDocumentCommand\DeclareListOfTOCStyleEntries{ o m > {\SplitList { , } }
  m }{ \def\teoarg{#1}\def\temarg{#2}\ProcessList{#3}{\te} }
\newcommand*{\teoarg}{}
\newcommand*{\temarg}{}
\newcommand*{\te}[1]{%
  \expandafter\DeclareTOCStyleEntry\expandafter[\teoarg]{\temarg}{#1}%
}
\DeclareListOfTOCStyleEntries[%
  linefill=\quad,%
  raggedpagenumber,%
  pagenumberformat=\bfseries\textit%
]{tocline}{chapter,section,subsection,subsubsection,paragraph,subparagraph}

\usepackage{blindtext}% nur für Fülltext
\begin{document}
\tableofcontents
\blinddocument
\end{document}

Im Beispiel nehme ich die Listenverarbeitung mit xparse vor, wobei auch die experimentelle Funktion \ProcessList verwendet wird. Alternativen bietet der LaTeX-Kern selbst mit \@for oder das Paket etoolbox mit diversen Möglichkeiten.

Permanenter link

beantwortet 06 Jul '16, 11:38

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 06 Jul '16, 11:39

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×117
×78
×5

gestellte Frage: 06 Jul '16, 11:12

Frage wurde gesehen: 9,796 Mal

zuletzt geändert: 06 Jul '16, 14:38