\index*{phrase with space} 显示可见空格(使用索引包)

\index*{phrase with space} 显示可见空格(使用索引包)

我使用该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}

相关内容