¿Cómo recortar espacios sin ampliar lo que hay dentro en expl3?

¿Cómo recortar espacios sin ampliar lo que hay dentro en expl3?

Considere el siguiente patrón:

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

y digamos que quiero hacer cosas diferentes dependiendo de si \mycommandrecibe una control sequenceentrada o no: \mycommand{\mycs}debería hacer una cosa y \mycommand{abcde}debería hacer otra. En particular me gustaría \mycommand{ \mycs }trabajar.

Mi pregunta es: ¿cómo utilizar \tl_trim_spacespara recortar espacios alrededor de las secuencias de control... sin expandir la secuencia de control? (en el patrón anterior, :nse puede cambiar la forma de los argumentos)

Nota: aunque esta aplicación sea mala (en ese caso, me gustaría saber por qué), todavía me interesa la pregunta original: ¿cómo recortar espacios sin ampliar lo que hay dentro?

Respuesta1

Al crear un comando de documento, normalmente se utilizaría la ltcmdinterfaz del procesador:

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

Si desea recortar espacios a nivel de código, como se describe en, interface3puede confiar en el hecho de que \tl_trim_spaces:nevita una mayor expansión, así, por ejemplo

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

saldrá exactamente \fooen el flujo de entrada.

Por la pregunta, parece que querrías hacer 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 }

aunque realmente parece que te estás preocupandonivel de documentoespacios de entrada...

información relacionada