在索引中启用“查看”的超链接吗?

在索引中启用“查看”的超链接吗?

我目前正在使用包hyperrefimakeidx创建我的书的索引。这个索引足够大,可以跨越多个页面。它包含一些条目,例如

% In the index under "B"...

\index{bar!foo|see {foobar}}%

% Several pages later in the index, under "F"...

\index{foobar}%

由于我使用的是包hyperref,指向主内容中特定页面的索引条目在最终 PDF 中呈现为超链接。我想知道是否有办法将条目。也就是说,我想渲染“bar,foob​​ar” 作为超链接,指向列出“foobar”的索引页面。

这可能吗?如果可以,最好的方法是什么?

答案1

初步版本仅适用于顶级索引项,不适用于bar!foo与其类似的条目|see {foo}

有一个超目标被定义并用 检索\seelink

多次使用\index{foobar}将防止出现相同的目标名称。

\documentclass{article}

\usepackage{blindtext}
\usepackage{imakeidx}
\usepackage{xparse}
\usepackage{letltxmacro}
\usepackage{hyperref}


\ExplSyntaxOn
\AtBeginDocument{%

  \LetLtxMacro\indexorig\index

  \newcommand{\hyperindextarget}[1]{%
    \hypertarget{#1}{}%
  }

  \RenewDocumentCommand{\index}{om}{%
    \IfValueTF{#1}{%
      \addindextarget[#1]{#2}%
    }{%
      \addindextarget{#2}%
    }%
  }
}

\newcommand{\seelink}[2]{%
  \seename\ \hyperlink{#1}{#1}%
}


\seq_new:N \g_quuxxplusone_target_seq

\NewDocumentCommand{\addindextarget}{om}{%
  \IfValueTF{#1}{%
    \seq_if_in:NnTF \g_quuxxplusone_target_seq {#2} {%
      \indexorig[#1]{#2}%
    }{% False branch
      \seq_gput_right:Nn \g_quuxxplusone_target_seq {#2}
      \indexorig[#1]{#2|hyperindextarget{#2}}%
    }%
  }{% No optional argument
    \seq_if_in:NnTF \g_quuxxplusone_target_seq {#2} {%
      \indexorig{#2}%
    }{% False branch
      \seq_gput_right:Nn \g_quuxxplusone_target_seq {#2}
      \indexorig{#2|hyperindextarget{#2}}%
    }%
  }%    
}

\ExplSyntaxOff

\makeindex


\begin{document}



Foo
\clearpage
\blindtext[5]
% In the index under "B"...

\index{bar}
\index{bar!foo|seelink {foobar}}%

% Several pages later in the index, under "F"...

\blindtext[15]

\index{foobar}%

\blindtext[15]

\index{foobar}

\index{zzz|seelink{bar}}

\printindex

\end{document}

相关内容