索引超链接以打开 PDF 文件

索引超链接以打开 PDF 文件

通常的做法是索引条目链接到文本中出现该词的页面。我正在尝试索引文件列表,并索引文件名中的每个单词。在下面的 MWE 中,单击索引中的链接会将我带到文档中的相应部分,然后我可以单击该部分以打开文件。

由于本文件的正文在这种情况下没有实际意义(我仅有的我对索引感兴趣),我希望找到一种方法将这个两步过程修改为一步。因此,我希望索引中的链接成为指向文件的链接(因为它们现在位于文档的主体中)。我假设这只需要更改宏\ProcessWord

笔记:

  • datatool这里只使用该包,因为我的实际用例是通过该包获取文件名的。
  • 要使输出链接打开实际文件,您需要使用支持此功能的 PDF 阅读器(例如 Acrobat)。带有 的 PDF 查看器TeXShop 2.43确实支持此功能,但带有 的 PDF 查看器不支持TeXWorks 2.3

参考:

代码:

\documentclass{article}
\usepackage{datatool}% database
\usepackage{imakeidx}% indexing
\usepackage{hyperref}% For cross references
\makeindex

% ---------- Process Each Word:
%
% https://tex.stackexchange.com/questions/12810/how-do-i-split-a-string
\makeatletter
\def\ProcessEachWord#1{%
    \begingroup%
    \edef\@tempa{#1\space}%
    \gdef\@tempb{#1}%
    \expandafter\endgroup%
    \expandafter\ReadWords\@tempa\relax%
}%
\def\ReadWords#1 #2\relax{%
      \ProcessWord[\@tempb]{#1}%  #1 = substr, #2 = rest of string
      \begingroup%
      \ifx\relax#2\relax% is #2 empty?
         \def\next{\endgroup\EndProcessWords}% your own end-macro if required
      \else%
         \def\next{\endgroup\ReadWords#2\relax}%
      \fi%
      \next%
}%
\makeatother
% ---------- 


\newcommand{\ProcessWord}[2][]{%
    %\par\noindent\href{run:#1.pdf}{#1}% Moved Below
    \index{#2!#1}%
    %~#2%
}%
\newcommand{\EndProcessWords}{}

\begin{document}
\DTLnewdb{DB}%

\DTLnewrow{DB}% 
\DTLnewdbentry{DB}{FileName}{Now good enough}% 

\DTLnewrow{DB}% 
\DTLnewdbentry{DB}{FileName}{Now good enough for you and me}% 

\DTLforeach{DB}{\FileName=FileName}{%
    \section{\FileName}%
    \par\noindent\href{run:\FileName.pdf}{\FileName}%
    \ProcessEachWord{\FileName}%
}%

\printindex
\end{document}

答案1

事实证明,最明显的解决方案确实有效——不确定为什么我之前没有想到这一点:

\newcommand{\ProcessWord}[2][]{%
    \index{#2!\href{run:#1.pdf}{#1}}%
}%

进一步改进

在此处输入图片描述

相关内容