clist_map_inline 和变量之间的区别

clist_map_inline 和变量之间的区别

我想新建一些具有类似语法的命令。所以我使用了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}

在此处输入图片描述

相关内容