LaTeX 簡寫形式的正式術語

LaTeX 簡寫形式的正式術語

在 LaTeX 中可以寫諸如 之類的表達式\frac12,它應該等同於諸如 之類的表達式\frac{1}{2}。第一種表示法有正式用語嗎?

答案1

不。


這只是 TeX 吸收非分隔巨集參數的正常方式的一部分。如果你定義

\def\foo#1{Something using #1 (or not).}

或同等地

\newcommand\foo[1]{Something using #1 (or not).}

當擴展時,它吸收輸入流中的下一個標記或平衡組作為其參數(在定義中\foo可用)。#1假設正常類別代碼

  • 標記是單一字元(除了\{}%空格或換行符(因為它們被忽略))或命令序列(以 開頭\),
  • 平衡組以不屬於不同組(稍後開始)的{第一個組開始並結束。}吸收後,大括號將從組中剝離(即#1不包含它們)。

這就是為什麼\foo x\foo{x}\newcommand{\foo}\newcommand\foo\frac 12\frac{1}{2}\frac{1}2\frac1 2是等價的。

最好選擇最清晰的版本,這通常意味著使用群組。就我個人而言,如果我必須輸入單一標記,例如\newcommand\foo.

答案2

可能值得補充的是,在 LaTeX3/ 中區分單標記參數和大括號中的參數更加明確expl3。依照慣例,每個expl3巨集名稱都應以 結尾,:後面跟著一系列字母,稱為參數說明符,每個字母反映對應參數的類型。

除了許多其他的我們還有

  • n對於花括號組或單標記參數,以及
  • N僅適用於單標記參數,通常是巨集/函數名稱或變數名稱。

這些說明符仍然不會改變 (La)TeX 處理各個參數的方式,但它向使用者提示如何在巨集內部使用參數。

例如,該l3tl包提供了兩個函數\tl_if_empty:nTF\tl_if_empty:NTF。雖然這兩個函數都會檢查標記列表是否為空並有條件地執行程式碼,但前者預計會使用一組標記進行調用,而後者則期望在對其內容執行測試之前首先擴展標記列表變數。

相關內容