Как определить новую команду индексирования, которая лучше работает с абзацами?

Как определить новую команду индексирования, которая лучше работает с абзацами?

Предположим, что в середине моего документа есть абзац о совах: Here is a new paragraph about owls. Owls are extraordinary.

Я хочу проиндексировать этот абзац с помощью imakeidx, поэтому я пишу: \index{owls}Here is a new paragraph about owls. Owls are extraordinary.

Однако возникает проблема, если этот абзац оказывается в верхней части новой страницы k, то запись о совах в индексе ссылается на предыдущую страницу; рядом с ней указана страница «k-1», а не «k» (см., например, минимальный рабочий пример ниже).

Самое простое решение — переместить \indexкоманду внутрь абзаца: Here\index{owls} is a new paragraph about owls. Owls are extraordinary.

Однако для меня это не идеально. У меня длинный документ, и многие абзацы имеют много связанных \indexкоманд. Перемещение этих \indexкоманд внутрь соответствующих абзацев делает абзацы менее читаемыми для редактирования.

Хотя выше описан простейший случай \index, есть похожая проблема при указании диапазона страниц. Я бы хотел просто написать, \index{owls|(}Here is a new paragraph about owls. Owls are extraordinary.\index{owls|)}а не Here\index{owls|(} is a new paragraph about owls. Owls are extraordinary.\index{owls|)}.

Это приводит меня к моему вопросу. Как мне определить новую команду \indexn, которая выдает правильные номера страниц в индексе для следующих двух случаев: \indexn{owls}Here is a new paragraph about owls. Owls are extraordinary.и, \indexn{owls|(}Here is a new paragraph about owls. Owls are extraordinary.\indexn{owls|)}?

Ниже приведен минимальный рабочий пример проблемы.

\documentclass{book}

\usepackage{imakeidx}
\makeindex

\begin{document}

% This code block just generates 552 copies of the word "lorem".
\newcount\zz
\loop
lorem
\advance\zz1
\ifnum\zz<552
\repeat

\index{owls}Here is a paragraph about owls.  Owls are extraordinary.
%\index{owls|(}Here is a new paragraph about owls.  Owls are extraordinary.\index{owls|)}

\printindex

\end{document}

решение1

\mbox{}\index{owls}или \leavevmode\index{owls}будет работать

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