以下代码来自我们大学的论文模板,该模板没有很好的文档记录,而且由于我是最熟练的 LaTeX 用户,而我最多只是一个中等水平的用户,所以我们不知道其中的很多代码是做什么的。有人能帮我们弄清楚这个宏的作用吗?我可以说它与有关hyperref
,但除此之外我们就不知道了。它就在一堆用于修改csthesis
以添加程序列表的代码上方,所以它可能与此有关?
这里有足够的信息来说明它在做什么吗?
哦,不,我不能发布 MWE,因为我们不知道它的作用,而且它是从整个博士论文中删除的。
\makeatletter
\def\contentsline#1#2#3#4{%
\ifx\\#4\\%
\csname l@#1\endcsname{#2}{#3}%
\else
\csname l@#1\endcsname{%
\hyper@linkstart{link}{#4}{#2}\hyper@linkend
}{%
% same link destination for the page:
\hyper@linkstart{link}{#4}{#3}\hyper@linkend
% link destination is the page itself:
% \hyperpage{#3}%
}%
\fi
} \makeatother
(我希望那里有足够的代码,它在模板中独立存在,所以我希望它是自包含的。我还希望它不会太本地化。)
答案1
在旧版本的 中,hyperref
标题或页码都可以成为链接,但不能同时成为链接。因此,\contentsline
问题中的 的定义修改了 的旧定义,hyperref
以\contentsline
添加指向标题和页码的链接。
自 2008/04/13 版本起,6.77nhyperref
有了一个新选项linktoc
。
hyperref
来自自述:
linktoc
已添加选项新的选项
linktoc
允许更好地控制将目录中条目的哪一部分制作成链接:
linktoc=none
(无链接)linktoc=section
(默认行为,与 相同linktocpage=false
)linktoc=page
(与...一样linktocpage=true
)linktoc=all
(章节和页面部分均为链接)
使用最新的,hyperref
您可以删除定义\contentsline
并使用
\usepackage[linktoc=all]{hyperref}[2008/04/13]
该选项也可以通过 来设置\hypersetup
。