Konflikt zwischen Babel-, Hyperref- und Anhangspaket

Konflikt zwischen Babel-, Hyperref- und Anhangspaket

Beim Schreiben meiner Abschlussarbeit verwende ich die Pakete hyperrefund appendixwie in dem kleinen Beispiel unten.

test.tex

\documentclass{book}
\usepackage{hyperref}
\usepackage[titletoc]{appendix}

\begin{document}

\tableofcontents

\chapter{First chapter}
\section{Chapter section}
\chapter{Second chapter}

\begin{appendices}
\input{extra}
\end{appendices}

\end{document}

extra.tex

\chapter{First appendix}
\section{Appendix section}

Dieses Beispiel erzeugt keine Fehler. Das Endergebnis ist ein Inhaltsverzeichnis mit anklickbaren Links zu allen Kapiteln (einschließlich derer in den Anhängen) und in der von mir gewünschten Formatierung.

Beim Kompilieren (pdfLaTeX) entsteht folgende Datei:

durchtesten

\BOOKMARK [0][-]{chapter.1}{First chapter}{}% 1
\BOOKMARK [1][-]{section.1.1}{Chapter section}{chapter.1}% 2
\BOOKMARK [0][-]{chapter.2}{Second chapter}{}% 3
\BOOKMARK [0][-]{Appendix.1.A}{Appendix First appendix}{}% 4
\BOOKMARK [1][-]{section.1.A.1}{Appendix section}{Appendix.1.A}% 5

Meine Arbeit ist natürlich viel umfangreicher (mehr Kapitel und mehr Anhänge). Obwohl die Struktur ähnlich ist, führt das Kompilieren meiner Arbeit zu zahlreichen kryptischen Fehlern (was bedeutet, dass ich sie nicht verstehe). Ich habe unten einige aufgelistet. Das Kommentieren des hyperrefPakets ermöglicht mir das Kompilieren, deaktiviert aber auch die Links und Lesezeichen im PDF-Dokument.

! Missing \endcsname inserted.
<to be read again> 
                   \penalty 
l.46 ...@skip {}lage.1.D}{B\377lage Afkortingen}{}
                                                  % 46
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! Missing number, treated as zero.
<to be read again> 
                   {
l.46 ...@skip {}lage.1.D}{B\377lage Afkortingen}{}
                                                  % 46
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)

! Extra \endcsname.
\check@bm@number ...0\else \csname B_#1\endcsname 
                                                  \fi 
l.46 ...@skip {}lage.1.D}{B\377lage Afkortingen}{}
                                                  % 46
I'm ignoring this, since I wasn't doing a \csname.

)
! Missing $ inserted.
<inserted text> 
                $
l.154 \begin{document}

Die .out-Datei meiner Abschlussarbeit sieht gut aus, bis man zu den Lesezeichen im Anhang kommt.

...
\BOOKMARK [1][-]{section.5.4}{Optimalisatie}{chapter.5}% 32
\BOOKMARK [0][-]{chapter.6}{Conclusie}{}% 33
\BOOKMARK [0][-]{chapter*.28}{Bibliografie}{}% 34
\BOOKMARK [0][-]{B\penalty \@M \hskip \z@skip i\kern -0.02em j\penalty \@M \hskip \z@skip {}lage.1.A}{B\377lage Stopwoordlijsten}{}% 35
\BOOKMARK [1][-]{section.1.A.1}{Nederlandse stopwoorden}{B\penalty \@M \hskip \z@skip i\kern -0.02em j\penalty \@M \hskip \z@skip {}lage.1.A}% 36
\BOOKMARK [1][-]{section.1.A.2}{Engelse stopwoorden}{B\penalty \@M \hskip \z@skip i\kern -0.02em j\penalty \@M \hskip \z@skip {}lage.1.A}% 37
 ...

Ich glaubedieser Beitraghängt mit meinem Problem zusammen, aber ich komme damit nicht klar (bin noch relativ neu bei LaTeX). Kann mir jemand helfen, die Links und Lesezeichen in meiner Arbeit zu aktivieren?

Grüße,

Sander

BEARBEITEN

Das Hinzufügen des babelPakets zum Beispiel reproduziert das Problem.

\usepackage[dutch]{babel}

Antwort1

Fehlerbericht

Es handelt sich um einen Fehler im Paketanhang. Der Fehler wird ausgelöst, wenn babelmit der Sprachoption geladen wird dutch. Aus meinem Fehlerbericht an den Paketbetreuer:

Folgendes Dokument bricht beim zweiten Durchlauf ab:

