Можно ли использовать числа из lineno
пакета в качестве счетчика в imakeidx
? Как показывает MWE ниже, я пытался использовать xpatch
для изменения счетчика для индекса на thelinenumber
, но безуспешно:
\documentclass{article}
\usepackage{lineno}
\usepackage{imakeidx}
\usepackage{xpatch}
\makeindex
\makeatletter
\makeatletter
\patchcmd{\@wrindex}{\thepage}{\thelinenumber}{}{}
\makeatother
\begin{document}
\linenumbers
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus
facilisis magna, id sodales ante convallis vitae. In a porttitor nibh,
eget vehicula dui\index{test}. Integer feugiat dui nec neque porttitor, non eleifend
erat lobortis. Sed varius malesuada nisi, id vulputate ante commodo vitae.
Nam non felis at ante mollis commodo eget porttitor ex. Donec in quam diam.
Maecenas fringilla, turpis a egestas pulvinar, massa lacus molestie enim,
vel vulputate lorem ante ac velit. Nam ex nulla, venenatis et tortor at,
efficitur fringilla ante.
\clearpage \printindex
\end{document}
решение1
Использовать его напрямую нельзя \thelinenumber
, поскольку это будет ссылаться на номер строки, вычисленный, когда абзац уже разделен на строки.
С вашим патчем вы получите число 1, потому что \thelinenumber
оно развернуто в неправильное время; но с \noexpand\thelinenumber
вы получите 8, потому что это значение при обработке абзаца (он состоит из семи строк).
Вам нужно использовать \linelabel
механизм.
\documentclass{article}
\usepackage{lineno,refcount}
\usepackage{imakeidx}
\usepackage{xpatch}
\makeindex
\makeatletter
\newcommand{\lineindex}[1]{\linelabel{#1}\index{#1}}
\patchcmd{\@wrindex}{\thepage}{\getrefnumber{#2}}{}{}
\makeatother
\begin{document}
\linenumbers
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dapibus
facilisis magna, id sodales ante convallis vitae. In a porttitor nibh,
eget vehicula dui\lineindex{dui}. Integer feugiat dui nec neque porttitor, non eleifend
erat lobortis. Sed varius malesuada nisi, id vulputate ante commodo vitae.
Nam non felis at ante mollis commodo eget porttitor ex. Donec in quam diam.
Maecenas fringilla, turpis a egestas pulvinar, massa lacus molestie enim\lineindex{enim},
vel vulputate lorem ante ac velit. Nam ex nulla, venenatis et tortor at,
efficitur fringilla ante.
\printindex
\end{document}
Это требует двух запусков, так как используется \ref
(фактически расширяемая версия \getrefnumber
).