将章节标题链接到目录

将章节标题链接到目录

我正在使用该hyperref包在我的文档中创建超链接。目录->章节/节的链接效果很好,但我想知道是否有办法自动将节标题中的超链接插入回目录(节->目录)。以便更轻松地进行双向导航(尤其是在单击目录中的错误链接时)。

以防万一我在report课堂上工作有关系,这是我现在所拥有的(最小化)版本。

\documentclass[11pt,a4paper]{report}
\usepackage{hyperref}

\begin{document}
First page

\clearpage
\tableofcontents
\clearpage

Blank page

\clearpage
\chapter{First chapter}
\end{document}

谢谢你的帮助!

答案1

以下是使用\hyperlink,\hypertarget机制的一种可能解决方案; \hyperlink使用 的重新定义可以方便地添加 ,\@makechapterhead并且使用 的重新定义\@chapter来放置相应的\hypertarget

\documentclass{report}
\usepackage{hyperref}

\makeatletter
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
  \refstepcounter{chapter}%
  \typeout{\@chapapp\space\thechapter.}%
  \addcontentsline{toc}{chapter}%
    {\protect\numberline{\thechapter}\string\hypertarget{chap\thechapter}{#1}}%
\else
  \addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
  \@topnewpage[\@makechapterhead{#2}]%
\else
  \@makechapterhead{#2}%
  \@afterheading
\fi}
\def\@makechapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
        \huge\bfseries \@chapapp\space \thechapter
        \par\nobreak
        \vskip 20\p@
    \fi
    \interlinepenalty\@M
    \Huge \bfseries \hyperlink{chap\thechapter}{#1}\par\nobreak
    \vskip 40\p@
  }}
\makeatother

\begin{document}

\tableofcontents
\chapter{Test Chapter One}
\chapter{Test Chapter Two}
\chapter{Test Chapter Three}

\end{document}

这是同样的想法,这次使用titlesec包及其explicit放置\hyperlinks 的选项:

\documentclass{report}
\usepackage[explicit]{titlesec}
\usepackage{hyperref}

\titleformat{\chapter}[display]
  {\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}  
  {\Huge\hyperlink{chap\thechapter}{#1}}
\titleformat{name=\chapter,numberless}[display]
  {\normalfont\huge\bfseries}{}{-22pt}  
  {\Huge#1}

\makeatletter
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
  \refstepcounter{chapter}%
  \typeout{\@chapapp\space\thechapter.}%
  \addcontentsline{toc}{chapter}%
    {\protect\numberline{\thechapter}\string\hypertarget{chap\thechapter}{#1}}%
\else
  \addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
  \@topnewpage[\@makechapterhead{#2}]%
\else
  \@makechapterhead{#2}%
  \@afterheading
\fi}
\makeatother

\begin{document}

\tableofcontents
\chapter{Test Chapter One}
\chapter{Test Chapter Two}
\chapter{Test Chapter Three}

\end{document}

答案2

使用\hypertarget

\documentclass{book}
\usepackage{hyperref}

\begin{document}    
\tableofcontents

\chapter{\protect\hyperlink{chap:\thechapter}{My chapter}}
\addtocontents{toc}{\protect\hypertarget{chap:\thechapter}{}}

\chapter{\protect\hyperlink{chap:\thechapter}{My chapter}}
\addtocontents{toc}{\protect\hypertarget{chap:\thechapter}{}}

foo     
\end{document}

相关内容