我想使用hyperref
和natbib
对于 elsarticle 类,包括正确的 DOI,但无论我尝试什么,都会出现奇怪的错误或输出:
(所有尝试均使用 和 进行bibtex
编译pdflatex
)
尝试 0:成功,无需 hyperref
\documentclass{elsarticle}
\usepackage{filecontents}
\begin{filecontents}{mwe.bib}
@article{Ashburner2005,
author = {Ashburner, John and Friston, Karl J},
doi = {10.1016/j.neuroimage.2005.02.018},
journal = {NeuroImage},
title = {{Unified segmentation.}},
year = {2005}
}
\end{filecontents}
\begin{document}
\cite{Ashburner2005}
\bibliographystyle{elsarticle-num-names}
\bibliography{mwe}
\end{document}
输出:
尝试 1:hyperref 导致死亡
\usepackage{hyperref} % <-- added this to preamble
输出:
错误:
Undefined control sequence. \doi{\bibinfo{doi}{10.1016/j.neuroimage.2005.02.018}}.
尝试2:uri包
\usepackage[doipre={DOI:~}]{uri} % <-- added this to preamble
输出:
没有错误,但是 DOI 错误。
尝试 3-A:用户定义\doi
命令:
正如建议的那样另一篇帖子, 我试过:
\newcommand*{\doi}[1]{\href{http://dx.doi.org/{#1}}{doi: {#1}}}
输出:
错误:
Undefined control sequence. \doi{\bibinfo{doi}{10.1016/j.neuroimage.2005.02.018}}.
编译失败
尝试 3-B:用户定义\doi
命令,更新:
\newcommand*{\doi}[1]{\href{http://dx.doi.org/\detokenize{#1}}{doi: \detokenize{#1}}}
输出:
没有错误,但是 DOI 又错了,而且是以不同的方式。
每当 DOI 链接错误时,链接也会中断。
任何帮助都将受到赞赏。
答案1
这似乎可行,\bibinfo
通过扩展来实现工作。
\documentclass{elsarticle}
\usepackage{filecontents}
\begin{filecontents}{mwe.bib}
@article{Ashburner2005,
author = {Ashburner, John and Friston, Karl J},
doi = {10.1016/j.neuroimage.2005.02.018},
journal = {NeuroImage},
title = {{Unified segmentation.}},
year = {2005}
}
\end{filecontents}
\usepackage{hyperref}
\newcommand*{\doi}[1]{DOI \href{https://doi.org/#1}{\texttt{#1}}}
\makeatletter
% expandable version of ...
\def\bibinfo#1{%
\@ifundefined{bibinfo@X@#1}%
{\@firstofone}
{\csname bibinfo@X@#1\endcsname}}
\makeatother
\begin{document}
\cite{Ashburner2005}
\bibliographystyle{elsarticle-num-names}
\bibliography{mwe}
\end{document}