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

1 定义无参数的命令

这是newcommand最简单的使用方式,比如嫌每次输入“中华人民共和国”很麻烦,可以定义命令: \newcommand\prc{中华人民共和国} 以后就可以通过输入命令\prc来输入“中华人民共和国”了。

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,不允许@出现在命令的名字中。 选自:http://softlab.sdut.edu.cn/blog/subaochen/

点赞(19)

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部