段落に適した新しいインデックス コマンドを定義するにはどうすればよいでしょうか?

段落に適した新しいインデックス コマンドを定義するにはどうすればよいでしょうか?

文書の途中にフクロウについての段落があるとします。 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」ではなく「k-1」というページが表示されることです (たとえば、以下の最小限の動作例を参照してください)。

最も簡単な解決策は、\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次の 2 つのケースで、索引に正しいページ番号を生成する 新しいコマンドを定義するにはどうすればよいでしょう\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}機能する

関連情報