Eu tenho um código para criar um índice que encaminha os leitores a um número de página e um número de exemplo. (O código está incluído emesta resposta, reproduzido abaixo por conveniência. Acontece que estou usando expex
, mas poderia muito bem ser um número de equação, por exemplo.) Gostaria de usar hyperref
para gerar links para o exemplo específico, em vez de apenas para a página. Existe uma maneira de fazer isso? Estou usando xindy
como processador de índice.
\documentclass{book}
\usepackage{expex,lipsum,index}
\newcommand{\PageExample}{\thepage-\the\excnt}
\newindex[PageExample]{my-index}{idx}{ind}{My Custom Index}
\makeindex
\begin{document}
\ex \lipsum[1]\index[my-index]{First example} \xe
\ex \lipsum[2] \index[my-index]{Second example}\xe
\ex \lipsum[3] \index[my-index]{Third example}\xe
\ex \lipsum[4] \index[my-index]{Fourth example}\xe
\ex \lipsum[5] \index[my-index]{Fifth example}\xe
\ex \lipsum[6] \index[my-index]{Sixth example}\xe
\ex \lipsum[6] \index[my-index]{Seventh example}\xe
\printindex[my-index]
\end{document}
Responder1
Aqui está a solução, baseada emesta resposta.
\documentclass{book}
\usepackage{expex,lipsum,index}
\newindex[PageExample]{my-index}{idx}{ind}{My Custom Index}
\usepackage[hyperindex=false]{hyperref} % has to be after makeidx
\newcommand{\PageExample}{\thepage-\the\excnt}
\makeindex
\def\xindex#1#2{%
\edef\doindexentry{\noexpand\index[#1]
{#2|indexanchor{example:\the\excnt}}}%
\doindexentry}
\def\indexanchor#1#2{\hyperlink{#1}{#2}}
\begin{document}
\xindex{my-index}{First example}
\ex
\raisebox{\baselineskip}{\hypertarget{example:\the\excnt}{}}\ignorespaces%
\lipsum[1]
\xe
% now make the code prettier:
\def\iex#1{%
\xindex{my-index}{#1}%
\ex %
\raisebox{\baselineskip}{\hypertarget{example:\the\excnt}{}}\ignorespaces}
\iex{Second example} \lipsum[2] \xe
\iex{Third example} \lipsum[3] \xe
\iex{Fourth example} \lipsum[4] \xe
\iex{Fifth example} \lipsum[5] \xe
\iex{Sixth example} \lipsum[6] \xe
\iex{Seventh example} \lipsum[7] \xe
\printindex[my-index]
\end{document}
Existem dois "truques" para isso. A primeira é que a macro que cria um hiperlink é passada \index
como se fosse um comando de formatação (por exemplo, \index{Joe|indexanchor}
em vez de \index{Joe|textit}
).
O segundo truque é usar \edef
para expandir todas as macros necessárias antes de chamá-las para chamar a \index
macro. Se \xindex
houvesse uma chamada \index
fora de \edef
, ele escreveria algo assim no arquivo .idx: \indexentry {First example|indexanchor{example: \the \excnt}}{1-1}
.