TeX Live(LaTeX) 学习文档

环境

系统: Windows10 1903

TeX 3.14159265 (TeX Live 2019/W32TeX)

学习过程一

控制序列

控制序列: 是以\开头, 以第一个空格或非字母的字符结束的一串文字, 控制序列后面的{}代表这个控制序列的必要参数, 这个控制序列的作用为调用名为article的文档类.

1
2
% TeX对控制序列的大小写是敏感的
\documentclass{article}

注释

注释以%开头. 若要输出%字符本身, 则需要在%之前加上反斜杠\进行转义(escape).

1
% 导言区

导言区

导言区是对整篇文档进行设置的区域, 在导言区出现的控制序列, 一般都会影响到整篇文档的格式.

1
2
3
4
\documentclass{article}
% 这里是导言区
% 一般用于设置页面大小, 页眉页脚样式, 章节标题样式等等
\begin{document}

环境

begin~end两个控制序列之间的内容称为环境, 这里的控制序列的第一个必要参数总是一致的, 被称为环境名, 只有在document环境中的内容, 才会被正常输出到文档中去或是作为控制序列对文档产生影响, 在\end{document}之后插入任何内容都是无效的.

1
2
3
\begin{document}
Hello, world!
\end{document}

宏包

就是一系列控制序列的合集.

1
2
% 调用宏包
\usepackage{}

中英文混排问题

CJK宏包不支持亚洲文字, 而XeTeX原生支持Unicode, 并且可以方便的调用系统字体. 除了中文支持, 中文的版式处理和标点也是一定的问题, 在这里因为CTeX宏集的原因得以解决, 它能适配于多种编译方式, 该宏集本质是LaTeX宏的集合, 包好若干文档类.cls文件, 宏包.sty文件, 而CTeX套装则是一个过时的TeX系统.

1
2
% 以UTF-8编码保存, 使用XeLaTex编译
\documentclass[UTF8]{ctexart}

组织文章

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass[UTF8]{ctexart}
% 导言区
% 标题
\title{你好, LaTeX!}
% 作者
\author{ZhangCheng}
% 日期
\date{\today}
\begin{document}
% maketitle控制序列能将在导言区中定义的标题, 作者, 日期按照预定的格式展现出来
% 使用titling宏包可以修改上述默认格式
\maketitle
你好, world!
\end{document}

章节和段落

在文档类article/ctexart中, 可以使用以下的控制序列来调整行文组织结构. 如果想在两句话之间换行, 那么应该直接在这两句话之间插入一个空行.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% 一级章节
\section{}
% 二级章节
\subsection{}
% 三级章节
\subsubsection{}
% 一级段落
\paragraph{}
% 二级段落
\subparagraph{}
% 换行
第一句话.
% 这里是空行
第二句话.

report/ctexrep中:

1
\chapter{}

在文档类book/ctexbook中:

1
\part{}

目录

在文档中, 在其\maketitle的下面插入控制序列\tableofcontents, 保存并用XeLaTeX编译两次.

数学公式

使用AMS-LaTeX提供的数学功能, 需要在导言区加载amsmath宏包.

1
\usepackage{amsmath}

