将每个 bib 条目超链接到其 DOI 页面

将每个 bib 条目超链接到其 DOI 页面

我可以让每个 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整个引用包含在超链接中。

相关内容