如何对环境进行“\DoNotIndex”?

如何对环境进行“\DoNotIndex”?

我正在为自己创建的类编写 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检查反斜杠是硬编码的。

相关内容