PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kapitelüberschrift in TOC als \part anzeigen



Sietsch
05-12-2011, 12:00
Hallo zusammen,

ich möchte, dass mein Kapitel "Stuff"" zwar in der TOC als \part angezeigt wird, nicht aber im Dokument selbst.
Ich dachte, ich könnte dazu einfach manuell in der generierten *.toc-Datei die entsprechenden Einträge ändern, aber die Datei wird ja immer wieder neu generiert und den Schreibschutz aktivieren löst das Problem leider auch nicht.
Es gibt sicher eine elegante Lösung und ich hoffe, dass sie mir hier jemand nennen kann. :)

Der Grund, wieso ich nicht einfach \part{Stuff} schreibe, ist, dass das zur Folge hätte, dass das gesamte Layout von Stuff auf \part umgestellt wird. Ich will aber lediglich das Inhaltsverzeichnis beeinflussen.

Vielen Dank,
Sietsch.

bobmalaria
06-12-2011, 00:10
hi,

so scheint es zu gehen, zumindest für report. du hast deine dokumentenklasse ja leider nicht angegeben.


\documentclass{report}
\makeatletter
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{part}{\thechapter\hspace{1em }#1}%geändert
\else
\addcontentsline{toc}{part}{\thechapter\hspace{1em }#1}%geändert
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi}
\makeatother
\begin{document}
\tableofcontents
\part{Ein teil}
\chapter{eines}
\section{eine}
\chapter{noch eines}

\end{document}


sollte das bei dir nicht gehen, gehe ich die klassendatei (cls) deiner dokumentenklasse und schaue wo chapter definiert wird. ändere dann die \addtocontents einträge. schau dir an wie part definiert wird und übertrage das auf chapter

Schweinebacke
06-12-2011, 09:10
Die einfachste Lösung dürfte sein, den Befehl zur Erzeugung des Eintrags umzubiegen:
\documentclass{book}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\makeatletter
\let\l@chapter\l@part
\makeatother
\begin{document}
\tableofcontents
\blinddocument\blinddocument\blinddocument
\end{document}
Einen echten Sinn darin kann ich allerdings nicht erkennen. Wenn es darum geht, die Einträge in einer größeren Schrift zu haben, bietet sich eher an, ein Paket zu verwenden, das dies erlaubt. Bei Verwendung einer KOMA-Script-Klasse, wäre das beispielsweise ganz einfach:

\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\addtokomafont{chapterentry}{\large}
\begin{document}
\tableofcontents
\blinddocument\blinddocument\blinddocument
\end{document}
Damit passt dann auch noch die Einrückung. Bei einer Standardklasse könnte man das beispielsweise mit tocstyle lösen:

\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{tocstyle}
\usetocstyle{standard}
\settocfeature[toc][0]{entryhook}{\large\bfseries}
\begin{document}
\tableofcontents
\blinddocument\blinddocument\blinddocument
\end{document}

Sietsch
06-12-2011, 10:32
Hallo und vielen Dank für die Rückmeldung.

Beide Ansätze lassen sich fehlerfrei übersetzen (ich nutze memoir), haben jedoch den Nachteil, dass sie ALLE \chapter-Einträge ändern.

Ich beschreib noch mal etwas genauer, was ich suche und auch wieso:
Derzeit sieht mein Dokument so aus:
part 1
-chapter 1
-chapter 2
part 2
-chapter 3
-chapter 4
-nomenclature
-biography

Nomenclature und Biography sind ebenfalls als \chapter definiert. Schaut man sich das Inhaltsverzeichnis an, dann könnte man meinen, dass diese beiden Kapitel Teil von part 2 sind. Das stimmt so aber nicht, da bspw. die Nomenclature auch Begriffe aus part 1 enthält.
Richtig sähe das Ganze so aus:
part 1
-chapter 1
-chapter 2
part 2
-chapter 3
-chapter 4
nomenclature
biography

Somit müssten die letzten beiden Kapitel als \part deklariert werden.
Wenn ich nun aber einfach \part{biography} statt \chapter{biography} schreibe, hat das zur Folge, dass die ganze Biography im Format eines Parts dargestellt wird. Das bedeutet u.a. dass die Überschrift auf einer Extraseite landet.

Daher war ja meine Idee einfach die *.toc-Datei anzupassen, denn alles, was ich will, ist ja eine Änderung des Literaturverzeichnisses - das Layout der beiden Kapitel ist so genau richtig.

Grüße,
Sietsch.

rstuby
06-12-2011, 12:08
Das sind natürlich schon eine ganze Menge hilfreiche Informationen mehr. Auf deren Grundlage könnten wir theoretisch schon ein lauffähiges Minimalbeispiel bauen.
Es wäre aber hilfreicher, wenn du das selber machst. Erstens willst du ja schließlich die Hilfe haben, und zweitens weißt du doch noch genauer als wir, was du machst.

Sietsch
06-12-2011, 12:35
Servus,

da hast du natürlich Recht!
Beim Zusammenstellen des Beispiels kam mir dann auch gleich die Lösung des Problems:


\documentclass[a4paper,twoside,openright,10pt]{memoir}

\usepackage[linkcolor=blue,colorlinks=true,bookmarksopen=true]{hyperref}

\begin{document}

\tableofcontents*

\newpage

\part{Part 1}
\chapter{Chapter 1}
\chapter{Chapter 2}
\part{Part 2}
\chapter{Chapter 3}
\chapter{Chapter 4}
\chapter*{Biography}
\addcontentsline{toc}{part}{Biography}

\end{document}

Vielen Dank für die Unterstützung,
Sietsch.

rstuby
06-12-2011, 13:15
Sorry, ungetestet (kann morgen Vormittag mal testen):
Ich schätze, da bekommst du die falsche Seitenzahl ins TOC, wenn dein Verzeichnis länger als eine seite wird. Wahrscheinlich musst du besser so eine Reihenfolge benutzen

\clearpage
\addcontentsline...
\chapter*...

Sietsch
06-12-2011, 14:20
Servus,

du hast Recht:
Mein Ansatz funktioniert nur korrekt, wenn das Verzeichnis nicht über mehr als eine Seite geht.

Dein Code zaubert zwar die korrekte Seitennummer in das Verzeichnis, der Link, der dazu erzeugt wird, zeigt allerdings woanders hin (auf das letzte Kapitel, das vor der Nomenclature steht).

Wie bekommt man das hingebogen?

Grüße,
Sietsch.

Schweinebacke
06-12-2011, 16:05
Dein Code zaubert zwar die korrekte Seitennummer in das Verzeichnis, der Link, der dazu erzeugt wird, zeigt allerdings woanders hin (auf das letzte Kapitel, das vor der Nomenclature steht).

Wie bekommt man das hingebogen?
Mit <code>\phantomsection</code> vor <code>\chapter*</code>. Siehe dazu die hyperref-Anleitung.

Übrigens könnte man die Umdefinierung von <code>\l@chapter</code> natürlich auch ins Inhaltsverzeichnis selbst schreiben, damit es erst später gültig wird:
\addtocontents{toc}{\protect\let\protect\l@chapter \protect\l@part} (wobei das <code>\protect</code> vor <code>\let</code> eigentlich überflüssig ist) an der richtigen Stelle im Quelltext platziert, fügt die Umdefinierung an entsprechender Stelle in der toc-Datei ein.

Sietsch
06-12-2011, 16:21
Viel Dank!

Für die Nachwelt, hier mal der Code um die Nomenclatur als \chapter dazustellen, aber in der ToC als part anzuzeigen:

\let\stdchapter\chapter
\def\chapter*#1{\stdchapter*{#1}}
\cleardoublepage
\phantomsection
\addcontentsline{toc}{part}{Nomenclature}
\printnomenclature[1.5cm]
\let\chapter\stdchapter

Grüße,
Sietsch.

Schweinebacke
07-12-2011, 07:37
Wenn ich mir das anschaue, schätze ich, dass

\cleardoublepage
\phantomsection
\addcontentsline{toc}{part}{Nomenclature}
\printnomenclature[1.5cm] hinreichend wäre.