Добавление {} в конец команды вместо xspace

Добавление {} в конец команды вместо xspace

Я прочитал ответы на

Пробел после команд LaTeX

но альтернатива, которую я сейчас использую, не упомянута:

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

что, конечно, требует меньшего набора текста и меньше подвержено ошибкам, чем добавление {}после вызова команды. Я не столкнулся с какими-либо проблемами до сих пор; напротив, я заметил, что в некоторых сложных случаях, когда \xspaceвставляется нежелательный пробел, {}он делает это правильно.

Поэтому мне просто интересно, почему, по-видимому, никто больше этим не пользуется, и может ли это вызвать проблемы, о которых я не знаю.

Редактировать: После комментариев я понял, что всегда использовал этот подход с командой, имеющей параметр, поэтому мой пример должен был быть таким:

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

Это научит меня всегда проверять свои примеры, независимо от того, насколько они похожи на мой код.

Так что на самом деле именно аргумент, а не {}, вызывает правильный интервал. Если бы кто-нибудь объяснил мне, почему аргумент имеет значение, я был бы полностью счастлив.

решение1

Вопрос в том, почему пробел в источнике не создает пробел в выводе. Пробел после \arnoldиспользуется для завершения имени команды и не токенизирован, поэтому не создаст никакого вывода. Так что в форме без аргументов

\arnold text

расширяется до

Arnold Schwarzenegger{}text

который будет набран как «Арнольд Шварценеггертекст» и не будет {}выполнять никаких полезных действий.

Наоборот, в форме с аргументом пробел после него по-прежнему \arnoldне токенизирован, поэтому

\arnold {} text

и

\arnold{} text

анализируются одинаково и оба расширяются до

 Arnold␣␣Schwarzenegger␣text

Таким образом, пробел после аргумента обрабатывается как обычный пробел между словами, но между Арнольдом и Шварценеггером вы получите два пробела.

Связанный контент