書式設定が使用されている場合はダブルインデックス

書式設定が使用されている場合はダブルインデックス

いくつかのエントリ(主要なエントリ)が太字でマークされている索引付きの文書があります。

私はmakeindexを使用しています。

私のエントリー、2、4-5、10、15

同じエントリが2回あるページの場合、主要1 つ存在する場合、インデックスは 2 回印刷されます。

たとえば、My Entry同じページに 2 回あり、1 回は通常形式で、もう 1 回は太字でフォーマットされている場合:

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

結果は

私のエントリー、10、10

ページは2回印刷されます。

書式設定が存在しない場合は発生しません

私のエントリー、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.

そして、同じページに同じキーで異なる書式の2つの索引項目を印刷するように要求されたことを正確に伝えます。暗黙の期待は、あなた著者が対処すべきだからです。

(ちなみに、同じ質問が9年前そして、それが基本的にそこに与えられた答えでした。


しかし、希望が失われるわけではありません。このパッケージは、より柔軟な設定が可能なインデックス構築のバックエンドとしてimakeidxも使用できます(例:xindyLaTeX コンパニオン何ができるかの簡単な概要については、こちらをご覧ください。

\usepackage[xindy]{imakeidx}

代わりに、のデフォルト設定では、ページ 1 のエントリの重複が防止されるようですが、太字のエントリではなく太字でないエントリが表示されるようにデフォルト設定されます。これは、モジュールtexindyで指定されたマージ ルールによるもので、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. pdflatexTeXファイルで実行する
  4. 走るtexindy Persone.idx
  5. 再放送pdflatex

これで、必要な出力が得られるはずです。検索パスが異なって構成されている場合は、XINDY_SEARCHPATH環境変数の設定を試してみる必要があるかもしれません。

関連情報