我想新建一些具有类似语法的命令。所以我使用了clist_map_
latex3 中的命令,但我发现它的inline
行为variable
不同。我做了一个最小的工作示例。
\documentclass{article}
\ExplSyntaxOn
\cs_set_eq:NN \NewDocumentCommand:Nnn \NewDocumentCommand
\cs_generate_variant:Nn \NewDocumentCommand:Nnn { cnn }
\clist_new:N \l_cf_diff_clist
\clist_set:Nn \l_cf_diff_clist { x, y, z, t }
% variable
\clist_map_variable:NNn \l_cf_diff_clist \l_tmpa_tl
{
\NewDocumentCommand:cnn { my \l_tmpa_tl } { }
{ \mathrm{\l_tmpa_tl} }
}
% inline
\clist_map_inline:Nn \l_cf_diff_clist
{
\NewDocumentCommand:cnn { your #1 } { }
{ \mathbf{#1} }
}
\ExplSyntaxOff
\begin{document}
$ \myx, \myy, \myt, \yourx, \youry, \yourt $
\end{document}
定义命令时似乎\clist_map_variable
不会展开,但会展开。为什么会发生这种情况?如果我想使用定义这些命令,我该如何修复我的代码?\l_tmpa_tl
\clist_map_variable
#1
\clist_map_variable
答案1
您需要使用e
变体来扩展\l_tmpa_tl
和\exp_not:N
保护\mathrm
:
\documentclass{article}
\ExplSyntaxOn
\cs_set_eq:NN \NewDocumentCommand:Nnn \NewDocumentCommand
\cs_generate_variant:Nn \NewDocumentCommand:Nnn { cnn, cne }
\clist_new:N \l_cf_diff_clist
\clist_set:Nn \l_cf_diff_clist { x, y, z, t }
% variable
\clist_map_variable:NNn \l_cf_diff_clist \l_tmpa_tl
{
\NewDocumentCommand:cne { my \l_tmpa_tl } { }
{ \exp_not:N \mathrm { \l_tmpa_tl } }
}
% inline
\clist_map_inline:Nn \l_cf_diff_clist
{
\NewDocumentCommand:cnn { your #1 } { }
{ \mathbf{#1} }
}
\ExplSyntaxOff
\begin{document}
$ \myx, \myy, \myt, \yourx, \youry, \yourt $
\end{document}