创建包含参考文章本地链接的报告版本

创建包含参考文章本地链接的报告版本

我有以下想法,希望有人能帮助我实现这一点:

我从我的文件中引用条目.bib。我使用hyperref包 (手动的) 并将pagebackref选项设置为true,因此当我运行 pdfLaTeX 时,所有参考文献都指向相应的参考书目选项,并且我可以跳转回我的参考文献。

在撰写报告时,这种行为对我来说没什么用。我更希望引用点击会打开所点击文章的 PDF 文件。因此,当我有一个带标签的 BibTex 条目时{mylittlepony},我会引用它

Everybody loves chocolate \cite{mylittlepony}.

PDF文件中写道:

每个人都喜欢巧克力[1]。

现在,如果我单击 [1],mylittlepony.pdf则会从预定义的文件夹中打开一个名为的文件。

此行为应仅在撰写报告时发生。当我想为其他人生成文档时,hyperref应发生原始行为,因此应为包设置附加选项hyperref。这是一个硬性限制。

我希望它能与 TexWorks (Windows) 集成的 PDF 查看器配合使用,因为我喜欢 syncTex 功能。这不是一个硬性限制。如果有其他方法可以保留一个简单的编辑器、syncTex 和上面描述的自定义行为,我会选择这种方法。

我尝试使用该\href功能引用本地文件,但这在集成的 PDF 查看器中不起作用,仅在 Acrobat Reader X 中起作用。

答案1

您可以使用以下代码:

\usepackage{ifdraft}
\ifdraft{\let\obibcite=\bibcite}{}
\usepackage[final]{hyperref}
\makeatletter
\ifdraft{
  \let\bibcite=\obibcite
  \def\@citex[#1]#2{\leavevmode
  \let\@citea\@empty
  \@cite{\@for\@citeb:=#2\do
  {\@citea\def\@citea{,\penalty\@m\ }%
  \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
  \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
  \hyper@linkurl{% NEW
  \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
  \G@refundefinedtrue
  \@latex@warning
  {Citation `\@citeb' on page \thepage \space undefined}}%
  {\@cite@ofmt{\csname b@\@citeb\endcsname}}}%
  {\@citeb.pdf}% NEW
  }}{#1}}
}{}
\makeatother

它使用ifdraft包来判断文档是否处于草稿模式。如果是,\bibcite则保存宏的原始定义,然后hyperref已加载(使用final选项,否则根本不会生成任何链接)。现在,我们恢复的hyperref免费版本以\bibcite删除通常生成的参考书目的默认链接。相反,我们修补内部 LaTeX 命令\@citex以生成指向相应 PDF 文件的超链接 - 因此现在\cite{mylittepony}链接到mylittlepony.pdf

示例代码:

\documentclass[draft]{article}

\usepackage{ifdraft}
\ifdraft{\let\obibcite=\bibcite}{}
\usepackage[final]{hyperref}
\makeatletter
\ifdraft{
  \let\bibcite=\obibcite
  \def\@citex[#1]#2{\leavevmode
  \let\@citea\@empty
  \@cite{\@for\@citeb:=#2\do
  {\@citea\def\@citea{,\penalty\@m\ }%
  \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
  \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
  \hyper@linkurl{% NEW
  \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
  \G@refundefinedtrue
  \@latex@warning
  {Citation `\@citeb' on page \thepage \space undefined}}%
  {\@cite@ofmt{\csname b@\@citeb\endcsname}}}%
  {\@citeb.pdf}% NEW
  }}{#1}}
}{}
\makeatother

\begin{document}
Everybody loves chocolate \cite{mylittlepony}.

\begin{thebibliography}{1}
\bibitem{mylittlepony}
My bibliography entry.
\end{thebibliography}
\end{document}

(该环境thebibliography仅用于制作一个独立的示例,您可以用自己的环境替换它\bibliography{...}而不会造成任何损害。)

此代码已在 Windows 7 上的 TeXworks 0.4.3 上进行了测试,可mylittlepony.pdf使用默认 PDF 查看器打开。请注意,它可能不适用于其他版本的 TeXworks 或其他操作系统:不幸的是,内部查看器对超链接的支持非常有限 - 直接文件链接显然不起作用,因此此解决方案改为创建一个 URL 链接,该链接适用于 TeXworks,但可能与其他查看器不兼容。

相关内容