将超链接限制在 toc / lo* 条目的一部分

将超链接限制在 toc / lo* 条目的一部分

在一些托克洛夫特列表中有条目,可能跨越多行。现在超链接使前面的数字、第一行和所有后面的行都变成链接。可以避免这种情况吗?只有第一行应该是链接。
请参见以下示例,其中发生了这种情况:

\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}}%

相关内容