我一直在关注
如何迭代以逗号分隔的列表?尤其是与...合作的方式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