Eu li as respostas para
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 \xspace
insere 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 \arnold
nã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.