指定使用 hyperref 建立的索引條目的連結目標

指定使用 hyperref 建立的索引條目的連結目標

我有用於建立索引的程式碼,該索引將讀者引向頁碼和範例編號。 (該代碼包含在這個答案,為方便起見,轉載如下。我碰巧正在使用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}

相關內容