私は回答を読みました
しかし、私が現在使用している代替案については言及されていません。
\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 つのスペース トークンのスペースが確保されます。