如何将 showkeys 与 hyperref 一起使用?

如何将 showkeys 与 hyperref 一起使用?

“hyperref 包的变更日志”提出支持showkeys软件包被添加到hyperref2000-05-08、2001-01-27 和 2007-05-29 在不同阶段进行了测试。但是,这两个软件包之间似乎仍然存在一些不兼容性。此外,根据先加载哪个软件包,会发生一些奇怪的交互。

考虑以下 MWE,其中 在showkeys之前加载hyperref

\documentclass{article}
\usepackage{showkeys}
\usepackage{hyperref}

\begin{document}

\section{New Section}
\label{some-label}

This is a really important section.

Now we want to refer to~\autoref{some-label} on \autopageref{some-label}.

What if we just refer to section~\ref{some-label} on page~\ref{some-label}?
This seems to work fine.

\begin{thebibliography}{99}
\bibitem{abc}
    This book has no title.
\end{thebibliography}
\end{document}

首先,该\autopageref命令似乎不支持 package showkeys,因为不会打印标签。其次,在这个例子中,\bibitem也不会打印密钥。

另一方面,假设我们反转包加载顺序,hyperref在 之前加载showkeys。在​​这种情况下, 的键\bibitem显示正确,但现在\autopageref完全损坏:输出文本中缺少页码,由 代替??some-label,并写入以下警告:

LaTeX Warning: Reference `*' on page 1 undefined on input line 28.

因此,当我准备草稿文档时,我不得不在\bibitem不显示按键和完全损坏按键之间做出选择。只要输出的是正确的文本(之前),\autopageref我可以忍受不显示按键,但我真的希望显示按键(之前),这样我就可以在输入文档的其余部分时将标签复制到引文中。我该如何纠正这些问题中的一个或另一个,以获得两种方案的最佳效果?\autopagerefshowkeyshyperref\bibitemhyperrefshowkeys

答案1

hyperref手册第 8 节指出:

排版 \label 和 \ref 宏内容的包,例如 showkeys。由于 hyperref 包重新定义了这些命令,因此必须设置 implied=false 才能使这些包正常工作。

如果文档以如下方式开始,则您的示例似乎对我有用:

\documentclass{article}
\usepackage{showkeys}
\usepackage[implicit=false]{hyperref}

相关内容