在 \index{} 中使用 \emph{} 时,\pagenote{} 中的 \index{} 不起作用

在 \index{} 中使用 \emph{} 时,\pagenote{} 中的 \index{} 不起作用

以下 MWE 显示 4 个索引条目,其中 2 个措辞不同,2 个为普通文本,2 个为\pagenote。2 个为 normalfont,另外 2 个为emphasized。结果应该是 2 个索引,1 个为 normalfont,另一个为emphasized。但结果是 3 个索引:1 个 normalfont,2 emphasized

如何才能从中得出 1 个索引2 emphasized

\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{imakeidx}
\makeindex

\usepackage{pagenote}
\makepagenote

\begin{document}
    
A sentence with words 
and emph index.\index{emph Words@\emph{emph Words}}

Some other words with pagenote 
and emph index.\pagenote{A pagenote with emph words.\index{emph Words@\emph{emph Words}}}

Further words and ordinary index.\index{Words}

Further words with pagenote 
and ordinary index.\pagenote{Further pagenote with ordinary index\index{Words}}

\printnotes

\printindex

\end{document}

我仍然在寻找解决方案,但没有找到。该如何解决这个问题?

答案1

可以在.idx文件中观察到该问题:

\indexentry{emph Words@\emph{emph Words}}{1}
\indexentry{Words}{1}
\indexentry{emph Words@\emph  {emph Words}}{2}
\indexentry{Words}{2}

\emph在里面使用时\pagenote,后面会插入两个额外的空格。TeX 不会注意这些,因为它们紧跟在控制序列后面,但makeindex更为特别。它将这两个条目视为不同的。

最简单且可能最令人满意的方法是切换索引程序并使用texindy而不是makeindex。这只需要一个选项\makeindex(或者您可以在加载时指定imakeidx),例如

\makeindex[program=xindy]

然后你需要运行

texindy <basename-of-file>.idx

如果您想要拆分索引或类似的东西,您可能会发现使用 shell-escape 运行更容易。(imakeidx的文档说您必须这样做才能使用该xindy选项,但事实并非如此。)

使用 texindy 进行索引

最快(但非常笨拙)的替代解决方案是在\emph不在之后添加两个空格\pagenote

A sentence with words 
and emph index.\index{emph Words@\emph  {emph Words}}

Some other words with pagenote 
and emph index.\pagenote{A pagenote with emph words.\index{emph Words@\emph{emph Words}}}

手动对空格进行反规范化的 makeindex 输出

第三种选择是追踪并解决错误空格的来源,或自动进行某种干预,以确保文件以.idx某种方式写入(通过规范内部输入\pagenote或通过在其他地方反规范输入 - 或者可能是相反)。

第四种方法是.idx在对文件进行后期处理之前先makeindex对其进行后期处理。

第五个是编写一个面向二十一世纪的新索引工具;)。

相关内容