在Latex中自定義命令

詳解newcommand的參數和默認值

newcommand有如下的三種使用方式:

1 定義無參數的命令

這是newcommand最簡單的使用方式,比如嫌每次輸入“helloworld”很麻煩,可以定義命令:

 

\newcommand\prc{helloworld}

以後就可以通過輸入命令\prc來輸入“helloworld”了。

2 定義有參數的命令

定義有參數命令的通用形式爲:

 

\newcommand\cmd[參數個數]{命令的定義}

方括號中定義了命令的參數個數(最多9個),在命令的定義中,可以使用#1引用第一個參數,#2引用第二個參數,以此類推,比如:

 

\newcommand\answer[1]{the answer is #1}

\newcommand\parabola[3]{\ensuremath{y=#1x^2 + #2x + #3}}

3 定義帶默認值參數的命令

在定義帶參數的命令時,LaTeX也允許其中的一個參數有默認值,即在調用命令時可以不給出這個參數,直接取用該參數的默認值。這個帶默認值的參數,在LaTeX中永遠使用#1來引用。定義帶默認值參數的命令的通用形式爲:

 

\newcommand\cmd[參數個數][參數的默認值]{命令的定義}

需要特別注意的是,當調用這個命令時,使用{}形式給出的參數列表要比定義命令時少一個—帶默認值的參數不能以{}的形式給出。要麼使用參數的默認值,這樣就不需要給出#1這個參數;要麼使用[]在其他參數前面重新定義默認值

顯然,帶默認值參數的命令,至少有一個參數。

下面是一個具有一個參數且有默認值的命令:

 

\newcommand\lvec[1][n]{\ensuremath{x_1 + \cdots + x_{#1}}}

\lvec\par%使用參數的默認值n

\lvec[i]%重新定義參數的默認值爲i

下面是一個具有2個參數,其中#1爲帶默認值的參數的命令:

 

\newcommand\lvec[2][n]{\ensuremath{#2_1 + \cdots + #2_{#1}}}

\lvec{x}\par

\lvec[i]{x}

\lvec[2][n]的輸出和\lvec[1][n]是一樣的,但是顯然\lvec[2][n]更靈活一些。

下面使用帶默認值的參數重新定義拋物線:

\newcommand\parabola[3][x]{\ensuremath{y=#2{#1}^2 + #3#1 + #4}}

4 注意事項

有編程經驗的童鞋很容易寫出下面的代碼:

 

\newcommand\str1{this is a string}

\newcommand\str2{this is another string}

但是卻不小心掉進了TeX的“陷阱”!LaTeX的命令和TeX的命令一樣,只允許普通字符(26個字母的大小寫形式)作爲命令的名稱,不允許出現數字、特殊字符等。當然,這不是一個不可逾越的鴻溝。本質上來說,只要catcode=11的字符都可以作爲命令的名稱,因此只要修改字符的catcode爲11,這個字符就可以出現在命令的名稱中。LaTeX的內部命令中,\makeatletter命令的實質就是修改字符@的catcode爲11,這樣@就可以出現在命令名稱中了。\makeatother重新修改@的catcode爲12,不允許@出現在命令的名字中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章