参考这个问题: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}