定义新命令
为了在latex中书写方便,可以用newcommand
定义新命令: 1
\newcommand{\<cmdname>}[<n>]{<command>}
<cmdname>
为新定义的命令名字。
2. <n>
为参数个数,各个参数可以在命令体中用#1
、#2
表示
3. <command>
为命令体。
例如,可以用newcommand
定义平均值的表示: 1
\newcommand{\mean}[2]{\frac{#1_1 + #1_2 + \cdots + #1_#2}{#2}}
1
\mean{a}{n}
newcommand
不允许定义一个已经存在的命令,如果要防止报错,可以使用providecommand
,该命令使用和newcommand
一致,当命令不存在时,它相当于newcommand
,当命令存在时,它沿用之前的定义。例如: 1
\providecommand{\mean}[2]{\frac{#1+#2}{2}}
\mean{a}{n}
依旧等于 renewcommand
,renewcommand
的使用和newcomand
相同,但是它必须以及存在原命令,否则会报错。 这些命令的定义会受到局部环境的影响,即在环境内部定义的命令在外部无法使用。
使用局部命令
为了让书写简单美观,我们常常希望命令能够像编程语言的变量一样,即可以重新定义后对之后的代码都生效。使用newcommand
和renewcommand
我们可以如下操作: 1
2
3
4\newcommand{\mean}[2]{\frac{#1_1 + #1_2 + \cdots + #1_#2}{#2}}
$$\mean{a}{n}$$
\renewcommand{\mean}[2]{\frac{#1+#1}{2}}
$$\mean{a}{n}$$\mean
的效果是不一致的。但是这样做有个缺陷,即我们无法知道该命令是否已经定义,如果已经定义,那么第一个\newcommand
需要改为\renewcommand
。
为了克服这个缺陷,我们可以使用def
,def
的语法为: 1
\def\⟨name⟩<parameter text>{⟨definition⟩}
<name>
为新定义的命令名字。
2. <parameter text>
为参数定义,可选,比如我不需要参数时候可以不写,我需要三个参数时为#1#2#3
。
3. <definition>
为命令体,其中的参数用#1
、#2
……表示。
def
不需要检查该命令是否定义,因此适合用来该操作。同时def
会受到局部环境的影响,需要定义全局的命令可以用gdef
,如果要对<definition>
中的命令进行展开,可以用edef
,全局定义展开时可以用xdef