LaTeX 教材:自訂指令

在 LaTeX 原始碼的檔頭部份,可以定義新的指令。語法是 \newcommand{新指令}{展開} 此時的「展開」是程式語言中的『巨集』意義,也就是編譯或解讀程式, 只要讀到「新指令」,就把整個指令置換成「展開」字串。 其效果就像你沒有輸入「新指令」,而是輸入了「展開」一樣。 例如以下檔案


\documentclass[12pt]{article}
\newcommand{\NCU}{National Central University}
\begin{document}
BCC16 is a courseware developed at the Math Department, \NCU.
\end{document}

定義一個新指令 \NCU,它的排版的效果就跟我們沒有定義新指令而輸入
\documentclass[12pt]{article}
\begin{document}
BCC16 is a courseware developed at the Math Department, National Central University.
\end{document}

是完全一樣的。

要小心的是,上述範例中 \NCU. 指令以句點結束,而句點也會被印出來。 但是如果 \NCU 指令以空格結束,不論是一個空格還是連續許多個空格, LaTeX 會先將連續多個空格視為一個空格, 再將那個空格視為 \NCU 指令的結束, 而那個空格就相當於「被用掉」了,不會產生排版效果。 所以如果要結束 \NCU 指令而且要在後面排版一個空格,應該寫 \NCU\ 這個情況就像是用 \LaTeX 指令一樣。

萬一你的新指令與 LaTeX 原有的指令發生衝突,就會看到錯誤訊息。 這是 LaTeX 的防呆裝置,初學者絕不要重新定義 LaTeX 原有的指令, 否則後果難以預料。例如您可以將前面的 \NCU 指令改成 \LaTeX 試試看,錯誤訊息大約長得像這樣:


! LaTeX Error: Command \LaTeX already defined.
               Or name \end... illegal, see p.192 of the manual.

新定義的指令可以只是原有指令的縮寫或者重塑。例如,如果經常要輸入 \displaystyle 這個指令,想省事的話,可以先定義 \newcommand{\dsp}{\displaystyle} 而後只要寫 \dsp 就相當於寫了 \displaystyle。 但是 \displaystyle 僅限於數學模式使用,因此 \dsp 應該也是僅限於數學模式使用。 這一點使用者要自己小心。

巨集指令容許引數 (arguments)。 引數並無名字,而是以輸入的順序,依序命名為 #1, #2 ... #9,LaTeX 的一個指令最多允許九個引數。 例如我們定義一個「閉區間」的指令 \intv,接受兩個引數, 依序表示區間的左端點和右端點,可以寫成以下指令。


\documentclass[12pt]{article}
\newcommand{\intv}[2]{\ensuremath{[#1,\,#2]}}
\begin{document}
The interval \intv{-1}{1} is the solution interval for $|x|\leq 1$.
That is, $|x|\leq 1$ for $x\in\intv{-1}{1}$.
\end{document}

我們使用了 \ensuremath{} 指令,使得這個新指令 \intv 可以在文字模式或數學模式使用: 如果在文字模式使用,LaTeX 自動幫我們進入數學模式, 如果已經在數學模式內,則沒有影響。 [BCC16-B]
單維彰 (2007/06/10) ---
[Prev] [Next] [Up]