LaTeX 总决式 | 重剑无锋,大巧不工

1. 简介

任何技术的产生与发展都是有血有肉的,忽略这段历史,仅仅学习冰冷的技巧,无疑是悲哀的。千古兴亡多少事?悠悠,不尽长江滚滚流。

关于 LaTeX 的发展史及与所见即所得系统(WYSIWYG),比如微软的 Word 间的较量,我已在《什么是LATEX?》《LATEX&Word如何选择》,两篇文章中说的很清楚了,不再赘述。有兴趣的同学可以移步阅读。

此处,关于 TEX 做一个简单小结:

  • 免费
  • TEX 是最精确、最高级的标记语言
  • 版面更专业,数学公式尤其赏心悦目
  • 结构化,它的文档结构清晰
  • 跨平台,它几乎可以运行于所有操作系统
  • 语法不如 HTML 和 XML 严谨、清晰
  • 过程繁琐,需要编译,不能实时查看结果

群里有人问我 TeX、LaTeX、CTEX、TeX Live 之间有什么区别?这明显是没看过我前两篇文章呀,怀着万分悲痛的心情,再给大家小结一下哈:

  • TEX 是一种语言也是一个排版引擎 ,引擎的基本功能就是把字排成行,把行排成页,涉及到断字、断行、分页等算法。
  • LaTeX 是 TEX 的众多宏集之一,只需引用一小段代码,就能实现事先定义好的功能。
  • CTEX 和 TeX Live 都是 TEX 的套装,其中包含了LaTeX,pdfLaTeX,XELaTeX等多种宏集,字体,文档模板,辅助程序等。

[注]: TEX - pdfTeX - XETeX - LuaTeX 都是排版引擎,按照先进程度递增(LuaTeX 尚未完善)

1.1 LaTeX 极速体验

也许你曾听说过 LaTeX 或者 TEX ,但从未使用过。立即体验一下?

  1. 前往 http://tug.org/texlive/ 下载安装TEX Live。
  2. 打开编辑器 TeXworks,复制下面源代码到窗口内,保存文件至某处。
  3. 选择编译方式 XELaTeX,点击绿色编译按钮,右侧将弹出编译完成的 pdf 文件。
\documentclass{ctexart}
\begin{document}
    中文测试文档
\end{document}

让我们赶紧开始准备软件吧!

2. 软件的准备

2.1 关于CTEX套装

自2016年3月之后,CTEX 套装一直没有更新;另外 XELATEX 的出现, 让中文使用的很多难题得以解决, 不借助 CTEX 套装也可以很好地处理。

这里我推荐用 TEX Live ,想使用 CTEX 的同学可以自行下载安装。下载地址:http://www.ctex.org/CTeXDownload. CTEX 套装分为Basic 版和 Full 版, 选其中一个下载即可。建议使用 Full 版。安装完成后要立即更新。

2.2 TEX Live 的安装

我是64位的 Windows,下面以Windows为例

  1. 到 http://tug.org/texlive/ 下载自己机器对应的 TEX Live 的镜像或安装包。
  2. 双击 install- tl-windows.exe,开始安装。
  3. 更新. 这一步只是建议, 不是必须的。

TEX Live 的宏包管理器是 tlmgr (TeX Live manager). 在安装路径 C:\texlive\2015\bin\win32 下可以找到 tlmgr-gui.

也可以在 WinEdt 工具栏点击图标 启动 tlmgr-gui. 但是, tlmgr 的图形界面使用 Perl 编写, 容易造成系统假死. 故建议使用下面的方法更新.

  1. 使用 Win + R 组合键打开 “运行” 对话框,然后输入 cmd 回车, 打开命令提示符窗口.
  2. 先更新tlmgr. 执行命令
  3. 再更新TEX Live. 执行命令
tlmgr update -self
tlmgr update -all

2.3 编辑器的安装

TEX 的编写和编译, 需要借助TEX 编辑器。当然, 不使用专门的编辑器,仅用记事本和 DOS, 也可以使 TEX 工作。这里不做详细论述,推荐大家使用编辑器进行编写。

TEX Live 使用配搭有多种, 这里只说两个:

  1. TEX Live + TeXworks;
  2. TEX Live + WinEdt + Sumatra PDF.
TEX Live + TeXworks

TEX Live 自带编辑器TeXworks,其界面非常朴素, 默认没有语法高亮,字体也很小,需要对 TeXworks 进行简单的设置。

