Hinzufügen von {} am Ende eines Befehls vs. xspace

Hinzufügen von {} am Ende eines Befehls vs. xspace

Ich habe die Antworten gelesen auf

Leerzeichen nach LaTeX-Befehlen

aber die Alternative, die ich derzeit verwende, wird nicht erwähnt:

\newcommand{\arnold}{Arnold Schwarzenegger{}}

Das bedeutet natürlich weniger Tipparbeit und ist weniger fehleranfällig als das Hinzufügen {}nach dem Aufruf des Befehls. Bisher sind mir keine Probleme begegnet; im Gegenteil, ich habe festgestellt, dass es in einigen komplexen Fällen, in denen \xspaceein unerwünschtes Leerzeichen eingefügt wird, {}richtig funktioniert.

Ich habe mich also nur gefragt, warum dies anscheinend niemand sonst verwendet und ob es möglicherweise Probleme verursacht, von denen ich nichts weiß.

Bearbeiten: Nach den Kommentaren wurde mir klar, dass ich diesen Ansatz immer mit einem Befehl verwendet habe, der einen Parameter hat. Mein Beispiel hätte also lauten sollen

\newcommand{\arnold}[1]{Arnold #1 Schwarzenegger}

Das wird mir eine Lehre sein, meine Beispiele immer zu überprüfen, egal wie ähnlich sie meinem Code zu sein scheinen.

Es ist also tatsächlich das Argument, das die korrekte Leerzeichen bewirkt, und nicht das {}. Wenn mir jemand erklären könnte, warum das Argument einen Unterschied macht, wäre ich sehr glücklich.

Antwort1

Die Frage ist, warum ein Leerzeichen in der Quelle kein Leerzeichen in der Ausgabe erzeugt. Ein Leerzeichen danach \arnoldwird verwendet, um den Befehlsnamen zu beenden und wird nicht tokenisiert, sodass keine Ausgabe erzeugt wird. In der Form ohne Argumente

\arnold text

erweitert sich zu

Arnold Schwarzenegger{}text

das als „Arnold Schwarzeneggertext“ gesetzt wird, wobei {}nichts Nützliches getan wird.

Umgekehrt gilt in der Form mit einem Argument immer noch, dass ein Leerzeichen danach \arnoldnicht tokenisiert wird, also

\arnold {} text

Und

\arnold{} text

werden auf die gleiche Weise analysiert und beide werden zu

 Arnold␣␣Schwarzenegger␣text

Daher wird das Leerzeichen nach dem Argument einfach als normales Wortleerzeichen behandelt, Sie erhalten jedoch zwei Leerzeichentoken zwischen Arnold und Schwarzenegger.

verwandte Informationen