Hyperref 链接整行(如 Word)

Hyperref 链接整行(如 Word)

我曾尝试使用以下代码如何使超链接覆盖目录中的整行(包括点)?但它似乎让我的整个文档超链接可能是因为我的自定义风格。我正在使用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>超链接合并为一个。步骤如下:

  1. 删除由 执行的超链接插入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

  2. 手动插入上面删除的内容作为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 宽度的格式。

相关内容