我正在使用这个包utdiss2.sty
在一篇论文中。当我使用类似以下示例的包时:
\documentclass[12pt]{book}
\usepackage{lipsum}
\usepackage{bookmark}
\usepackage{utdiss2}
\usepackage{hyperref}
%\usepackage{appendix}
\begin{document}
\chapter{Ch1}
\lipsum
\chapter{Ch2}
\lipsum
%\bookmarksetupnext{level=part}
\begin{appendices}
\chapter{Hello}
\lipsum
\chapter{World}
\lipsum
\end{appendices}
\end{document}
一切正常,但 PDF 的书签匹配不正确。第一个附录与第 1 章匹配,而不是第一个附录。
我查看了包中的附录环境utdiss2.sty
并注释掉了\setcounter{chapter}{0}
。
\def\appendices{\clearpage
\typeout{Appendices.}
\short@page \setcounter{regular@short}{1} % <- 9/13/96 (MAL)
\markboth{}{}\pagestyle{myheadings} % <- The appendices must
\thispagestyle{plain} % <- be numbered.
\vspace*{\fill}
\centerline{\large\bf Appendices}
\vspace*{\fill}
\addcontentsline{toc}{chapter}{Appendices} % <-
\setcounter{chapter}{0} % <---
\setcounter{section}{0}
\def\@chapapp{\appendixname}
\chap@or@app=2
\def\thechapter{\Alph{chapter}}}
现在,书签可以正常工作,但编号错误;附录 C 和 D 而不是附录 A 和 B。
没有这个utdiss2.sty
包就没有问题,所以这个包里有东西改变了。
可能出了什么问题?重新定义附录或章节时,什么可能导致此类问题(错误的书签映射)?
答案1
该问题很可能是众所周知的问题:
\setcounter{chapter}{0}
导致错误的hyperref
锚点,因为使用计数器值来构建这样的锚点。
一个解决方案是提供另一种\theHchapter
设置,比如
\renewcommand{\theHchapter}{\appendixname.\thechapter}
这将写入如下名称
\@writefile{toc}{\contentsline {chapter}{Appendix A.\hspace *{1em}Hello}{10}{chapter.Appendix.A}}
对于.aux
文件,给出正确的超链接,例如chapter.Appendix.A
,不再chapter.1
提供,因为真正的第一章已经存在了。
\documentclass[12pt]{book}
\usepackage{lipsum}
\usepackage{xpatch}
\usepackage{utdiss2}
\usepackage{hyperref}
\xapptocmd{\appendices}{%
\renewcommand{\theHchapter}{\appendixname.\thechapter}
}{}{}
\usepackage{bookmark}
\begin{document}
\chapter{Ch1}
\lipsum
\chapter{Ch2}
\lipsum
\bookmarksetupnext{level=part}
\begin{appendices}
\chapter{Hello}
\lipsum
\chapter{World}
\lipsum
\end{appendices}
\end{document}