Warum werden Leerzeichen auch in Textargumenten innerhalb von \ExplSyntaxOn... \ExplSyntaxOff ignoriert?

Warum werden Leerzeichen auch in Textargumenten innerhalb von \ExplSyntaxOn... \ExplSyntaxOff ignoriert?

Ich habe Workarounds gesehen fürdie Räume darin erkannt haben\ExplSyntaxOn... \ExplSyntaxOff. Aber ich frage mich, warum Leerzeichen selbst bei (LaTeX3-)Makroargumenten, die zweifellos Text erwarten, nicht erkannt werden, z. B. ⟨text⟩und ⟨more text⟩in:

\msg_new:nnnn { ⟨module⟩ } { ⟨message⟩ } { ⟨text⟩ } { ⟨more text⟩ }

Antwort1

Leerzeichen wird mit dem Catcode „Ignorieren“ versehen, sodass überhaupt kein Token erstellt wird. Verwenden Sie es, ~um ein normales Leerzeichen-Token zu erstellen .

\msg_new:nnnn { ⟨module⟩ } { ⟨message⟩ } { ⟨text⟩ } { ⟨more ~ text⟩ }

Die Alternative wäre, etwas anderes zu tun, aber was auch immer das wäre, es hätte wahrscheinlich dieselben Probleme, \verbda es Catcode-Änderungen mit sich bringt und daher auf der obersten Ebene funktioniert, aber nicht innerhalb der Argumente eines anderen Befehls, oder es würde einen komplizierten Vorscan erfordern, um Leerzeichen-Token zu entfernen oder nicht, was bedeuten würde, dass Sie manchmal Leerzeichen am %Zeilenende verbergen müssen, was durch die L3-Syntax vermieden werden soll.

Beachten Sie, dass in diesem Kontext ~nicht das aktive Zeichen eine nicht umbrechbare Leerzeichenkonstruktion erstellt, sondern einfach ein Zeichen mit dem Leerzeichen-Catcode, das ein Leerzeichen-Token erstellt, als ob es sich um ein Leerzeichen im Dokument-Setup handelt.

verwandte Informationen