以下 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
选项,但事实并非如此。)
最快(但非常笨拙)的替代解决方案是在\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}}}
第三种选择是追踪并解决错误空格的来源,或自动进行某种干预,以确保文件以.idx
某种方式写入(通过规范内部输入\pagenote
或通过在其他地方反规范输入 - 或者可能是相反)。
第四种方法是.idx
在对文件进行后期处理之前先makeindex
对其进行后期处理。
第五个是编写一个面向二十一世纪的新索引工具;)。