naive blog
LaTeX入门(三)——Hello world!
这篇文章中,我们将用LaTeX写一个Hello world!
下载好编辑器(Windows: TeXworks, macOS: TeXShop),我们打开对应的软件,首先第一步,是将编译器调成XeLaTeX. 我以TeXShop为例,也就是选择左数第二个下拉组合框,选择XeLaTeX即可。(这个只用设置一次,以后再打开的话都不用设置)
然后在其中输入以下代码:
\documentclass{article}
\begin{document}
Hello world!
\end{document}
然后找到一个叫“排版”的按钮,点击,就会生成对应的文件啦!(这里的排版就相当于把衣服设计好,交给裁缝,其他的事都是裁缝的事啦)
LaTeX文档的结构
上述是如何用LaTeX写一个"Hello world!". 借此,我来介绍一下LaTeX文档的结构。基本框架为
\documentclass{aClass}%文档类
%导言区
\begin{document}
%正文
\end{document}
这里%代表注释,其后的文字在编译阶段会被一个空白字符代替。
文档类
第一行,是固定的
\documentclass{}
.这个大括号里填的东西叫文档类。什么是文档类呢?沿用上一篇文章中的比喻,用LaTeX就好比设计衣服。那么文档类就相当于我们要设计的衣服的种类。就好比说,我声明了我要设计一条连衣裙,那么就会默认生成裙摆,同时这连衣裙也不会出现裤腿之类的东西;我又声明我要设计一双布鞋,那么我们也不能在接下来提到领口、袖口,但我们却能使用鞋底、鞋垫。LaTeX文档类的作用也是类似的。我们常用的LaTeX文档类有article, report, minimal. 比如说,使用了article, 一般就用不了chapter,只能用section, subsection, 使用report就可以用chapter. 同时,在排版时也会有一些自动调整的东西,比如说一个叫book的文档类,生成以后的文档就会自动分左页右页。有时候,同一个命令在不同文档类的行为也不同,就像是同样是扣子,在牛仔服上就是金属的纽扣,旗袍上就是盘扣。我们最常用的,是article文档类,也是我们之后的文章里默认使用的文档类。此外,minimal文档类,则就相当于一个布料,它啥也没给你预设,就是一个最简单的纸。此外,如果我们要在LaTeX中使用中文,则应使用ctexart文档类。那有人会有疑问,之前不是说XeLaTeX编译器可以支持各种Unicode编码吗。这里的原因在于,使用了XeLaTeX之后,编译器只会认,不会处理;在没使用XeLaTeX之前,编译器连认都认不得。而使用了ctexart文档类之后,编译器就知道该怎么输出中文了。
导言区
在文档类和
\begin{document}
之间,是导言区(preamble) . 导言区是干什么的呢?是进行文档预设的。举个例子,你设计衣服,不是所有的细节都由自己来设计。有许多的东西我们直接用现成的就行。比如说,我这衣服,面料要是瑞蚨祥的面子,这配的鞋子,要是内联升的布鞋,最好再配一把荣宝斋的折扇。这些,都写在设计图纸上。然后交给裁缝,裁缝拿了图纸,第一件事就是根据这图纸上的明目,去各个地方置办。在LaTeX中,这些名目叫做
宏包
(package), 用指令
\usepackage{}
来调用。这些宏包大都与时俱进,经常有更新,那我们从哪知道这牌子最新的内容呢?就需要包管理器。我们下载下来的LaTeX发行版中,除了配有TeXworks, TeXShop这类的编辑器,还有包管理器,也就是TeX live. 这个包管理器中管理着所有我们可以使用的宏包,我们也可以利用这个软件进行宏包更新。此外,每个宏包里都有许多配套的指令供我们使用,就像是我可以选择这扣子,要是单排扣还是双排扣,要是铜的还是锡的。这些配套的指令,也是写在导言区里的。一个宏包的指令可能有几十甚至几百个,我们只需要记得常用的一两个就行了。那么其他指令该怎么查呢?每个宏包都有它配套的说明书。这时候
texdoc
就派上它的用场了。Windows系统打开命令提示符,macOS系统打开终端,在里面写上
texdoc xxx
其中"xxx"为所要查找的宏包的名字。
输入以后,就会弹出一个pdf,就是宏包的说明文档了。
总得来说,导言区是由各种各样的指令构成的。指令分为无参数指令、有参数指令及环境三类。其基本格式为
\command[option]{parameter}
每个指令,都是由一个反斜杠
\
开头,然后跟着指令的名称,接下来中括号中写选项,大括号中写参数。
无参数指令,比如说
\LaTeX
, 输出的是排版好的LaTeX(正如本文的题图);
\bfseries
,使其所在的作用域内的文字全部变成黑体;
\maketitle
输出标题;
有参数指令,比如说
\textit{}
, 将其参数内的文字全部变成意大利斜体;
\author{}
将作者名存储到一个叫author的变量中,在后续输出标题时会被调用。
环境,就是
\begin{env}
和
\end{env}
. 这两个永远是配套使用的(因为当初Knuth老爷子是用Pascal写的TeX233333) 。比如说
\begin{document}
和
\end{document}
之间的就是正文环境,
\begin{table}
和
\end{table}
之间的就是表格环境。我的建议是大家在写LaTeX的时候,begin和end先打出来,再在之间填内容,以防忘掉了end.
而填在中括号内的可选的选项,也是指令的组成部分之一。比如说,
\begin{table}[H]
,就是一个以
H
类型浮动的表格;
\usepackage[ruled]{algorithm2e}
就是使用被画在框框里的算法格式。
此外,我们也可以自己定义指令。就好比你在设计图上写着,我下面约定,我说“扣子”的时候,就是说的是带花纹的纽扣。LaTeX的定义指令的方式有两类:def类和new类。比如说,我已经有一个指令叫
\cmd
和
\cmd1
, 我要定义一个新的指令
\cmd2
, 它是先使用
\cmd
, 再使用
\cmd1
. 那么我们有如下两种定义方法:
\def\cmd2{\cmd\cmd1}
或者
\newcommand\cmd2{\cmd\cmd1}
可以直观地认为,就是在接下来文中出现
\cmd2
的地方,都直接用
\cmd\cmd1
来代替。
但是,
\def
命令和
\newcommand
命令也有区别,如果我定义了一个指令,它的名字已经被别的指令用了,那么
\def
命令则是直接替代,
\newcommand
命令会报错,我们用
\renewcommand
则不会报错。
对于定义带参数的命令,比如说,我们已经有了两个指令
\cmd{}
和
\cmd1{}
,我想定义指令
\cmd2{}{}
,它接受两个参数,第一个参数传给
\cmd{}
, 第二个参数参数传给
\cmd1{}
,这时候我们可以写
\def\cmd2#1#2{\cmd{#1}\cmd1{#2}}
或者
\newcommand\cmd2[2]{\cmd{#1}\cmd1{#2}}
对于
\def
指令,有几个参数就写几个
#
, 对于
\newcommand
指令,
[]
中直接写参数的数量。
如果我要新定义一个环境,则使用命令
\newenvironment
命令。比如说,我现在已经有一个叫
env
的环境,我想新定义一个叫
env1
的环境,它先进入
env
环境,再在环境内执行
\cmd
指令。那么,我们的写法为
\newenvironment{env1}{\begin{env}\cmd}{\end{env}}
在
{\env1}
之后的第一个大括号内,写的是内容,可以理解为在遇到
\begin{env1}
时直接替换;第二个大括号内,遇到
\end{env1}
时直接替换。
最后,介绍一些作用域。和部分编程语言一样,LaTeX也有块级作用域。就好比,我在设计衣服时,画了个框,说这个框内的所有花纹都给我用绿色画。出了这个框,这个命令就无效了。在LaTeX中,作用域由
{...}
及环境
\begin{env}...\end{env}
构成。比如说我们之前提到的
\beseries
命令,它使它所在的作用域内的所有文字变成粗体,于是我们可以写
{\bfseries This is bold} and this is normal.
这样, This is bold会是粗体,而and this is normal则会变回正常。在任何环境之间,也是如此。
最后的最后,唠叨一句,
\usepackage
这个命令,只能在导言区使用,就像是你不能让裁缝都开始做衣服了,突然又发现有东西没有置办,还得跑出去置办。其余的命令,大都可以在正文内使用。
正文
在
\begin{document}
和
\end{document}
之间的,就是正文。 只有在这里面输入的东西,才会被输出。随着我们对LaTeX了解的深入,在正文里能写的东西会越来越多。
最后
由于本人能力有限,文章内必有不足之处,敬请方家不吝斧正。