3.1 命令
3.1.1 命令的分类
排版命令分为两种,一种是控制词,另一种是控制符,它们的说明如下:
控制词 控制词由反斜杠和紧跟其后的一个或多个英文字母(区分大小写)组成,大多数控制词从字面上就能知道其含义,如\centerline{文本}表示将输入的文本放在一行的正中间。
控制符 控制符由反斜杠和一个符号(不是字母)组成,如命令\!、\:等。
根据命令的复杂程度,命令又可分为一般性命令、带参数的命令。有些命令很简单,一个反斜杠后紧跟着一些字符且不带参数的被称为一般性命令,如\quad。为了增强排版功能,有些命令中带有参数选项,被称为带参数的命令。参数选项又分为必需参数和可选参数,必需参数是不可省略的参数,放在花括号中;可选参数是可以省略的参数,放在方括号中。当一个括号中含有多个参数时,参数之间用逗号隔开,如
3.1.2 命令的输入
在输入命令时,命令名必须紧跟着反斜杠,输入完毕后最好敲击一次空格键,让命令后留有空格。这是因为命令中的控制符后面不能紧跟字母或汉字,只能是其他字符(如空格、数字、括号和标点符号等)。例如,系统中有命令\text,在输入时既不能输入“\tex t”也不能输入“\texte”。若输入“\tex t”,字母x和字母t之间存在空格,系统会认为\tex是命令;若输入“\texte”,系统会认为“\texte”是命令,如果系统中没有这两个命令,那么系统在编译源代码时会提示出错,中止编译。又如,在TeXstudio中输入“\heiti计算机排版”和“\heiti 计算机排版”,前者中汉字紧跟着命令,编辑窗口内命令和汉字都呈同样的颜色,这是系统把字母和汉字连在一起的整体作为了一个命令名;后者中命令和汉字之间存在空格,此时编辑窗口内命令和汉字所呈的颜色不同。输入前者使得编译出错,输入后者则编译正常。所以正确的输入习惯是:输完命令后就习惯性地敲击空格键,以避免命令后面紧跟着英文字母或汉字导致的编译出错。
3.1.3 专用符号的用途和输出方法
在编写源代码时,其中的排版命令是不会出现在输出结果中的,此外,还有10个专用符号,直接输入时具有特殊的排版用途不会出现在输出结果中。如果需要输出这些专用符号,系统给出了相应的输出方法,见表3.1。
表3.1
以下具体说明注释符、空格符、花括号的用途。
1. 注释符的用途
百分号“%”在LATEX中为注释符。系统编译源代码时是按从上到下、从左到右的顺序逐一读取代码的,如果遇到了注释符,那么系统会忽略%及其所在行中%右侧的所有字符。在用TeXstudio编辑的源代码中%及其所在行中%右侧的所有字符呈灰色。
注释符%有4种具体用途(加了底纹的是在编辑窗口输入的代码,未加底纹的是对注释符所起作用的解释):
但是,注释符前有反斜杠即为“\%”或者注释符放在\verb" "的双引号中时就没有注释的功能了。
2. 空格符的用途
在系统中,“~”是用于生成空格的空格符,那么“~”能生成多大的空格?又在什么时候使用“~”呢?
当调用了宏包ctex,源代码保存为UTF-8格式且使用XeLaTeX编译时,系统能够自动删除汉字之间的空格和自动添加汉字与其他字符(数字、字母和数学式等)之间的间距。例如本段中的“使用XeLaTeX编译”汉字与英文之间就被自动添加了适当的间距,而在早期版本中为了得到这样的效果必须要在源代码中输入“使用~XeLaTeX~编译”才能实现。“~”生成的空格大小就是前述自动添加的间距大小。
那么什么时候需要输入“~”呢?因为系统并不是绝对地能在汉字与其他字符之间自动添加间距的,所以建议先编译源代码生成并查看PDF文档,如果觉得某个地方需要空格,就可以在对应的源代码处使用“~”生成空格。例如,输入:注释符\%的用途,输出:注释符%的用途。百分号的左边没有留出适当的间距,在源代码中百分号的左边输入“~”,即输入:注释符~\%的用途,输出:注释符%的用途。这样在百分号的左右两边都空出来适当的间距。
3. 花括号的用途
花括号的用途具体如下。
一是在带参数的命令和环境中“{ }”内须写入参数。如字号设置命令\zihao{ }的花括号中要写入字号参数,若不填写则会编译出错。
二是用于构建分组。若想使命令的作用限制在一定的范围,就把该命令和它作用的对象写在“{ }”内。例如:
前者未构建分组,使命令\zihao{-3}后的对象全按照-3对应的字号(即小三号字)排版,直到有新的字号设置命令为止。后者构建了分组,把“\zihao{-3}计算机”放在一个分组内,这样只是把字号设置命令作用在“计算机”这三个汉字上。
3.1.4 空白命令
前面讲述了空格符“~”可以生成一定宽度的水平空白,而文档中常常需要在某行的某处加大间距或减少间距,在相邻两行之间加大行距或减少行距,这就是调整水平空白和调整垂直空白。在编辑源代码时,用敲击空格键的方法一般是无法在输出中生成空格的。如果要插入空白间隔,就必须使用空白命令。空白命令又分为水平空白命令和垂直空白命令。
1. 水平空白命令
生成水平空白的命令及其说明如下:
\, 用于生成一段宽度为0.16667em[1]的水平空白,放在两个字符之间用于调整字符间距。这个命令放在阿拉伯数字和单位之间生成较小的空白,如输入:1.2\,cm,1.2cm,输出:1.2cm,1.2cm。这两个输出结果相比,前者比后者更好。该命令置于段首和段尾无效。如果想要在段首有此长度的水平空白,那么就在这个命令的左边输入命令\mbox{},命令\mbox{}用于生成一个宽度、高度都为0的看不见的字符,作为支撑物[2]。
\: 用于生成一段宽度为0.2222em的水平空白,放在两个字符之间用于调整字符间距,使用前要调用公式宏包amsmath。该命令置于段首和段尾无效。
\; 用于生成一段宽度为0.2777em的水平空白,放在两个字符之间用于调整字符间距,使用前要调用公式宏包amsmath。该命令置于段首和段尾无效。
\! 用于生成一段宽度为−0.16667em的水平空白,放在两个字符之间用于缩小字符间距,使用前要调用公式宏包amsmath。该命令置于段尾无效,置于段首会使该段上移。
\quad 用于生成一段宽度为1 em的水平空白,放在两个字符之间用于调整字符间距。
\qquad 用于生成一段宽度为2em的水平空白,放在两个字符之间用于调整字符间距。
\hspace{长度} 如\hspace{3mm}放在两个字符之间用于生成一段高度为0、宽度为3mm的水平空白。花括号内的长度值可以设置为负值,负值表示缩短间距。如果设为0,必须写上单位,如0pt或0mm,否则编译时系统会提示出错。该命令置于段首有效,置于段尾无效。此外,如果这个命令的左右字符刚好在输出中位于行尾和行首,这个命令就失效了,相当于没有输入这个命令。
\hspace*{长度} 这个命令与上一个命令相比只是多了一个星号,这两个命令的作用基本相同,唯一的不同在于带星号的命令一定能在其左右字符之间生成空白。
\hphantom{字符串} 放在两个字符之间用于调整字符间距。这个命令的命令名是由英文单词“phantom”和字母“h”组成的,“phantom”的意思是幻影、幽灵,即看不见的,“h”是指水平方向。如命令\hphantom{ab 排版}生成一段总高度为0、宽度等于“ab 排版”这一字符串宽度的水平空白。花括号内的字符串可以是文本或各种符号命令。该命令置于段首和段尾无效。
\hfill 弹性水平空白命令。它像一根具有无限伸缩能力的弹簧,最短可以为零,最长可以为任意长,用于将当前行剩余的空间填满。简单地说,这个命令会根据排版的结果在命令左右的文本之间生成需要的空白,以充满一行。但是,当这个命令位于有多行的段落之内时,它就无效了,因为命令所在行已经被文字充满,无空可填。当命令位于单独的一行或者接近段落的末尾时命令就有效了,这时命令的弹性发挥作用,使命令所在行的文本和空白一起充满整行。
范例5 水平空白命令的应用
看下面框线内的七个段落:
框线内的七个段落内容完全一样,仅是各段内文字间水平空白不同。第一段的源代码中没有添加任何水平空白命令,文字和标点符号是一个挨着一个排版的,后面的六段文字内出现了水平空白。以第一段文字作为参照,以此来理解水平空白命令所起到的作用。
操作步骤:
① 框线内第二段文本的代码如下:
说明:代码的第2行调用了宏包amsmath,该宏包中定义了三个命令:“\:”“\;”“\!”,如果不调用该宏包,那么编译会中止。第3、第4行调用了页面设置宏包geometry,页面的高度和宽度分别是13cm、11.6cm,上下左右的边空都是2mm。调用宏包后续会有讲解,此处请读者对照代码中的空白命令与框线内第二段文本的排版结果,就可知道空白命令所起到的作用。
② 框线内第三段文本的代码如下:
说明:编译后对照第三段的排版结果,理解源代码中的空白命令的作用。
③ 框线内第四段文本的代码如下:
④ 框线内第五段文本的代码如下:
⑤ 框线内第六段文本的代码如下:
⑥ 框线的第七段文本的代码如下:
范例6 弹性水平空白命令\hfill的应用
用弹性水平空白命令\hfill制作下面框线内的四行排版效果。
源代码是:
说明:因为在宏包ctex中对段首的首行设置了两个汉字宽度的缩进,而此处要取消首行缩进,所以第3行代码设置了首行缩进为0mm。源代码的第4行有命令\mbox{},它用于生成一个宽、高都为零的空字符。把命令\hfill放在文字“左对齐”和这个命令之间,就好像在文字和空字符之间放置了一根弹簧,这根弹簧把左边的文字推向左侧,把右边的空字符推向右侧得到了左对齐的效果。接下来的居中对齐、右对齐和左右各居两端,读者可以对照理解了。
弹性水平空白命令\hfill有一些衍生命令,这些命令的作用与\hfill的区别只是它们不是以空白填充而是用有形的符号或线条填充的。这些衍生命令及其说明如下:
\dotfill 用点线填充。
\hrulefill 用水平线段填充。
\downbracefill 用开口向下的花括号填充。
\upbracefill 用开口向上的花括号填充。
\leftarrowfill 用向左的箭头填充。
\rightarrowfill 用向右的箭头填充。
范例7 弹性水平空白命令衍生命令的应用
制作下面框线内的排版效果。
源代码是:
说明:注意第10行和第11行两行代码的区别。
2. 垂直空白命令
生成垂直空白的命令及其说明如下:
\vspace{长度} 如\vspace{3mm}用于生成一段高度为3 mm、宽度为文本行宽度的垂直空白。花括号内的长度值可以设置为负值,负值表示缩短间距。该命令常用于段落之间或图表与上下文之间。该命令置于一页的页首或页尾无效,如果想通过这个命令调整页首(页尾)的垂直空白高度就在命令的左边(右边)输入命令\mbox{}。
\vspace*{长度} 这个带星号的命令与上个命令作用基本相同,区别在于带星号的命令置于一页的页首或页尾,仍能生成有效的垂直空白。
\smallskip 生成一段高度为的可伸缩的垂直空白,最小是2 pt,最大是4 pt。在排版中系统会自动选择范围内的一个值。该命令较少使用。
\medskip 生成一段高度为的可伸缩的垂直空白,最小是4 pt,最大是8 pt。该命令较少使用。
\bigskip 生成一段高度为的可伸缩的垂直空白,最小是8 pt,最大是16 pt。该命令较少使用。
\vphantom{字符串} 其命令名是在英文单词“phantom”的前面加了字母“v”,其中“v”是指垂直方向。如\vphantom{ab排版}生成一段宽度为零、总高度等于“ab排版”这一字符串总高度的垂直空白。花括号内的字符串可以是文本或各种符号命令。该命令常用于使分处在两行数学式上的左、右括号的高度保持一致。
\vfill 弹性垂直空白命令。用于将当前页面剩余的垂直空间填满。该命令置于页首无效,如果想要通过它实现页首的弹性空白填充,则在该命令左边输入命令\mbox{}。
前述两个命令\hphantom{字符串}和\vphantom{字符串},一个用于生成水平方向上的空白,另一个用于生成垂直方向上的空白。此外,还有命令\phantom{字符串},它用于生成一块总高度和宽度分别等于花括号内字符串总高度和宽度的空白。因为在排版中花括号内的字符串占着规定的位置而不显示,所以这三个命令统称为占位命令。
范例8 垂直空白命令的应用
如何很好地使用垂直空白命令?建议在编辑源代码时暂不输入垂直空白命令,编译完成后观察输出结果,看在哪些地方需要多少垂直空白,就在相应的源代码处输入垂直空白命令。
先看如下框线内的两段文字:
假如要在第一行和第二行之间留出10mm的垂直空白,且要在第一段后留出空白并把第二段置于页面底部,此外还想要使第五行与上一行增大行距,即做到如下的输出:
源代码是:
说明:命令\vphantom{\zihao{1}字}中的对象“字”是一号字,尺寸很大,这个命令生成一段宽度为零、总高度等于一号的总高度的垂直空白,这样就使第五行与第四行拉开了间距。