expl3 内の内容を拡張せずにスペースをトリミングするにはどうすればよいですか?

expl3 内の内容を拡張せずにスペースをトリミングするにはどうすればよいですか?

次のパターンを考えてみましょう。

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

そして、入力として\mycommandが取得されるかどうかに応じて異なる処理を実行したいとします。つまり、 1 つの処理を実行し、別の処理を実行する必要があります。特に、 を動作させたいと思います。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 }

確かに心配しているように感じますが文書レベルスペースを入力してください...

関連情報