Especificar destinos de vínculo para entradas de índice realizadas con hiperreferencia

Especificar destinos de vínculo para entradas de índice realizadas con hiperreferencia

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 hyperrefpara generar enlaces al ejemplo específico, en lugar de solo a la página. ¿Hay alguna forma de hacer esto? Lo estoy usando xindycomo 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 \indexcomo si fuera un comando de formato (por ejemplo, \index{Joe|indexanchor}en lugar de \index{Joe|textit}).

El segundo truco consiste en \edefexpandir todas las macros necesarias antes de llamarlas para llamar a la \indexmacro. Si \xindextuviera una llamada \indexfuera de \edef, escribiría algo como esto en el archivo .idx: \indexentry {First example|indexanchor{example: \the \excnt}}{1-1}.

información relacionada