我使用该index
包,特别是其带星号的\index
命令变体:\index*{word}
既排版word
又将其添加到索引中。
在索引短语时,空格在当前字体中排版为字符 32,而不是空格。例如,我使用 CM 字体得到一个笔划,或使用 T1 字体得到一个 ␣。这只是运行文本中的一个问题,索引包含一个正常空格(这并不奇怪,因为单个空格被写入文件.idx
)。
\documentclass{report}
\usepackage{index}
\makeindex
\begin{document}
\index*{hello world}
\printindex
\end{document}
如果源包含多个空格,则它们都会被排版。我认为这\index*
是过于热衷于更改 catcode,但我不知道如何解决这个问题。
有没有办法在不放弃该index
软件包的情况下解决这个问题?如果没有,还有哪些软件包提供\index*
并支持多个索引\index[things]{word}
?
答案1
您可以index
在必要时修补以重新扫描参数并打印它。
\documentclass{report}
\usepackage{index}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@@index}
{\@silentindextrue #2}
{\@silentindextrue\scantokens{#2\relax}}
{}{}
\makeatother
\makeindex
\begin{document}
X\index*{hello world}X
\printindex
\end{document}
该.idx
文件包含
\indexentry {hello world}{1}
答案2
xparse
使用和的解决方法imakeidx
。
然而,在我看来,这样的东西stuff!substuff
是没用的。\index*
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{imakeidx}
\usepackage{xparse}
\usepackage{letltxmacro}
\makeatletter
\AtBeginDocument{%
\LetLtxMacro\@egregsindex\index
\RenewDocumentCommand{\index}{som}{%
\IfBooleanT{#1}{%
#3%
}%
\IfValueTF{#2}{%
\@egregsindex[#2]{#3}%
}{%
\@egregsindex{#3}%
}%
}%
}
\makeatother
\makeindex
\makeindex[name=myotherindex]
\begin{document}
\index*{hello world}
\index{Other stuff}
\index[myotherindex]{Other index entry}
\index*[myotherindex]{Other index entry again}
\printindex
\printindex[myotherindex]
\end{document}