hyperref 导致 doc.sty 出现问题

hyperref 导致 doc.sty 出现问题

尝试以下代码。没有hyperref一切都很好,索引中有正确的条目。有hyperref这个条目就会消失。(这里没有显示的代码行条目不会被使用 所影响hyperref

\documentclass{ltxdoc}

%\usepackage{hyperref}
\usepackage{doc}

\EnableCrossrefs
\CodelineIndex

\begin{document}
Test\DescribeMacro{\name}

\PrintIndex
\end{document}

有没有办法可以同时使用这两个包?

答案1

hypdoc软件包专门用于doc增强hyperref能力。因此你应该简单地使用

\usepackage{hypdoc}

代替

\usepackage{doc}
\usepackage{hyperref}

这为整体设置添加了一些额外的功能,因此比自己连接这两个包要好。

答案2

制作索引用于处理文件的程序.ind需要以下形式的索引条目

\index{<item>|<cmd>}

意思是用 来格式化项目的页码\<cmd>

如果你看一下.ind生成的文件hyperref,你会看到索引条目命令确实是

\indexentry{name=\verb!*+\name+|usage|hyperpage}{1}

也就是说,格式化命令\usage\hyperpage— 一个来自doc,另一个来自hyperref!这会使 MakeIndex 混淆,并且不会产生输出。解决方案是重新定义\usage以包含\hyperpage在其中,并告诉hyperref不要覆盖索引命令:

\documentclass{ltxdoc}

\usepackage[hyperindex=false]{hyperref}

\EnableCrossrefs
\CodelineIndex

\let\oldusage=\usage
\renewcommand{\usage}[1]{\oldusage{\hyperpage{#1}}}

\begin{document}

\DescribeMacro{\name}
Test

\PrintIndex

\end{document}

您可能还想以类似的方式添加到更改历史记录的页码的超链接:

\let\oldglossary=\glossary
\renewcommand{\glossary}[1]{\oldglossary{#1|hyperpage}}

相关内容