Tengo un código para crear un índice que remite a los lectores a un número de página y un número de ejemplo. (El código está incluido enesta respuesta, reproducido a continuación para mayor comodidad. Resulta que estoy usando expex
, pero también podría ser un número de ecuación, por ejemplo). Me gustaría usarlo hyperref
para generar enlaces al ejemplo específico, en lugar de solo a la página. ¿Hay alguna forma de hacer esto? Lo estoy usando xindy
como procesador 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}
Respuesta1
Aquí está la solución, basada enesta respuesta.
\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}
Hay dos "trucos" para ello. La primera es que se pasa a una macro que crea un hipervínculo \index
como si fuera un comando de formato (por ejemplo, \index{Joe|indexanchor}
en lugar de \index{Joe|textit}
).
El segundo truco consiste en \edef
expandir todas las macros necesarias antes de llamarlas para llamar a la \index
macro. Si \xindex
tuviera una llamada \index
fuera de \edef
, escribiría algo como esto en el archivo .idx: \indexentry {First example|indexanchor{example: \the \excnt}}{1-1}
.