如果使用格式化则使用双索引

如果使用格式化则使用双索引

我有一份带有索引的文档,其中一些条目(主要条目)以粗体标记。

我正在使用 makeindex。

我的参赛作品,2,4-5,10,15

现在,如果我在页面中两次出现相同的条目,主要的存在一个索引,该索引被打印两次。

例如,如果My Entry两次出现在同一个页面中,一次为正常状态,一次为粗体格式:

Bla bla\index{My Entry} bla bla \index{My Entry|textbf}

结果是

我的参赛作品,10,10

该页面被打印两次。

如果没有格式,则不会发生这种情况

我的参赛作品,10

有什么提示吗?

编辑

最小示例:

\documentclass[a4paper]{book}
\usepackage[]{imakeidx}
\makeindex[name=Persone,title=Persone]
\begin{document}
Bla bla\index[Persone]{My Entry} bla bla
Bla bla\index[Persone]{My Entry|textbf} bla bla
\printindex[Persone]
\end{document}

生产

我的参赛作品,1,1

尽管

\documentclass[a4paper]{book}
\usepackage[]{imakeidx}
\makeindex[name=Persone,title=Persone]
\begin{document}
Bla bla\index[Persone]{My Entry} bla bla
Bla bla\index[Persone]{My Entry} bla bla
\printindex[Persone]
\end{document}

生产

我的参赛作品,1

无需重复1,因为两者都在同一页上

答案1

使用的默认 MakeIndex 后端无法做到这一点imakeidxmakeindex程序实际上探测当发生这种情况时,但似乎没有采取任何措施。如果你查看pdflatex示例tex文件中的编译记录,你会看到

(/usr/share/texmf-dist/tex/latex/tools/multicol.sty))
Writing index file Persone.idx
(./testindex.aux) [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
[2]This is makeindex, version 2.15 [TeX Live 2019] (kpathsea + Thai support).
Scanning input file Persone.idx....done (2 entries accepted, 0 rejected).
Sorting entries....done (2 comparisons).
Generating output file Persone.ind....done (5 lines written, 1 warning).
Output written in Persone.ind.
Transcript written in Persone.ilg.
 (./Persone.ind) [3] (./testindex.aux) )</usr/share/texmf-dist/fonts/type1/p
ublic/amsfonts/cm/cmbx10.pfb></usr/share/texmf-dist/fonts/type1/public/amsfonts
/cm/cmbx12.pfb></usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>

Output written on testindex.pdf (3 pages, 28492 bytes).

告诉你在制作索引时有一个警告。如果你打开抄本,makeindex你会看到

[Tue Dec 03 03:35 PM] ArchDesktop ~/tmp/toDelete $ cat Persone.ilg 
This is makeindex, version 2.15 [TeX Live 2019] (kpathsea + Thai support).
Scanning input file Persone.idx....done (2 entries accepted, 0 rejected).
Sorting entries....done (2 comparisons).
Generating output file Persone.ind....
## Warning (input = Persone.idx, line = 2; output = Persone.ind, line = 3):
   -- Conflicting entries: multiple encaps for the same page under same key.
done (5 lines written, 1 warning).
Output written in Persone.ind.
Transcript written in Persone.ilg.

它会准确地告诉你,它被要求打印同一页下的两个索引条目,使用相同的键,但使用两种不同的格式。隐含的期望是作者应该处理这个问题。

(顺便说一句,这个问题也曾被问过9 年前这基本上就是那里给出的答案。)


不过,一切希望还没有破灭。该imakeidx包还支持用作xindy构建索引的后端,具有更大的配置灵活性(例如参见LaTeX 伴侣了解可以做什么的简短摘要)。如果你只是

\usepackage[xindy]{imakeidx}

相反,的默认设置texindy似乎可以防止第 1 页的条目重复,但也默认显示非粗体条目而不是粗体条目。这是由于模块中指定的合并规则latex-loc-fmts.xdy,其内容为

(define-attributes (("default" "textbf" "textit" "hyperpage")))

如果你重新排序该行以阅读

(define-attributes (("textbf" "textit" "default" "hyperpage")))

那么打印索引时粗体字的优先级将高于默认字。在我的计算机上,默认搜索路径的xindy配置是这样的,你应该能够

  1. 找到并将latex-loc-fmts.xdy文件复制到本地目录
  2. 编辑它以替换行以(define-attributes...匹配上面列出的替换
  3. pdflatex在你的 TeX 文件上运行
  4. 跑步texindy Persone.idx
  5. 重新运行pdflatex

这样应该就能得到想要的输出。如果搜索路径的配置不同,您可能需要尝试设置XINDY_SEARCHPATH环境变量。

相关内容