抓取可变数量的 token – xparse 宏

抓取可变数量的 token – xparse 宏

我正在尝试创建以下宏:

\adddescr{<comma separated list>}{<description 1>}...{<description n>}

这个宏应该element -- description \par相应地打印,以便根据列表中的项目数量,\adddescr应该读取以下标记的数量。

以下是一些具体的例子:

\adddescr{foo,bar,baz}{aaa}{bbb}{ccc}

\adddescr{one,two,three}1{two}three

输出结果必须是这样的

foo — aaa
bar — bbb
baz — ccc

one — 1
two — two
three — t
hree

这是我目前所拥有的——它目前只能遍历我的列表并打印它,而不能解析以下标记

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\def\adddescr#1{
  \seq_set_split:Nnn \l_tempa_seq {,} {#1}
  \seq_map_inline:Nn \l_tempa_seq {
    ##1 ~ -- ~ \par
  }
}

\ExplSyntaxOff


\begin{document}
\adddescr{foo,bar,baz}{aaa}{bbb}{ccc}
\\

\adddescr{one,two,three}1{two}three
\end{document}

在此处输入图片描述

答案1

在此处输入图片描述

\documentclass{article}

\def\adddescr#1{\adddescrx#1,\adddescrstop,\relax}
\def\adddescrx#1,#2\relax{#1\adddescrnext{#2}}
\def\adddescrnext#1#2{ -- #2\par\adddescrx#1\relax}
\def\adddescrstop#1#2{}

\begin{document}

\adddescr{foo,bar,baz}{aaa}{bbb}{ccc}

\adddescr{one,two,three}1{two}three

\end{document}

这里只使用简单的递归而不是expl3循环。

相关内容