我已閱讀以下問題的答案
但沒有提到我目前使用的替代方案:
\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
因此參數後面的空格僅被視為正常的單字空格,但您將在阿諾德和施瓦辛格之間得到兩個空格標記空格。