PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kapiteleintrag im Inhaltsverzeichnis formatieren



Rapmaster 2000
25-03-2007, 20:33
Hallo!
Ich habe ein etwas kompliziertes Problem mit der Formatierung meines Inhaltsverzeichnis (IV). Ich verwende das Package "tocloft" und möchte dabei, dass der \chapter-Eintrag im IV in einer Zeile wie folgt erscheint: 1)linksbündig "Kapitel" mit Kapitel-Nummer, 2) zentriert der Name des Kapitels und 3) rechtsbündig die Seitenzahl. Dabei macht mir die zentrierte Platzierung des Kapitelnamens zu schaffen.

"tocloft" erlaubt eine globale Angabe zum Abstand des Kapitelnamens im IV vom linken Rand, allerdings sind die Kapitelnamen verschieden lang, so dass sie wie linksbündig an einer Senkrechten durch die Seite ausgerichtet erscheinen und nicht zentriert. Mein Plan war, als Abstand die halbe \textwidth zu verwenden und dann die einzelnen Kapitelnamen im IV um ihre halbe Länge wieder nach links zu verschieben. Diese etwas unelegante Methode wollte ich folgendermaßen realisieren:

1) \newlength{\Kapitelnamenlänge}
2) \settowidth{\Kapitelnamenlänge}{Kapitelname}
3)\chapter[\hspace{-.5\Kapitelnamenlänge}Kapitelname]{Kapitelname}

Die Verschiebung mittels \hspace funktioniert auch - allerdings nur mit festen Werten und nicht mit der Variable \Kapitelnamenlänge. Dies liegt daran, dass die Variable nur in meiner *.tex-Datei definiert ist und nicht in *.toc. Ich bekomme also die Fehlermeldung "undefined control sequence. \Kapitelnamenlänge" in meiner *.toc-Datei.

Also hier meine eigentliche Frage: Gibt es eine Möglichkeit, Variabeln zu definieren, die auch die *.toc-Datei erkennt, oder kennt jemand vielleicht einen eleganteren Weg, das gewollte zu erreichen (mit "titletoc"?). Mir wäre auch sehr geholfen, wenn jemand wüsste, wie man sich den Wert einer Variabeln anzeigen lassen kann - also wie lang ist die Zeichenkette {Kapitelname}? Dann könnte ich die Längen "von Hand" einstellen.

Hier mal ein Minimalbeispiel (oder das, was ich für eine Minimalbeispiel halte):

\documentclass{report}
\usepackage[ngerman]{babel}
\usepackage{tocloft}
\begin{document}
\renewcommand{\cftchappresnum}{Kapitel }
\renewcommand{\cftchapnumwidth}{.5\textwidth}
\tableofcontents
\chapter{Ein Kapitelname}
\section{Ein Abschnitt}
\section{Ein Abschnitt}
\section{Ein Abschnitt}
\chapter{Ein langer Kapitelname}
\section{Ein Abschnitt}
\section{Ein Abschnitt}
\section{Ein Abschnitt}
\chapter[\hspace{-3cm}Ein verschobener Kapitelname]{Ein verschobener Kapitelname}
\section{Ein Abschnitt}
\section{Ein Abschnitt}
\section{Ein Abschnitt}
\newlength{\Kapitelnamenlaenge}
\settowidth{\Kapitelnamenlaenge}{Kapitelname mit Fehler}
\chapter[\hspace{-.5\Kapitelnamenlaenge}Kapitelname mit Fehler]{Kapitelname mit Fehler}
\end{document}

Ich bin für jeden Hinweis sehr dankbar! Vielen Dank schon mal für alle Mühen!

RM2

rais
25-03-2007, 22:04
Hallo und Herzlich Willkommen :)

Mein Plan war, als Abstand die halbe \textwidth zu verwenden und dann die einzelnen Kapitelnamen im IV um ihre halbe Länge wieder nach links zu verschieben. Diese etwas unelegante Methode wollte ich folgendermaßen realisieren:

1) \newlength{\Kapitelnamenlänge}
2) \settowidth{\Kapitelnamenlänge}{Kapitelname}
3)\chapter[\hspace{-.5\Kapitelnamenlänge}Kapitelname]{Kapitelname}

Die Verschiebung mittels \hspace funktioniert auch - allerdings nur mit festen Werten und nicht mit der Variable \Kapitelnamenlänge. Dies liegt daran, dass die Variable nur in meiner *.tex-Datei definiert ist und nicht in *.toc. Ich bekomme also die Fehlermeldung "undefined control sequence. \Kapitelnamenlänge" in meiner *.toc-Datei.

Also hier meine eigentliche Frage: Gibt es eine Möglichkeit, Variabeln zu definieren, die auch die *.toc-Datei erkennt, oder kennt jemand vielleicht einen eleganteren Weg, das gewollte zu erreichen (mit "titletoc"?).

wenn Du den entsprechenden \newlength-Befehl in Deine Präambel packst, sollte die Länge auch dem TOC bekannt sein -- dummerweise werden Längen idR lokal behandelt, dh ein Wertzuweisung in Deiner .tex wirkt sich nicht unbedingt auf die .toc aus... der Trick liegt wohl darin, die Länge direkt im TOC zu setzen:


