我很困惑为什么以下方法不起作用:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\clist_new:N \l_test
\clist_set:Nn \l_test {a,b,c}
\NewDocumentCommand{\putitem}{m}{
\clist_put_right:Nn \l_test {#1}}
\NewDocumentEnvironment{foobar}{mm}{ FOO }{ BAR \putitem{##1}}
\NewDocumentCommand{\giveitems}{}{\clist_map_inline:Nn \l_test {\fbox{##1}}}
\ExplSyntaxOff
\begin{document}
\putitem{xyz}
\putitem{asdf}
\giveitems
\begin{foobar}{abab}{baba}
XXX
\end{foobar}
\giveitems % output is the same as the earlier call
\end{document}
因此,作为创建环境的一部分,应该向 clist 添加一个额外的字符串。但这样做不起作用。我希望第二个\giveitems
有一个额外的项目,即abab
。在新环境中用其定义替换\putitem
没有任何区别。我在这里遗漏了什么?
答案1
环境形成组,这意味着您需要一个全局变量来查看外部结果。同时,使用来自环境的参数时则#1
不需要。##1
\ExplSyntaxOn
\clist_new:N \g__seamus_test_clist
\clist_set:Nn \g__seamus_test_clist {a,b,c}
\NewDocumentCommand{\putitem}{m}{
\clist_gput_right:Nn \g__seamus_test_clist {#1}
}
\NewDocumentEnvironment{foobar}{mm}
{ FOO }
{ BAR \putitem{#1}}
\NewDocumentCommand{\giveitems}{}
{\clist_map_inline:Nn \g__seamus_test_clist {\fbox{##1}}}
\ExplSyntaxOff