latex超级基础的文档手册——第六部分:自定义,重定义

1.latex中的自定义指令

在latex中,有大量的指令,环境,当我们对一些指令不知道,查资料以及查手册是非常有效的。除了大量的指令可以使用外,我们还可以进行自己去定义自己要用的指令。

自定义指令需要在导言区进行设置,使用指令:

\newcommand\指令名[输入参数个数]{指令内容}

我们来看这条指令,其实就像是各个编程语言的函数类似,自定义指令也是如此啊。

指令名是自定义指令的名字,之后对其调用需要,这里注意自定义指令名字应该为英问字母组成,不能出现数字与符号,也可以把指令名用{}括起来,当然这也是个人习惯。                        

输入参数个数代表了自定义指令能输入多少个参数呢,这个个数最多是9个。    指令内容就是我们如何操作呢,在指令内容里,使用“#数字”来表示输入参数(比如:#1就是第一个输入参数),从而可以对输入参数进一步操作。  

举个例子:

\newcommand\bug[1]{这段代码有#1个bug\\}             %\\代表换行符

\newcommand\pro[2]{这个工程有#1段代码,这有#2个bug}

之后就是要使用我们的自定义的指令啦,使用起来很简单,就是直接调用指令名,输入参数使用{}进行填写,一个{}填写一个。我们先调用之前写的自定义的指令试试:

\bug{5}

\pro{2}{5}

看看结果:

latex超级基础的文档手册——第六部分:自定义,重定义latex超级基础的文档手册——第六部分:自定义,重定义

图1-1 自定义指令例子与编译结果

       自定义指令也可以设定默认参数,但只能设定#1的默认参数,定义时:

\newcommand\proj[2][3]{这个工程有#1段代码,这有#2个bug}

此时,如果我调用该指令时,如果输入参数不足,那么第一个输入参数会自动设为3。

latex超级基础的文档手册——第六部分:自定义,重定义latex超级基础的文档手册——第六部分:自定义,重定义

图1-2 自定义指令默认参数例子与编译结果

2. 重定义指令

       当然,也可以用\renewcommand去重定义指令,和自定义不同,重定义指令是对latex中的原有指令进行修改,但是有个优势是,重定义指令修改了原有指令的操作,但是仍适用于原有指令的环境。我们写中文报告时,常这么做:

\renewcommand\contentsname{目录}

\renewcommand\listfigurename{插图目录}

\renewcommand\listtablename{表格目录}

\renewcommand\refname{参考文献}

\renewcommand\indexname{索引}

\renewcommand\figurename{图}

\renewcommand\tablename{表}

\renewcommand\abstractname{摘要}

\renewcommand\partname{部分}

\renewcommand\appendixname{附录}

\renewcommand\today{\number\year年\number\month月\number\day日}

       于是排版时各个标签和时间就成了中文的了。重定义指令和自定义指令用法差不多,在此不多赘述了。

3. 环境定义

       指令可以自定义,环境也是可以定义的:使用\newenvironment与\renewenvironment.

       \newenvironment{环境名}[参数个数][#1的默认值]{环境前定义}{环境后定义}

       \renewenvironment{环境名}[参数个数][#1的默认值]{环境前定义}{环境后定义}

环境前定义就是环境的开始,而后定义代表了环境的结束,举个之前的例子:

\begin{array}                           %环境前定义

                                                 %内部是环境中的指令和数据

\end{array}                              %环境后定义

4. 宏定义

       \def是latex进行宏定义的,用法其实和之前的差不多,宏定义有个优势,宏定义的宏名(模板名)中是可以含参数的,而编译器也不会检查是不是以及含有这条指令呢。

       编译器不会检查,所以我们不再使用宏时就要常常删除它,以免造成不必要麻烦:

       \let\宏名\undefined

       如果可以定义新指定,其实最方便还是定义新指令。