LaTeX 第二课:小试牛刀

1,394 阅读13分钟
原文链接: zhuanlan.zhihu.com

本文同时发布于微信公众号:两个少年的奇幻漂流(ID:Amazing_Adventure)

本期的主要内容有:

  • 一个 LaTeX 文档的基本结构

  • 导言区

  • 常用排版命令

    • 标题、作者与日期

    • 字体与字号

    • 特殊字符的输入

    • 一些常用排版效果

另外我们还会穿插介绍一些 LaTeX 的基本概念,在文中加粗表示并附上英文。


---

一个 LaTeX 文档的基本结构

承接上一期,我们把上期结尾处提到的这个文档再拿出来给大家看看,作为本次的示例。这个文档一共有7行,我们来逐一解读。

首先第1行中的\documentclass表示的是这个文档的文类(document class)。所谓文类,是指一套预设的排版格式,常见的(英文文类)有 article,report,book 等等。它们之间有一些微妙的差别,比如 book 文类就为了适应书籍的装订,为奇数页和偶数页安排了不同的左右边距;report 和 article 非常相似,但 report 中可以使用更多的章节等级,article 则是几乎最简单的一种。

我们能看到,所有蓝色的部分都是由反斜杠“\”打头的,这些都叫做命令(command)。每个命令后可能会有参数(argument),比如\documentclass就接受一个参数,就是用大括号括起来的 article。今后大家可能会遇到有更多参数的命令,那么就在后面继续加大括号就行了,每个参数都应该在一个大括号中。有的命令没有参数,比如第4行的“\\”表示换行,第5行的“\LaTeX”表示 LaTeX 的 logo,直接使用即可。

在文类的定义之后就是正文部分,每个文档的正文部分都必须在\begin{document}和\end{document}之间。这一对命令组成了一个环境(environment),在不同的环境当中,文本会有不同的格式预设。document 环境是最基本的环境,第3行和第6行之间还有一个 center 环境,这一环境的预设就是其中的内容全部以居中的方式进行排版。常用的环境有很多,例如 equation 环境用于排版公式,figure 环境用于排版图片,itemize 环境表示无序列表,enumerate 环境表示有序列表,诸如此类的环境我们会在后面慢慢提到。

这个文档的全部内容就是 Welcome to LaTeX 。当初为了将它作为题图,我希望它居中,于是放在了 center 环境里。我又希望它分两行呈现,因此在 Welcome to 后面加了一个强制断行命令。这里可能有人会问了,为什么已经按了回车,它却不断行呢?这里涉及到一个 LaTeX 中的基本规则,就是在一般情况下,一个换行、一个空格和多个空格这三种东西表达在输出文档中都是一个空格,而换行则需要连续两个换行符才能实现。与之等价的命令就是“\\”,它在排版表格等需要强制换行对齐的环境中非常有用,在正文中也可以使用。在这里,你也可以尝试把它删去,再用两个回车代替,看看排版效果是不是相同。

到这里,我们的第一个文档就介绍完了。不过这里因为文档简单,我们漏掉了一个非常重要的部分,就是导言区(preamble)。下面我们对导言区作一个简单的介绍。


---

导言区

导言区是文类定义之后,正文开始之前的部分。它的主要作用是对文档的性质做一些设置,或者自定义一些命令。在前面的例子中,导言区本应该在第1、2行之间,但是因为没有任何内容,所以就省去了。所以含有导言区的文档应该是下图这样的。

图中绿色部分就是导言区的位置,当然它并不限于两行,可以有很多。注意到这两行的字以百分号开头,显示为绿色,而且当我们对这个修改后的文档进行排版之后会发现和原来的文档没有任何差别(大家可以自己试试)。这就是我非常喜欢的一个 LaTeX 相对于 Word 的优势,它叫做注释(comment)。注释的内容不参与排版,你可以在里面写自己喜欢的任何东西。任意一行中,从百分号开始以后的部分全部都会在编译时被忽略。(有一些注释是会影响到排版的,这些注释有特定的格式,对每种编辑器还不一样,在此不作介绍。)

注释有非常大的用途,我来举个例子。你在写完论文的时候发现,之前写的一段文字没有什么用,可以被精简;但是这些文字如果删掉了就没有办法找回来,万一导师让我再把它加上就麻烦了。于是在 LaTeX 中,你可以放心地把这些内容注释掉而不是删掉,这样在修改文档的同时可以保留你原来的文字,就算导师让我加回来我也能立刻完成。

