本篇博文主要介绍LaTeX的基础知识,包括基础概念、排版格式等方面,希望能对LaTeX的整个工作框架进行大致的介绍和总结。
注:本系列博客(包括排版篇和数学公式篇)主要参阅

基本概念

起源

  • LaTeX的前身为TeX,TeX是计算机科学家高德纳教授为了排版其书籍而编写的排版语言,在20 世纪80 年代初由Leslie Lamport 博士进行改进、简化,演变成了我们现在使用的LaTeX。
  • LaTeX本质是一种排版语言,用于生成高质量的打印文件。其不同于“所见即所得”的排版工具(如word),而是将格式通过命令语句的形式嵌入在文本中,经由LaTeX排版引擎,根据我们的命令来生成对应格式的可打印文件(即pdf文件)。
  • LaTeX最大的优点:内容和格式分离,我们在书写内容时无需关心排版,只需指定好我们想要的格式,而具体如何实现这些格式则由LaTeX排版引擎全权负责,从而大大减轻了内容编写者的排版负担(因此可以认为LaTeX是一种“所想即所得”的排版语言)。

常见的LaTeX发行版

  • TeX Live:最常使用的LaTeX发行版(Mac系统下叫Mac Tex),是TeX User Group出品的跨平台发行版,各个操作系统都可以使用。
  • CTeX:已经很不常用了,不推荐。

TeX编译器

即LaTeX发行版中的LaTeX编译程序(用于将LaTeX源代码文件转换为pdf文件),主要包含以下两种:

  • XeLaTeX:常用,对非拉丁文的字体支持较好,推荐使用。
  • PDFLaTeX:较不常用。

LaTeX命令

  • 命令格式:\command_name[可选参数]{必须参数},如果有多个参数则通过,连接。

    定义新命令

    \newcommand{\new_name}{\old_name}:本质是字符串替换,LaTeX会将代码中所有\new_name替换为old_name来解释。

模版/文档类

  • 导入模版即为代码中的\documentclass{xxx}命令(一般在代码首行指定),其决定了整篇文章的排版风格。
  • 通常我们只需要导入别人预先设定的模版(eg. \documentclass{article}),即可将我们写的内容转化为特定的格式,非常方便。

为LaTeX添加自定义模版

  • 模版的实现形式为.cls文件(stands for class),外加一些额外文件(如.sty等)。
  • 添加模版有两种方式:1. 直接将.cls文件放入到当前工作目录下,但是这样每次使用都要添加文件,较繁琐;2. 将.cls文件放入LaTeX的模版目录下,这样就可以直接使用了。
  • 方式:将模版文件夹放入/usr/local/texlive/texmf-local/tex/latex/local目录中即可。
  • 注1:添加完模版后需使用$ sudo texhash更新LaTeX模版库。
  • 注3:文件夹名字不重要,导入包时指定的是.cls文件的名字,XeLaTeX会根据包名去找对应的.cls文件。
  • 注2:MacTex安装目录:/usr/local/texlive,系统模版存放目录/usr/local/texlive/2018/texmf-dist/tex/latex

宏包/宏集

  • 所谓宏包,就是一系列LaTeX命令的合集,即将一些常用的LaTeX命令整理到一起,使用一行代码统一导入,对应到代码中即为\usepackage{xxx}

中英混排

为了实现中英混排,我们最常使用的宏包为ctex,其和XeLaTeX兼容性较好,直接在导言区导入\usepackage{ctex}即可。或者通过文档类来实现:\documentclass[UTF8]{ctexart}

  • 注1:此ctex非上文提到的CTeX发行版,前者是一个实现中英混排的宏包,后者则是一个过时的LaTeX发行版。
  • 注2:使用ctex宏包后原先模版的样式可能会发生变化(如字体、行间距等),要留意。
  • 注3:实现中英混排的宏包还有CJK,但是已经过时了,不推荐使用!

