次のパターンを考えてみましょう。
\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 }
確かに心配しているように感じますが文書レベルスペースを入力してください...