这doc
包,用于记录 LaTeX 包,能够生成包中使用的所有宏的索引。索引条目可以分为三种类型:宏所在的位置描述, 在哪儿定义以及它在哪里用过的。但是,如果\DisableCrossrefs
没有指定,doc
将索引每一个代码中的宏,包括明显无用的条目,如、\newcommand
等。有一个命令,可用于指定不应索引哪些宏。但是,保持列表完整是一项繁琐且容易出错的任务:每次编写一行代码时,您都需要考虑/检查它是否引入了新的不需要的索引条目。\relax
\ifx
\DoNotIndex
一个“解决方案”是说\DisableCrossrefs
并忘记代码索引。我想要一些不同的东西,即只有由定义的宏我的索引中列出的软件包,在我看来,这比盲目索引除一组明确例外之外的所有内容更有意义。更具体地说,只应跟踪macro
和environment
环境中指定的名称的使用位置,而应省略其他名称(为了完整起见,可以引入一个\DoIndex
命令,即与相反的命令\DoNotIndex
,用于无论如何都应该索引的例外)。
在下面的示例代码中,期望的输出是\newcommand
和\GenericInfo
不在索引中,但同时\mymacro
仍在索引中并显示所有三个引用:描述、定义和使用的位置:
% \iffalse
\documentclass{ltxdoc}
\EnableCrossrefs
\CodelineIndex
\begin{document}
\DocInput{test.dtx}
\end{document}
% \fi
%
% \DescribeMacro{\mymacro}
% Some meaningful description.
%
% \StopEventually{\PrintIndex}
%
% \begin{macro}{\mymacro}
% Here we define the macro.
% \begin{macrocode}
\newcommand{\mymacro}{hello}
% \end{macrocode}
% \end{macro}
%
% And here we use it.
% \begin{macrocode}
\PackageInfo{test}{\mymacro}
% \end{macrocode}
%
% \Finale
(使用两次 LaTeX 运行来处理
makeindex -s gind.ist -o test.ind test.idx它们之间。)
如何才能实现这个结果?是否有一个包已经可以做到这一点?
答案1
此版本仅对具有|main
索引条目的事物进行索引。它可以适应于过滤其他事物。它列出了文件中需要索引的事物,.aux
因此可能需要额外运行才能makeindex
使事情稳定下来,这是必要的,以便稍后的主条目能够对较早的事件进行索引。
% \iffalse
\documentclass{ltxdoc}
\makeatletter
\def\SpecialMainIndex#1{%
\@bsphack
\immediate\write\@auxout{%
\global\noexpand\expandafter\let\noexpand\csname MAIN:\noexpand\string\string#1\endcsname\noexpand\@empty}%
\SpecialIndex@{#1}{\encapchar main}\@esphack}
\def\SpecialIndex#1{%
\@bsphack
\expandafter\ifx\csname MAIN:\string#1\endcsname\@empty
\special@index{\expandafter\@gobble
\string#1\actualchar
\string\verb\quotechar*\verbatimchar\string#1\verbatimchar}%
\fi
\@esphack}
\EnableCrossrefs
\EnableCrossrefs
\CodelineIndex
\begin{document}
\DocInput{test.dtx}
\end{document}
% \fi
%
% \DescribeMacro{\mymacro}
% Some meaningful description.
%
% \StopEventually{\PrintIndex}
%
% \begin{macro}{\mymacro}
% Here we define the macro.
% \begin{macrocode}
\newcommand{\mymacro}{hello}
% \end{macrocode}
% \end{macro}
%
% And here we use it.
% \begin{macrocode}
\PackageInfo{test}{\mymacro}
% \end{macrocode}
%
% \Finale