Conflicto entre babel, hyperref y paquete de apéndice

Conflicto entre babel, hyperref y paquete de apéndice

Mientras escribo mi tesis utilizo los paquetes hyperrefand appendixcomo en el pequeño ejemplo a continuación.

prueba.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}

Este ejemplo no produce errores. El resultado final es una tabla de contenido con enlaces en los que se puede hacer clic a todos los capítulos (incluidos los de los apéndices) y con el formato que quiero.

Mientras se compila (pdfLaTeX), se produce el siguiente archivo:

Pruébalo

\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

Mi tesis es, por supuesto, mucho más amplia (más capítulos y más apéndices). Aunque la estructura es similar, al compilar mi tesis se producen numerosos errores crípticos (lo que significa que no los entiendo). He enumerado algunos a continuación. Comentar el hyperrefpaquete me permite compilar, pero también desactiva los enlaces y los marcadores en el documento PDF.

! 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}

El archivo .out de mi tesis se ve bien hasta que llegas a los marcadores del apéndice.

...
\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
 ...

Yo creoesta publicaciónestá relacionado con mi problema, pero no puedo entenderlo (todavía soy relativamente nuevo en LaTeX). ¿Alguien puede ayudarme a habilitar los enlaces y marcadores en mi tesis?

Saludos,

lijadora

EDITAR

Agregar el babelpaquete al ejemplo reproduce el problema.

\usepackage[dutch]{babel}

Respuesta1

Informe de error

Es un error en el apéndice del paquete. El error se activa si babelestá cargado con la opción de idioma dutch. De mi informe de error al mantenedor del paquete:

El siguiente documento se rompe en la segunda ejecución:

\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}  

El archivo .out contiene:

\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

El nombre del contador que se utiliza para el nombre de destino está roto debido a la cadena que depende del idioma: B"ylage. La razón es:

\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@chapappse redefine como \appendixnamey esto depende del idioma y se rompe en el caso del holandés debido a la expansión de la taquigrafía. Pero \Hy@chapappse usa en los nombres de destino, generalmente es "capítulo" (del capítulo contrario), solo después de que se cambia \appendixel nombre para obtener mejores nombres de destino únicos. No es necesario hacer que este idioma sea dependiente. Solo usa:chapterappendix

\def\Hy@chapapp{appendix}

o

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

También es \@resets@ppsubnecesario solucionar el otro incidente.

Solución alternativa

También existe una solución independiente de la corrección de errores en el paquete appendix. Simplemente cargue el paquete bookmarkdespués hyperref. Tiene un algoritmo mucho más robusto para los marcadores y se ocupa de los B"ylagearchivos rotos .auxmediante hexcodificación ( base16). Además, los marcadores se actualizan antes.

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

Además, hyperrefv6.83b desactivará las abreviaturas en los nombres de destino (\hypercurrent y nombre de destino en \contentsline).

"IJ" y "ij" en marcadores

Estos caracteres, ligaduras de i y j mayúsculas/minúsculas, no están disponibles en PDFDocEncoding. Pero son accesibles mediante marcadores Unicode, es decir, hyperrefopción pdfencoding=autoo unicode.

El reemplazo con "ÿ" en hyperrefla PD1codificación es un error y se solucionará en v6.83b.

Por cierto, las redefiniciones de macros para los marcadores se pueden limitar a marcadores (cadenas de pdf) colocándolas en \pdfstringdefDisableCommands:

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

Respuesta2

Una solución completa recopilada a partir de todos los comentarios.

\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}

Saludos,

lijadora

información relacionada