先前我们提到,导言区的作用之一是设置文档性质。所谓文档的性质有许多方面,比如设定标题、作者、日期、图题格式、表题格式等。其中还一个非常重要的作用就是添加宏包(package)。宏包可以被理解为一些模块,它们提供 LaTeX 本身没有的命令,以实现一些原本不太好实现的效果。比如 ctex 宏包就是一个把文档格式全部中文化的宏包,并提供 ctexart,ctexrep,ctexbook 等与 article,report,book 相对应的文类,方便排版中文文档。下面为大家展示一下被 ctex 宏包“汉化”过的文档和原来有什么区别。

首先是英文的:

然后是中文的:

两个文件的源文件除了正文内容略有出入之外,只有文类不同。前者是 article,后者是 ctexart。可以看到,使用了 ctexart 之后,日期变成了中文表达,而且行间距自动增加了,以适应汉字的排版。所以在写中文文档的时候,推荐大家使用 ctex 系列文类,可以省心很多。

导言区还可以设置一些自定义的命令,这属于比较高级的功能,我们先不作介绍。目前大家需要掌握的就是(1)知道导言区在哪(2)导言区是干什么的,就可以了。


标题、作者与日期

在介绍导言区的时候,我们已经看到了 LaTeX 排版的文档大概是什么样子了。大家一定很想知道,文章的标题、作者都是怎么排版上去的呢?下面为大家揭秘刚才的文档源码。

上面这个文档就是一个相对丰富的文档了。这里要为大家介绍5个命令:
  • \title:设置文档标题;有一个参数,用大括号跟在后面,表示标题内容;

  • \author:设置文档作者;一个参数;

  • \date:设置日期;其中\today表示系统当天日期,也可以手动输入;留空的话则不排版日期;

  • \usepackage:调用宏包;此处调用的宏包是 lipsum,用于生成随机文字(上面满篇的洋文其实都是生成的);第10行的 \lipsum[1-2] 表示插入随机文字的前两段;

  • \maketitle:这是这5个命令中唯一一个写在正文区的命令,排版标题;这个命令如果不使用,之前设置的标题、作者、日期都是不会出现在成品中的;使用它之后会排版标题、作者和日期。

有了这些命令,我们就可以顺利地写一篇简单的文章了,大家可以把里面的内容都换成汉字试试看。


---

字体与字号

现在我们能排版一些基本的文字了,下面我们来介绍一下字体和字号。

与字体相比,字号是相对简单的一个属性。LaTeX 提供了10个命令来声明文字的大小,由小到大分别是:

  • \tiny

  • \scriptsize

  • \footnotesize

  • \small

  • \normalsize

  • \large

  • \Large

  • \LARGE

  • \huge

  • \Huge

这些命令会由于全局字号的调整而代表不一样的大小,这样相同的内容在调整的过程中的相对大小保持不变,所以全局的修改不会改乱。以 \Large 为例,用法是将这个命令和需要调整的文字一起用大括号包起来,像这样:

There are smaller words and {\Large larger words}.

那么如果想要指定字号怎么办呢?老师让我们用五号字来写论文,应该怎么办?这时我们就可以用 ctexart 自带的一个参数 c5size 来处理,用法是在文类定义处做一些修改:

\documentclass[c5size]{ctexart}

这样的话\normalsize就会变成5号字,其他命令也会随之变化。同样地,用cs4size则可以把标准字号定义为小四号。假如想指定字号,而我们熟悉的又是汉字的字号系统(小四、五号之类),我们就可以用 ctex 为我们提供的字号指定命令,用法和前面的命令相同,下面举一些例子大家就明白了:

  • 小五:\zihao{-5}

  • 六号:\zihao{6}

  • 初号:\zihao{0}

  • 小四:\zihao{-4}

聪明的你一定看出规律了对不对!


字体是一个相对复杂的话题。在 MS Word 里面,我们可以随意地将文字加粗、倾斜,但其实里面是有一个完整的字体体系的。一般来说,我们用三个东西来定义一个字体:字体族(font family),字体形状(font shape)字体系列(font series)。这个字体主要是对英文而言的,字体族中包含罗马(roman)、无衬线(sans serif)、打字机(typewriter)三种,字体形状有直立(upshape)、意大利(italic shape)、倾斜(slanted shape)、小形大写(small capital)等四种,字体系列则有中等和加宽加粗两种。刚刚提到的在 Word 中的加粗其实就是采用一个字体的加宽加粗系列,而倾斜则是改变形状为倾斜。我们看看下面的例子:

