考虑以下 MWE:
\documentclass{ltxdoc}
\makeatletter
\newcommand*\myindex[3]{%
\doc@providetarget
\index{#1:\levelchar#2\actualchar{\ttfamily#3}\doc@handleencap{usage}}%
}
\makeatother
\makeindex
\begin{document}
\DescribeEnv{myenv}\marg{argument}\par
\myindex{environments}{myenv}{myenv}
\end{document}
虽然\DescribeEnv
索引myenv
前面只有一个空格myenv
,但\myindex
会添加两个。
内容.idx
:
\indexentry{myenv={\ttfamily myenv} (env.)|hdclindex{2}{usage}}{1}
\indexentry{environments:>myenv={\ttfamily myenv}|hdclindex{2}{usage}}{1}
\indexentry{environments:>myenv={\ttfamily myenv}|hdclindex{3}{usage}}{1}
这会导致索引条目数量是应有数量的两倍。
谢谢Heiko Oberdiek 的回答我可以使用来阻止此操作
\documentclass{ltxdoc}
\makeatletter
\newcommand*\myindex[3]{% ateb Heiko Oberdiek https://tex.stackexchange.com/a/412521/
\doc@providetarget
\@bsphack
\begingroup
\@sanitize
\@wrindex{#1:\levelchar#2\actualchar{\string\ttfamily #3}\doc@handleencap{usage}}%
}
\makeatother
\makeindex
\begin{document}
\DescribeEnv{myenv}\marg{argument}\par
\myindex{environments}{myenv}{myenv}
\end{document}
这让我
\indexentry{myenv={\ttfamily myenv} (env.)|hdclindex{2}{usage}}{1}
\indexentry{environments:>myenv={\ttfamily myenv}|hdclindex{2}{usage}}{1}
\indexentry{environments:>myenv={\ttfamilymyenv}|hdclindex{3}{usage}}{1}
但现在我没有空格,我不知道如何保留一个空格。如果这很重要,我实际上是在expl3
语法上这样做的,尽管必要时我可以避免这样做。