LaTeX (排版系统)

如果经常用 Word 写大型文档,你一定很清楚——

  • 即使使用了“样式”,拿 Word 维护格式仍然很麻烦;
  • 即使使用了“交叉引用”,维护序号和引用关系也有些麻烦;参考文献也一样;
  • 数学公式简直就是噩梦。
  • ……

LaTeX 是一个强大的排版语言,它最擅长的就是有一大堆数学公式的学术论文——以代码的形式书写论文,书写的时候只需要关注正文内容,而格式、编号、引用什么的会由系统自动生成,而且论文的样式非常漂亮。

论文

用 LaTeX 写的美国数学建模比赛论文(截图)

此外 LaTeX 也可以用于制作学术用途的幻灯片,既简洁又质朴。

[% callout %] TeX 的起源

上个世纪 70 年代的时候,大牛高德纳(Donald Ervin Knuth)发现自己的大作《计算机程序设计艺术》(The Art of Computer Programming)印刷水平实在烂到渣。作为一个黑客,这当然令他无法忍受,于是他自己动手写了一个排版软件——TeX。

TeX 是一个很少有 bug 的软件。而且有趣的是,TeX 的版本号是逐步向圆周率靠近的——最新版是 3.1415926。

因为 TeX 的代码比较原始,写起来容易头大,所以后来有人对 TeX 进行了一些封装,简化了许多语法,即 LaTeX。 [% endcallout %]

在国外,有很多教授或学术机构不接受,或者不愿意接受 Word 格式的文件,这时候你当然要用 LaTeX 编辑然后生成一份 PDF 文件发给他们了。国内盗版流行,所以没有人会在乎 Word 要多少钱。

在本文,我们不打算区分 TeX、LaTeX、LaTeX2e、AMSLaTeX、XeLaTeX、TexLive、MikTeX……的概念。我们会直接用 LaTeX 来指代这些东西。

LaTeX 的配置

LaTeX 也是编译器,所以需要安装和配置才能用。而且,这个软件很大,安装时一定要有耐心。

Windows

Windows 下的配置是最轻松的:

  1. 下载并安装 CTEX。建议下载完整版,免得麻烦。
  2. CTEX 附带的两个编辑器很不好用,其中一个还要钱 (不仅要钱而且对 UTF-8 支持还很差劲),所以你可以自己下载 TexStudio

Linux

以 Ubuntu 为例。

  1. 安装 texlive-full 软件包。
  2. 安装 texstudio 软件包。
  3. 这时候可以编译英文文档了,但是中文文档还不可以,因为缺中文字体。
    • 到 Windows 系统盘的 Windows\Fonts 目录中找到宋体 (SIMSUN.ttc)、楷体 (SIMKAI.ttf)、黑体 (SIMHEI.ttf)、仿宋 (SIMFANG.ttf) 四种字体。
    • 把这四种字体复制到 /usr/share/texlive/texmf-dist/fonts/truetype/public 中,不要改名。
    • 运行 sudo texconfig,选择其中的 REHASH,使系统检测到刚复制的四个字体。

OS X

  1. 下载并安装 MacTex
  2. 下载并安装 TexStudio
  3. 同样要把四种中文字体的问题解决。下面是对 ctex 宏包本身进行修改的方案——

    打开 /usr/local/texlive/2014/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def,做以下改动:

\setCJKmainfont[BoldFont={STHeiti},ItalicFont={Kaiti SC}]
  {Songti SC}
\setCJKsansfont{Songti SC}
\setCJKmonofont{STFangsong}

\setCJKfamilyfont{zhsong}{Songti SC}
\setCJKfamilyfont{zhhei}{STHeiti}
\setCJKfamilyfont{zhkai}{Kaiti SC}
\setCJKfamilyfont{zhfs}{STFangsong}

\newcommand*{\songti}{\CJKfamily{zhsong}} % 宋体
\newcommand*{\heiti}{\CJKfamily{zhhei}}   % 黑体
\newcommand*{\kaishu}{\CJKfamily{zhkai}}  % 楷书
\newcommand*{\fangsong}{\CJKfamily{zhfs}} % 仿宋
\endinput

LaTeX 入门

如果有代码恐惧症,一定要记住:当你不理解代码用途的时候,可以看看别人怎么写的,照着改。

  • 如果是写论文,可以去找《112 分钟学会 LaTeX》。因为不需要深奥的编程思想,而且不需要记住所有语句,所以很快就能入门。
  • 如果是做幻灯片,首先你要知道一般人都用beamer宏包。

