Festlegen von Linkzielen für mit HyperRef erstellte Indexeinträge

Festlegen von Linkzielen für mit HyperRef erstellte Indexeinträge

Ich habe Code zum Erstellen eines Indexes, der Leser auf eine Seitenzahl und eine Beispielnummer verweist. (Der Code ist enthalten indiese Antwort, der Einfachheit halber unten wiedergegeben. Ich verwende zufällig expex, aber es könnte beispielsweise genauso gut eine Gleichungsnummer sein.) Ich möchte verwenden, hyperrefum Links zu dem spezifischen Beispiel zu generieren, und nicht nur zur Seite. Gibt es eine Möglichkeit, dies zu tun? Ich verwende xindyals Indexprozessor.

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

Antwort1

Hier ist die Lösung, basierend aufdiese Antwort.

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

Dabei gibt es zwei „Tricks“. Der erste besteht darin, dass das Makro, das einen Hyperlink erstellt, an übergeben wird, \indexals wäre es ein Formatierungsbefehl (z. B. \index{Joe|indexanchor}statt \index{Joe|textit}).

Der zweite Trick besteht darin, \edefalle benötigten Makros zu erweitern, bevor Sie das Makro aufrufen \index. Wenn \xindexein Aufruf \indexaußerhalb von erfolgt \edef, wird etwa Folgendes in die IDX-Datei geschrieben: \indexentry {First example|indexanchor{example: \the \excnt}}{1-1}.

verwandte Informationen