Building on this post, I would define a new function in the .bst
file:
FUNCTION {doilink}
{ duplicate$ empty$
{ pop$ "" }
{ doi empty$
{ skip$ }
{ "\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" * }
if$
}
if$
}
Then you need to find how the journal information is printed in your .bst
file (this depends on which particular .bst
you are using). Just add a call to doilink
before outputting the journal information. If you also want to remove the doi from the output, you also need to find the place in the .bst
where this is printed and delete those lines. It is difficult to be more specific without knowing more about your particular bibliography configuration.
Note that a very good guide to BibTeX may be found here (or texdoc tamethebeast
in a shell). There would also be biblatex
solutions.
EDIT: Here is an example based on the plain.bst
style file:
FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
new.block
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize doilink "journal" output.check
format.vol.num.pages output
format.date "year" output.check
}
{ format.article.crossref output.nonnull
format.pages output
}
if$
new.block
note output
fin.entry
}
I have just added the call to the doilink
function at the proper place (and you also need to add doi
in the ENTRY {...}
fields description at the beginning of the .bst
file.