我想使用 clist,但我不明白为什么它只包含一个元素。我使用以下函数
\NewDocumentCommand{\makeenumerate}{ m }
{
\begin{enumerate}
\clist_map_inline:nn { #1 } { \item \fbox{##1} }
\end{enumerate}
}
如果我按以下方式使用它
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{expl3}
\ExplSyntaxOn
\NewDocumentCommand{\makeenumerate}{ m }
{
\begin{enumerate}
\clist_map_inline:nn { #1 } { \item \fbox{##1} }
\end{enumerate}
}
\ExplSyntaxOff
\newcommand{\myFilter}{conversion,longueur}
\begin{document}
\makeenumerate{\myFilter}
\end{document}
我得到以下信息:
我期望有两个项目,但我只有一个。如果我使用以下代码调用函数
\makeenumerate{conversion,longueur}
它按预期工作。有什么区别?
我有一个更复杂的函数,最终目标是将一个 clist 传递给该函数。我的想法是将 clist 存储在名为 myFilter 的变量中。
感谢您的帮助。
答案1
由于您正在使用expl3
,请执行进一步的操作并使用其数据类型。
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\defineclist}{mm}
{
\clist_clear_new:c { l__luc_armand_#1_clist }
\clist_set:cn { l__luc_armand_#1_clist } { #2 }
}
\NewDocumentCommand{\makeenumerate}{ m }
{
\begin{enumerate}
\clist_map_inline:cn { l__luc_armand_#1_clist } { \item \fbox{##1} }
\end{enumerate}
}
\ExplSyntaxOff
\defineclist{myFilter}{conversion,longueur}
\begin{document}
\makeenumerate{myFilter}
\end{document}
你甚至可以分段构建列表,例如
\NewDocumentCommand{\addtoclist}{mm}
{
\clist_put_right:cn { l__luc_armand_#1_clist } { #2 }
}
答案2
您需要扩展参数以获取要迭代的列表
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{expl3}
\ExplSyntaxOn
\cs_generate_variant:Nn\clist_map_inline:nn{o}
\NewDocumentCommand{\makeenumerate}{ m }
{
\begin{enumerate}
\clist_map_inline:on { #1 } { \item \fbox{##1} }
\end{enumerate}
}
\ExplSyntaxOff
\newcommand{\myFilter}{conversion,longueur}
\begin{document}
\makeenumerate{\myFilter}
\end{document}