如何在不擴展 expl3 內部內容的情況下修剪空格?

如何在不擴展 expl3 內部內容的情況下修剪空格?

考慮以下模式:

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

假設我想做不同的事情,這取決於是否\mycommand獲得 acontrol 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 }

雖然這確實讓人覺得你在擔心文件級別輸入空格...

相關內容