单击章节转到目录

单击章节转到目录

参考这个问题:Hyperref 引用文本中的章节和页面及其可能的重复点击链接返回目录

这基本上又是第二个问题,但请耐心听我说完。

我使用了第一个问题的答案,但略作了修改。现在,每个章节名称都链接回目录(只是名称,而不是上面的“章节号”部分。这不是什么大问题,如果你知道如何解决它,请告诉我 :) )

问题是:这也会改变目录行本身以链接到目录。所以如果我现在点击目录中的一章,链接至目录。

梅威瑟:

\documentclass[11pt]{report}

\usepackage{hyperref}
\usepackage{lipsum}

\usepackage{xparse}
\AtBeginDocument{
    \let\oldchapter\chapter
    \RenewDocumentCommand{\chapter}{s o m}{%
    \clearpage
    \IfBooleanTF{#1}
        {\oldchapter*{\hyperref[toc]{#3}}}% \chapter*[..]{...}
        {\IfValueTF{#2}
            {\oldchapter[#2]{\hyperref[toc]{#3}}}% \chapter[..]{...}
            {\oldchapter{\hyperref[toc]{#3}}}% \chapter{...}
        \label{chapter-\thechapter}% \label this chapter
        }%
    }
}

\begin{document}

\chapter*{Preface}
\lipsum[1-1]
\tableofcontents\label{toc}
\chapter{Introduction}
\lipsum[2-2]
\end{document}

我所做的是采用支持无编号章节的解决方案,并向\hyperref[toc]{}其中添加。

答案1

最简单的解决方案是使用\oldchapter[#3]{\hyperref[toc]{#3}}}%,即明确地将#3再次写入目录并\hyperref在章节标题中设置命令。这将保留正确的超锚点并防止[toc]书签面板中出现难看的前缀!

\documentclass[11pt]{report}

\usepackage{hyperref}
\usepackage{lipsum}

\usepackage{xparse}
\AtBeginDocument{
  \let\oldchapter\chapter
  \RenewDocumentCommand{\chapter}{s o m}{%
    \clearpage
    \IfBooleanTF{#1}
    {\oldchapter*{\hyperref[toc]{#3}}}% \chapter*[..]{...}
    {\IfValueTF{#2}
      {\oldchapter[#2]{\hyperref[toc]{#3}}}% \chapter[..]{...}
      {\oldchapter[#3]{\hyperref[toc]{#3}}}% \chapter{...}
      \label{chapter-\thechapter}% \label this chapter
    }%
  }
}

\begin{document}

\chapter*{Preface}
\lipsum[1-1]
\tableofcontents\label{toc}
\chapter{Introduction}
\lipsum[2-2]

\chapter{Results}
\lipsum[2-4]
\end{document}

相关内容