对 TeXworks 的字体及大小、语法高亮、默认编译方式等进行设置如上图所示,推荐:

  1. 字体选择为 Verdana, 字号 14 磅;
  2. 将默认编译方式设为 XeLaTeX;
  3. 对编译方式可以按自己的喜好排序, 比如图中依次为XeLaTeX, pdfLaTeX, BibTeX等.
TEX Live + WinEdt + Sumatra PDF

很多用户习惯使用 WinEdt, 安装 TEX Live 之后也可以选配WinEdt 以及 Sumatra PDF.

在 WinEdt 的发布网站 http://www.winedt.com/ 下载安装即可. 安装过程中, WinEdt会自动配置连接到 TEX Live.

接着安装 Sumatra PDF, 方便文件的反向查找.下载网址:http://www.sumatrapdfreader.org/free-pdf-reader.html.

安装 Sumatra PDF 后, 要对 WinEdt 配置, 使用 Sumatra PDF 作为默认的 pdf 阅读器. 在 WinEdt 菜单栏选 Options —> Execution Modes —>PDF Viewer.

WinEdt 默认的字号比较小, 建议修改.点击菜单 Options, 选择 Options Interface,弹出窗口, 左边边框寻找 Font 选项,对右边的文本进行编辑.

至此, 软件的安装已经完成了! 编译下前面例子, 测试安装是否成功了呢?

3. LATEX 的基本知识

建议: 在用中学. 边用边学, 建立了基本的概念以后, 在使用中根据需求去解决问题. LATEX 的功能和宏包有很多, 每个人用到的功能是有限的; 不主张看完一本大部头的书, 才动手上机测试.

  • 第一步: 把 TEX Live 安装到你的机器里.
  • 第二步: 找一份 LATEX 的入门介绍看看, 一边看一边在电脑上测试编译.
  • 建议开辟一个 “测试区” 文件夹, 用来调试某段 TEX 文档, 或者用来学习、测试各种命令的功能.

3.1 一篇LATEX文档的基本构成

一篇LATEX 文档, 由三个部分组成: 文档类声明, 导言区, 正文.

\documentclass{article}
\usepackage{hyperref}
\begin{document}
    Hello World!
\end{document}

文档类就是\documentclass{...}, 里面声明你要书写什么样式的文档, 常用的有: article, book,report.

可以自己定义一个新的文档类, 对文章的总体样式和各个细节进行声明, 或者定义自己的命令.

正文, 即\begin{document}\end{document} 之间的部分.

导言区, 夹在\documentclass{...}\begin{document} 之间的部分, 放置需要使用的宏包,或者自己规定一些新的命令.

\documentclass{ctexart}
\newcommand{\hubei}{中国湖北}
\begin{document}
    我来自\hubei.
\end{document}

上例中, 我们自己定义了一个全新的命令\hubei, 在正文使用该命令时, 得到的就是该命令的内容“中国湖北”. 还可以定义更复杂的结构或内容.

可能你需要定义的东西太多, 这时可以把它们写在一个文档里面, 这种文档就是宏包. 使用时在导言区使用\usepackage{...}, 即可以插入该文档的内容.

例如我们想书写一个数学符号. 该数学符号已经由宏包amssymb定义过了, 这样只需要在导言区写上\usepackage{amssymb}, 加载该宏包即可.

\documentclass{ctexart}
\usepackage{amssymb}
\begin{document}
    $\unrhd$
\end{document}

3.2 文档的编译方法

3.2.1 编译方式的选择

几种常见的编译方式: XeLaTeX, pdfLaTeX, LaTeX. 推荐使用XeLaTeX, pdfLaTeX 编译, 直接得到pdf 文档.

不同的编译方法, 对应的源文件一般略有不同. 比如第一页的例子,使用pdfLATEX 编译得到的pdf 文件, 其中文是乱码. 需要增加UTF8 选项:

\documentclass[UTF8]{ctexart}
\begin{document}
    中文文档测试.
\end{document}

不同的编译方式, 得到不同的效果. 下图可见XeLaTeX 处理得更好, 这也是推荐使用XeLaTeX 的一个重要原因.

\documentclass[UTF8]{ctexart}
\begin{document}
    方程$x^3=1$有3个复根. \\
    方程$x^3=1$ 有3 个复根. \\
    方程~$x^3=1$ 有~3 个复根.
\end{document}

左侧是pdfLaTeX 编译的结果, 右侧是XeLaTeX 编译的结果.

