Предположим, что в середине моего документа есть абзац о совах: 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}
будет работать