某些超链接(memoir+hyperref)位置太低

某些超链接(memoir+hyperref)位置太低

我倾向于将memoir类与hyperref包一起使用,以便将目录、表格和图片列表以及参考书目超链接起来。虽然所有章节、节等的链接都链接到文档中的正确位置,但目录、表格和图片列表以及参考书目的链接似乎太低了,大约是这些各自列表中的第一项应该放的位置,而不仅仅是这些列表标题的左上方。这是一个最小的工作示例:

\documentclass{memoir}
  % using the memoir class here is necessary
  % for all the desired hyperlinks to be created
\usepackage{hyperref}

\begin{document}

\tableofcontents

\section{A section}
This is the only section.

\listoftables
\listoffigures

\begin{thebibliography}{9}
\end{thebibliography}

\end{document}

(可能需要放大 pdf 阅读器中的显示才能看到此效果。)

是否可以修正超链接目标,使它们直接指向相应的标题(这里是“目录”、“表格列表”、“图表列表”和“参考书目”)?(注意:我知道这个hypcap软件包,但不确定是否/如何使用它来解决这个问题。)

答案1

以下补丁使用etoolbox. 将其添加到文档前言中加载中hyperref,它将更正超链接:

\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
% Patch 'Table of Contents'
\patchcmd{\mem@tableofcontents}% <cmd>
  {\phantomsection}% <search>
  {\relax}% <replace>
  {}{\@latex@error{Could not patch \string\mem@tableofcontents}}% <success><failure>
% Patch 'List of Tables'
\patchcmd{\mem@listoftables}% <cmd>
  {\phantomsection}% <search>
  {\relax}% <replace>
  {}{\@latex@error{Could not patch \string\mem@listoftables}}% <success><failure>
% Patch 'List of Figures'
\patchcmd{\mem@listoffigures}% <cmd>
  {\phantomsection}% <search>
  {\relax}% <replace>
  {}{\@latex@error{Could not patch \string\mem@listoffigures}}% <success><failure>
% Patch 'Bibliography'
\patchcmd{\@memb@bchap}% <cmd>
  {\phantomsection}% <search>
  {\relax}% <replace>
  {}{\@latex@error{Could not patch \string\@memb@bchap}}% <success><failure>
\renewcommand{\printtoctitle}[1]{%
  \phantomsection\printchaptertitle{#1}}
\let\printlottitle\printtoctitle
\let\printloftitle\printtoctitle
\makeatother

错误链接的原因在于\phantomsection修补宏的内部位置。它被放置在已创建相应的标题,从而导致“低超目标”。

环境thebibliography设置了一个\chapter*,我保留了它的超链接。因此,它插入了\phantomsection 设置章节空间和页眉。但是,由于这是所有章节的默认设置,因此它似乎很合适。

答案2

我在使用时遇到了同样的问题比布拉特克斯回忆录尝试打印分开的参考书目。

使用时\printbibliography,专门为回忆录定义的标题biblatex.def(仅限这些标题)会添加\phantomsection 章节/节/小节。这真的是设计使然吗?

一个简单的解决方案是定义一个自定义标题,该标题在\phantomsection部分之前

\defbibheading{subbibintoc2}[\refname]{%
  \phantomsection
  \section*{#1}%
  \addcontentsline{toc}{section}{#1}%
  \if@twoside\markright{\memUChead{#1}}\fi}

并打印参考书目

\printbibliography[type=article,
    heading=subbibintoc2,
    prefixnumbers={a},
    title={References}]
\printbibliography[type=online,
    heading=subbibintoc2,
    prefixnumbers={b},
    title={Online Resources}]

相关内容