使用 xparse 使用可变数量的参数进行条目化

使用 xparse 使用可变数量的参数进行条目化

我正在尝试编写一个command函数,给出一个 itemlist( itemize),它接受可变数量的参数:它最多可以接受 3 个参数,但应该能够以类似的方式处理 1 个或 2 个参数。这意味着只有第一个参数是必需的,而第二个和最后一个参数是可选的。

\documentclass{article}

% customize sections style
\usepackage{xparse}
\NewDocumentCommand{\customitemize}{moo}{
    \begin{itemize}
        \item #1
        \IfNoValueT{#2} {\item #2}
        \IfNoValueT{#3} {\item #3}
    \end{itemize}
}

\begin{document}
    \customitemize{parameter1}{parameter2}{parameter3}
    \customitemize{parameter1}{parameter2}
    \customitemize{parameter1}
\end{document}

我对上述代码的问题是,即使没有给出第二和第三个参数,它也会输出一个,No-Value这显然不是我想要的。我无法从其结果判断之前的代码有什么问题:

屏幕截图

答案1

用 定义的参数o应该用括号括起来[...],而不是用大括号。

\documentclass{article}

% customize sections style
\usepackage{xparse}
\NewDocumentCommand{\customitemize}{moo}{%
  \begin{itemize}
  \item #1
  \IfValueT{#2} {\item #2}
  \IfValueT{#3} {\item #3}
  \end{itemize}
}

\begin{document}

\customitemize{parameter1}[parameter2][parameter3]

\customitemize{parameter1}[parameter2]

\customitemize{parameter1}

\end{document}

请注意,你的测试是错误的:它应该是\IfValueT

您可能用括号定义参数,mgg并且括号符号是正确的,但我不推荐这样做。

好多了:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\customitemize}{m}
 {
  \begin{itemize}
  \clist_map_inline:nn { #1 } { \item ##1 }
  \end{itemize}
 }
\ExplSyntaxOff

\begin{document}

\customitemize{parameter1, parameter2, parameter3}

\customitemize{parameter1, parameter2}

\customitemize{parameter1}

\end{document}

相关内容