为什么 hyperref 会破坏 natbib?

为什么 hyperref 会破坏 natbib?

我想使用hyperrefnatbib对于 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}

相关内容