生成超链接 DOI?

生成超链接 DOI?

朋友们,

我正在尝试编写一个命令,用于为参考书目系统打印适当超链接的 DOI。这是我的第一次尝试

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

这对于大多数 DOI 来说都很有效。但是,有些 DOI 中含有令人讨厌的非 LaTeX 友好字符,例如_。事实证明,如果您通过将 转换为_来破坏 DOI \_,那么一切都会正常!(甚至 中的 LINK 也是\href正确的。)

我对这个解决方案不满意,因为这意味着我们必须在 BibTeX 数据库中包含被破坏的 DOI,这可能会让其他用户感到困惑。我想要一个允许我使用合法 DOI 作为输入的解决方案。

好吧,我刚刚了解了这个\detokenize命令。有了这个,我可以将上面的命令更新为

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

这对于超链接部分非常有效;但是,下划线自然会混淆第二个参数的排版。有简单的解决方案吗?我曾想过在这里使用 verbatim 环境,但它似乎不够强大,无法以这种方式在函数中使用。

非常感谢您的帮助。还有一些限制:

  • 我想尽量减少包含的包的数量(和复杂性),因为所有这些都发生在日记的样式文件中。
  • _将每个转换为一小段代码就足够了\_;这样的事情容易实现吗?

祝一切顺利,亚历克斯

答案1

除了 Harish 的解决方案之外doi你可以使用这个包uri,它使用了包中的工具url定义一些命令,其中之一是\doi再次。

但是如果你想保留字体系列,你需要自己定义这个命令。我向你展示了两者。注释掉带有的行\usepackage{uri}并删除之前的注释符号\DeclareUrlCommand以查看效果。

\documentclass{article}
\usepackage{hyperref} % loads package "url", provides linking facilities
\usepackage[doipre={DOI:~}]{uri} % loads "url", if not already loaded
%\DeclareUrlCommand\doi{\def\UrlLeft##1\UrlRight{DOI\nobreakspace\href{http://dx.doi.org/##1}{##1}}\urlstyle{rm}} % works only, if "url" is loaded, but not "uri"
\begin{document}
\doi{10.1007/978-3-540-70575-8_10}\\
\doi{10.1002/(SICI)1099-114X(199904)23:5%3C415::AID-ER489%3E3.0.CO;2-7}
\end{document}

请注意,您无法使用选项uri('doipre' 和 'doipost') 更改字体系列 - 至少在这里,我的电脑死机了。\DeclareUrlCommand和的语法\urlstyle在 的文档中进行了描述url

更新:添加了 matth 在评论中给出的更奇怪的 DOI。

答案2

-在我之前的回答中,和之间存在一些混淆_。好吧,这里有一个解决方案,_也可以采用。我使用了doi包。

\documentclass{article}
\usepackage{doi}
\usepackage{hyperref}
\begin{document}
\renewcommand\doitext{Doi: }
\doi{10.1007/978-3-540-70575-8_10}
\end{document}

在此处输入图片描述

希望这会有用。

相关内容