书写LaTeX的一些建议

  • 尽量追求内容与格式分离,在document环境内避免直接使用诸如字体字号、对齐缩进的格式控制命令,而将具有相同特点的格式归为一类统一设置(如定义一种新的环境或命令),以此让文档变得清晰和易于维护。
  • 推荐的写作模式:先写提纲,再写正文。提纲即目录标题,代表着文章的主体架构,写好提纲后再向提纲里填充内容。

排版格式

LaTeX一般分为导言区(preamble)和正文(document)两部分,导言区用来对文档的性质做一些设置,正文则用来书写文章的内容。

标题

生成标题一般分为两步:1、声明标题内容,2、输出标题。

  1. 声明标题内容:通常包括标题、作者、日期三部分,这部分一般放在导言区声明。

    1
    2
    3
    \title{这是一个标题} 
    \author{张三 \\ xxx大学 \and 李四 \\ xxx研究所} % \\表示换行,多位作者用\and 分隔
    \date{\today} % 不写date即默认为\today
  2. 输出标题:\maketitle,将前面声明的标题内容输出,一般是documnet环境后面的第一行命令。

  • 注:可使用\titlepage\notitlepage来控制标题是否单独成页。

划分章节

LaTeX默认的章节层次如下:

  • 注:文章结构的划分要基于文章题材,如对于书籍题材,最高层就是从part/chapter开始的,表示第几部分/第几章;而对于文章题材,则是从\section开始的,表示节,即1.x/2.x中的一级标题,二级标题对应\subsection,三级标题对应\subsubsection
  • 对于\paragraph{段落名}则不再编号,段落名仅仅出现在段前作为一种标识。
  • \section*{xxx}:命令带星号表示不编号,也不放在目录。

章节编号

  • LaTeX默认的可编号层次数为3,因此对于最高chapter的文章,最多编号到subsection;对于最高为section的文章,则编号到subsubsection
  • 可编号的层次数由secnumdepth计数器控制,可在导言区进行修改\setcounter{secnumdepth}{4}。也不推荐设得太深,否则会使文章结构太复杂。

多文件编译

对于大型文档来说,如果将所有内容都放到一个TeX源文件中,会很不方便检索和管理,因此更好的方式是将文档按逻辑层次(如章节)划分为多个TeX源文件中,最后再组合起来一起编译。

include命令

LaTeX提供了\include{文件名}命令来在一个文件中导入另一个文件的内容,命令前后会使用clear(double)page来另起新页。
使用\include命令的一个特别的便利:可以方便地修改主文件几行代码,来只编译特定的几章文件。虽然可以通过手动注释的方式来实现,但更推荐的是在导言区使用\includeonly{文件1, 文件2...}命令,只有在列出的文件才会被编译,而且如果之前编译过一次整体文档,单独编译时原先的章节编号、交叉引用等还会保持不变。

input命令

\input{文件名}命令是比\include更一般的导入命令,其直接把源文件的内容复制到对应文件中,而不做任何修改(比如就没有\clearpage操作)。

盒子与工作模式

  • 盒子(box)是LaTeX中基本的工作单位,字符、文字、表格、图片等等,本质都是盒子,一行小盒子组成了一个大盒子行(组字成行),多个盒子行就组成了一页(组行成页)。
  • LaTeX可以处在不同的工作模式下,在不同的工作模式下产生不同的盒子。最基本的模式的水平模式(如在组字成行的时候)和垂直模式(如在组行成页的时候),水平模式下把小盒子水平排列组成大盒子,垂直模式下把小盒子垂直排列组成大盒子;此外还有更为复杂的数学模式,此时时小盒子会构成复杂的数学结构。通常TEX会根据内容自动切换不同的模式,完成这些复杂的工作;不过也可以使用命令进入指定的模式生成盒子。
  • 水平盒子:\mbox{内容},盒子中的内容为水平排列,其最大的作用是使盒子中的内容成为一个整体,不可分行分段。
  • 带方框的盒子:\fbox{内容},除了周围有方框围着,其余和水平盒子一样。
  • 垂直盒子/子段盒子:\parbox{宽度}{内容},盒子中内容为垂直排列,先水平排列,超出宽度后自动换行。注:宽度为必须参数(推荐以em为单位)。