\documentclass{book}
\usepackage[dutch]{babel}
\usepackage{hyperref}
\usepackage[titletoc]{appendix}

\begin{document}   

\tableofcontents

\chapter{First chapter}
\section{Chapter section}
\chapter{Second chapter}

\begin{appendices}
\chapter{First appendix}
\section{Appendix section}
\end{appendices}

\end{document}  

Die .out-Datei enthält:

\BOOKMARK [0][-]{B\penalty \@M \hskip \z@skip i\kern -0.02em j\penalty \@M
\hskip \z@skip {}lage.1.A}{B\377lage First appendix}{}% 4

Der für den Zielnamen verwendete Zählername ist aufgrund der sprachabhängigen Zeichenfolge fehlerhaft: B"ylage. Der Grund ist:

\newcommand{\@resets@pp}{\par
  \@ppsavesec
  \stepcounter{@pps}
  \setcounter{section}{0}%
  \if@chapter@pp
    \setcounter{chapter}{0}%
    \renewcommand\@chapapp{\appendixname}%
    \renewcommand\thechapter{\@Alph\c@chapter}%
  \else
    \setcounter{subsection}{0}%
    \renewcommand\thesection{\@Alph\c@section}%
  \fi
  \if@pphyper
    \if@chapter@pp
      \renewcommand{\theHchapter}{\theH@pps.\Alph{chapter}}%
    \else
      \renewcommand{\theHsection}{\theH@pps.\Alph{section}}%
    \fi
    \def\Hy@chapapp{\appendixname}%
  \fi
  \restoreapp
}

\Hy@chapappwird neu definiert als \appendixnameund ist sprachabhängig, was im Fall von Niederländisch aufgrund der Abkürzungserweiterung nicht funktioniert. \Hy@chapappWird aber in Zielnamen verwendet, ist es normalerweise „Kapitel“ (von Zählerkapitel), nur nachdem \appendixder Name chaptergeändert wurde, um appendix eindeutigere Zielnamen zu erhalten. Es besteht keine Notwendigkeit, dies sprachabhängig zu machen. Verwenden Sie einfach:

\def\Hy@chapapp{appendix}

oder

\def\Hy@chapapp{\Hy@appendixstring}

Auch das andere Vorkommen \@resets@ppsubmuss behoben werden.

Problemumgehung/Lösung

Es gibt auch einen Workaround, der unabhängig von der Fehlerbehebung im Paket ist appendix. Laden Sie einfach das Paket bookmarknach hyperref. Es hat einen viel robusteren Algorithmus für die Lesezeichen und behebt die Fehler B"ylagein der .auxDatei mithilfe von hexencoding ( base16). Außerdem werden die Lesezeichen früher aktualisiert.

\documentclass{book}
\usepackage[dutch]{babel}
\usepackage{hyperref}
\usepackage{bookmark}
\usepackage[titletoc]{appendix}

Außerdem hyperrefdeaktiviert v6.83b Abkürzungen in Zielnamen (\hypercurrent und Zielname in \contentsline).

"IJ" und "ij" in Lesezeichen

Diese Zeichen, Ligaturen aus Groß-/Kleinbuchstaben i und j, sind in PDFDocEncoding nicht verfügbar. Sie sind jedoch über Unicode-Lesezeichen zugänglich, d. h. über hyperrefdie Option pdfencoding=autooder unicode.

Der Ersatz durch „ÿ“ in hyperrefder PD1Kodierung ist ein Fehler und wird in v6.83b behoben.

Übrigens können Neudefinitionen von Makros für die Lesezeichen auf Lesezeichen (PDF-Zeichenfolgen) beschränkt werden, indem sie in Folgendes eingefügt werden \pdfstringdefDisableCommands:

\pdfstringdefDisableCommands{%
  \renewcommand*{\appendixname}{Bookmark-Appendix}%
} 

Antwort2

Aus allen Kommentaren eine Komplettlösung zusammengestellt.

\documentclass{book}
\usepackage[dutch]{babel}
\usepackage[titletoc]{appendix}
\usepackage{hyperref}
\usepackage{bookmark} % handles the encoding in the .out file

\addto\captionsdutch{\renewcommand{\appendixname}{Bijlage}} % changes 'Bÿlage' to 'Bijlage' for the bookmarks

\begin{document}

\tableofcontents

\chapter{First chapter}
\section{Chapter section}
\chapter{Second chapter}

\begin{appendices}
\input{extra}
\end{appendices}

\end{document}

Grüße,

Sander

verwandte Informationen