![将每个 bib 条目超链接到其 DOI 页面](https://linux22.com/image/258994/%E5%B0%86%E6%AF%8F%E4%B8%AA%20bib%20%E6%9D%A1%E7%9B%AE%E8%B6%85%E9%93%BE%E6%8E%A5%E5%88%B0%E5%85%B6%20DOI%20%E9%A1%B5%E9%9D%A2.png)
我可以让每个 bib 条目超链接到其 DOI 页面吗?即单击 PDF 中 bib 条目的任意位置(最好是任意位置,但如果不可能,至少单击论文标题)应打开其 DOI 页面的链接。我愿意确保 bib 文件中的每个条目都有 DOI/URL。
我在 Mac OS X Snow Leopard 上使用 TexShop,并使用 pdflatex/bibtex 来编写我的论文。
答案1
恕我直言,将整个书目条目链接到 DOI 页面并没有多大意义,因为单个书目记录可能同时具有 URL 和 DOI,或者都没有。
我使用以下命令和 hyperref 包,它为具有 DOI 记录的参考书目条目提供指向 DOI 网页的蓝色超链接。
在序言中,写上以下内容:
\usepackage[hidelinks]{hyperref} %boxes hidden, remove hidelinks if boxes are desired.
然后在调用参考书目之前:
\def\mybibdoicolor{\color{blue!75!black}} %change color to suit.
\newcommand*{\doi}[1]{\href{http://dx.doi.org/\detokenize{#1} {\raggedright\mybibdoicolor{DOI: \detokenize{#1}}}}
最后,参考书目可以称为:
\bibliography{BIBDATAFILE}
下面是我输出的摘录,其中指出参考文献 [41-43] 中的蓝色 DOI 记录,每个记录都可以从 PDF 内部单击,在这种情况下,用户将被重定向到相关站点。在本例中,例如,如果用户单击 [41] 中的 DOI 记录,他/她将被重定向到http://dx.doi.org/10.1098/rspa.1925.0147,进而将用户重定向到该出版物。
答案2
由于我无法使用最新的 biblatex 获得此处的解决方案,因此我在此发布了两种对我有用的替代方法。这两种方法都是其他人针对其他问题发布的。我只是复制并将它们链接到此处以供参考,因为它们很难找到(至少我花了半天时间才找到它们)。
还有很多其他解决方案可以使引文的各个部分可点击,但实际上将整个内容变成链接却很棘手。我发现的大多数解决方案都需要手动重建引文样式,因此无法从一个文档移植到另一个文档。这两个解决方案似乎没有触及外观,只是将项目包装成超链接。
1 在文档解决方案中
\newbibmacro{string+doiurl}[1]{%
\iffieldundef{doi}
{\iffieldundef{url}
{#1}
{\href{\thefield{url}}{#1}}}
{\href{https://doi.org/\thefield{doi}}{#1}}}
\makeatletter
\def\blx@driver#1{%
\ifcsdef{blx@bbx@#1}
{\usebibmacro{string+doiurl}{\csuse{blx@bbx@#1}}}
{\ifcsdef{blx@bbx@*}
{\blx@warning{%
No driver for entry type '#1'.\MessageBreak
Using fallback driver}%
\usebibmacro{string+doiurl}{\csuse{blx@bbx@*}}}
{\blx@error
{No driver found}
{I can't find a driver for the entry type
'\abx@field@entrytype'\MessageBreak
and there is no fallback driver either}}}}
\makeatother
2 Biblatex 配置文件
卡洛斯·兰齐亚诺的答案二包含一个配置文件,将整个条目变成超链接。
将以下内容保存biblatex-dm.cfg
到您的文档旁边:
\newcommand{\doiorurl}{%
\iffieldundef{doi}
{\iffieldundef{url}
{}
{\strfield{url}}}
{http://dx.doi.org/\strfield{doi}}%
}
\newcommand{\bibdrivercontent}[1]{%
\ifboolexpr{%
test {\ifhyperref}
and
not test {\iftoggle{bbx:url}}
and
not test {\iftoggle{bbx:doi}}
}
{\href{\doiorurl}{#1}}
{#1}%
}
\let\OldDeclareBibliographyDriver\DeclareBibliographyDriver
\renewcommand{\DeclareBibliographyDriver}[2]{\OldDeclareBibliographyDriver{#1}{\bibdrivercontent{#2}}}
答案3
要使整个引用成为超链接(带有biblatex
),使用url
(使用 做同样的事情doi
)
\AtEveryBibitem{%
\iffieldundef{url}
{}
{\href{\thefield{url}}{\usedriver{\thefield{article}}}
\csdef{blx@bbx@\thefield{entrytype}}{}}%
}
答案4
有网址包。它提供了一个 perl 脚本来修改现有.bst
文件并将url
整个引用包含在超链接中。