我正在尝试编写一个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}