尝试以下代码。没有hyperref
一切都很好,索引中有正确的条目。有hyperref
这个条目就会消失。(这里没有显示的代码行条目不会被使用 所影响hyperref
)
\documentclass{ltxdoc}
%\usepackage{hyperref}
\usepackage{doc}
\EnableCrossrefs
\CodelineIndex
\begin{document}
Test\DescribeMacro{\name}
\PrintIndex
\end{document}
有没有办法可以同时使用这两个包?
答案1
答案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}}