하이퍼참조로 만든 인덱스 항목에 대한 링크 대상 지정

하이퍼참조로 만든 인덱스 항목에 대한 링크 대상 지정

독자에게 페이지 번호와 예제 번호를 참조하는 색인을 생성하는 코드가 있습니다. (코드는 다음과 같습니다.이 답변, 편의를 위해 아래에 재현했습니다. 우연히 를 사용하고 있지만 예를 들어 방정식 번호일 수도 있습니다.) 페이지뿐만 아니라 특정 예에 대한 링크를 생성하는 데 expex사용하고 싶습니다 . hyperref이를 수행할 수 있는 방법이 있습니까? xindy인덱스 프로세서로 사용하고 있습니다 .

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

답변1

여기에 기반한 솔루션이 있습니다.이 답변.

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

여기에는 두 가지 "트릭"이 있습니다. 첫 번째는 하이퍼링크를 생성하는 매크로가 \index마치 서식 명령인 것처럼 전달된다는 것입니다(예: \index{Joe|indexanchor}대신 \index{Joe|textit}).

두 번째 트릭은 매크로를 \edef호출하기 위해 호출하기 전에 필요한 모든 매크로를 확장하는 데 사용하는 것입니다 \index. 외부에 \xindex대한 호출이 있는 경우 .idx 파일에 다음과 같은 내용이 기록됩니다 .\index\edef\indexentry {First example|indexanchor{example: \the \excnt}}{1-1}

관련 정보