在撰写论文时,我使用了hyperref
和appendix
包,就像下面的小例子中的那样。
测试.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}
附加文本
\chapter{First appendix}
\section{Appendix section}
此示例不会产生任何错误。最终结果是一个内容表,其中包含指向所有章节(包括附录中的章节)的可点击链接,并且按照我想要的方式格式化。
编译(pdfLaTeX)时会生成以下文件:
检验出
\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
当然,我的论文要大得多(章节更多,附录更多)。虽然结构相似,但编译我的论文会导致许多神秘的错误(意味着我不理解它们)。我在下面列出了一些。注释包hyperref
允许我进行编译,但也会禁用 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}
我的论文的 .out 文件看起来很好,直到你到达附录书签。
...
\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
...
我相信这个帖子与我的问题有关,但我搞不懂(我对 LaTeX 还比较陌生)。有人能帮我启用论文中的链接和书签吗?
问候,
桑德
编辑
将该包添加babel
到示例中可重现该问题。
\usepackage[dutch]{babel}
答案1
错误报告
babel
这是软件包附录中的一个错误。如果加载了语言选项,则会触发此错误dutch
。从我向软件包维护者提交的错误报告中可以看出:
以下文档在第二次运行中损坏:
\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}
.out 文件包含:
\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
用于目标名称的计数器名称已损坏,因为语言相关字符串:B"ylage
。原因是:
\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@chapapp
被重新定义为,\appendixname
并且这是语言相关的,由于简写扩展,在荷兰语中会中断。但\Hy@chapapp
在目的地名称中使用,通常是“章节”(来自反章节),只有在\appendix
名称chapter
更改为后appendix
才能获得更好的唯一目的地名称。没有必要使它依赖于语言。只需使用:
\def\Hy@chapapp{appendix}
或者
\def\Hy@chapapp{\Hy@appendixstring}
\@resets@ppsub
还需修复其他出现的问题。
解决方法/解决方案
还有一个独立于包中错误修复的解决方法。只需在之后appendix
加载包即可。它对书签具有更强大的算法,并使用 编码( )处理文件中的损坏。此外,书签会更早更新。bookmark
hyperref
B"ylage
.aux
hex
base16
\documentclass{book}
\usepackage[dutch]{babel}
\usepackage{hyperref}
\usepackage{bookmark}
\usepackage[titletoc]{appendix}
此外,hyperref
v6.83b 将停用目标名称中的简写(\hypercurrent 和 \contentsline 中的目标名称)。
书签中的“IJ”和“ij”
这些字符,大写/小写 i 和 j 的连字符,在 PDFDocEncoding 中不可用。但它们可以通过 Unicode 书签访问,即
hyperref
选项pdfencoding=auto
或unicode
。
hyperref
编码中用“ÿ”替换PD1
是一个错误,将在 v6.83b 中修复。
顺便说一句,可以通过将书签的宏重新定义放入以下内容来将其限制为书签(pdf 字符串)\pdfstringdefDisableCommands
:
\pdfstringdefDisableCommands{%
\renewcommand*{\appendixname}{Bookmark-Appendix}%
}
答案2
从所有评论中汇编而来的完整解决方案。
\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}
问候,
桑德