其中, 数学模式有两种: 行内模式(inline)和行间模式(display). 前者在正文的行文中, 插入数学公式; 后者独立排列单独成行, 并自动居中.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% 在行文中, 使用$...$可以插入行内公式, 使用\[...\]可以插入行间公式
% 对行间公式进行编号, 可以使用equation环境
\begin{equation}
...
\end{equation}
% 行内公式也可以使用\(...\)或者
\begin{math}
...
\end{math}
% 无编号的行间公式
\begin{displaymath}
...
\end{displaymath}
% 或者, 其中*表示环境不编号
\begin{equation*}
...
\end{equation*}
% plainTeX风格: $$...$$, 插入不编号的行间公式, 缺点: 在LaTeX中会改变行文的默认行间距.
  1. 上下标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    \documentclass{article}
    \usepackage{amsmath}
    \begin{document}
    Einstein 's $E=mc^2$.
    % 上标使用^来实现
    % 下标使用_来实现
    % 默认只作用于之后的一个字符, 如果对连续的几个字符起作用, 可以将这些字符用花括号{}括起来
    % \cdot为点积, \pi为pi的转义
    \[ z=r\cdot e^{2\pi i}. \]

    \[ E=mc^2. \]

    \begin{equation}
    E=mc^2.
    \end{equation}
    \end{document}

    公式标点使用规范:

    行内公式的标点应该放在数学模式的限定符之外, 行间公式则应该放在数学模式限定符之内.

  2. 根式与分式

    根式用\sqrt{}, 分式用\frac{}{}, 其中第一个参数为分子, 第二个参数为分母.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    \documentclass{article}
    \usepackage{amsmath}
    \begin{document}
    $\sqrt{x}$, $\frac{1}{2}$.

    \[ \sqrt{x}, \]

    \[ \frac{1}{2}. \]
    \end{document}

    在行间公式和行内公式中,分式的输出效果是有差异的. 要强制行内模式的分式显示为行间模式的大小, 可以使用\dfrac, 反之可以使用\tfrac.

    在行内写分式, 使用xfrac宏包提供的\sfrac命令

    排版繁分式, 使用\cfrac命令

  3. 运算符

    有些运算符可以直接在数学模式下直接输入; 有些则需要控制序列生成:

    1
    2
    \[ \pm\; \times \; \div\; \cdot\; \cap\; \cup\;
    \geq\; \leq\; \neq\; \approx \; \equiv \]

    连加、连乘、极限、积分等大型运算符分别用 \sum, \prod, \lim, \int 生成. 它们的上下标在行内公式中被压缩, 以适应行高. 可以使用\limits\nolimits来强制显式的指定是否要压缩这些上下标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    % \quad表示一个空格
    % 下标与上标的顺序先后没有影响
    $ \sum_{i=1}^n i\quad \prod_{i=1}^n $
    % limits表示在连加的上下处标识, 且limits后面的空格没有影响
    $ \sum\limits _{i=1}^n i\quad \prod\limits _{i=1}^n $
    % lim的默认表示是在极限的上下处标识, \to则表示指示箭头
    \[ \lim_{x\to0}x^2 \quad \int_a^b x^2 dx \]
    % nolimits则表示在极限表示的右下角标识
    \[ \lim\nolimits _{x\to0}x^2\quad \int\nolimits_a^b x^2 dx \]

    多重积分可以使用 \iint, \iiint, \iiiint, \idotsint 等命令输入:

    1
    2
    % \iint表示二重积分, 以此类推; \idotsint表示多重积分的省略
    \[ \iint\quad \iiint\quad \iiiint\quad \idotsint \]
  4. 定界符(括号等)

    各种括号用(),[],\{\},\langle\rangle等命令表示. 其中花括号通常用来输入命令和环境的参数, 所以在数学公式中前面要加\. 因为LaTeX中|||的应用过于随意, amsmath宏包推荐用\lvert\rvert\lVert\rVert取而代之.

    调整定界符的大小, amsmath 宏包推荐使用 \big, \Big, \bigg, \Bigg 等一系列命令放在上述括号前面调整大小.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       % \Biggl表示一级左向元素, \Biggr表示一级右向元素, \bigg表示二级大小, \Big表示三级大小, \big表示四级大小
    \[ \Biggl(\biggl(\Bigl(\bigl((x)\bigr)\Bigr)\biggr)\Biggr) \]
    \[ \Biggl[\biggl[\Bigl[\bigl[[x]\bigr]\Bigr]\biggr]\Biggr] \]
    \[ \Biggl \{\biggl \{\Bigl \{\bigl \{\{x\}\bigr \}\Bigr \}\biggr \}\Biggr\} \]
    % \langle表示'<', \rangle表示'>'
    \[ \Biggl\langle\biggl\langle\Bigl\langle\bigl\langle\langle x
    \rangle\bigr\rangle\Bigr\rangle\biggr\rangle\Biggr\rangle \]
    % \lvert x \rvert 表示'|x|'
    \[ \Biggl\lvert\biggl\lvert\Bigl\lvert\bigl\lvert\lvert x
    \rvert\bigr\rvert\Bigr\rvert\biggr\rvert\Biggr\rvert \]
    % \lVert x \rVert 表示'||x||'
    \[ \Biggl\lVert\biggl\lVert\Bigl\lVert\bigl\lVert\lVert x
    \rVert\bigr\rVert\Bigr\rVert\biggr\rVert\Biggr\rVert \]
  1. 省略号

    省略号用\dots, \cdots, \vdots, \ddots等命令表示.

    1
    2
    % \dots用来表示有下标的序列, \cdots则与\dots的纵向位置不同, \vdots表示纵向的省略号, \ddots表示斜向45的省略号
    \[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad \vdots\quad \ddots \]
  2. 矩阵

    amsmathpmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix 等环境可以在矩阵两边加上各种分隔符.

    1
    2
    3
    4
    5
    6
    % {pmatrix}表示圆括号矩形, {bmatrix}表示方括号矩形, {Bmatrix}表示花括号矩形, {vmatrix}表示单竖线矩形, {Vmatrix}表示双竖线矩形
    \[ \begin{pmatrix} a&b\\c&d \end{pmatrix} \quad
    \begin{bmatrix} a&b\\c&d \end{bmatrix} \quad
    \begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad
    \begin{vmatrix} a&b\\c&d \end{vmatrix} \quad
    \begin{Vmatrix} a&b\\c&d \end{Vmatrix} \]

    使用{smallmatrix}环境, 可以生成行内公式的小矩阵:

    1
    $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $.
  3. 多行公式

    手动换行, 手动组合.

    长公式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % 不对齐
    % 无须对齐的长公式可以使用multline环境
    % 不需要编号, 可以使用`multline*`环境代替
    % \\代表换行
    \begin{multline}
    x = a+b+c+{} \\
    d+e+f+g
    \end{multline}
    % 对齐
    % 需要对齐的公式, 可以使用aligned次环境来实现, 必须包含在数学环境之内
    \[\begin{aligned}
    x ={}& a+b+c+{} \\
    &d+e+f+g
    \end{aligned}\]

    公式组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    % 都带有编号
    % 不对齐
    % 使用gather环境
    \begin{gather}
    a = b+c+d \\
    x = y+z
    \end{gather}
    % 对齐
    % 使用align环境
    \begin{align}
    a &= b+c+d \\
    x &= y+z
    \end{align}

    注意, 不要使用eqnarray环境.

    分段函数

    1
    2
    3
    4
    5
    6
    % 分段函数可以使用cases环境来实现, 它必须包含在数学环境之内
    \[ y= \begin{cases}
    % \leq表示'<='
    -x,\quad x\leq 0 \\
    x,\quad x>0
    \end{cases} \]
  4. 辅助工具

    Mathpix通过将截屏中的公式转换成LaTeX数学公式的代码

    允许用户用鼠标在输入区绘制单个数学符号的样式, 系统会根据样式返回对应的LaTeX代码和所需的宏包.