\documentclass[ngerman]{report}
\usepackage{babel}
\usepackage{tocloft}
\newlength{\Kapitelnamenlaenge}%<--vor \begin{document} deklarieren
\begin{document}
\renewcommand{\cftchappresnum}{Kapitel }
\renewcommand{\cftchapnumwidth}{.5\textwidth}
\tableofcontents
\the\Kapitelnamenlaenge%<--man beachte die ausgegebenen 0pt
\addtocontents{toc}{\protect\settowidth{\protect\K apitelnamenlaenge}{Kapitelname mit Fehler}}%<--
\chapter[\hspace{-.5\Kapitelnamenlaenge}Kapitelname mit Fehler]{Kapitelname mit Fehler}
\end{document}



Mir wäre auch sehr geholfen, wenn jemand wüsste, wie man sich den Wert einer Variabeln anzeigen lassen kann - also wie lang ist die Zeichenkette {Kapitelname}? Dann könnte ich die Längen "von Hand" einstellen.



\setlength{\DeineVariable}{Zeichenkette}
\the\DeineVariable
gibt die entsprechende Länge in Punkt aus.

BTW: ohne tocloft, dafür mit scrreprt statt report (vllt funzt es auch mit report :rolleyes: ), sollte es eigentlich auch etwa so gehen:


\chapter[~\protect\hfill Titel\protect\hfill~]{Titel}

dh, dann müsstest Du Dir noch was für "Kapitel" vor der Kapitelnummer im TOC überlegen.

MfG,

sofa-surfer
25-03-2007, 22:47
Hallo!
Ich habe ein etwas kompliziertes Problem mit der Formatierung meines Inhaltsverzeichnis (IV). Ich verwende das Package "tocloft" und möchte dabei, dass der \chapter-Eintrag im IV in einer Zeile wie folgt erscheint: 1)linksbündig "Kapitel" mit Kapitel-Nummer, 2) zentriert der Name des Kapitels und 3) rechtsbündig die Seitenzahl. Dabei macht mir die zentrierte Platzierung des Kapitelnamens zu schaffen.


Hallo,

hier noch ein Vorschlag von mir:


\documentclass{report}
\usepackage{tocloft,blindtext}

\renewcommand{\cftchappresnum}{Kapitel }
\settowidth{\cftchapnumwidth}{Kapitel } % evtl. noch Kapitelnummer einbeziehen
\renewcommand{\cftchapaftersnumb}{~\hfill}

\begin{document}

\tableofcontents
\blinddocument

\end{document}

Matthias

Rapmaster 2000
26-03-2007, 00:17
Hallo!
Zunächst besten Dank für die Antworten und die Begrüßung im Forum! Ich hab mich für die Lösung von sofa-surfer entschieden. Für alle, die ein ähnliches Problem haben sollten, hier die Erklärung:

Die Lösung ist einfach und macht genau was ich will - ohne für jedes Kapitel einen "Eingriff" vorzunehmen. Insbesondere wird der Kapitelname zwischen dem Ende von "Kapitel + #" und der Seitenzahl zentriert (damit ist sie nicht in der Mitte des Textkörpers - was bei einer zentrierten IV-Überschrift unharmonisch wirken kann, aber sonst besser aussieht, weil die "optische Mitte" durch den Abstand zum linken "kapitel" und der rechten Seitenzahl gegeben ist)

Sollte man zentrierte Kapitelnamen bzgl. des Textkörpers wünschen, so wäre wohl rias erster Vorschlag zu wählen. Mit der Variabel-Definition (\newlength{\Variable}) in der Präambel und dem Befehl

\addtocontents{toc}{\protect\settowidth{\protect\V ariable}{Kapitelname}}

wird die entsprechende Variable mit Länge={Kapitelname} im *.toc definiert und über

\chapter[\hspace{-.5\Variable}Kapitelname]{Kapitelname}

kann der Kapitelname im IV um die halbe Kapitelnamenlänge nach links verschoben werden. Dabei sollte man darauf achten, daß für die Längendefinition der richtige Stil verwendet wird, sollte also der Kapitelname in Kapitälchen im IV erscheinen braucht man

\addtocontents{toc}{\protect\settowidth{\protect\V ariable}{\protect\textsc{Kapitelname}}}.

Das klappt wunderbar und die Kapitelnamen stehen genau in der Mitte. Das mag aber nicht allen gefallen: Da links "Kapitel + Nummer" und darunter die Section-Namen stehen und rechts nur die Seitenzahlen, ist die "optische Mitte" etwas weiter rechts. Man könnte also

\renewcommand{\cftchapnumwidth}{.5\textwidth}

etwas größer wählen damit die Kapitelnamen weiterhin untereinander zentriert sind aber nicht mehr in der Mitte des Textkörpers - aber da ist wohl die Lösung von sofa-surfer besser. Die zweite Lösung von rais mit

\chapter[~\protect\hfill Titel\protect\hfill~]{Titel}

funktioniert ohne tocloft einwandfrei (auch mit report) und ist wohl am einfachsten - allerdings steht dann links nur die Kapitelnummer und ich weiß nicht wie ich "Kapitel" einfügen kann.