我正在尝试在目录中添加指向行的链接,例如这个问题. 似乎标准答案是包括如下行
\addtocontents{toc}{\protect\hypertarget{label}{}}
在文档的适当部分。这很好,只是目录似乎不愿意在有此行的子部分之间设置分页符,这会导致尴尬的间距。我在下面发布了一个例子。
\documentclass[12pt,letterpaper]{article}
\usepackage[colorlinks,linkcolor=black]{hyperref}
\begin{document}
x\vspace{5.5in}
\tableofcontents
\section{A}
\section{B}
\addtocontents{toc}{\protect\hypertarget{moo}{}}
\subsection{BA}
\addtocontents{toc}{\protect\hypertarget{moo}{}}
\subsection{Pagebreak should go below here}
% but it doesn't if this is uncommented
%\addtocontents{toc}{\protect\hypertarget{moo}{}}
\subsection{BC}
\addtocontents{toc}{\protect\hypertarget{moo}{}}
\subsection{BD}
\addtocontents{toc}{\protect\hypertarget{moo}{}}
\section{C}
\end{document}
为什么会这样?我怎样才能指定分页符是可以的?
答案1
你的问题的答案为什么将超目标添加到目录会改变分页?是通过添加将在文件\addtocontents{toc}{\protect\hypertarget{moo}{}}
中添加一个新行。在下一次编译时,PDF 中会出现一个带有不可见超目标的额外空行,这在我们看来分页已经发生了变化。.aux
\@writefile{toc}{\hypertarget {moo}{}}
为了克服这种情况,我们需要调整\section
,\subsection
以及需要导航的任何部分命令,如下例所示:
\documentclass[12pt,twoside]{article}
\usepackage[bookmarks=false,colorlinks,linkcolor=black]{hyperref}
\usepackage{lipsum}
\makeatletter
\def\ps@myheading{%
\def\@oddhead{\mbox{}\hfill\slshape\rightmark}%
\if@twoside
\def\@evenhead{\slshape\leftmark\hfill\mbox{}}%
\else%
\let\@evenhead\@oddhead%
\fi%
\def\@oddfoot{\mbox{}\hfil\thepage\hfil\mbox{}}%
\let\@evenfoot\@oddfoot%
}
\def\linksection#1{%
\section[\string\smash{\string\raisebox{\baselineskip}{\string\hypertarget{moo.\thesection}{}}}#1]{#1}%
\def\rightmark{\hyperlink{moo.\thesection}{\thesection.\quad #1}}%
\let\leftmark\rightmark%
}
\def\linksubsection#1{%
\subsection[\string\smash{\string\raisebox{\baselineskip}{\string\hypertarget{moo.\thesubsection}{}}}#1]{#1}%
\def\rightmark{\hyperlink{moo.\thesubsection}{\thesubsection.\quad #1}}%
\let\leftmark\rightmark%
}
\def\nolinksection#1{%
\section{#1}%
\def\rightmark{\thesection.\quad #1}%
\let\leftmark\rightmark%
}
\def\nolinksubsection#1{%
\subsection{#1}%
\def\rightmark{\thesubsection.\quad #1}%
\let\leftmark\rightmark%
}
\pagestyle{myheading}
\makeatother
\begin{document}
\mbox{}\vspace{5.5in}
\tableofcontents
\linksection{A}
\lipsum
\linksection{B}
\lipsum
\nolinksubsection{BA}
\lipsum
\nolinksubsection{Pagebreak should go below here}
\lipsum
% but it doesn't if this is un-commented
\linksubsection{BC}
\lipsum
\linksubsection{BD}
\lipsum
\nolinksection{C}
\lipsum
\end{document}
定义了一种名为 的新页面样式(页眉和页脚),myheading
将导航放在页眉中,然后返回目录条目。此外,对于需要使用超链接进行导航的部分,命令、等分别更改为 。而那些不需要\section
导航\subsection
的分别定义为。这些宏将在目录和页眉中定义相应的条目。\linksection
\linksubsection
\section
\subsection
\nolinksection
\nolinksubsection
\hypertarget
\hyperlink
希望这可以帮助。