插入数学公式
为了使用 AMS-LaTeX 提供的数学功能,我们需要在导言区加载 amsmath
宏包:
\usepackage{amsmath}
数学模式
LaTeX 的数学模式有两种:行内模式 (inline) 和行间模式 (display)
。
- 行内模式:在正文的行文中,插入数学公式;
- 行间模式:独立排列单独成行,并自动居中。
在行文中,使用 $ … $ 可以插入行内公式
,使用 \[ ... \]
可以插入行间公式
,如果需要对行间公式进行编号,则可以使用 equation 环境
:
\begin{equation} ... \end{equation}
上下标
\documentclass{article} \usepackage{amsmath} \begin{document} Einstein 's $E=mc^2$. \[ E=mc^2. \] \begin{equation} E=mc^2. \end{equation} \end{document}
注意,行内公式和行间公式对标点的要求是不同的:
- 行内公式的标点,应该放在数学模式的
限定符之外
; - 行间公式则应该放在数学模式
限定符之内
。
在数学模式中,需要表示上标,可以使用 ^ 来实现(下标则是 _)
。它默认只作用于之后的一个字符,如果想对连续的几个字符起作用,请将这些字符用花括号 {} 括起来
,例如:
\[ z = r\cdot e^{2\pi i}. \]
根式与分式
根式
用 \sqrt{·}
来表示,分式
用 \frac{·}{·}
来表示(第一个参数为分子,第二个为分母)。
\documentclass{article} \usepackage{amsmath} \begin{document} $\sqrt{x}$, $\frac{1}{2}$. \[ \sqrt{x}, \] \[ \frac{1}{2}. \] \end{document}
在行间公式和行内公式中,分式的输出效果是有差异的。如果要强制行内模式的分式显示为行间模式的大小,可以使用 \dfrac, 反之可以使用 \tfrac。
运算符
一些小的运算符,可以在数学模式下直接输入;另一些需要用控制序列生成,如
\[ \pm\; \times \; \div\; \cdot\; \cap\; \cup\; \geq\; \leq\; \neq\; \approx \; \equiv \]
连加、连乘、极限、积分等大型运算符分别用 \sum, \prod, \lim, \int 生成
。他们的上下标在行内公式中被压缩,以适应行高
。我们可以用 \limits 和 \nolimits 来强制显式地指定是否压缩这些上下标
。例如:
$ \sum_{i=1}^n i\quad \prod_{i=1}^n $ $ \sum\limits _{i=1}^n i\quad \prod\limits _{i=1}^n $ \[ \lim_{x\to0}x^2 \quad \int_a^b x^2 dx \] \[ \lim\nolimits _{x\to0}x^2\quad \int\nolimits_a^b x^2 dx \]
多重积分可以使用 \iint, \iiint, \iiiint, \idotsint
等命令输入:
\[ \iint\quad \iiint\quad \iiiint\quad \idotsint \]
定界符(括号等)
各种括号用 (), [], \{\}, \langle\rangle
等命令表示;注意花括号通常用来输入命令和环境的参数
,所以在数学公式中它们前面要加 \
。因为 LaTeX 中 | 和 \|
的应用过于随意,amsmath
宏包推荐用 \lvert\rvert
和 \lVert\rVert
取而代之。
为了调整这些定界符的大小,amsmath 宏包推荐使用 \big, \Big, \bigg, \Bigg
等一系列命令放在上述括号前面调整大小。
\documentclass{article} \usepackage{amsmath} \begin{document} \[ \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\} \] \[ \Biggl\langle\biggl\langle\Bigl\langle\bigl\langle\langle x \rangle\bigr\rangle\Bigr\rangle\biggr\rangle\Biggr\rangle \] \[ \Biggl\lvert\biggl\lvert\Bigl\lvert\bigl\lvert\lvert x \rvert\bigr\rvert\Bigr\rvert\biggr\rvert\Biggr\rvert \] \[ \Biggl\lVert\biggl\lVert\Bigl\lVert\bigl\lVert\lVert x \rVert\bigr\rVert\Bigr\rVert\biggr\rVert\Biggr\rVert \] \end{document}
省略号
省略号用 \dots, \cdots, \vdots, \ddots
等命令表示。\dots 和 \cdots 的纵向位置不同
,前者一般用于有下标的序列。
\documentclass{article} \usepackage{amsmath} \begin{document} \[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad \vdots\quad \ddots \] \end{document}
矩阵
amsmath 的 pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix
等环境可以在矩阵两边加上各种分隔符
\documentclass{article} \usepackage{amsmath} \begin{document} \[ \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} \] \end{document}
使用 smallmatrix
环境,可以生成行内公式
的小矩阵:
多行公式
- 有的公式特别长,我们需要手动为他们换行;
- 有几个公式是一组,我们需要将他们放在一起;
- 有些类似分段函数,我们需要给它加上一个左边的花括号。
长公式
- 不对齐(无须对齐的长公式可以使用
multline
环境)
\begin{multline} x = a+b+c+{} \\ d+e+f+g \end{multline}
如果不需要编号,可以使用 multline*
环境代替。
- 对齐(需要对齐的公式,可以使用
aligned 次环境
来实现,它必须包含在数学环境之内
)
公式组
无需对齐的公式组可以使用 gather
环境,需要对齐的公式组可以使用 align
环境。他们都带有编号
,如果不需要编号可以使用带星花的版本
。
\documentclass{article} \usepackage{amsmath} \begin{document} \begin{gather} a = b+c+d \\ x = y+z \end{gather} \begin{align} a &= b+c+d \\ x &= y+z \end{align} \end{document}
请注意,不要使用 eqnarray 环境。
分段函数
段函数可以用cases次环境
来实现,它必须包含在数学环境之内。
\documentclass{article} \usepackage{amsmath} \begin{document} \[ y= \begin{cases} -x,\quad x\leq 0 \\ x,\quad x>0 \end{cases} \] \end{document}
插入图片和表格
图片
在 LaTeX 中插入图片,有很多种方式。最好用的应当属利用 graphicx 宏包提供的 \includegraphics
命令。比如你在你的 TeX 源文件同目录下
,有名为 a.png 的图片,你可以用这样的方式将它插入到输出文档中:
\documentclass{article} \usepackage{graphicx} \begin{document} \includegraphics{a.png} \end{document}
图片可能很大,超过了输出文件的纸张大小,或者干脆就是你自己觉得输出的效果不爽。这时候你可以用 \includegraphic
s 控制序列的可选参数来控制
。比如:
\includegraphics[width = .8\textwidth]{a.png}
这样图片的宽度会被缩放至页面宽度的百分之八十
,图片的总高度会按比例缩放。
表格
tabular
环境提供了最简单的表格功能。它用 \hline
命令表示横线
,在列格式中用 | 表示竖线
;用 & 来分列
,用 \\ 来换行
;每列可以采用居左、居中、居右等横向对齐方式
,分别用 l、c、r 来表示。
\documentclass{article} \usepackage{graphicx} \begin{document} \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} \end{document}
浮动 float
插图和表格通常需要占据大块空间,所以在文字处理软件中我们经常需要调整他们的位置。figure 和 table 环境
可以自动完成这样的任务;这种自动调整位置的环境称作浮动(float)。我们以 figure 为例。
\documentclass{article} \usepackage{graphicx} \begin{document} \begin{figure}[htbp] \centering \includegraphics{a.png} \caption{有图有真相} \label{fig:myphoto} \end{figure} \end{document}
- 解释:
htbp
选项用来指定插图的理想位置
,这几个字母分别代表here, top, bottom, float page,也就是就这里、页顶、页尾、浮动页
(专门放浮动体的单独页面或分栏)。\centering
用来使插图居中
;\caption
命令设置插图标题
,LaTeX 会自动给浮动体的标题加上编号
。注意\label 应该放在标题命令之后。
版面设置
页边距
设置页边距,推荐使用 geometry
宏包。
比如我希望,将纸张的长度设置为 20cm、宽度设置为 15cm、左边距 1cm、右边距 2cm、上边距 3cm、下边距 4cm
,可以在导言区加上这样几行:
\documentclass{article} \usepackage{geometry} \geometry{papersize={20cm,15cm}} \geometry{left=1cm,right=2cm,top=3cm,bottom=4cm} \begin{document} \end{document}
页眉页脚
设置页眉页脚,推荐使用 fancyhdr
宏包
比如我希望,在页眉左边写上我的名字,中间写上今天的日期,右边写上我的电话;页脚的正中写上页码;页眉和正文之间有一道宽为 0.4pt 的横线分割,可以在导言区
加上如下几行:
\documentclass{article} \usepackage{fancyhdr} \pagestyle{fancy} \lhead{\author} \chead{\date} \rhead{152xxxxxxxx} \lfoot{} \cfoot{\thepage} \rfoot{} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\headwidth}{\textwidth} \renewcommand{\footrulewidth}{0pt} \begin{document}
首行缩进
CTeX 宏集已经处理好了首行缩进的问题(自然段前空两格汉字宽度)。因此,使用 CTeX 宏集进行中西文混合排版时,我们不需要关注首行缩进的问题。
但是,如果你选择不使用CTex宏集进行中文支持和版式设置,你需要做额外的一些工作:
- 调用
indentfirst
宏包。 - 设置首行缩进长度
\setlength{\parindent}{2\ccwd}
。其中\ccwd 是 xeCJK 定义的宏
,它表示当前字号中一个中文汉字的宽度。
行间距
通过 setspace
宏包提供的命令来调整行间距。比如在导言区添加如下内容,可以将行距设置为字号的 1.5 倍:
\documentclass{article} \usepackage{setspace} \onehalfspacing \begin{document} \end{document}
- 行距是字号的 1.5 倍;
- 1.5 倍行距。
事实上,这不是设置 1.5 倍行距的正确方法,RuixiZhang 开发了 zhlineskip
宏包,提供了对中西文混排更细致的行距控制能力。
段间距
通过修改长度 \parskip
的值来调整段间距。例如在导言区添加以下内容:
\documentclass{article} \addtolength{\parskip}{.4em} \begin{document} \end{document}
则可以在原有的基础上,增加段间距 0.4em。如果需要减小段间距,只需将该数值改为负值即可。
TeX 家族
带有 TeX 的词,仅仅是本文就已经提到了 TeX, LaTeX, XeLaTeX。通常中国学生面对不了解意思的一群形近单词,都会有一种「本能的恐惧」(笑~)。因此,「大神们」在为新手介绍 TeX 的时候,如果互相争论 「XXTeX 比 YYTeX 好」或者是「XXTeX 的 YYTeX 如何如何」,往往会蹦出下面这些带有 TeX 的词汇:
TeX, pdfTeX, XeTeX, LuaTeX, LaTeX, pdfLaTeX, XeLaTeX …
事实上,这部分的内容太过复杂,所以大家只需要将这部分的内容当做是一个参考就可以了。
TeX - LaTeX
TeX 是高德纳做出来的排版引擎,同时也是该引擎使用的标记语言(Markup Language)的名称。
LaTeX 则是 L. Lamport (1941年2月7日 – ) 教授开发的基于 TeX 的排版系统。实际上 LaTeX 利用 TeX 的控制命令,定义了许多新的控制命令并封装成一个可执行文件。这个可执行文件会去解释 LaTeX 新定义的命令成为 TeX 的控制命令,并最终交由 TeX 引擎进行排版。LaTeX 是基于一个叫做 plain TeX 的格式的。plain TeX 是高德纳教授为了方便用户,自己基于原始的 TeX 定义的格式,但实际上 plain TeX 的命令仍然十分晦涩。至于原始的 TeX 直接使用的人就更少了,因此 plain TeX 格式逐渐就成为了 TeX 格式的同义词,尽管他们事实上是不同的。
pdfTeX - pdfLaTeX
TeX 系统生成的文件是 dvi 格式,虽然可以用其他程序将其转换为例如 pdf 等更为常见的格式,但是毕竟不方便。
dvi 格式是为了排版而产生的,它本身并不支持所谓的「交叉引用」,
pdfTeX 直接输出 pdf 格式的文档
,这也是 pdfTeX 相对 TeX 进步(易用性方面)的地方。pdfLaTeX 这个程序的主要工作依旧是将 LaTeX 格式的文档进行解释,不过此次是将解释之后的结果交付给 pdfTeX 引擎处理。
XeTeX - XeLaTeX
高德纳教授在实现 TeX 的当初并没有考虑到中日韩等字符的处理,而只支持 ASCII 字符。这并不是说中日韩字符就无法使用 TeX 引擎排版了,事实上 TeX 将每个字符用一个框包括起来(这被称为盒子)然后将一个个的盒子按照一定规则排列起来,因而 TeX 的算法理论上适用于任何字符。ASCII 字符简单理解,就是在半角模式下你的键盘能直接输出的字符。
在 XeTeX 出现之前,为了能让 TeX 系统排版中文,国人曾使用了 天元、CCT、CJK 等手段处理中文。其中 天元和CCT 现在已经基本不用,CJK 因为使用时间长且效果相对较好,现在还有人使用。
不同于 CJK 等方式使用 TeX 和 pdfTeX 这两个不直接支持 Unicode 字符的引擎,XeTeX 引擎直接支持 Unicode 字符。也就是说现在不使用 CJK 也能排版中日韩文的文档了,并且这种方式要比之前的方式更加优秀。
XeLaTeX 和 XeTeX 的关系与 pdfLaTeX 和 pdfTeX 的关系类似,这里不再赘述。
使用 XeTeX 引擎需要使用 UTF-8 编码。
所谓编码就是字符在计算机储存时候的对应关系。例如,假设有一种编码,将汉字「你」对应为数字「1」;「好」对应为数字「2」,则含有「你好」的纯文本文件,在计算机中储存为「12」(读取文件的时候,将「12」再转换为「你好」显示在屏幕上或打印出来)。
UTF-8 编码是 Unicode 编码的一种。
CTeX - MiKTeX - TeX Live
CTeX, MiKTeX, TeX Live 都是被称为「发行」的软件合集。他们包括了上述各种引擎的可执行程序,以及一些文档类、模板、字体文件、辅助程序等等。其中 CTeX 是建立在 MiKTeX 的基础之上的。
小结
TeX - pdfTeX - XeTeX - LuaTeX 都是排版引擎,按照先进程度递增(LuaTeX 尚未完善)。
LaTeX 是一种格式,基于 TeX 格式定义了很多更方便使用的控制命令。上述四个引擎都有对应的程序将 LaTeX 格式解释成引擎能处理的内容。
CTeX, MiKTeX, TeX Live 都是 TeX 的发行,他们是许许多多东西的集合。