如何防止“doc”索引外部宏?

如何防止“doc”索引外部宏?

doc包,用于记录 LaTeX 包,能够生成包中使用的所有宏的索引。索引条目可以分为三种类型:宏所在的位置描述, 在哪儿定义以及它在哪里用过的。但是,如果\DisableCrossrefs没有指定,doc将索引每一个代码中的宏,包括明显无用的条目,如、\newcommand等。有一个命令,可用于指定不应索引哪些宏。但是,保持列表完整是一项繁琐且容易出错的任务:每次编写一行代码时,您都需要考虑/检查它是否引入了新的不需要的索引条目。\relax\ifx\DoNotIndex

一个“解决方案”是说\DisableCrossrefs并忘记代码索引。我想要一些不同的东西,即只有由定义的宏我的索引中列出的软件包,在我看来,这比盲目索引除一组明确例外之外的所有内容更有意义。更具体地说,只应跟踪macroenvironment环境中指定的名称的使用位置,而应省略其他名称(为了完整起见,可以引入一个\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

相关内容