Existe uma maneira de usar o número da linha (lineno) no makeidx?

Existe uma maneira de usar o número da linha (lineno) no makeidx?

É possível usar os números do linenopacote como contador imakeidx? Como mostra o MWE abaixo, tentei xpatchalterar o contador do índice para thelinenumber, mas sem sucesso:

\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}

Responder1

Você não pode usar diretamente \thelinenumber, porque isso se referiria ao número da linha calculado quando o parágrafo já foi dividido em linhas.

Com o seu patch, o número que você obtém é 1, porque \thelinenumberé expandido na hora errada; mas com \noexpand\thelinenumbervocê obteria 8, porque esse é o valor quando o parágrafo está sendo processado (tem sete linhas).

Você precisa usar o \linelabelmecanismo.

\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}

Isso requer duas execuções, pois utiliza \ref(na verdade a versão expansível \getrefnumber).

insira a descrição da imagem aqui

informação relacionada