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 \mycommand
recibe una control sequence
entrada 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_spaces
para recortar espacios alrededor de las secuencias de control... sin expandir la secuencia de control? (en el patrón anterior, :n
se 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 ltcmd
interfaz del procesador:
\ExplSyntaxOn
\NewDocumentCommand \mycommand { > { \TrimSpaces } m }
{
\myinternalcommand:n {#1}
}
Si desea recortar espacios a nivel de código, como se describe en, interface3
puede confiar en el hecho de que \tl_trim_spaces:n
evita 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 \foo
en 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...