如果文档加入了交叉引用、目录、导航书签等, 需要编译至少两遍, 才能使相关部分正确显示.文档编码的类型, 可以在编辑器下方的状态栏看到.

3.2.2 中文文档的处理

中文的实现, 推荐使用CTEX 宏集.

下面是article类中文文档的例子.

\documentclass{ctexart}
\begin{document}
\title{中文\LaTeX{} 测试}
\author{姓名}
\maketitle
\tableofcontents
\section{测试}
中文测试.
\section{再测试}
中文测试.
\end{document}

下面是book类中文文档的例子.

\documentclass{ctexbook}
\begin{document}
\title{中文\LaTeX{} 测试}
\author{姓名}
\maketitle
\tableofcontents
\chapter{测试}
中文测试.
\chapter{再测试}
中文测试.
\end{document}

以下是使用beamer文档类编写幻灯片的一个示例.

\documentclass{beamer}
\usepackage[UTF8]{ctex}
\usetheme{Warsaw}
\begin{document}
\begin{frame}{中文演示文档}
\begin{itemize}[<+->]
\item 这是一个幻灯片;
\item 你可以使用XeLaTeX 编译;
\item 也可以使用pdfLaTeX 编译;
\item 推荐使用XeLaTeX 编译.
\end{itemize}
\end{frame}
\end{document}

4. 编辑器的基本知识

LATEX 的入门都看过了, 但你是否感觉无从下手?因为你需要面对的是TeXworks, WinEdt等编辑器, 下面我们简要介绍一下.

4.1 TeXworks 的基本用法

  1. 注释功能

Ctrl+Shift+]: 对选定区域进行注释, 该段不参与编译; Ctrl+Shift+[: 取消注释.

  1. 自动补全

使用方法是在输入若干字母后按Ctrl+Tab 或者Shift+Tab. 比如, 输入\i 之后按Shift+Tab 就会得到\item, 输入xg 之后按Shift+Tab 会得到\gamma, 输入\bth 之后按Shift+Tab 会得到

\begin{theorem}

\end{theorem}

如果有几种可能的补全方式, 多按几次就会在这几种方式之间循环.具体可以参考TeXworks 的帮助文档, 里面还介绍了很多快捷键命令.

4.2 WinEdt 的基本用法

最新版本为WinEdt 10.3, 这里以WinEdt 9.1 为例,两个版本没有大的区别.

  1. 环境的自动补全

输入一个环境名, 比如\begin{definiton}, 紧接着输入一个右括号}, 即输入

\begin{definiton}}

窗口会自动出现与之配对的\end{definiton}, 即得到

\begin{definiton}
*
\end{definiton}
  1. 工具栏的介绍
  1. 状态栏的介绍
  1. 右键菜单介绍
  1. 查找与替换
  • Ctrl+R, 在弹出的窗口填入要查找和替换的对象.
  • 用正则表达式完成查找和替换.
%比如要把文中所有形如
\url{user@website.com}
%的文字换成形如
\href{mailto:user@website.com}{user@website.com},
%搜索
\\url\{\(0*\)\}
%替换为
\\href\{mailto:\0\}\{\0\}
%即可

4.3 不用编辑器亦可

没有WinEdt 之类的编辑器也行?事实上, 不借助编辑器, 仅用记事本和DOS, 也可以使TEX工作.

  1. 书写文档. 打开记事本(假定文件保存在D 盘. 在D 盘点击右键, 选择“新建文本文档”),在记事本窗口写一小段完整的TEX 文档.
\documentclass{ctexart}
\begin{document}
中文文档测试.
\end{document}
  1. 保存文档. 在记事本窗口点击“另存为”, 记文件名为mytest.tex, 文件保存在D 盘.注意选择保存类型为所有文件, 否则上述操作只会得到一个名为mytest.tex.txt 的文本文档.
  2. 编译文档. 打开DOS窗口(win 键+ R, 输入“cmd”, 回车), 在DOS窗口下进入D 盘(输入“d:” 回车), 键入“pdflatex mytest” 并回车, 使文件得以编译.
  3. 预览文档. 打开D 盘, 可以看到mytest.pdf 文件.另外, 若想使用XeLaTeX编译, 保存文件时, 编码要选为UTF-8. 执行命令“xelatex mytest”, 即得到mytest.pdf 文件.

显然, 专业的编辑器更方便, 更擅长于TEX文档的编辑和编译.

5. 初学LaTeX 容易忽视的细节

