Sie sind hier

problem mit addpart und pdfbookmarks

hallo,

ich verwende die koma-script version 2.98 (2007/12/24). wenn ich den \addpart befehl in der scrreport klasse benutze, kommt das hyperref-paket mit den pdf-bookmarks durcheinander: die parts erscheinen im adobe reader im bookmark-baum nicht auf der oberste hierarchie-ebene, sondern werden einfach eine ebene unter der vorherigen drangehängt (egal ob chapter, section, ...)

anhand des minimalbeispiels kann dies einfach überprüft werden (mit pdflatex compilieren!). ersetzt man darin die \addpart befehle durch herkömmliche \part befehle stimmt alles.

gibt es dafür einen workaround?

hier das minimalbeispiel:

\documentclass{scrreprt}
\usepackage[bookmarks=true]{hyperref}
\begin{document}
\addpart{Part X}
\chapter{One}
\chapter{Two}
\addchap{Three}
\addpart{Part Y}
\chapter{Four}
\chapter{Five}
\addpart{Part Z}
\chapter{Six}
\chapter{Seven}
\end{document}
forum: 
Bild von Markus Kohm

Das Problem ist, dass hyperref keine definierte Schnittstelle hat, um automatisch gesetzte Anker für Links und Bookmarks zu beeinflussen. Das macht Klassen und Paketautoren das Leben schwer. Diese Schnittstelle frage ich seit Jahren nach, der Autor von hyperref baut aber lieber neue, kleine, nützliche Pakete. Für mich als Klassen- und Paketautor bedeutet das, dass ich mich selbst durch den hyperref-Code wühlen müsste, um einen Ansatz zu finden. Kommt dann die nächste hyperref-Version heraus, muss ich wieder von vorn anfangen. Auf dieses Risiko kann ich mich nicht einlassen.

Nun kann man zwar mit \phantomsection die Treffsicherheit von Links ggf. verbessern, die Bookmark-Ebene automatisch gesetzter Anker kann man dabei aber nicht beeinflussen.

Frei nach Archimedes gesprochen: Mir fehlt der Hebel oder der feste Punkt, deshalb kann ich Dir die Welt leider nicht zurechtrücken.

ich hab jetzt die \addpart kommandos durch folgendes ersetzt:

\part*{bla bla bla}
\addcontentsline{toc}{part}{bla bla bla}

bewirkt genau das gleiche, nur werden die pdfbookmarks richtig gemacht!

Bild von Markus Kohm

So erfolgt zumindest bei scrbook und scrreprt der Eintrag ins Inhaltsverzeichnis zu spät (also mit der falschen Seite) und es wird auch kein Kolumnentitel gesetzt, falls dieser für die Teile-Ebene aktiviert wurde.

BTW: \part* ruft, nachdem es festgestellt hat, dass nach \part ein Stern folgt, \@spart auf. Dasselbe macht \addpart, nachdem es noch auf die richtige Seite gewechselt hat und den Inhaltsverzeichniseintrag geschrieben hat, auch. \addchap arbeitet bezüglich \@schapter genauso. Lediglich wird dort der Inhaltsverzeichniseintrag erst nach \@schapter geschrieben, weil dort nach \@schapter immernoch die richtige Seite aktiv ist. Bei \addchap funktioniert dieser Kniff, damit hyperref die Bookmarks richtig setzt (wenn man davon absieht, dass der Bookmark hinter statt auf die Überschrift zeigt), bei \addpart funktioniert das nicht. Wenn mir jemand eine dokumentierte Schnittstelle für »setze hier einen Bookmark für eine Überschrift der Ebene X und dem Text Y« und »lasse den nächsten automatisch erzeugten Bookmark weg« und das gleiche möglichst auch für die automatischen Links-Anker, dann unterstütze ich das sofort. Heiko will das trotz aller Bitten in hyperref nicht einbauen.

Ich bin auch auf dieses Problem gestoßen. Das interessante ist, dass im Inhaltsverzeichnis und den pdf-Bookmarks alles perfekt ist, wenn man \part{} statt \addpart{} verwendet. Das einzige unterwünschte in diesem Fall ist der Eintrag der Partnummer (I) im Inhaltsverzeichnis und die Zeile "Teil I" auf dem "Deckblatt". Gibt es, wenn man sonst keine Parts benutzt, vielleicht die Möglichkeit das umzudefinieren ohne die erwünschten Effekte zu verlieren?

EDIT:
Hiermit passiert das, was ich mir gewünscht habe:

% \part anpassen, um Anhangdeckblatt richtig zu erzeugen
\makeatletter
\renewcommand*{\@part}{}
\def\@part[#1]#2{%
  \ifnum \c@secnumdepth >-2\relax
    \refstepcounter{part}%
    \@maybeautodot\thepart%
    \addcontentsline{toc}{part}{#1}%
  \else
    \addcontentsline{toc}{part}{#1}%
  \fi
  \begingroup
    \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
    \raggedpart
    \interlinepenalty \@M
    \normalfont\sectfont\nobreak
    \size@part #2\strut%
    \partmark{#1}\par
  \endgroup
  \@endpart
}
\makeatother
Bild von Markus Kohm

Das Problem besteht schon seit längerer Zeit nicht mehr.

Comments for "problem mit addpart und pdfbookmarks" abonnieren