如果真的要写论文了,不妨先搜一搜模板,然后再动手。一个合适的模板可以事半功倍。因为做模板那个人已经事倍功半了。

中文问题

很多教程是从外文翻译过来的,所以对于中日韩三个国家的人来说就麻烦了。

在文档的导言区加一句:

\usepackage[UTF8,hyperref]{ctexcap}

然后就能输出中文了。

中文解决方案有很多,例如 CCT、CJK……如果你碰到了这些字样,建议你直接无视它们,因为只要上面一行代码,问题就已经直接解决了。

编译的时候,建议大家用 XeLaTeX。这个对中文的支持更好。

辅助

模板

尽管 LaTeX 可以让你专注于内容的书写,然而 LaTeX 认为默认样式是最合适的,若无必要,不必修改,因此在 LaTeX 修改样式实在是非常费劲。

如果论文有严格的格式要求,那么最好找一个合适的模板(例如哈尔滨工业大学的学士学位论文模板),在他的基础上进行修改。这样可以节省不少时间。

宏包

默认功能总会是有限的。幸运的是,LaTeX 有着良好的扩展性——通过一个叫做“宏包”的东西来扩展功能。

前文提到的“ctexcap”就是一个处理中文支持问题的宏包。

有了宏包,我们可以轻松地解决很多问题,例如绘制电路图、有机物的结构式、贴一段程序代码……只要你知道宏包叫啥,知道怎样使用就行。

图象

LaTeX 并不擅长绘制图形。所以有以下几种方案:

  • 使用 TikZ:TikZ 是一个强大的用于绘图的宏包。只要给指令他就能绘出图形。简单图形可以用这个宏包。
  • 使用 GNUplot:数学图象,不管是 2D 还是 3D 的,可以用 GNUplot 绘制。只不过 GNUplot 也是一堆代码……
  • 使用绘图软件(例如 MATLAB、Photoshop、Illustrator):LaTeX 支持 jpg、png、eps、svg、pdf 等格式。为了提高印刷质量,建议保存成矢量图(eps、svg、pdf 等)。

参考文献

BibTeX 是用来写参考文献的,可以和 LaTeX 配合使用。通过一个叫做 JabRef 的软件,即可专门管理参考文献。

Google 学术可以直接将参考文献导出成 LaTeX 格式。遗憾的是,国内的数据库和软件对 LaTeX 不太友好,所以仍然需要其他文献管理软件来将其转换成 TeX 格式。

作弊

如果公式、图形或表格非常复杂,那么与其苦苦研究和调试 LaTeX 语句,不如找个简单方法直接解决问题。毕竟天朝人有钱,不怕商业软件价格贵。

数学公式

如果 LaTeX 刚入门,你很可能解决不了复杂数学公式的输入。这时候我们就需要 MathType 了。MathType 可以直接以 LaTeX 格式来输入公式,也可以把公式直接复制成 LaTeX 格式。对于不容易或者不会写成代码的复杂数学公式来说,非常方便。

[% callout %] 提醒

一些常用的语法,例如$x^2$(x的平方)、$\sqrt{a+1}$(√(a+1)))、$\sin\frac{\pi}{3}=\frac{\sqrt{3}}{2}$(sinπ/3=√3/2),用得多了自然就能记住…… [% endcallout %]

复杂图形

最简单的办法——用 MATLAB、Illustrator 等软件把图画好,保存成 pdf 或 svg 格式,然后插入到文档中。

复杂表格

对于非常复杂的表格,我们可以拿 Word 做好,保存成 PDF 格式,用 Illustrator 或其他矢量图软件进行适当处理,然后作为图片插入到文档中。

但是这样做有一个小问题——字体不一样,怎么办?

一个伟大的解决方法是:去 LaTeX 安装目录里找 texgyrepagella 字体,把它装上,然后到 Word 里把字体设成 TeX Gyre Pagella。然后他们看起来就没什么明显区别了。

Lyx

Lyx 是一个类似 Word 的可视化编辑软件,但是仍然遵循 LaTeX 的规范,所以格式不会像 Word 那样被调得乱七八糟。

Lyx 基于 LaTeX,用 Lyx 编辑的文本也使用 LaTeX 编译,因此 Lyx 适合“代码恐惧症”患者。