是否可以构建一个接受 0、1 或 2 个参数的宏?为什么?我想要以下功能。
\exercice
将Exercice
单独打印。\exercice{2}
将打印Exercice (2 pts)
。\exercice{2}{Source:...}
将打印Exercice (2 pts) [Source: ...]
。
答案1
更好的方法:使用键值语法。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\exercice}{O{}}
{
\group_begin:
\keys_set:nn { projetmbc/ex } { #1 }
\par\vspace{\topsep}\noindent Exercice
\tl_if_empty:NF \l_projetembc_ex_pts_tl
{ ~(\tl_use:N \l_projetembc_ex_pts_tl\nobreakspace pts) }
\tl_if_empty:NF \l_projetembc_ex_note_tl
{ ~[\tl_use:N \l_projetembc_ex_note_tl] }
\group_end:
\quad\ignorespaces
}
\keys_define:nn { projetmbc/ex }
{
points .tl_set:N = \l_projetembc_ex_pts_tl ,
note .tl_set:N = \l_projetembc_ex_note_tl ,
}
\ExplSyntaxOff
\begin{document}
\exercice Text
\exercice[points=2] Text
\exercice[note=Source: folklore] Text
\exercice[points=4,note=Source: folklore] Text
\end{document}