我想为我的所有参考书目项目添加 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}}}