在指令末尾新增 {} 與 xspace

在指令末尾新增 {} 與 xspace

我已閱讀以下問題的答案

LaTeX 指令後的空格

但沒有提到我目前使用的替代方案:

\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

因此參數後面的空格僅被視為正常的單字空格,但您將在阿諾德和施瓦辛格之間得到兩個空格標記空格。

相關內容