Sie sind hier

hyperref-Paket funktioniert nicht mehr mit dvipdfm(x) zusammen

Liebes KOMA-Skript-Team,

seit Anfang des Jahres funktioniert der Workflow

latex -> dvipdfmx

zur Erzeugung von PDF-Dateien bei Verwendung von KOMA-Skript-Klassen nicht mehr korrekt, wenn das hyperref-Paket verwendet wird. Symptom: es werden keine PDF-Bookmarks ("Outline") mehr erzeugt; das Problem besteht in Version 2019/02/01 v3.26b immer noch.
Das Problem kann mit folgendem Minimalbeispiel reproduziert werden:

\documentclass[paper=a4]{scrbook}
\usepackage[dvipdfmx]{hyperref}
\usepackage{lipsum}
 
 
\begin{document}
\chapter{Einleitung}
\lipsum
 
\section{Ein Abschnitt}
\lipsum
 
\chapter{Der Hauptteil}
\lipsum
 
\section{Ein anderer Abschnitt}
\lipsum
 
 
\section{Noch ein Abschnitt}
\lipsum
 
\end{document}

Das Problem tritt nicht auf, wenn die PDF-Datei direkt mittels pdflatex erstellt wird (dementsprechend natürlich keine Treiberoption beim Laden von hyperref). Es konnte auf das seit v3.26 erfolgende automatische Laden des Pakets bookmark zurückgeführt werden: lädt man die Dokumentenklasse mit der Option

\documentclass[paper=a4,bookmarkpackage=false]{scrbook}

so werden die PDF-Bookmarks auch bei Verwendung von dvipdfmx korrekt erzeugt. Eventuell wird die Treiberoption nicht richtig an das bookmark-Paket weitergegeben.

Hierzu eine Frage: sofern ich es verstanden habe, ist das bookmark-Paket nur erforderlich, um Unzulänglichkeiten von hyperref in bestimmten Anwendungsfällen zu umgehen, d.h. sofern die entsprechenden Warnmeldungen in meinem Fall gar nicht auftreten, kann ich auf dasbookmark-Paket verzichten, ohne daß es dadurch zu Einschränkungen der Funktionalität kommt, richtig?

Viele Grüße

FW

forum: 

Die für hyperref gesetzte Treiberoption wird beim automatischen Laden von bookmark durch die KOMA-Script Klasse nicht gesetzt.

Aber das automatische Laden des Pakets bei \begin{document} ist ohnehin nur ein Workaround, wie man den Releaseinformationen für KOMA-Script 3.26 und der folgenden Info in der log Datei entnehmen kann:

Class scrbook Info: loading recommended package `bookmark'.
(scrbook)           Using `bookmark' together with `hyperref' is recommended,
(scrbook)           because of handling of possible bookmark level gaps.
(scrbook)           You can avoid loading `bookmark' with KOMA-Script option
(scrbook)           `bookmarkpackage=false' before \begin{document} and
(scrbook)           you can avoid this message with `\usepackage{bookmark}'
(scrbook)           before \begin{document} on input line 4.

An beiden Stellen wird also empfohlen, das Paket bookmark selbst vor \begin{document} zu laden. Gleichzeitig ist das eine mögliche Lösung für Dein Problem, weil Du beim Laden des Pakets natürlich auch die Treiberoption setzen kannst.

\documentclass{scrbook}
\usepackage[dvipdfmx]{hyperref}
\usepackage[dvipdfmx]{bookmark}
\usepackage{blindtext}% nur für Beispieltext
\begin{document}
\blinddocument
\blinddocument
\end{document}

Alternativ kann man die Option, die ja vielleicht auch noch von anderen Paketen benötigt wird, auch schon beim Laden der Klasse angeben. Dann wäre es sogar wieder möglich, sich über die Empfehlung des expliziten Ladens hinwegzusetzen und bookmark automatisch von der Klasse laden zu lassen.

\documentclass[dvipdfmx]{scrbook}
\usepackage{hyperref}
\usepackage{bookmark}% könnte auch auskommentiert werden
\usepackage{blindtext}% nur für Beispieltext
\begin{document}
\blinddocument
\blinddocument
\end{document}

Wenn Du das beides nicht möchtest, kannst Du immer noch mit \PassOptionsToPackage{dvipdfmx}{bookmark} in der Präambel sicherzustellen, dass bookmark die Option erhält, wenn es automatisch geladen wird.

Und mit der Klassenoption bookmarkpackage=false kannst Du das automatische Laden von bookmark unterbinden, wenn es in Deinem Dokument nicht nötig ist und Dir die anderen Vorteile des Pakets auch nichts bringen.

Vielen Dank für die Hinweise. Ich mußte im konkreten Fall eine minimal modifizierte Version eines schon bestehenden Dokuments neu typesetten, wobei das Layout aber insgesamt möglichst gleich bleiben mußte, und war etwas unsicher, ob das Unterbinden des Pakets bookmarks noch andere Nebeneffekte haben könnte (obwohl das unlogisch war, den vor v3.26 wurde es ja gar nicht automatisch geladen).

Sowohl die Vorgehensweise mit

\documentclass[bookmarkpackage=false]

als auch dem eigenhändigen Laden des Pakets mit entsprechender Treiberoption

\usepackage[dvipdfmx]{bookmark}

nach hyperref ergeben aber dasselbe Resultat (diffpdf ist hier eine große Hilfe) und sind somit als Lösungen tauglich.

Grüße

FW

Bild von Markus Kohm

Wobei

\usepackage[dvipdfmx]{hyperref,bookmark}

ebenfalls funktionieren sollte. Obwohl nicht dokumentiert ist, dass dabei die Pakete tatsächlich in der angegebenen Reihenfolge geladen werden, gehe ich davon aus, dass das auch zukünftige LaTeX-Versionen so handhaben werden.

Die nächste Release wird übrigens versuchen, bookmark mit der zur gewählten hyperref-Treibereinstellung passenden Voreinstellung zu laden. Es genügt aber dann im Beispiel also notfalls auch wieder \usepackage[dvipdfm]{hyperref}. Aber natürlich ist es das explizite Laden von bookmark weiterhin empfohlen. Im entsprechenden Info-Text wird ggf. jetzt ebenfalls die Option genannt, die von der KOMA-Script-Klasse dabei selbst voreingestellt würde.

Comments for "hyperref-Paket funktioniert nicht mehr mit dvipdfm(x) zusammen" abonnieren