有一些初学者容易忽视的小问题, 不能说是错误, 但这些是不规范、不专业的,我觉得有必要在学习之前就指出来加以规避.

5.1 括号

5.2 函数名

  • max; sin; ln; sup 等记号要用$ \max, \sin, \ln, \sup $ 输入, $ max, sin, ln, sup $ 得到的是max; sin; ln; sup, 这不符合运算符要用正体的要求.
  • 有一些数学符号没有现成的LATEX 命令, 比如arccot, 需要在导言区调用amsmath 宏包, 并定义:
\DeclareMathOperator{\arccot}{arccot}

%再使用$\arccot x$ 就可以得到arccot x.

5.3 标点符号

  • 使用半角标点, 后边要键入一个空格.
  • 建议全文使用半角标点, 无论是中文或英文文章. 英文中不应该有全角标点, 而数学环境中就根本不能有全角标点.
  • 存在的问题: 顿号、书名号、破折号等中文特有的标点怎么办? 个人折衷的办法是只在这些特定的情形使用全角标点.
  • 无论偏向于全角或半角, 强烈建议使用实心的句号, 只要书写的是自然科学的文章.因为, 比如使用全角句号的句子结尾处的“

” 容易和数学式“

” 混淆吧.

6. 遇到问题怎么办

6.1 查看错误信息

编译过程中跳出的窗口内有编译信息. 若出错, 编译过程会暂停,并提示出错原因. 此时不要急于关闭编译窗口或按回车忽略, 而应查看窗口中的出错信息, 可迅速找到错误.

最常见的出错信息:

  • ! Paragraph ended before … was complete. 环境、括号等不匹配.
  • ! Undefined control sequence. 可能是命令敲错, 或缺少相应宏包.
  • ! LaTeX Error: File '…' not found. 找不到相应文件.

这些出错信息一般浅显易懂, 并且显示错误所在行号.编译信息会保存为log 文件. 比如编译的源文件为mytest.tex, 编译完后, 在同一文件夹下会出现mytest.log 文件.

有些复杂的问题, 可以直接copy 出错信息, 网络搜索查找解决方案.

6.2 寻找解决方案

  • 资料《LATEX 2" 用户手册》、《Mathmode》分别是解决文本、公式排版的重要参考文档;
  • 查看宏包说明. TEX 系统自带了大量的宏包说明文档和例子. 在WinEdt 菜单栏点击Help -->TeX Doc, 输入宏包名查找.
  • 求助于网络. 主要是CTEX 论坛: http://bbs.ctex.org/. 建议先搜索再提问. Google 可以解决我们遇到的很多很多问题.

7. LATEX 究竟强在哪里

7.1 数学公式精美

TEX 的创立就是为了解决数学公式的排版, 这个是TEX 天生的强项. 大量资料有详尽阐述, 这里不再赘述. 数学公式排版的经典文档:

  • 名著《The LATEX Companion》
  • 《LATEX 2" 用户手册》作者: 邓建松, 建议精读此文.
  • 一个示例丰富的必备文档是《Mathmode》. 该文档是很好的备查手册.

7.2 编号自动生成

所有的编号都不用操心. 对公式、图表、章节、参考文献等的编号, 都是LATEX 自动完成的.

请复制测试下例. 先编译两遍; 然后去掉例子中的注释符号%, 再编译两遍, 看编号有何变化.

\documentclass[UTF8]{ctexart}
\begin{document}
\title{文档测试}
\author{Superman}
\maketitle
\tableofcontents
\section{测试一节}
公式:
\begin{equation}
1+1=2.
\end{equation}
%\section{插入一节}
% 新公式:
%\begin{equation}
%1+1.5=2.5.
%\end{equation}
\section{再来一节}
又一个公式:
\begin{equation}
1+2=3.
\end{equation}
\end{document}

比较编译的结果可以看到, 所有的编号都是自动调整的.

7.3 交叉引用便捷

对需要引用的公式、图、表、参考文献, 给它取一个名字, 可以很方便地进行引用. 这正是LATEX的一个特色.

下面是一个对公式引用的例子. 请试试编译该例子:

  1. 先编译一遍, 看结果; 编译第二遍, 注意有什么不同.
  2. 去掉例子中的注释符号%, 再编译两遍, 看编号及引用有何变化.
