如何修剪空格而不扩展 expl3 中的内容?

如何修剪空格而不扩展 expl3 中的内容?

考虑以下模式:

\NewDocumentCommand{\mycommand}{m}{
    \myinternalcommand:n{#1}
}
\cs_new:Nn \myinternalcommand:n{
    \tl_if_single:nTF{#1}{TRUE}{FALSE}
}

假设我想根据是否\mycommand获得control sequence输入来执行不同的操作:\mycommand{\mycs}应该做一件事,\mycommand{abcde}应该做另一件事。我特别想\mycommand{ \mycs }这样做。

我的问题是:如何使用\tl_trim_spaces修剪控制序列周围的空格......而不扩展控制序列?(在上面的模式中,:n参数的形式可以改变)

注意:即使这个应用程序很糟糕(在这种情况下,我想知道原因),我仍然对原始问题感兴趣:如何修剪空间而不扩展里面的内容?

答案1

在创建文档命令时,通常会使用ltcmd处理器接口:

\ExplSyntaxOn
\NewDocumentCommand \mycommand { > { \TrimSpaces } m }
  {
    \myinternalcommand:n {#1}
  }

如果你想在代码级别修剪空格,如中所述,interface3你可以依靠防止进一步扩展的事实\tl_trim_spaces:n,例如

\cs_new:Npn \my_pkg_fn:n #1
  {
    \use:e { \tl_trim_spaces:n {#1} }
  }
\my_pkg_fn:n { ~ \foo }

将准确留\foo在输入流中。

从问题来看,你似乎想做类似的事情

\cs_new:Npn \myinternalcommand:n #1
  {
    \myinternalcommand_aux:e {#1}
  }
\cs_new:Npn \myinternalcommand_aux:n #1
  {
    \tl_if_single:nTF{#1}{TRUE}{FALSE}
  }
\cs_generate_variant:Nn \myinternalcommand_aux:n { e }

虽然这确实让你感觉你担心文档级别输入空格...

相关内容