Wie kann man Leerzeichen entfernen, ohne den Inhalt von expl3 zu erweitern?

Wie kann man Leerzeichen entfernen, ohne den Inhalt von expl3 zu erweitern?

Betrachten Sie das folgende Muster:

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

und sagen wir, ich möchte verschiedene Dinge tun, je nachdem, ob \mycommandich eins control sequenceals Eingabe bekomme oder nicht: ich \mycommand{\mycs}soll das eine tun, ich \mycommand{abcde}soll das andere tun. Ich möchte insbesondere \mycommand{ \mycs }arbeiten.

Meine Frage lautet: Wie kann ich \tl_trim_spacesLeerzeichen um Steuersequenzen herum entfernen, ohne die Steuersequenz zu erweitern? (Im obigen Muster :nkann die Form der Argumente geändert werden.)

Hinweis: Auch wenn diese Anwendung schlecht ist (in diesem Fall wüsste ich gerne, warum), interessiert mich dennoch die ursprüngliche Frage: Wie kann ich Leerzeichen verkleinern, ohne den Inhalt zu vergrößern?

Antwort1

Beim Erstellen eines Dokumentbefehls wird normalerweise die ltcmdProzessorschnittstelle verwendet:

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

Wenn Sie Leerzeichen auf Codeebene kürzen möchten, wie in beschrieben, interface3können Sie sich darauf verlassen, dass \tl_trim_spaces:neine weitere Expansion verhindert wird. So können Sie zum Beispiel

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

\foowird genau im Eingabestream belassen .

Aus der Frage geht hervor, dass Sie etwas tun möchten wie

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

obwohl es sich wirklich so anfühlt, als ob Sie sich Sorgen machen überDokumentebeneEingabefelder ...

verwandte Informationen