插入图片和表格

  1. 图片

    最好用的是graphicx宏包提供的\includegraphics命令. 如果在你的TeX的源文件同目录下, 有a.jpg的图片.

    1
    2
    3
    4
    5
    \documentclass{article}
    \usepackage{graphicx}
    \begin{document}
    \includegraphics{a.jpg}
    \end{document}

    如果图片很大, 超过了输出文件的纸张大小, 可以使用includegraphics控制序列的可选参数来控制.

    1
    2
    % 图片的宽度会被缩放至页面宽度的百分之八十,图片的总高度会按比例缩放
    \includegraphics[width = .8\textwidth]{a.jpg}
  2. 表格

    tabular 环境提供了最简单的表格功能. 它用 \hline 命令表示横线,在列格式中用 | 表示竖线; 用 & 来分列,用 \\ 来换行; 每列可以采用居左、居中、居右等横向对齐方式, 分别用 lcr 来表示.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    \begin{tabular}{|l|c|r|}
    \hline
    操作系统& 发行版& 编辑器\\
    \hline
    Windows & MikTeX & TexMakerX \\
    \hline
    Unix/Linux & teTeX & Kile \\
    \hline
    Mac OS & MacTeX & TeXShop \\
    \hline
    通用& TeX Live & TeXworks \\
    \hline
    \end{tabular}
  3. 浮动体

    调整插图和表格的位置. figuretable环境可以自动完成这样的任务, 这种自动调整位置的环境称作浮动体(float).

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    % htbp选项用来指定插图的理想位置,这几个字母分别代表here, top, bottom, float page.
    \begin{figure}[htbp]
    % \centering用来使插图居中
    \centering
    \includegraphics{a.jpg}
    % \caption命令设置插图标题, LaTeX会给浮动体的标题加上编号
    \caption{有图有真相}
    % \label应该放在标题命令之后
    \label{fig:myphoto}
    \end{figure}

