选项linktoc=all
超链接包使参考文本和页码都成为可点击的超链接。但是,这些点仍然不是超链接。这不是很重要,但我出于好奇想知道这是否是 hyperref 的一个限制,注意到 MS Word 和 OpenOffice 以及其他工具允许这些点可点击?
可能不推荐?
答案1
目录 (TOC) 中的超链接由\contentsline
中定义的命令生成hyperref.sty
。linktoc=all
选项设置使\contentsline
添加单独的标题和页码链接。通过在本地使用 修补适当的引线生成命令,可以将第三个链接应用于标题和页码之间的引线。etoolbox
将整个目录条目包含在超链接中会更加整洁,但这是一个相对困难的问题。
对于由内部格式化的目录,前导符由中定义的latex
命令生成 。以下补丁只是将前导符括在指向当前目录条目位置的超链接中,该超链接作为 的第四个参数传递。\@dottedtocline
latex.ltx
\contentsline
\documentclass{report}
\usepackage[linktoc=all]{hyperref}
\usepackage{etoolbox}
\makeatletter
\pretocmd{\contentsline}
{\patchcmd{\@dottedtocline}
{\leaders}
{\hyper@linkstart{link}{#4}\leaders}
{}
{}%
\patchcmd{\@dottedtocline}
{\hfill}
{\hfill\hyper@linkend}
{}
{}}
{}
{}
\makeatother
\begin{document}
\tableofcontents
\chapter{First Chapter} \pagebreak
\section{First Section} \pagebreak
\subsection{First Subsection}
\chapter{Second Chapter} \pagebreak
\section{Second Section} \pagebreak
\subsection{Second Subsection}
\end{document}
带有链接边框的结果看起来很糟糕,但是带有的则不是那么糟糕colorlinks=true
。
只要引导符由 生成,此补丁程序就足够通用,可以与通过包定义的用户命令格式化的 TOC 一起使用\@dottedtocline
。KOMA-Script
就是tocstyle
这种包的一个例子 - 它重新定义了\@dottedtocline
。
tocloft
并memoir
发出命令\cftdotfill
而不是\@dottedtocline
。下面的代码演示了一个适用于tocloft
包和memoir
文档类的补丁。
\documentclass{memoir}
\usepackage[linktoc=all]{hyperref}
\usepackage{etoolbox}
\makeatletter
\pretocmd{\contentsline}
{\patchcmd{\cftdotfill}
{\leaders}
{\hyper@linkstart{link}{#4}\leaders}
{}
{}%
\patchcmd{\cftdotfill}
{\hfill}
{\hfill\hyper@linkend}
{}
{}}
{}
{}
\makeatother
\setcounter{tocdepth}{2}
\renewcommand*{\cftdot}{\ensuremath{\ast}}
\renewcommand*{\cftsectionfont}{\itshape}
\renewcommand*{\cftsectionleader}{\cftdotfill{\cftsectiondotsep}}
\renewcommand*{\cftsubsectionfont}{\scshape}
\renewcommand*{\cftsubsectiondotsep}{9}
\renewcommand*{\cftsubsectionleader}{\cftdotfill{\cftsubsectiondotsep}}
\begin{document}
\tableofcontents
\chapter{First Chapter} \pagebreak
\section{First Section} \pagebreak
\subsection{First Subsection}
\chapter{Second Chapter} \pagebreak
\section{Second Section} \pagebreak
\subsection{Second Subsection}
\end{document}
答案2
我猜想hyperref
即使设置了该选项,前导点仍无法点击的一个原因linktoc=all
是,目录中并非所有行都带有点。例如,在article
文档类的默认定义中,子节和子子节带有点,而节则没有。
这些默认设置并非一成不变,当然可以使用 LaTeX 自己的命令或更简单的自定义包(如)进行更改tocloft
。更糟糕的是,前导点的“样式”(例如,它们的密度或类型:点、星号、心形等)也可以更改。据我所知,这些前导点不构成可以全局操作的单独组(因此 hyperref 可以以某种方式访问它们);这显然与页码和章节标题的情况形成对比。Hyperref 可能不会(在我看来也不应该)假设代码的哪些其他部分可能会更改目录的样式,因此(我认为明智之举)不会尝试对点进行任何操作。:-)