Adicionando {} no final de um comando vs xspace

Adicionando {} no final de um comando vs xspace

Eu li as respostas para

Espaço após comandos LaTeX

mas a alternativa que uso atualmente não é mencionada:

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

o que, obviamente, é menos digitado e menos sujeito a erros do que adicionar {}após invocar o comando. Não encontrei nenhum problema até agora; pelo contrário, notei que em alguns casos complexos onde \xspaceinsere um espaço indesejado, {}acerta.

Então, eu estava me perguntando por que aparentemente ninguém mais está usando isso e se isso pode causar problemas dos quais não tenho conhecimento.

Editar: Após os comentários percebi que sempre usei essa abordagem com um comando que possui um parâmetro, então meu exemplo deveria ter sido

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

Isso me ensinará a sempre verificar meus exemplos, não importa quão semelhantes eles pareçam ao meu código.

Então, na verdade, é o argumento que causa o espaçamento correto, e não o {}. Se alguém me explicasse por que o argumento faz diferença, eu ficaria inteiramente feliz.

Responder1

A questão é por que um espaço na fonte não produz um espaço na saída. Um espaço após \arnoldé usado para finalizar o nome do comando e não é tokenizado, portanto não produzirá nenhuma saída. Então, na forma sem argumento

\arnold text

expande para

Arnold Schwarzenegger{}text

que será digitado como "Arnold Schwarzeneggertext" sem {}fazer nada de útil.

Por outro lado, na forma com um argumento, ainda é verdade que um espaço depois \arnoldnão é tokenizado, então

\arnold {} text

e

\arnold{} text

são analisados ​​da mesma maneira e ambos se expandem para

 Arnold␣␣Schwarzenegger␣text

portanto, o espaço após o argumento é tratado apenas como um espaço de palavra normal, mas você obterá dois tokens de espaço entre Arnold e Schwarzenegger.

informação relacionada