![第二部分的书签指向错误的页面(第一部分的页面)](https://linux22.com/image/300457/%E7%AC%AC%E4%BA%8C%E9%83%A8%E5%88%86%E7%9A%84%E4%B9%A6%E7%AD%BE%E6%8C%87%E5%90%91%E9%94%99%E8%AF%AF%E7%9A%84%E9%A1%B5%E9%9D%A2%EF%BC%88%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%E7%9A%84%E9%A1%B5%E9%9D%A2%EF%BC%89.png)
PDF 中的书签/链接指向第二部分(“Quels impacts ?”)指向错误的页面(早了一页)。PDF 中的目录也是如此(此处的页码是正确的,只是超链接是错误的)。
例如:
\documentclass[french,a4paper,12pt,twoside]{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{lmodern}
\usepackage{float}
\usepackage{graphicx}
\usepackage{numprint}
\usepackage{eurosym}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{listings}
\usepackage{wrapfig}
\usepackage[top=3cm, bottom=3cm, left=2cm, right=2cm]{geometry}
\usepackage{framed}
\usepackage{fancyhdr}
\usepackage{listings}
\usepackage{url}
\usepackage{csquotes}
\usepackage{lettrine}
\usepackage{chngcntr}
\usepackage[table]{xcolor}
\counterwithout{figure}{chapter}
\counterwithout{table}{chapter}
\counterwithout{footnote}{chapter}
%\counterwithin*{chapter}{part}
\makeatletter\@addtoreset{chapter}{part}\makeatother%
\newcounter{intext}
\usepackage[autolang=hyphen,backend=biber,
style=numeric,pagetracker=false,
ibidtracker=true,
citetracker=context]{biblatex}
\usepackage[tight]{shorttoc}
\addtocontents{toc}{\protect\thispagestyle{empty}}
\usepackage{lastpage}
\usepackage{color}
\usepackage[
bookmarks,
colorlinks=true,
]{hyperref}
\setcounter{tocdepth}{6}
\setcounter{secnumdepth}{6}
%voir aussi le fichier report.cls
%car j'ai modifié 2 ou 3 trucs
\renewcommand{\thepart}{Partie \Roman{part}}
\renewcommand{\thechapter}{\arabic{chapter}}
\renewcommand{\thesection}{\Roman{section}}
\renewcommand{\thesubsection}{\Alph{subsection})}
\renewcommand{\thesubsubsection}{\arabic{subsubsection}.}
\renewcommand{\theparagraph}{\alph{paragraph})}
\patchcmd{\footnotemark}{\stepcounter{footnote}}{\refstepcounter{footnote}}{}{}
\newcommand{\npshorttableofcontents}[2]{%
\begingroup
\let\aslsavedcontentsline\contentsline
\renewcommand{\contentsline}[3]{%
\aslsavedcontentsline{##1}{##2}{}%
}%
\shorttableofcontents{#1}{#2}
\endgroup
}
\usepackage{bookmark}
\setlength\parskip{1.5pt plus 1.0pt}
\begin{document}
\clearpage
\chapter*{Remerciements}
\chapter*{Introduction.\label{introduction}}
\addcontentsline{toc}{part}{Introduction.}
\npshorttableofcontents{Sommaire.}{0}
\thispagestyle{plain}
\clearpage
\part{concept et réglementation.}
\chapter{Caractéristiques et composantes.}
\section{Caractéristiques.}
\subsection{Le mouvement }
\chapter{Régime juridique.}
\clearpage
\part{Quels impacts ?}
\chapter{amélioration du service public}
\section{Amélioration.}
\subsection{Améliorer la gouvernance}
\clearpage
\phantomsection
\addcontentsline{toc}{chapter}{Bibliographie.}
\printbibliography
\clearpage
\phantomsection
\addcontentsline{toc}{chapter}{\listfigurename.}
\listoffigures
\clearpage
\phantomsection
\addcontentsline{toc}{chapter}{\listtablename.}
\listoftables
\clearpage
\protect\thispagestyle{fancy}
\tableofcontents
\end{document}
结果是:
该链接指向第 5 页,而不是第 8 页。
怎么了 ?
答案1
只需移动\@addtoreset
或\counterwithin
后 hyperref
已加载,因为hyperref
重新定义它们以调整用于锚点(目标)名称的附加计数器theHchapter
。这些名称必须是唯一的。由于章节号不再唯一,因此部分编号将添加到 中的章节号中theHchapter
。
答案2
由于您将chapter
计数器重新定义为从属于part
,因此第二部分中的书签将引用第一部分中编号相同的部分。您可以从表单的警告中看到这一点
pdfTeX warning (ext4): destination with the same identifier (name{chapte
r.1}) has been already used, duplicate ignored
<to be read again>
\relax
l.90 \chapter{amélioration du service public}
解决方法:定义\theHchapter
,因此hyperref
将使用它来代替\thechapter
。
\counterwithin*{chapter}{part}
\newcommand{\theHchapter}{\thepart\arabic{chapter}}
顺便说一下,
\makeatletter\@addtoreset{chapter}{part}\makeatother
只是一种复杂的形式\counterwithin*{chapter}{part}