如果使用格式化則雙索引

如果使用格式化則雙索引

我有一個帶有索引的文檔,其中一些條目(主要條目)以粗體標記。

我正在使用 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 後端,這是不可能的imakeidx。該makeindex程式實際上是這樣做的探測當這種情況發生時,但似乎沒有採取任何措施。如果您查看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構建索引的後端,它具有更大的配置靈活性(參見例如乳膠伴侶簡要總結可以做什麼)。如果你簡單地

\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環境變數。

相關內容