版面设置

  1. 页边距

    使用geometry宏包. 将纸张的长度设置为 20cm、宽度设置为 15cm、左边距 1cm、右边距 2cm、上边距 3cm、下边距 4cm,可以在导言区加上这样几行:

    1
    2
    3
    4
    \usepackage{geometry}
    \geometry{papersize={20cm,15cm}}
    % 页内边距
    \geometry{left=1cm,right=2cm,top=3cm,bottom=4cm}
  2. 页眉页脚

    使用fancyhdr宏包. 在页眉左边写上我的名字,中间写上今天的日期,右边写上我的电话;页脚的正中写上页码;页眉和正文之间有一道宽为 0.4pt 的横线分割,可以在导言区加上如下几行:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    % 页眉左上
    \lhead{\author}
    % 页眉中间
    \chead{\date}
    % 页眉右上
    \rhead{152xxxxxxxx}
    % 页脚左下
    \lfoot{}
    % \thepage表示页码
    \cfoot{\thepage}
    \rfoot{}
    % 页眉和正文之间的0.4pt宽的分割线
    \renewcommand{\headrulewidth}{0.4pt}
    \renewcommand{\headwidth}{\textwidth}
    % 页脚和正文之间的分割线
    \renewcommand{\footrulewidth}{0pt}
  3. 首行缩进

    自然段前空两格汉字宽度.CTeX宏集已经处理好了首行缩进的问题.

  4. 行间距

    通过setspace宏包提供的命令来调整间距:

    1
    2
    3
    \usepackage{setspace}
    % 将行距设置为字号的1.5倍
    \onehalfspacing

    baseline意义

    TeX中的每个字符都放在一个box里. 由几个box的base连接起来的基准线称为baseline.

    两行之间的baseline的 称为行距(linespace).

    为统一对不同字号的内容进行行距的调整, 引入了因子的概念. 其储存在\[email protected]宏中, 在article文档类中默认为1, 在ctexart中默认是1.3, 修改行距, 都是修改这个因子.

    需要将因子存储在一个外部宏(没有@的宏)之中, 其是\baselinestretch.

    1
    2
    3
    % \baselineskip 两条baseline之间的linespace距离
    % \[email protected] 记录了行距中和字号相关的部分, 默认情况下其值是当前\[email protected]的1.2倍
    \baselineskip = \[email protected] * \baselinestretch

    根据上述公式, 在article中默认行距是字号的1.2倍, 而在ctexart中默认行距是字号的1.56倍.

    1
    2
    % \setspace 单倍, 一倍半, 双倍则是指行距相对于字号的倍数.
    \setspace

    修改行距

    \[email protected]的值会一直作用到文档末尾或者被新的值覆盖, \[email protected]的情况类似

    每一段段内的行距, 由最后被设置的\[email protected]\@linespread决定

    修改行距, 即修改因子, 可以直接修改\baselinestretch的值(\renewcommand), 或者使用\linespread{}\selectfont来修改, 推荐使用:

    1
    \linespread{<factor>}\selectfont

    setspace宏包提供的\setstretch命令似乎做的更多一些: 会同时修改数学公式, 浮动体等的间距, 使之与正文间距适应.

    1
    \setstretch{<factor>}

    \linespread\fontsize{}{}这类命令, 必须在其后添加\selectfont才会生效, \setstretch大致相当于\linespread\selectfont, 使用之后直接生效.

  5. 段间距

    通过\parskip的值来调整段间距.

    1
    2
    % 在原有的基础上, 增加段间距0.4em, 如果需要减小, 只需要将值改为负数.
    \addtolength{\parskip}{.4em}

要点

TeX - pdfTeX - XeTeX - LuaTeX 都是排版引擎,按照先进程度递增(LuaTeX 尚未完善).

LaTeX 是一种格式,基于 TeX 格式定义了很多更方便使用的控制命令。上述四个引擎都有对应的程序将 LaTeX 格式解释成引擎能处理的内容.

CTeX, MiKTeX, TeX Live 都是 TeX 的发行,他们是许许多多东西的集合 .

Reference

一份其实很短的 LaTeX 入门文档

0%