这就是 LaTeX 中基本的字体。其中无衬线字体主要用于幻灯片展示,因为在距离较远的情况下,衬线对文字形状的识别没有任何用处,所以用无衬线字体来提升观众对文字的识别(所以不要再用宋体和 Times New Roman 做幻灯片了)。打字机字体具有字体等宽的性质,适合排版代码和抄录,方便对齐。意大利和加粗一般用于强调,意大利还可以用于引用他人的文字。通常情况下,罗马字体族就可以满足我们的大部分要求。一个文档中最好不要出现三种以上完全不同的字体,那样会显得非常杂乱。

在汉语中也有对应的字体划分方法。一般罗马就是宋体,意大利是楷体,打字机是仿宋(毕竟汉字全部都等宽),加宽加粗还有无衬线都是黑体。现在大家要明白一点,加粗并不只是把原来的文字加粗,而是用另一种字体来起到你想达到的效果。以上这三种字体的配合基本上就可以满足学术文档中的全部需求了。我们举一个例子:

另外,如果要给一个词语着重强调,可以使用\emph命令。它会把相应的文字改变成意大利形状。例如上图中的“斜体强调”就可以用“\emph{斜体强调}”来表达。
---

特殊字符的输入

现在我们可以完成一般文字的输入了。但是如果遇到下面这些文字呢(以下特殊字符素材均选自 @刘海洋 《LaTeX 入门》)?

这时候我们的键盘就无能为力了。虽然现在的 UTF-8 编码系统可以支持这些字符,但是我们没有办法直接从键盘上输入。这里我们就需要 LaTeX 中的一些命令来生成这些符号。下面以 o 为例,看看特殊的声调是怎么生成的:

还有一些特殊的字符,不是由英文字母衍生出来的,或者不是重音,在这里也给大家一并介绍一下:

我们在数学中常用的希腊字母、希伯来字母等符号,我们会在未来的数学公式排版中详细介绍。对一般的拉丁文字来说,上面的这些应该已经足够大家使用了。依靠这两个表格,大家可以尝试排版一下之前的那些有音调的文字。

另外还有一些非文字的符号,也是行文中常用的,下面也一并列出供大家参考:



常用排版效果

自此,对于单纯的文字文档,你应该可以像使用 Word 一样熟练地使用 LaTeX 来排版了。这里我们再介绍一些简单常用的排版命令,大家可以自己随便找一些文字来试着排版一下。

  1. 脚注。脚注的命令是 \footnote{脚注内容},只要跟在需要注的文字后面,就可以在那一页底部产生一个脚注。

  2. 强调。这个之前已经介绍过了,\emph{强调内容},效果是用 italic 形状排版这些文字。

  3. 修改行距。在导言区使用 \linespread{倍数},可将全文的行距进行调整。默认情况下采用的是基本行距,这一行距指的是从上一行的基线到下一行的基线之间的距离,而不是每一行底部到下一行顶部的距离。

  4. 靠左、靠右、居中。这三个命令都是针对段落的,首先要把需要处理的段落用大括号括起来,然后在开头加上 \raggedright,\raggedleft 和 \centering,分别对应靠左、靠右、居中。


最后再介绍两个环境吧。一个是计数列表,一个是无序列表。计数列表的环境名称是 enumerate,无序列表的环境名称是 itemize。下面是示例:

这两个环境都用 \item 作为新的一行的开始。如果要多级列表的话在里面再包裹一个环境就行了。

---


今天我们的介绍就到这里。如果大家想有一本参考书的话,我推荐给大家电子工业出版社出版的《LaTeX 入门》,作者@刘海洋(去年我还见过他本尊哈哈哈哈)。


下期我们将介绍页面布局和文档组织,以及在遇到困难时寻求帮助的方式。现在你已经可以排版简单的文档了,学习 LaTeX 最重要的不是看书看文章而是自己动手,一定要多看多练多尝试噢!

欢迎关注公众号:两个少年的奇幻漂流(ID:Amazing_Adventure)