没有超链接,带有逗号分隔列表和 ExplSyntax

没有超链接,带有逗号分隔列表和 ExplSyntax

我一直在关注 如何迭代以逗号分隔的列表?尤其是与...合作的方式ExplSyntax

但是 hyperref 不适用于,\clist_map_inline:nn 但是它可以与直接的 LaTeX 方式一起使用,从逗号分隔的列表中提取数据。


\documentclass{scrartcl}

\makeatletter
\newcommand{\dois}[2][,]{%
\begin{description}%
     \itemsep0em \def\dolist##1{\expandafter\@dolist##1#1\@eol}%
  \def\@dolist##1#1##2\@eol{%
    \begingroup\setbox0=\hbox{##1\unskip}\ifdim\wd0=0pt\endgroup\else\endgroup\item[DOI:] \ignorespaces\href{https://doi.org/##1}{##1} \unskip\fi%
    \ifx\@eol##2\@eol\else\@dolist##2\@eol\fi}%
  \dolist{#2}%
\end{description}}
\makeatother




\usepackage{xparse}
\ExplSyntaxOn

\NewDocumentCommand{\doisltx}{ m }
 {
  \begin{description}
  \clist_map_inline:nn { #1 } { \item[DOI:] \href{https://doi.org/##1}{##1}}
  \end{description}
 }

\ExplSyntaxOff


\usepackage{hyperref}
\begin{document}

hyperref does not work
\doisltx{%
  10.17171/2-2-90,%
  10.17171/2-2-91
  }


hyperref does work
\dois{%
  10.17171/2-2-90,%
  10.17171/2-2-91
  }


hyperref: \href{https://doi.org/10.17171/2-2-90}{10.17171/2-2-90}
\end{document}

在此处输入图片描述

答案1

在 expl3 上下文中,冒号是字母,因此使用时必须小心一点。hyperref 期望 https 后面有一个 catcode 12 冒号:

\ExplSyntaxOn

\NewDocumentCommand{\doisltx}{ m }
 {
  \begin{description}
  \clist_map_inline:nn { #1 } { \item[DOI:] \href{https\c_colon_str//doi.org/##1}{##1}}
  \end{description}
 }

\ExplSyntaxOff

相关内容