10 clist使用方法请教

发布于 2022-06-06 08:30:33

我有几个重复的命令

\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里面给了说明但是没给例子,所以没整明白.
因此请教一下,具体应该怎么用?非常感谢

查看更多

关注者
0
被浏览
1.1k
雾月
雾月 2022-06-06
这家伙很懒,什么也没写!

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 . }
      }
  }
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览