0%

在latex中定义新命令

定义新命令

为了在latex中书写方便,可以用newcommand定义新命令:

1
\newcommand{\<cmdname>}[<n>]{<command>}
1. <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}依旧等于 有时候我们需要重新定义一个已经定义的命令,此时,我们可以用renewcommandrenewcommand的使用和newcomand相同,但是它必须以及存在原命令,否则会报错。 这些命令的定义会受到局部环境的影响,即在环境内部定义的命令在外部无法使用。

使用局部命令

为了让书写简单美观,我们常常希望命令能够像编程语言的变量一样,即可以重新定义后对之后的代码都生效。使用newcommandrenewcommand我们可以如下操作:

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⟩}
1. <name>为新定义的命令名字。
2. <parameter text>为参数定义,可选,比如我不需要参数时候可以不写,我需要三个参数时为#1#2#3
3. <definition>为命令体,其中的参数用#1#2……表示。

def不需要检查该命令是否定义,因此适合用来该操作。同时def会受到局部环境的影响,需要定义全局的命令可以用gdef,如果要对<definition>中的命令进行展开,可以用edef,全局定义展开时可以用xdef