Tell me more ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I would like to add to all my bibliography items a DOI (Digital Object Identifier) link or a link to a download location.

How can I do this with the natbib / BibTeX / hyperref combination? Currently I am using the plainnat style, but I'm willing to change that.

share|improve this question
This depends on the bibliography style you use. Some will include DOIs, others do not and so you may need to edit the style. Which are you using? – Joseph Wright Oct 6 '10 at 7:02
@Joseph I updated my question – Peter Smit Oct 6 '10 at 7:07
1  
@Seamus No, that question is about solving a problem with doi's, while I could not figure out how to it completely. Related: yes, dupliate: no. – Peter Smit Oct 6 '10 at 9:31
1  
@Seamus Check for example google.com/… It is not clear for me what the solution is. And no, on this website there was no clear answer for my question. – Peter Smit Oct 6 '10 at 9:51
3  
I'd agree with Peter: the question is not a duplicate (the previous one is about a very specific issue), although the relation between the two is clear. – Joseph Wright Oct 6 '10 at 10:23
show 5 more comments

5 Answers

up vote 22 down vote accepted

Include your DOIs in the BibTeX database under the doi field and include the URLs under the url field; for example:

\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}

If you wish to hyperlink the DOI, I believe that loading the doi package will perform this automatically.

share|improve this answer
1  
Worked great for me, I just had to download doi.sty from: ctan.org/tex-archive/macros/latex/contrib/doi – Quinn Taylor Jan 5 '12 at 6:50

A minimal change would be to use the plainurl style instead of plainnat.

You could also continue to use plainnat and give a suitable definition of \doi (to override the non-hyperlinked version \provided by plainnat), eg:

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

In both cases, just use a doi field in your .bib file.

share|improve this answer
What does plainurl add? Oh, I see, hyperlinks in the DOI. Sorry, was confused for a minute. – Will Robertson Oct 6 '10 at 7:34

A very nice solution would be to use biblatex+Biber:

\usepackage[
    backend=biber,
    style=authoryear-icomp,
    sortlocale=en_US,
    natbib=true,
    url=false, 
    doi=true,
    eprint=false
]{biblatex}
\bibliography{biblatex-examples}

\usepackage[]{hyperref}

This will give you the DOIs as hyperlinks even if they contain special characters. Of course you will need a DOI in the DOI field of your bib file, as pointed out by Will Robertson.

share|improve this answer

I came across this thread recently while solving a variant of Peter's question.

Instead of adding a hyperlink DOI to each of the bibliography items, you may want not to write the DOI explicitly but to make another field of the bibliographic item clickable with an hyperlink to the download location. In some journals, the hyperlink is associated to the group "Journal Name, volume, page number" for instance. You may find some existing bibliography style files doing that, but sometimes you need to add this feature to a personal bibliography style. In this case, none of the above solutions work. The hack I came up with is to define the following function in the .bst file:

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

Here is an example of how to call the function:

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
}

In this case the volume and pages will be hyperlinks. In general the hyperlink will be associated to the item on the top of the stack when the function doilink is called. You also need to make sure that the doi is declared as a possible field for bibliographic entries. As a minimal example:

ENTRY
{ author
  doi
  journal
  key
  pages
  title
  volume
  year
} 

This may not be the most robust solution but it solved my problem. I thought it might be useful to some people here.

EDIT

Following @laclaro 's follow-up question, I add an example of a .tex file calling the modified .bst file:

\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}

and a screenshot of what it looks like:

enter image description here

Here, clicking on the volume or page number opens the doi link. To adapt this so that the hyperlink is on the journal, you would need to modify the function FUNCTION {format.journal} in the .bst style file rather than the FUNCTION {format.vol.num.pages} as was done here.

share|improve this answer
with biblatex and the eprint field, you can also add arxiv or oai links as offered by the Hal open archive hal.archives-ouvertes.fr. See tex.stackexchange.com/questions/4972/… – pluton Jul 25 '12 at 22:38

@Lev: that worked, although DOIs can contain special latex characters like underscores, such as:

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

So I modified your hack to:

\newcommand*{\doi}[1]{\href{http://dx.doi.org/\detokenize{#1}}{doi: \detokenize{#1}}}
share|improve this answer
Some of the strangest DOIs I have in my .bib file are: dx.doi.org/10.1002/… and dx.doi.org/10.1002/… – matth Feb 16 '12 at 12:06
1  
See tex.stackexchange.com/q/3039/627 for more discussion of weird characters in doi strings. – Lev Bishop May 1 '12 at 18:08

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.