我有以下想法,希望有人能帮助我实现这一点:
我从我的文件中引用条目.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,但可能与其他查看器不兼容。