Двойной индекс, если используется форматирование

Двойной индекс, если используется форматирование

У меня есть документ с индексом, в котором некоторые записи (основные) выделены жирным шрифтом.

Я использую 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в качестве бэкэнда для построения индекса, который имеет большую гибкость конфигурации (см. напримерКомпаньон 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переменной окружения.

Связанный контент