环境

  • 环境为LaTeX中的一种分组方式,其将某些同类的内容划分为一个分组,以对分组中的内容统一进行排版设置。
  • 通常的格式:begin{环境名}...end{环境名}

引用环境

  • 引用:\begin{quote}\end{quote} 扩起来的部分。
  • 它将环境中的内容单独分行,增加缩进和上下间距排印,以突出引用的部分。
  • 注:quote环境并不改变引用部分的字体,因此为了突出还需要手动设置字体,如在环境内设置\zihao{-5}\kaishu,这种语句称为声明(declaration),其作用范围是整个分组(group),一个环境也是一个分组。

列表环境

  • LaTeX提供了三种列表环境:编号的enumerate,不编号的itemize,使用关键字的description
  • 列表中的列表项使用\item命令来生成。
    列表示例如下:


定理环境

定理类环境是LaTeX中一个重要的文本环境,其用来产生一个特定格式的带标题、编号的文本。效果如下:

1
2
3
4
\newtheroem{thm}{定理}[chapter] % 通常在导言区,thm:定理名,定理:标题,chapter:按章来编号
\begin{thm}[勾股定理] % 勾股定理:可选参数,表示定理名
直角三角形两腰的平方和等于斜边的平方
\end{thm}

抄录环境

用于原文本输出内容,不做任何转义操作,英文为vervatim,即逐字。用于书写程序代码等很有用。

  • 单行抄录:\verb<符号><内容><符号>,两端的符号没有要求,只需保持一样即可。
  • 多行抄录:\begin{verbitam} \end{verbitam}
  • 带语法高亮的抄录环境:使用listings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    % 导言区使用 \usepackage{listings}
    \lstset{
    flexiblecolumns, % 设置非等宽显示,更加美观
    frame=single, % 设置代码区周围加边框
    showstringspaces=false % 设置空格正常显示,而不显示为特殊字符“␣”
    }
    \begin{lstlisting}[language=python]
    ...
    \end{lstlisting}

脚注和边注

  • 脚注:\footnote{脚注内容},脚标会自动编号,直接加在前面正文的上方,脚注内容则会出现在页面底部。
  • 边注:\marginpar{边注内容},边注会加在页面边上,且不编号。边注默认出现在右边,字体和正文保持一致。可通过\reversemarginpar改变边注出现的位置,nomalmarginpar恢复位置。

文字与符号

  • 符号-,除了表示数学中的减号,在正文中也有许多其他作用:
    一个-:表示连字符,\(X-ray\)
    两个--:表示数字范围,\(范围是1–2\)
    三个---:表示破折号,\(A punctuation dash—like this\)
  • 根据英文的写作标准,括号两边要加空格与文字分开。而对于中文来说,中文宏包直接就做了字符间距的设置,因此无需担心。
  • 省略号的写法:\dots\ldots,两者是等价的。

空格与换行

  • 文本中空格起到分隔单词的作用,连续多个空格并不会增大间距,也只会被解释为一个空格。
  • 只有字符后面的空格才是有效的,每行最前面的空格会被LaTeX忽略(段前缩紧的工作由LaTeX自动完成)。
  • 在正文中,单个回车也会被解释为空格,连续两个回车才会被解释为换行;换行还可以以通过命令\\来实现。
  • 对于以字母命名的命令,后面需要加空格以和其他文本分开。Happy \TeX ing——正确,Happy \TeX ing——编译器报错。

各种长度单位

LaTeX常用的长度单位有:

  • pt: point,欧美常用的排版长度单位,称为磅;
  • in: inch英寸,1 in = 72.27pt
  • cm: 2.54cm = 1 in
  • mm: 毫米
  • em:当前字号对应的长度
    一些产生水平间距的命令:


注:\!表示负距离,即缩短后一个符号与前一个的符号的间距。

字体

我们常说的字体,通常包含如下属性:字号(字体大小)、字体族(字体类型)、字体形状(直立、倾斜等)和字体系列(字体粗细、宽度等)。
注:下面的命令都是用来改变整个环境的字体的,如果想让命令只作用于某段内容,只需{\command 内容}括起来即可(即手动标记了一个环境)。

