我曾尝试使用以下代码如何使超链接覆盖目录中的整行(包括点)?但它似乎让我的整个文档超链接可能是因为我的自定义风格。我正在使用tocloft
包。我想知道我是否可以拥有整个系列超链接喜欢
[1 Introduction ...... 1]
两者之间的一切[]
都是相互联系的
我似乎只能获得标题、编号或两者,但无法获得整行。
这是我的 MWE。我包含了我将使用的所有当前软件包,以防它们之间发生冲突。
\documentclass{ut-thesis}
\usepackage[backend=biber]{biblatex}
\addbibresource{Thesis.bib}
\usepackage{graphicx}
\graphicspath{{Pictures/}}
\usepackage{float}
\usepackage{caption}
\usepackage{blindtext}
\usepackage[titles]{tocloft}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % for chapters
\usepackage[linktoc=all]{hyperref}
\usepackage{etoolbox}
\degree{Masters}
\department{Deparment}
\gradyear{2013}
\author{John Doe}
\title{Thesis Title}
\setcounter{tocdepth}{2}
\flushbottom
%%%%%%%%%%%% MAIN DOCUMENT %%%%%%%%%%%%
\begin{document}
\begin{preliminary}
\maketitle
\begin{abstract}
\addcontentsline{toc}{chapter}{Abstract}
This is my abstract!
\end{abstract}
%Add Figure into the list of figures and tables
\renewcommand{\cftfigpresnum}{Figure\ }
\renewcommand{\cfttabpresnum}{Table\ }
\newlength{\mylenf}
\settowidth{\mylenf}{\cftfigpresnum}
\setlength{\cftfignumwidth}{\dimexpr\mylenf+1.5em}
\setlength{\cfttabnumwidth}{\dimexpr\mylenf+1.5em}
\renewcommand\contentsname{Table of Contents}
\tableofcontents
\listoffigures
\addcontentsline{toc}{chapter}{List of Figures}
\listoftables
\addcontentsline{toc}{chapter}{List of Tables}
\end{preliminary}
\chapter{Introduction}
\section{Motivation}
This is a section
\printbibliography
\addcontentsline{toc}{chapter}{Bibliography}
\end{document}
问题似乎来自于
\renewcommand\contentsname{Table of Contents}
\tableofcontents`
显然,如果我删除它,我就无法看到它是否正常工作,因为我不再打印目录。
编辑
我没有取得任何进展,如果可能的话我仍然希望得到一些帮助。
答案1
hyperref
生成并传输超链接逐字与您用于设置 ToC 的任何包。这样可以hyperref
与许多包兼容。因为已知您正在使用组合
\usepackage[titles]{tocloft}
\usepackage[linktoc=all]{hyperref}
我们可以知道更新什么hyperref
转移并更新方式tocloft
设置 ToC 条目。
hyperref
让我们通过查看通用的 ToC 条目来看一下 ToC 相关条目是如何处理的:
\contentsline {<type>}{<title>}{<page>}{<hyperlink>}
hyperref
相当于(或\contentsline{<type>}
)。此外,它还插入了一个超链接\csname l@<type>\endcsname
\l@<type>
开始和结尾围绕两者进行分组<title>
并<page>
使用<hyperlink>
标记。实际上,使用 HTML 链接标签,上述内容被翻译成
<a href="<hyperlink>"><title></a> . . . <a href="<hyperlink>"><page></a>
您想将上述内容更改为
<a href="<hyperlink>"><title> . . . <page></a>
所以我们需要干预前 hyperref
将超链接传递给tocloft
,否则无法将两个单独的<title>
和<page>
超链接合并为一个。步骤如下:
删除由 执行的超链接插入
hyperref
。由于我们知道您正在使用该选项,因此类似以下内容linktoc=all
的覆盖就足够了:\contentsline
\makeatletter \def\contentsline#1#2#3#4{% \begingroup \Hy@safe@activestrue \edef\x{\endgroup \def\noexpand\Hy@tocdestname{#4}% }\x % ...removed a bunch of conditionals knowing you're using 'linktoc=all' \csname l@#1\endcsname{% %\hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend #2% }{% %\hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend #3% }% } \makeatother
你会注意到超链接开始和结尾周围的
#2
和#3
分别已被移除,我们只需将#2
和#3
按原样传递给tocloft
。手动插入上面删除的内容作为
tocloft
章节和部分格式的一部分(可以添加额外的级别,但由于您正在使用,所以\setcounter{tocdepth}{2}
我没有添加这些):\makeatletter % Update ToC hyperlinks for Chapters \patchcmd{\l@chapter}% <cmd> {{\cftchapfont #1}}% <search> {\hyper@linkstart{link}{\Hy@tocdestname}{}{\cftchapfont #1}}% <replace> {}{}% <success><failure> \patchcmd{\cftchapfillnum}{\par}{\hyper@linkend\par}{}{} % Update ToC hyperlinks for Sections \patchcmd{\l@section}% <cmd> {{\cftsecfont #1}}% <search> {\hyper@linkstart{link}{\Hy@tocdestname}{}{\cftsecfont #1}}% <replace> {}{}% <success><failure> \patchcmd{\cftsecfillnum}{\par}{\hyper@linkend\par}{}{} \makeatother
每个与 ToC 相关的条目都有两个
etoolbox
与之相关的补丁。第一个插入超链接开始,而第二个插入超链接结尾在\par
图形中断之前(垂直模式下无法插入超链接)。
这是一个完整的最小示例,展示了您的设置:
\documentclass{ut-thesis}
\usepackage[titles]{tocloft}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % for chapters
\usepackage[linktoc=all]{hyperref}
\usepackage{etoolbox}
\degree{Masters}
\department{Deparment}
\gradyear{2013}
\author{John Doe}
\title{Thesis Title}
\setcounter{tocdepth}{2}
\makeatletter
\def\contentsline#1#2#3#4{%
\begingroup
\Hy@safe@activestrue
\edef\x{\endgroup
\def\noexpand\Hy@tocdestname{#4}%
}\x
\csname l@#1\endcsname{%
%\hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
#2%
}{%
%\hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
#3%
}%
}
% Update ToC hyperlinks for Chapters
\patchcmd{\l@chapter}% <cmd>
{{\cftchapfont #1}}% <search>
{\hyper@linkstart{link}{\Hy@tocdestname}{}{\cftchapfont #1}}% <replace>
{}{}% <success><failure>
\patchcmd{\cftchapfillnum}{\par}{\hyper@linkend\par}{}{}
% Update ToC hyperlinks for Sections
\patchcmd{\l@section}% <cmd>
{{\cftsecfont #1}}% <search>
{\hyper@linkstart{link}{\Hy@tocdestname}{}{\cftsecfont #1}}% <replace>
{}{}% <success><failure>
\patchcmd{\cftsecfillnum}{\par}{\hyper@linkend\par}{}{}
\makeatother
\begin{document}
\begin{preliminary}
\maketitle
\begin{abstract}
\addcontentsline{toc}{chapter}{Abstract}
This is my abstract!
\end{abstract}
%Add Figure into the list of figures and tables
\renewcommand{\cftfigpresnum}{Figure\ }
\renewcommand{\cfttabpresnum}{Table\ }
\newlength{\mylenf}
\settowidth{\mylenf}{\cftfigpresnum}
\setlength{\cftfignumwidth}{\dimexpr\mylenf+1.5em}
\setlength{\cfttabnumwidth}{\dimexpr\mylenf+1.5em}
\renewcommand\contentsname{Table of Contents}
\tableofcontents
\listoffigures
\addcontentsline{toc}{chapter}{List of Figures}
\listoftables
\addcontentsline{toc}{chapter}{List of Tables}
\end{preliminary}
\chapter{Introduction}
\section{Motivation}
This is a section
\section{This is a very long section title
this is a very long section title
this is a very long section title
this is a very long section title}
\end{document}
跨多行的超链接格式不太好,但这就是现状。我建议使用
\<type>[<ToC title>]{<main title>}
<ToC title>
而是采用更适合 ToC 宽度的格式。