书签未指向 Legrand Orange Book 模板中的正确章节

书签未指向 Legrand Orange Book 模板中的正确章节

在下面给出的 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}

相关内容