É possível usar os números do lineno
pacote como contador imakeidx
? Como mostra o MWE abaixo, tentei xpatch
alterar 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\thelinenumber
você obteria 8, porque esse é o valor quando o parágrafo está sendo processado (tem sete linhas).
Você precisa usar o \linelabel
mecanismo.
\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
).