如何在参考书目中获取 DOI 链接

如何在参考书目中获取 DOI 链接

我想为我的所有参考书目项目添加 DOI(数字对象标识符)链接或下载位置的链接。

我该如何使用natbib/BibTeX/hyperref 组合来实现这一点?目前我正在使用该plainnat样式,但我愿意改变它。

答案1

在 BibTeX 数据库中的doi字段下包含您的 DOI,并在字段下包含 URL url;例如:

\begin{filecontents*}{test.bib}
@article{foo2010,
  author = "Foo Bar",
  journal = "J.P.B.",
  year = 2010,
  title = "Where the wild things are.",
  doi = {10.1.1/jpb001},
  url = {http://dx.doi.org/10.1.1/jpb001}
}
\end{filecontents*}

\documentclass{article}
\usepackage{natbib,hyperref}
\begin{document}
test \citet{foo2010}
\bibliographystyle{plainnat}
\bibliography{test}
\end{document}

如果你想超链接 DOI,我相信加载doi包将自动执行此操作。

答案2

一个最小的改变就是使用plainurl样式而不是plainnat

您还可以继续使用plainnat并给出适当的定义\doi(以覆盖 plainnat 提供的非超链接版本 \),例如:

\newcommand*{\doi}[1]{\href{http://dx.doi.org/#1}{doi: #1}}

在这两种情况下,只需使用doi.bib 文件中的一个字段。

答案3

我最近在解决 Peter 问题的变体时遇到了这个帖子。

您可能不想为每个书目项目添加超链接 DOI,而是希望不明确写出 DOI,而是使书目项目的另一个字段可点击,并带有指向下载位置的超链接。在某些期刊中,超链接与“期刊名称、卷、页码”组相关联。您可能会发现一些现有的书目样式文件这样做,但有时您需要将此功能添加到个人书目样式中。在这种情况下,上述解决方案都不起作用。我想到的窍门是在文件中定义以下函数.bst

FUNCTION {doilink}
{ duplicate$ empty$
{ pop$ "" }
{ doi empty$
    { skip$ }
    { "\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" * }
  if$
}
if$
}

以下是如何调用该函数的示例:

FUNCTION {format.vol.num.pages}
{ volume field.or.null
  boldface
  pages empty$
    'skip$
    { duplicate$ empty$
    { pop$ format.pages }
    {  ", " * pages first.page.number * }
      if$
    }
  if$
  doilink
}

在这种情况下,卷和页将是超链接。通常,当调用该函数时,超链接将与堆栈顶部的项目相关联doilink。您还需要确保声明doi为书目条目的可能字段。作为一个最小示例:

ENTRY
{ author
  doi
  journal
  key
  pages
  title
  volume
  year
} 

这可能不是最可靠的解决方案,但它解决了我的问题。我认为这对这里的某些人可能有用。

编辑

关注 @laclaro 的后续问题.tex,我添加一个调用修改后的文件的示例文件.bst

\documentclass{article}

\usepackage{natbib}

\usepackage{color}
\definecolor{darkblue}{rgb}{0.,0.,0.4}
\definecolor{darkred}{rgb}{0.5,0.,0.}

\usepackage[pdftex,colorlinks=true,linkcolor=darkblue,citecolor=darkred,urlcolor=blue]{hyperref}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{Brune1996,
    Author = {Brune, M  and Hagley, E and Dreyer, J and Maître, X and  Maali, A and Wunderlich, C and Raimond,J.M. and Haroche,S },
    Title = {Observing the Progressive Decoherence of the “Meter” in a Quantum Measurement},
    Year = {1996},
    Journal = {Phys. Rev. Lett.},
    volume = {77},
    pages = {4887},
    doi = {10.1103/PhysRevLett.77.4887}}
\end{filecontents}


\begin{document}

\cite{Brune1996}

\bibliographystyle{mystyle}
\bibliography{\jobname}

\end{document}

以及其屏幕截图:

在此处输入图片描述

在这里,单击卷或页码即可打开 doi 链接。要调整此设置以使超链接位于期刊上,您需要修改样式文件FUNCTION {format.journal}中的函数.bst,而不是像FUNCTION {format.vol.num.pages}这里所做的那样。

答案4

@Lev: 这种方法可行,尽管 DOI 可以包含下划线之类的特殊乳胶字符,例如:

https://doi.org/10.1007/3-540-08755-9_9

所以我将您的 hack 修改为:

\newcommand*{\doi}[1]{\href{https://doi.org/\detokenize{#1}}{doi: \detokenize{#1}}}

相关内容