Como cortar espaços sem expandir o que está dentro do expl3?

Como cortar espaços sem expandir o que está dentro do expl3?

Considere o seguinte padrão:

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

e digamos que eu queira fazer coisas diferentes dependendo de \mycommandreceber control sequenceou não uma entrada: \mycommand{\mycs}deveria fazer uma coisa e \mycommand{abcde}deveria fazer outra. Gostaria em particular \mycommand{ \mycs }de trabalhar.

Minha pergunta é: como usar \tl_trim_spacespara cortar espaços em torno de sequências de controle... sem expandir a sequência de controle? (no padrão acima, a :nforma dos argumentos pode ser alterada)

Nota: mesmo que esta aplicação seja ruim (nesse caso, gostaria de saber por quê), ainda estou interessado na pergunta original: como cortar espaços sem expandir o que está dentro?

Responder1

Ao criar um comando de documento, normalmente seria usada a ltcmdinterface do processador:

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

Se você deseja cortar espaços no nível do código, conforme descrito em interface3você pode contar com o fato de que \tl_trim_spaces:nimpede expansão adicional, por exemplo

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

sairá exatamente \foono fluxo de entrada.

Pela pergunta, parece que você gostaria de fazer algo como

\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 }

embora isso realmente pareça que você está se preocupandonível do documentoespaços de entrada ...

informação relacionada