第二节 书籍排版与普通排版
%%% 这部分实际上是介绍tex的输入与词法规则,算是编程基础
当使用计算机排版,我们首先要知道传统排版与使用计算机输入字符的区别。本来计算机上面的字符并不是专门为了排版而设计的。为了使用现有的计算机键盘输入TeX的源文件,我们需要对原来的键盘符号进行一个重新定义。
单引号,双引号
键盘上,左单引号与右单引号是区分开来的。一个是好像重音符号的东西,另一个就是普通的单号号。但是直接键入的时候,TeX将这个符号理解成左单引号。显然我们不能使用ASCII上的双引号排版双此号,因为那样无法区分左右。所以两个连在一起的左单引号代表左双引号,而两个连在一起的右单引号代表右双引号。
这种方式总让我想到那个m4编程语言,也使用
`与'代表成对的单引号。这样的标记有一个明显的好处,那就是我们可以利用它实现块的嵌套。而且我们可以根据引号的方向就可以看出来被括起来的文本是在这个括号的前面还是在这个括号的后面。
连字符,短破折号,破折号,减号
在键盘上它们有一些相像。通常直接键入-产生一个连字符,--代表一个短破折号,而使用---代表一个破折号,最后的一个减号只在数学模式当中使用,方法是$-$。连字符常用在复合单词当中,短破折号常用来表示一个范围,比如page12--23.。其实也就是短破折号常用在表示数字范围上面。破折号是作为一个标点符号来看的。经常用于区分两个句子或者一个句子中不同的短语成分。我们可以想象,假设在符号\(X\)前面有\(A\),后面有\(B\),那么连字符将\(A\)与\(B\)视为一个word,而短破折号将\(A\)与\(B\)视为一个number,破折号将\(A\)与\(B\)视为两个短语。至于减号,则是附加了运算符的意义。
按照长度从长到短来说,破折号> 减号> 短破折号> 连字符。
在英文中,hyphen表示连字符,dash表示破折号,minus表示减号。在常用的文献当中,有时候也使用连字符代替短破折号以代表从第XX页到第YY页。不过,我们还是严格按照TeX当中的规定吧。以后就用--表示从第多少页到第多少页。
ex2.1 [怎样键入单引号,双引号,连字符,破折号,短破折号,连字符]
方法如上。
ex2.2 当你在一行中连续键入四个连字符时会得到什么结果?
按照最最长记号识别原则,应当是在第三个连字符后面断开,结果为一个破折号与一个连字符。
在排版精良的书籍中,两个相近的字母有时候会连在一起,称为组合字。组合字常用在ff,fi,fl,ffi,ffl这样的组合当中。主要是提高可读性。我们可以以find为例查看一下排版效果(默认为根据单词的组合情况自动排成组合字的)。如果要取消组合字,可以在字母中间加上一对大括号,表示从这里断开分组,将前面的词视为一个完整的排版单元。
在TeX当中,除了这样的调整外,还有字距的自动调整,比如\(V\)与\(A\)在合在一起的时候,会自动调整它们的间距,以使得排版更好看一些。
一般而言,TeX直接排版的时候就好像在打字机上键入书稿一样,但是在前面所提到的情况,以及其它的一些细节会做好调整。
如果我们的键盘上没有左引号或者又引号,可以使用控制序列\lq,\rq代替。注意TeX在识别记号的时候是遇到非字母符号的时候结束。如果控制序列后面是一个空白字符,那么控制序列后面的空白字符会被忽略,如果想使本控制序列结束,而后面的空格不被忽略,可以使用一个转义的空格,如\rq\rq\。
ex2.4 好了,现在你知道怎样得到相邻引号的排版方法了吧。
在单引号与双引号连续排版的时候,我们不能简单地敲入''',{'}''等其它的任意设想的符号,按照习惯,在两者连续排版的时候,应当在单引号与双引号之间加入一个窄的空格,比如'\thinspace''。
ex2.5 想一下作者为什么使用控制系统\thinspace而不是\,以解决相邻引号的问题?
为什么使用\thinspace而不是\,呢? 我觉得可能根据TeX的设计原理,在\thinspace处不会发生断行吧。在进入数学模式之前与离开数学模式的时候可能会断行。所以可以设想一个TeX源文件有一个断行点。这个断行点决定了在那些位置可以断行。
TeX的控制系列
键盘所含的字符与所期望的显然是太少了,所以一些字符不得不转义使用。在TeX程序源代码中,使用反斜杠作为转义符。实际上,TeX允许使用任意字符作为转义符,但是一般采用反斜线。主要因为它在一般文本中很少被使用。
操作系统的转义符通常是ESC按键,它与TeX系统的转义符根本不是同一个概念。
TeX系统的转义序列由反斜杠加后面的一个单词构成,单词的定义是[a-zA-Z]+,因此既不能含有数字也不能含有下划线。
常用的控制序列有\input{STRING}用于将目录名为STRING.tex的文件读入到当前文档里面并执行。而\',\"表示重音符(一个像是加拼音中的二声,另一个是上面加两个点)。而且在TeX当中使用\\并不表示换段(与LaTeX不同),而是表示排版出反斜杠来。
控制序列有两类,前面的一类我们已经介绍过了。实际上,\'这样的控制系列就是第二类,它们由反斜杠后面加上一个非字母符号构成。
ex3.1 在\I'm \exercise3·\\!中,控制序列有哪些?
有\I, \exercise, \\三个。
ex3.2 键入各种重音符号。
除了前面的\'、\"外,还有其它的控制序列。
\'产生一个类似于阳平的声调符号,acute accent, 尖调符号\.在字母上面产生一个点号, dot accent, 点调符号\=在字母上面产生一个,macron accent,平调符号\^在字母上面产生一个^、circumflex accent,长调符号\\`` 在字母上面产生一个\,grave accent, 重调符号\"在字母上面产生两点,umlaut accent,元音变音符号\~在字母上面产生一个波浪线\d下加点\H匈牙利元音变音符号\t连接两个字母的等号,\u上面加一个类似u的东西,\v上面加上一个类似v的东西,上声。
由于\v是一个控制系列,所以我们后面得加上一个空格或者一对大括号以使它结束。控制系列的作用域实际上是它的参数,关于TeX的控制系列如何得到参数,可以参考后面的学习主题。
在转义符后面跟一个空格表示的是一个不能被忽略的空格。它是第二类控制序列,所以在转义后的空格后面的所有字符都会被忽略。所以使用转义时,用\ \ \表示三个连续的不能忽略的空格。
一般来说,在英文中,句子之间的间距要比空格大一些。因此打字员通常使用两个连续的空格以表示句子结束。但是在TeX中,连续的空白字符作用是一样的。并且,TeX会自动判断哪里是句子的结束,并在排版时自动计算出较大的间距。
关于TeX标记的排版
TeX标记本身用\TeX控制系列产生。但是它后面是没有自动排版括号的,所以如果将TeX作为一个单词来看,我们还必须在后面加一个转义的空格。
TeX命令后面不加空格是有原因的,因为我们经常使用`’这样的括号,如果\TeX恰好后面是一个引号,如果有空格,就会产生错误的结果。
TeX系统控制系列的情况
TeX的内置控制系列大概有900个。其中有许多都是数学符号,如\pi,\Pi,\aleph,\infty, \le, \ge, \ne, \oplus,\otimes 等。
记符号也是一件不容易的事情。如果是希腊字母,小写的用全小写的英文,大写的则使用首字母大写的控制序列,至于\oplus,\otimes,则可以看成是带圆圈的加法与乘法,在群论里面经常会用到。
其中的大约300个称为原始控制系列,其中\input 就是一个原始控制系列。原始控制系列是很基本的。我们不妨看一下,\TeX,\', \oplus 这些符号都不是原始系列,所以原始系列几乎可以看成是TeX语法当中的关键词。
在TeX运行时的交互式环境下,用\show命令后跟控制序列可以查看它的类型与值。我们不如在交互式环境下面读\show``\thinspace 看一下结果。
TeX的交互式环境下面有各种不同的提示符,当有两个星号时,表示需要输入一个文件名进行处理(因此进入TeX前我们先touch一个tex文档); 当有一个星号的时候,表示我们可以正常输入控制序列了。而问号表示我们进入了程序的菜单界面,这个时候按回车返回到一个星号的状态,使用X表示退出。当使用\show命令后,以>开头的行表示控制序列的含义,->这一行表示控制系列的定义。
通过测试\<回车>是一个高级控制序列
ex3.4 有多少个两个字符的不同控制系列? 有多少三个字符的?
逻辑上跟ASCII编码数有关。