在一些托克洛夫特列表中有条目,可能跨越多行。现在超链接使前面的数字、第一行和所有后面的行都变成链接。可以避免这种情况吗?只有第一行应该是链接。
请参见以下示例,其中发生了这种情况:
\documentclass{scrartcl}
\usepackage{hyperref}
\usepackage{tocloft}
\newcommand{\listprname}{Problems}
\newlistof{pr}{pr}{\listprname}
\newcommand\pr[2]{%
\refstepcounter{pr}
\addcontentsline{pr}{pr}%
{\protect\numberline{\thepr.}{#1\\#2}}}
\begin{document}
\listofpr
\pr{Test}{This is rather a description.}
\end{document}
答案1
我不知道 hyperref 包中是否有选项可以实现您所述的目标。但是,您可能需要考虑指定选项linktocpage=true
,这将使与 TOC、LoF 和 LoT 中的条目相关联的页码成为超链接目标。就我个人而言,我发现只对页码而不是这些列表中给定条目的所有其他部分进行“着色”的选项非常有吸引力。
答案2
根据 Mico 的回答和另一篇文章,如何使超链接覆盖目录中的整行(包括点)?, 我想到了:
\documentclass{scrartcl}
\usepackage[linktocpage=true]{hyperref}
\usepackage{tocloft}
\newcommand{\listprname}{Problems}
\newlistof{pr}{pr}{\listprname}
\makeatletter
\newcommand\pr[2]{%
\refstepcounter{pr}
\addcontentsline{pr}{pr}%
{\protect\numberline{\thepr.}{\protect\hyper@linkstart{link}{pr.\thepr}#1\protect\hyper@linkend\\#2}}}
\makeatother
\begin{document}
\listofpr
\pr{Test}{This is rather a description.}
\end{document}
当然,这依赖于超链接。另外前面的数字暂时还不是链接,但也可以添加。
\hypersetup{linktoc=page}
此外,还可以使用列表之前和之后分别更改每个列表的设置\hypersetup{linktoc=all}
,更改将应用于该列表。这样,无需进行任何更改即可将主目录中的条目保留为链接。
正如 Heiko 所说,没有必要使用内部hyperref
命令。以下代码包含此调整,并将号码放在链接中:
\addcontentsline{pr}{pr}%
{\protect\numberline{\protect\hyperlink{pr.\thepr}{\thepr.}}%
{\protect\hyperlink{pr.\thepr}{#1}\\#2}}%