LaTex排版的几个技巧

中文乱码问题

Windows 下的 TeX 开发软件 MiKTeX 并不提供原生的中文支持,所以不能直接使用 MiKTex 编写含有汉字的文档。CTeX 通过向 MikTex 中添加中文格式和字体解决了汉字编排问题。

但有些时候,即使使用 CTeX 编写汉字文档,也会出现乱码并终止编译过程。这个时候就要检查文档的编码格式了。LaTex 源代码可以使用不同的字符编码格式保存。对于简体中文而言,最常见的编码格式有 GBK(GB2312) 和 UTF-8. 只有代码的编码格式和 LaTex 编译器接受的格式一致时,文档才可以正确编译。也就是说,避免出现乱码的方法有两种:

  • 源代码和编译器设定都使用 GBK 编码
  • 源代码和编译器设定都使用 UTF-8 编码

默认的 CTeX 环境优先支持 GBK,Windows 系统的默认编码格式也是 GBK (至少 XP 是这样)。如果源代码使用了 GBK 之外的格式,可以通过 Notepad++ 等文本编辑器转为 GBK 格式。

不过,使用 UTF-8 编码依旧是大势所趋,在 CTeX 中启用 UTF8 选项即可读取 UTF-8 格式的文本。启用该选项的方法很简单,找到文档的初始位置

1
2
\documentclass{article}
\usepackage{CTEX}

改为

1
2
\documentclass[UTF8]{article}
\usepackage{CTEX}

或者直接使用 ctexart, 即"ctex article"

1
\documentclass{ctexart}

如果你还嫌麻烦,可以一个字都不改,直接使用 xelatex 引擎编译。

类似地,把方括号中的 UTF8 换成 CJK 可以强制使用 GBK 编码格式。

喜欢使用 Sublime Text 的同学不要错过 ConvertToUTF8 这款插件,它可以实现 GBK 和 UTF-8 文件的读取和转换。


段落与换行

在源代码中空一行以另起一段,使用\\标记可以在此处另起一行。这两种用法的区别在英文文档中不是很明显。在中文文档中,如果设置了首行缩进,另起一段会缩进随后的文字,而另起一行就没有缩进的效果。


内联公式

使用两个美元符$...$括起来的部分是内联公式,里面的内容将按照数字模式而不是段落模式的规则处理。与其他诸多特殊符号一样,要在文档中输入一个美元符,请使用反斜杠作为转义字符\$

内联公式最大的特点是不能添加公式号。也不建议使用它书写多行公式,在有限的行距内很难看清。


对齐数学公式

当遇到长篇幅的公式推导时,我们希望公式的每一行可以相互对齐,而不会显得乱糟糟。数学模式依旧使用\\线为公式换行,但需要手动指定公式的对齐方法。

例如,当公式中出现多个等号的时候,通常指定所有的等号上下对齐,这可以通过在等号前或等号后加上&制表标记来实现。为了美观,我们选用 amsmath 扩展包下的 align 环境编写多行公式

1
2
3
4
\begin{align}
x_{k+1} &= A \ x_k + B \ u_k + G \ w_k \\
y_k &= C \ x_k + H \ v_k
\end{align}

式中的\号用于增大间隙,并没有实际意义。数学模式下其他可以用来增大间距的符号有\,, \:, \;, \quad\qquad


隐藏公式的标号

当使用 align, eqnarry, equation 等环境编写非内联数学公式时,LaTex 引擎会自动给公式附加一个标号。如果不想给该公式编号,把环境名称修改为 align*, eqnarry*, equation* 即可。

在数学模式下编写多行公式时,由\\分开的每一行都会有一个公式标号。如果要隐藏某一行的标号,可以在\\之前使用\nonumber标记

1
2
3
4
5
6
\begin{align}
\Sigma_{k+m \vert k} &= cov(\sum_{j=0}^{m-2} A^{m-1-j} G \ w_{k+j}) + cov(G \ w_{k+m-1}) \nonumber \\
&= cov(A \sum_{j=0}^{m-2} A^{m-2-j} G \ w_{k+j}) + GQG^T \nonumber \\
&= A [cov(\sum_{j=0}^{m-2} G \ w_{k+j})] A^T + GQG^T \nonumber \\
&= A \sum_{k+m-1 \vert k} A^T + GQG^T
\end{align}

在上面的例子里,只有最后一行会显示公式的标号。


子公式的拆分

有时一个公式组由几个相关的公式组成,每个子公式需要单独编号,这时可以使用 amsmath 包中的 subequations 环境。回到之前的例子

1
2
3
4
5
6
\begin{subequations} \label{eq:3.3}
\begin{align}
x_{k+1} &= A \ x_k + B \ u_k + G \ w_k \label{eq:3.3a} \\
y_k &= C \ x_k + H \ v_k \label{eq:3.3b}
\end{align}
\end{subequations}

整个公式组为公式(3.3), 第一行是公式(3.3a), 第二行是公式(3.3b). subequations 环境中的\label标签引用了整个公式,而 align 环境中的\label标签则引用单个子公式。


公式的引用

amsmath 中的 \eqref 标记通过引用预先设定的\label标签引用公式。它会在生成的文档中显示公式号,并创建一个指向公式的链接。

1
公式\eqref{eq:3.3}是线性随机系统的状态方程。

会被编译成

1
公式(3-3)是线性随机系统的状态方程。

\label标签可以使用任何数字字符或标点符号,例如把上面公式中的\label{eq:3.3}替换成\label{3-linear-sto-sys}, 在引用时使用\eqref{3-linear-sto-sys}就会得到相同的结果。只要它是第三章的第3个公式,就会被编译成(3-3)或者类似的格式。