Latex3 clist仅包含一个元素

Latex3 clist仅包含一个元素

我想使用 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}

相关内容