
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, hyperref
um Links zu dem spezifischen Beispiel zu generieren, und nicht nur zur Seite. Gibt es eine Möglichkeit, dies zu tun? Ich verwende xindy
als 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, \index
als wäre es ein Formatierungsbefehl (z. B. \index{Joe|indexanchor}
statt \index{Joe|textit}
).
Der zweite Trick besteht darin, \edef
alle benötigten Makros zu erweitern, bevor Sie das Makro aufrufen \index
. Wenn \xindex
ein Aufruf \index
außerhalb von erfolgt \edef
, wird etwa Folgendes in die IDX-Datei geschrieben: \indexentry {First example|indexanchor{example: \the \excnt}}{1-1}
.