字体族

指一组风格相似,始于一起使用的成套字体。预定义的有三种字体族:

字体族 命令
罗马字体族(roman family) \rmfamily
无衬线字体族(sanserif family) \sffamily
打字机字体族(typewritter family) \ttfamily

字体形状

预定义命令的字体形状有4种,直立形状(upright shape,也称为roman shape)、意大利形状(italic shape)、倾斜形状(slanted shape)、小型大写形状(small capitals shape)

字体形状 命令
直立形状 \upshape
意大利形状 \itshape
倾斜形状 \slshape
小型大写形状 \scshape

注:正文默认使用直立字体形状。注意其中倾斜形状和意大利形状的区别,我们通常所说的“斜体”往往是指意大利形状,而倾斜形状一般用在标题、参考文献中。

字体系列

有中等(medium)和加宽加粗(extended bold)两种:

字体系列 命令
中等 \textmd{}
加宽加粗 \textbg{}
  • 总结:
    字体的这三个性质有如三维坐标,同一维度不可重叠,而不同维度则可以叠加,确定字体的样式。字体性质总结如下:

中文字体

ctex宏包实现了不同的中文字体族,常用的如下:

字体族 命令
宋体 \songti
仿宋 \fangsong
黑体 \heiti
楷书 \kaishu
  • ctex宏包下,默认字体为宋体,加粗为黑体显示,斜体即为意大利体。
  • 如果对单独某些文字加粗,可使用如下命令\textbf{加粗},斜体/意大利体:\textit{斜体}

字号

  • LaTeX提供了以下几种字号命令,效果如下:

  • 上述命令对中文同样适用,但有时为了明确字号,也可用ctex宏包提供的\zihao命令,效果如下:

杂七杂八

超链接

  • 超链接用于页面的跳转,常用的宏包为hyperref,只需导入其就会在文献引用、目录跳转、交叉引用等处自动生成可跳转的超链接。
  • 设置命令:\hypersetup{colorlinks=true},超链接用红色表示(否则会在其外面加边框)。

插图

命令:\usepackage{graphics}包+figure环境,代码如下图所示:

1
2
3
4
5
6
7
\begin{figure}[ht] % 对图片进行浮动显示,h-here,t-top;图片会自动生成编号
\centering % 图片居中显示
\includegraphics[scale=0.6]{xiantu.pdf} % 导入图片(当前目录的相对路径)
\caption{宋赵爽在《周髀算经》注中作的弦图(仿制),该图给出了勾股定理
的一个极具对称美的证明。} % 为图片生成标题以及编号
\label{fig:xiantu} % 为图片赋予标号,方便后期引用
\end{figure}

表格

命令:\begin{table}环境+\begin{tabular}导入表格,

1
2
3
4
5
6
7
8
9
10
11
12
\begin{table}[ht] % 设置浮动环境
\begin{tabular}{|rrr|} % 产生表格,r:右对齐,三个r:总共三列,|:在两边生成竖线
\hline % 生成直线
直角边$a$ & 直角边$b$ & 斜边$c$ \\ % \\表示换行
\hline
3 & 4 & 5 \\
5 & 12 & 13 \\
\hline
\end{tabular}
\qquad % \qquad:产生2em宽的空格
($a^2 + b^2 = c^2$)
\end{table}

页面尺寸

  • 改变页面尺寸:geometry宏包
    1
    2
    \usepackage{geometry}
    \geometry{a6paper,centering,scale=0.8} % 使用A6纸,版心居中,长宽各占页面的0.8倍

改变标题格式

改变图片、表格的标题,使用caption宏包,\usepackage[format=hang,font=small,textfont=it]{caption}

\clearpage\cleardoublepage:用于填充空包另起一页,后者用于双面文档中(对于奇数页多添一页空白,使新一页也在奇数页)


Post Date: 2018-01-19

版权声明: 本文为原创文章,转载请注明出处