在下面给出的 ME 中,书签没有指向正确的附录章节:
\documentclass[11pt,fleqn]{book}
\usepackage[top=3cm,bottom=3cm,left=3.2cm,right=3.2cm,headsep=10pt,a4paper]{geometry}
\usepackage{lipsum, fancyhdr}
\usepackage[svgnames]{xcolor}
\definecolor{ocre}{RGB}{243,102,25}
\definecolor{mygray}{RGB}{243,243,244}
\usepackage{avant}
\usepackage{mathptmx}
\usepackage{microtype}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{calc}
\usepackage{textcomp}
\usepackage[refsection=chapter,defernumbers=true,sorting=none,sortcites=true,autopunct=true,babel=hyphen,abbreviate=false,backref=true,backend=biber]{biblatex}
\defbibheading{bibempty}{}
\usepackage{empheq}
\usepackage[font={color=ocre,bf},figurename=Fig.,labelfont={it}]{caption}
\usepackage[framemethod=default]{mdframed}
\usepackage{mathtools}
\usepackage[most]{tcolorbox}
\tcbset{myformula/.style={
arc=0pt,
outer arc=0pt,
%colback=ocre!10,
colback=mygray,
colframe=ocre,
boxrule=0.8pt,
left=2pt,
right=2pt,
highlight math style={
arc=0pt,
outer arc=0pt,
colback=mygray,
colframe=red.
}
}
}
\newenvironment{spread}[1]{%
\advance\jot#1% indeed
}{%
\ignorespacesafterend
}
%===================================================
% Matlab code
\usepackage{inconsolata}
%\usepackage{fontspec}
\usepackage[numbered,framed]{matlab-prettifier}
\newcommand\ph\mlplaceholder
\makeatletter
\renewcommand\phOpDelim@mlpr{$\langle$}
\renewcommand\phClDelim@mlpr{$\rangle$}
\makeatother
%\newfontfamily{\lstconsolas}{Consolas}
%===================================================
\usepackage{caption}
\usepackage[font={color=ocre,bf,it},figurename=Fig.,labelfont={it}]{caption}
\newcommand{\figref}[2][]{% \figref[<sub-figref>]{<figref>}
\textcolor{ocre}{\bfseries\emph{\figurename\,\ref{#2}#1}}}
\usepackage{calc}
\usepackage{makeidx}
\makeindex
\input{structure}
\newcommand*{\refname}{Bibliography}
\begin{document}
\setcounter{secnumdepth}{3}
\frontmatter
\begingroup
\thispagestyle{empty}
\centering
\vspace*{9cm}
\par\normalfont\fontsize{35}{35}\sffamily\selectfont
Test Book\par
\vspace*{1cm}
{\Huge Author}\par
\endgroup
\chapterimage{chapter_head_1}
\pagestyle{empty}
\tableofcontents
\mainmatter
\chapter{One}
\begin{lstlisting}[
style=Matlab-editor,
basicstyle=\mlttfamily\small,
escapechar=`,
caption={For educational purposes},
]
% example of while loop using placeholders
while `\ph{condition}`
if `\ph{something-bad-happens}`
break
else
x = 2015 + 10098 % do something useful
end
% do more things
end
\end{lstlisting}
\begin{lstlisting}[
style=Matlab-editor,
basicstyle=\mlttfamily\small,
escapechar=`,
caption={For educational purposes},
]
% example of while loop using placeholders
while `\ph{condition}`
if `\ph{something-bad-happens}`
break
else
x = 2015 + 10098 % do something useful
end
% do more things
end
\end{lstlisting}
\chapter{Two}
\section{One}
\lipsum
\setcounter{chapter}{0}
\renewcommand{\thechapter}{\Alph{chapter}}
\chapter{Appendix A}
\section{One}
\lipsum
\chapter{Appendix B}
\section{One}
\lipsum
\cleardoublepage
\setlength{\columnsep}{0.75cm}
\addcontentsline{toc}{chapter}{\textcolor{ocre}{Index}}
\printindex
\end{document}
我认为问题出现在我使用命令将章节号重置为零\setcounter{chapter}{0}
以开始附录的新编号时。您能告诉我如何修复此问题,以便书签可以指向正确的章节,而附录从字母 A 开始吗?
答案1
包hyperref
需要目标名称的唯一计数器值。重置章节计数器 ( \setcounter{chapter}{0}
) 后,将重新定义宏\thechapter
,但不会重新定义\theHchapter
使用的宏hyperref
。
\usepackage{hyperref}
\usepackage{bookmark}% faster updated bookmarks
...
\setcounter{chapter}{0}
\renewcommand*{\thechapter}{\Alph{chapter}}
\renewcommand*{\theHchapter}{\Alph{chapter}}
为了正确链接到索引,\phantomsection
需要,例如:
\cleardoublepage
\phantomsection % sets anchor for `\addcontentsline`
\addcontentsline{toc}{chapter}{\indexname}