コマンドの最後に {} を追加するか xspace を追加するか

コマンドの最後に {} を追加するか xspace を追加するか

私は回答を読みました

LaTeXコマンドの後のスペース

しかし、私が現在使用している代替案については言及されていません。

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

もちろん、コマンドを呼び出してから追加するよりも入力が少なく、エラーも少なくなります{}。 今のところ問題は発生していませんが、逆に、\xspace不要なスペースを挿入する複雑なケースでは、{}正しく処理されることに気づきました。

それで、なぜ誰もこれを使用していないのか、そして私が知らない問題を引き起こす可能性があるのか​​疑問に思いました。

編集:コメントの後、私は常にパラメータを持つコマンドでこのアプローチを使用していたことに気付きました。したがって、私の例は

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

これによって、自分のコードとどれほど似ているように見えても、常に例を確認するように学習します。

したがって、正しいスペースを発生させるのは、実際には {} ではなく引数です。引数がなぜ違いを生むのかを誰かが説明してくれたら、私はとても嬉しいです。

答え1

問題は、ソース内のスペースが出力にスペースを生成しない理由です。スペースは\arnoldコマンド名の終わりと見なされ、トークン化されないため、出力は生成されません。したがって、引数なしの形式では

\arnold text

拡大すると

Arnold Schwarzenegger{}text

これは「Arnold Schwarzeneggertext」とタイプセットされますが、{}何も役に立ちません。

逆に、引数のある形式では、後ろのスペースは\arnoldトークン化されないので、

\arnold {} text

そして

\arnold{} text

同じように解析され、両方とも次のように展開されます。

 Arnold␣␣Schwarzenegger␣text

したがって、引数の後のスペースは通常の単語スペースとして扱われますが、アーノルドとシュワルツェネッガーの間には 2 つのスペース トークンのスペースが確保されます。

関連情報