本篇博文主要介绍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
2
3\title{这是一个标题}
\author{张三 \\ xxx大学 \and 李四 \\ xxx研究所} % \\表示换行,多位作者用\and 分隔
\date{\today} % 不写date即默认为\today输出标题:
\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 | \newtheroem{thm}{定理}[chapter] % 通常在导言区,thm:定理名,定理:标题,chapter:按章来编号 |
抄录环境
用于原文本输出内容,不做任何转义操作,英文为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.27ptcm
: 2.54cm = 1 inmm
: 毫米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
版权声明: 本文为原创文章,转载请注明出处