我正在为自己创建的类编写 dtx 文件。我正在使用\EnableCrossrefs
,但我已将minted
环境编入索引。\DoNotIndex{minted}
不起作用。
我如何告诉makeindex
不要索引特定环境?
答案1
doc
本质上,如果我正确阅读了包的源代码,\DoNotIndex
它只适用于包的解析逻辑doc
,以决定是否\index
在解析环境内容时找到的控制序列上调用命令macrocode
。
它与工具(始终处理索引文件中的所有条目)无关makeindex
,您需要确保索引首先没有通过修补命令写入索引文件。
macrocode
解析逻辑本身根本不会检查环境内部代码中的环境。
诸如\DescribeEnv{...}
和\begin{environment}{...}
等命令调用\SpecialEnvIndex
总是写入索引文件。因此,不要在您的包未提供的环境中使用\DescribeEnv
或。\begin{environment}
不过,如果你坚持的话,可以修改命令来检查排除列表。这是修改\DescribeEnv
定义以创建的示例\DescribeEnvNoIndex
:
\iffalse % original definitions:
\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters
\Describe@Env}
\def\Describe@Env#1{\endgroup
\marginpar{\raggedleft\PrintDescribeEnv{#1}}%
\SpecialEnvIndex{#1}\@esphack\ignorespaces}
\fi
\def\DescribeEnvNoIndex{\leavevmode\@bsphack\begingroup\MakePrivateLetters
\Describe@EnvNoIndex}
\def\Describe@EnvNoIndex#1{\endgroup
\marginpar{\raggedleft\PrintDescribeEnv{#1}}%
\@esphack\ignorespaces}
或者从宏定义本身中提取定义(这样就不会使用“内部命令”)
\marginpar{\raggedleft\PrintDescribeEnv{dummyEnvb}}
或修补\DescribeEnv
以检查名称是否被排除:
\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters
\Describe@Env}
\def\Describe@Env#1{\endgroup
\marginpar{\raggedleft\PrintDescribeEnv{#1}}%
\def\macro@namepart{#1}\ifnot@excluded\SpecialEnvIndex{#1}\fi
\@esphack\ignorespaces}
\DoNotIndex{\dummyEnvb}
请注意,您需要在此实现中包含反斜杠(例如),因为\ifnot@excluded
检查反斜杠是硬编码的。