您可以使用 l3regex / \regex_replace_all:nnN 将标记列表中第 11 类的每个显式字符标记替换为其第 12 类挂件吗?

您可以使用 l3regex / \regex_replace_all:nnN 将标记列表中第 11 类的每个显式字符标记替换为其第 12 类挂件吗?

您可以使用 l3regex /\regex_replace_all:nnN将标记列表中类别 11(字母)的每个显式字符标记替换为其类别 12(其他)挂件吗?或者用其类别 6(参数)挂件替换?

更概括:您能否使用 l3regex /\regex_replace_all:nnN将标记列表中某个类别的每个显式字符标记替换为另一个类别的挂件?
(请忽略某些情况,在这些情况下,在处理过程中,这会导致标记列表中的标记包含不平衡的括号。)

如果是:怎么做?替换文本应该是什么\regex_replace_all:nnN样的?

如果没有:没关系。我会编写自己的替换程序。;-)

正如我所料,下面的例子不起作用——\scratchy_showloop:n表明在正则表达式替换之后,标记列表仍然包含“字母”=类别 11 的字符标记,而不包含“字符”=类别 12 的字符标记。

(我提供这个最小示例是为了满足那些坚持要看最小示例的人。)

\ExplSyntaxOn

\tl_new:N \l__scratchy_tl

\cs_new:Nn \scratchy_showloop:n {
  \quark_if_recursion_tail_stop:n {#1}
  \cs_show:N #1
  \scratchy_showloop:n
}

\tl_set:Nn  \l__scratchy_tl { abcdefg }

\regex_replace_all:nnN { \cL. } { \cO(\0) }  \l__scratchy_tl

\exp_args:NnV \use:nn \scratchy_showloop:n  \l__scratchy_tl  \q_recursion_tail \q_recursion_stop

\stop

答案1

您也可以使用\tl_set_rescan:Nno以下类别代码表:

\ExplSyntaxOn

\cctab_new:N \g_xitoxii_cctab

\cctab_gset:Nn \g_xitoxii_cctab
 {
  \cctab_select:N \c_document_cctab
  \int_step_inline:nn { 255 }
   {
    \int_compare:nT { \char_value_catcode:n { #1 } = 11 } { \char_set_catcode_other:n { #1 } }
   }
 }

\tl_set:Nn \l_tmpa_tl {abcde@f&^}
\tl_set_rescan:Nno \l_tmpa_tl { \cctab_select:N \g_xitoxii_cctab } { \l_tmpa_tl }

\tl_analysis_show:N \l_tmpa_tl

\stop

控制台将显示

The token list \l_tmpa_tl contains the tokens:
>  a (the character a)
>  b (the character b)
>  c (the character c)
>  d (the character d)
>  e (the character e)
>  @ (the character @)
>  f (the character f)
>  & (alignment tab character &)
>  ^ (superscript character ^).

相关内容