Sie sind hier

Inhaltsverzeichnis: Wie Part zentrieren?

Nochmals einen schönen guten abend allerseits,

die folgende Frage ist quasi als spin-off meiner vorherigen, hier verlinkten Frage zu verstehen:

Die folgende Herangehensweise an die Zentrierung der Ausgabe von Part im Inhaltsverzeichnis erscheint mir sauber - naja zumindest sauberer als mein vorheriger Versuch (s. oben verlinkte Frage).
Leider kommen die Implementierung und hyperref sich in die Quere, sobald die hyperref-option "final=true" gesetzt wird (s. MWE). Mit final=false funktionierts problemlos - was natürlich witzlos ist, wenn man von hyperref proftieren möchte ...

Ich würde mich sehr freuen, wenn ihr mich auch hier nochmal erleuchten könntet: Gibt es ein bessere Implementieung der Fragestellung, so dass hyperref dieser nicht in die Quere kommt?

Vielen Dank!

\documentclass[%
	paper=a4,
	paper=portrait,
	pagesize=auto,
	twoside=true,
	version=last,
	headings=normal,
	toc=listof,
	toc=graduated,
	parskip=half,
	headsepline=false,
	footsepline=false,
	cleardoublepage=empty,
]{scrbook}
 
\usepackage{fontspec}
\usepackage[ngerman,]{babel}
 
\addtokomafont{disposition}{\normalfont\normalcolor}
\setkomafont{partentrypagenumber}{\csname @gobble\endcsname}
 