\documentclass{ctexart}
\begin{document}
\section{A test section}
\begin{equation}\label{eq-1}
1+1=2.
\end{equation}
等式\ref{eq-1} 是众所周知的.
%\section{A new section}
%\begin{equation}\label{eq-1.5}
%1+1.5=2.5.
%\end{equation}
% 等式\ref{eq-1.5} 也不难理解.
\section{Another section}
\begin{equation}\label{eq-2}
1+2=3.
\end{equation}
等式\ref{eq-2} 是简单的.
\end{document}

一个重要的常识: 在LATEX 中, 公式、图、表等的引用, 是通过命令\label{name}\ref{name}的配合使用实现的.

在实际使用中, 我们调用amsmath 宏包, 用命令\eqref{...} 使引用公式的编号是带括号的:

\documentclass{ctexart}
\usepackage{amsmath}
\begin{document}
\section{A test section}
\begin{equation}\label{eq-1}
1+1=2.
\end{equation}
等式\eqref{eq-1} 是众所周知的.
\end{document}

7.4 各种自动生成

LATEX 文档中好些部分都不是“手动” 写出来的, 给一些简单的指令, LATEX 就会帮你完成. 比如:

  • 目录. 在文档中需要加入目录出写上\tableofcontents, 编译就可以了.
  • 参考文献. 如果经常写学术文章, 可以建一个自己的参考文献库, 用BibTEX 可以很方便地得到文后的参考文献列表, 无需自己动手写一个字.
  • 索引. 在导言区加\makeindex, 在文档末尾加\printindex. 在需要索引处加入\index{词条名}便可.
  • 页眉. 在页眉可以自动加入文章名、作者名、章节名等信息.

7.5 模板使用方便

国际知名的学术杂志或出版公司, 一般都提供了自己的LATEX 模板, 比如Elsevier, Springer, IEEE 等等. 学术会议的投稿通常也会指定相应的LATEX 模板.

这些模板就真正实现了, 让作者把注意力集中于文章内容的书写, 而无需理会其排版的外形.

7.6 原文档像草稿

LATEX 源文件会看起来有些凌乱, 但这完全不会影响到结果文档的美观. 而本章的题目: 重剑无锋, 大巧不工正是这个意思.

  • 修改文档时, 不必急于删去认为是多余的文字, 把它们注释掉就行了, 说不定什么时候还想使用这段文字.
  • 用注释功能很容易给出文章的简写版, 或回过头来给出完整版.
  • 结果文档中的换行、另起一段、换页等是由LATEX 自动完成的. 源文件中的换行、空行的随意性不影响结果文档.
  • 可以把一些难记又常用的命令, 放在TEX 文档的最后,方便复制使用. 因为文档编译的时候, \end{document} 之后的信息是被忽略的, 所以这里也可以放一些资料、注解、备选信息等.

8. LATEX入门资料

初学者阅读文档建议:

  • 《LATEX 排版全解》, 写得很好, 内容比较新, 基本知识介绍得比较全面.
  • 《新手请先读我》, CTeX 论坛必读文档.
  • 《LATEX 入门》, 刘海洋编著
  • CTEX 及其论坛
  • LaTeX 科技排版

很难说哪本关于LATEX 的书籍最好. TEX 的内容非常庞杂, 没有一本书能够涵盖全部的内容.

我确信TEX 高手们是依靠TEX 系统自带的各种manual 或者来自于网络的各种文档(甚至是论坛的只言片语), 而不是某本书籍, 来掌握TEX 的.

LATEX 在日新月异, 名著也可能马上过时, 甚至因此产生误导.比如因为阅读了一些早期的资料,很多人有一个误解: 以为LATEX 支持的图片格式最好是eps.

事实上, LATEX 支持的图片格式绝非eps这一种, 无需特意把图片转化为eps 格式. 如果我在参加美赛时知道这一点, 就没有必要大费周章的转换图片格式了.

学习建议:

  1. 熟悉各种环境命令. 环境用\begin{…}\end{…} 来声明. 比如\begin{document}\end{document} 就声明了其内部是正文环境. 常用的环境很多, 要留意熟悉.
  2. 注意各种空格、距离命令: LATEX 提供的是一张白纸, 一张没有边界的白纸, 你要在一张多大的纸上写东西, 边上空多少, 字距、行距是多少, 等等, 都得你告诉LATEX.
  3. 数学公式指令熟悉一下就可以了, 不必死记. WinEdt 窗口上都有快捷键, 有约500 个常用的数学符号命令. 对于初学者, 数学公式稍微复杂一点的时候, 还可以借助MathType.

原文发布于微信公众号 - 小詹学Python(xiaoxiaozhantongxue)

原文发表时间:2019-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券