我有几个重复的命令
\NewDocumentCommand{\xxColorA}{}{
\bool_lazy_and:nnTF{\bool_not_p:n \l_choice_隐藏答案_bool}{\l_choice_A_bool}{{\color{red}\bfseries A.}}{A.}
}
\NewDocumentCommand{\xxColorB}{}{
\bool_lazy_and:nnTF{\bool_not_p:n \l_choice_隐藏答案_bool}{\l_choice_B_bool}{{\color{red}\bfseries B.}}{B.}
}
\NewDocumentCommand{\xxColorC}{}{
\bool_lazy_and:nnTF{\bool_not_p:n \l_choice_隐藏答案_bool}{\l_choice_C_bool}{{\color{red}\bfseries C.}}{C.}
}
\NewDocumentCommand{\xxColorD}{}{
\bool_lazy_and:nnTF{\bool_not_p:n \l_choice_隐藏答案_bool}{\l_choice_D_bool}{{\color{red}\bfseries D.}}{D.}
}
感觉重复部分应该写成一个命令,大概知道用clist, interface3里面给了说明但是没给例子,所以没整明白.
因此请教一下,具体应该怎么用?非常感谢
tl、str、clist、seq、prop 等类型都有对应的 map 函数,
\..._map_function:NN <data> <func>
\..._map_tokens:Nn <data> <tokens>
\..._map_inline:Nn <data> <code>
它们将 <func>
、<tokens>
作用于 <data>
的每一项,也即,在 <data>
的每一项前添加 <func>
、<tokens>
,变成:
<func> <item1> <func> <item2> <func> <item3> ...
<tokens> <item1> <tokens> <item2> <tokens> <item3> ...
对于 \..._map_inline:Nn
则是先将一个 <temp func>
定义为 <code>
,它可使用一个参数,代表当前的 item
。再对 <temp func>
使用 \..._map_function:NN
。
你这个可以用 \tl_map_inline:nn
,或者 \clist_map_inline:nn
,前者速度更快:
\tl_map_inline:nn { ABCD }
{
\exp_args:Nc \NewDocumentCommand { xxColor #1 } { }
{
\bool_lazy_and:nnTF
{ \bool_not_p:n \l_choice_隐藏答案_bool }
{ \use:c { l_choice_ #1 _bool } }
{ { \color{red} \bfseries #1 . } }
{ #1 . }
}
}
非常感谢