Есть ли способ использовать номер строки (lineno) в makeidx?

Есть ли способ использовать номер строки (lineno) в makeidx?

Можно ли использовать числа из 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).

введите описание изображения здесь

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