%center toc entry 'part':
\renewcommand*{\addparttocentry}[2]{%
	\addtocentrydefault{part}{}{\protect\parbox{\textwidth}{\protect\centering\partname~#1.~~#2}}}
 
\KOMAoptions{DIV=last}
 
\usepackage[pdfencoding=auto,
	final=true,
	colorlinks=true,
	%linkcolor=red,
	%citecolor=green,%
	%anchorcolor=blue,
	%urlcolor=yellow,
	linkcolor=black,
	citecolor=black,%
	anchorcolor=black,
	urlcolor=black,
	%		
	hyperfootnotes=true,
	bookmarksnumbered=true,
	bookmarks=true,
	bookmarksopen=true,
	bookmarksopenlevel=0,
	plainpages=false,%
	pdfpagelabels=true,
	hyperindex=false,
	%backref=page,
]{hyperref}
 
\addto\extrasngerman{%
	%\renewcommand{\partautorefname}{Teil}
	\renewcommand{\chapterautorefname}{Kap.}
	\renewcommand{\sectionautorefname}{Absch.}
	%\renewcommand{\subsectionautorefname}{Unterabsch.}
	\renewcommand{\subsectionautorefname}{\sectionautorefname}
	%\renewcommand{\subsubsectionautorefname}{Unterunterabsch.}
	\renewcommand{\subsubsectionautorefname}{\subsectionautorefname}
	%\renewcommand{\appendixautorefname}{Anh.}
	\renewcommand{\figureautorefname}{Abb.}
	\renewcommand{\tableautorefname}{Tab.}
	\renewcommand{\footnoteautorefname}{Fußn.}
	%\renewcommand{\theoremautorefname}{Satz}
}
 
\begin{document}
 
\tableofcontents%
 
\chapter{Kapitel Eins}
 
\pdfbookmark[0]{Teil I: Altes Testament}{Teil I: Altes Testament}
\part{Altes Testament}
\label{part:one}
\chapter{Kapitel Zwei}
\chapter{Kapitel Drei}
 
\pdfbookmark[0]{Teil II: Neues Testament}{Teil II: Neues Testament}
\part{Neues Testament}
\label{part:two}
\chapter{Kapitel Vier}
\chapter{Kapitel Fünf}
 
\end{document}
Bild von Markus Kohm

Du darfst in Strings, die hyperref für Bookmarks oder Anker verwenden soll, keine Formatierungsanweisungen einbauen. Es gibt zwei Möglichkeiten das Problem zu lösen. Zum kann man hyperref mitteilen, wie es diese Formatierungsanweisungen behandeln soll, zum anderen kann man den einfacheren Weg gehen und gleich via \texorpdfstring für die Verwendung in der TeX-Ausgabe und für die Verwendung im PDF-Code (also Bookmarks, Ankern etc.) unterschiedliche Strings angeben. Das würde auch in Deinem Fall funktionieren. Dabei kann man sich dann auch schon die extra \pdfbookmark-Anweisungen ersparen, die letztlich nur dafür sorgen würden, dass Teile doppelt in die Bookmarks eingetragen werden. Soweit das hyperref Problem.

Machen wir nun aber die eigentliche Anforderung der zentrierten Einträge zu einem KOMA-Script-Problem. Es ist nicht vorgesehen, Einträge im Inhaltsverzeichnis zu zentrieren. Das hat sogar einen guten Grund. Derartige Mischung von symmetrischem und nicht symmetrischem Satz in einem Verzeichnis sieht nicht nur scheußlich aus, es verstößt auch gegen einen der Hauptsätze der Typografie, dass man eben solche Mischungen vermeiden soll.

Will man es trotzdem haben, ist der sauberste Weg \l@part, also die Anweisung zum Setzen der Verzeichniseinträge der Teile-Ebene umzudefinieren. Eine recht einfache Möglichkeit dafür wäre:

\documentclass[%
	paper=a4,
	paper=portrait,
	pagesize=auto,
	twoside=true,
	version=last,
	headings=normal,
	toc=listof,
	toc=graduated,
	parskip=half,
	headsepline=false,
	footsepline=false,
	cleardoublepage=empty,
]{scrbook}
 
\usepackage{fontspec}
\usepackage[ngerman,]{babel}
 
\addtokomafont{disposition}{\normalfont\normalcolor}
\setkomafont{partentrypagenumber}{\csname @gobble\endcsname}% jetzt überflüssig
 
%center toc entry 'part':
% Ich lasse im folgenden den Fall weg, dass man gar keine Teile-Eintäge im
% Inhaltsverzeichnis haben will, um es etwas zu vereinfachen. Außerdem sei
% darauf hingewiesen, dass es in Zukunft (ab KOMA-Script 3.20) bessere
% Lösungen geben wird.
\makeatletter
\renewcommand*{\l@part}[2]{%
  \addpenalty{-\@highpenalty}% Seitenumbruch erlauben
  \addvspace{2.25em \@plus\p@}% Abstand einfügen
  \begingroup
    \centering
    \interlinepenalty=10000 % Keinen Seitenumbruch beim Zeilenumbruch.
    \renewcommand*{\numberline}[1]{##1\enskip}% Keine Box um
                                % die Nummer und keine feste Breite o. ä.
    \usekomafont{partentry}{#1\par}%
    % Seitenzahl lassen wir weg.
  \endgroup
  \penalty\numexpr 20009-\parttocdepth\relax
}
\makeatother
\RedeclareSectionCommand[tocstyle={}]{part}% Damit \l@part künftige
                                % \RedeclareSectionCommand überlebt.
\renewcommand*{\addparttocentry}[2]{%
  \IfArgIsEmpty{#1}{%
    \addtocentrydefault{part}{#1}{#2}%
  }{%
%    \addtocentrydefault{part}{\protect\partname~#1:}{#2}%
% oder, wenn normalerweise der Punkt aber in den Bookmarks ein Doppelpunkt
% stehen soll:
    \addtocentrydefault{part}{\protect\partname~#1\texorpdfstring{.}{:}}{#2}%
  }%
}
 
\KOMAoptions{DIV=last}
 
\usepackage[pdfencoding=auto,
	final=true,
	colorlinks=true,
	%linkcolor=red,
	%citecolor=green,%
	%anchorcolor=blue,
	%urlcolor=yellow,
	linkcolor=black,
	citecolor=black,%
	anchorcolor=black,
	urlcolor=black,
	%		
	hyperfootnotes=true,
	bookmarksnumbered=true,
	bookmarks=true,
	bookmarksopen=true,
	bookmarksopenlevel=0,
	plainpages=false,%
	pdfpagelabels=true,
	hyperindex=false,
	%backref=page,
]{hyperref}
 
\addto\extrasngerman{%
	%\renewcommand{\partautorefname}{Teil}
	\renewcommand{\chapterautorefname}{Kap.}
	\renewcommand{\sectionautorefname}{Absch.}
	%\renewcommand{\subsectionautorefname}{Unterabsch.}
	\renewcommand{\subsectionautorefname}{\sectionautorefname}
	%\renewcommand{\subsubsectionautorefname}{Unterunterabsch.}
	\renewcommand{\subsubsectionautorefname}{\subsectionautorefname}
	%\renewcommand{\appendixautorefname}{Anh.}
	\renewcommand{\figureautorefname}{Abb.}
	\renewcommand{\tableautorefname}{Tab.}
	\renewcommand{\footnoteautorefname}{Fußn.}
	%\renewcommand{\theoremautorefname}{Satz}
}
 
\begin{document}
 
\tableofcontents%
 
\chapter{Kapitel Eins}
 
\part{Altes Testament}
\label{part:one}
\chapter{Kapitel Zwei}
\chapter{Kapitel Drei}
 
 
\part{Neues Testament}
\label{part:two}
\chapter{Kapitel Vier}
\chapter{Kapitel Fünf}
 
\end{document}

Aber wie gesagt: Ich würde davon abraten.

Es sei außerdem noch darauf hingewiesen, dass es ab KOMA-Script 3.20 die Möglichkeit geben soll, neue Verzeichniseintragsstile zu definieren. Das wäre ab dann der tatsächlich zu empfehlende Weg, das Problem zu lösen.

Übrigens wäre das ganze etwas übersichtlicher gewesen, wenn Du in der Präambel alle überflüssigen Optionen für die Klasse und für hyperref und auch die ganzen überflüssigen Umdefinierungen weggelassen hättest. Mit überflüssig ist dabei irrelevant für das Problem gemeint und weglassen meint wirklich weglassen und nicht nur auskommentieren. Die überflüssigen Teile nehmen derzeit leider rund die Hälfte des Gesamtcodes ein.

Im wahrsten Sinne des Wortes!

Ich habe mich für die \texorpdfstring-Variante entschieden und bin gespannt was 3.20 bringt.

Folgendes dürfte zwar nicht nur mir aufgefallen sein, ich möchte es dennoch erwähnen:
Das was meine MWE im negativen Sinne zu viel haben, gilt für Deine Erklärungen im positiven Sinn - ist mir nicht erst bei dem Post aufgefallen. Herzlichen Dank für den Variantenreichtum!

Fröhliche Weihnachten!

Comments for "Inhaltsverzeichnis: Wie Part zentrieren?" abonnieren