解释 TeX 命令并从 \href{} 内容中删除花括号

解释 TeX 命令并从 \href{} 内容中删除花括号

语境:

为了创建 DOI 链接,我定义了一个命令\doi{<enter doi here>}

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

问题:

然而,这与诸如 之类的愚蠢输入™ 相矛盾10.1007/1-84628-249-7{\textunderscore }13因为它似乎解释了下划线,但并没有删除花括号

http://dx.doi.org/10.1007/1-84628-249-7{_}13

如何定义命令

\hrefcleanbefore{http://dx.doi.org/10.1007/1-84628-249-7{\textunderscore }13}{text}

用真正的下划线替换{\textunderscore }(默认情况下有效)并删除括号,从而得到一个有效的

\href{http://dx.doi.org/10.1007/1-84628-249-7_13}{text}

(欢迎使用或暗示其他软件包)

背景:

我有一个很棒的书目工具,它可以创建我的 .bib 文件,但对我的 doi 字段有愚蠢的转义

doi = {10.1007/1-84628-249-7{\textunderscore }13}

我尝试了不同的预处理 .bib 文件的选项,但它们都缺乏融入构建过程的便利性。如果一个人知道所有低级 TeX 命令,我认为这不是一个复杂的任务,但我的所有测试似乎都较差或与实现相冲突\href

梅威瑟:

\documentclass{article}
\usepackage{hyperref}
\newcommand{\doi}[1]{\href{http://dx.doi.org/#1}{doi:#1}}

\begin{document}
DOI not clickable: \doi{10.1007/1-84628-249-7{\textunderscore }13}

HREF with \{\} not clickable:  \href{http://dx.doi.org/10.1007/1-84628-249-7{_}13}{doi:10.1007/1-84628-249-7_13}

HREF correct and clickable:  \href{http://dx.doi.org/10.1007/1-84628-249-7_13}{doi:10.1007/1-84628-249-7_13}
\end{document}

答案1

可以使用包regexpatch多次替换宏定义文本内的字符串:

\documentclass{article}
\usepackage{hyperref}
\usepackage{regexpatch}

\newcommand*{\doi}[1]{%
  \def\tmpdoi{#1}%
  \xpatchcmd*\tmpdoi{{\textunderscore}}{_}{}{}%
  \href{http://dx.doi.org/\tmpdoi}{doi:#1}%
}

\begin{document}
  DOI is clickable:
  \doi{10.1007/1-84628-249-7{\textunderscore}13}
\end{document}

相关内容