LaTeX 入门(一)| 重剑无锋,大巧不工
写在前面的话
关于是否开 LaTeX 教程系列文章,我纠结了很久。相比傍一傍热词的科普性文章,技术类的文章太过枯燥无趣,阅读量寥寥无几。辛苦写出来的东西没人看,实在给作者以打击。
12月22日我特地转发了一篇稍微偏技术一点的文章试试水,打开率不到10%。也许,公众号本就是用来娱乐大众的产物。
最后,我把取舍权交给了交流群里的小伙伴儿们,参与投票人数为42人。大多数同学都投票希望出教程的同时再发学习资料。
我知道其中不乏南郭先生,但希望各位同学对自己投的票负责。当然,我也会尽力把文章写的有趣一点。
2017年我第一次从我的数模教练那听说 LaTeX 排版的强大,转眼间,已经过去快两年了,也算初窥门径,感觉要学精,实在是难登蜀道,其知识体系浩如烟海。
毕业在即,准备用 LaTeX 排毕业论文,但有段时间不用,知识难免遗忘。遂开此系列,也当纪念我的学习生涯吧:
- 此系列的每篇文章必会用心耕耘,不追求文章数量,宁缺毋滥;不追求更新速度,欲速则不达。
- 在我学习 LaTeX 的途中,走了不少的弯路,欲通过此系列,给初学者指明一条相对明了的学习路径。
- 阅读完本系列文章,不可能熟练地掌握 LaTeX ,关键在自己动手实践。道行深浅,修行在个人。
- 鄙人才疏学浅,文中谬误之处,敬请海涵。若有高手指点一 二,在下感激不尽。
1. 简介
任何技术的产生与发展都是有血有肉的,忽略这段历史,仅仅学习冰冷的技巧,无疑是悲哀的。千古兴亡多少事?悠悠,不尽长江滚滚流。
关于 LaTeX 的发展史及与所见即所得系统(WYSIWYG),比如微软的 Word 间的较量,我已在链接1,链接2,两篇文章中说的很清楚了,不再赘述。有兴趣的同学可以移步阅读。
此处,关于 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 ,但从未使用过。立即体验一下?
- 前往 http://tug.org/texlive/ 下载安装TEX Live。
- 打开编辑器 TeXworks,复制下面源代码到窗口内,保存文件至某处。
- 选择编译方式 XELaTeX,点击绿色编译按钮,右侧将弹出编译完成的 pdf 文件。
1\documentclass{ctexart}2\begin{document}3 中文测试文档4\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为例
- 到 http://tug.org/texlive/ 下载自己机器对应的 TEX Live 的镜像或安装包。
- 双击 install- tl-windows.exe,开始安装。
- 更新. 这一步只是建议, 不是必须的。
TEX Live 的宏包管理器是 tlmgr (TeX Live manager). 在安装路径 C:\texlive\2015\bin\win32 下可以找到 tlmgr-gui.
也可以在 WinEdt 工具栏点击图标 启动 tlmgr-gui. 但是, tlmgr 的图形界面使用 Perl 编写, 容易造成系统假死. 故建议使用下面的方法更新.
- 使用 Win + R 组合键打开 “运行” 对话框,然后输入 cmd 回车, 打开命令提示符窗口.
- 先更新tlmgr. 执行命令
- 再更新TEX Live. 执行命令
1tlmgr update -self2tlmgr update -all
2.3 编辑器的安装
TEX 的编写和编译, 需要借助TEX 编辑器。 当然, 不使用专门的编辑器,仅用记事本和 DOS, 也可以使 TEX 工作。这里不做详细论述,推荐大家使用编辑器进行编写。
TEX Live 使用配搭有多种, 这里只说两个:
- TEX Live + TeXworks;
- TEX Live + WinEdt + Sumatra PDF.
TEX Live + TeXworks
TEX Live 自带编辑器TeXworks,其界面非常朴素, 默认没有语法高亮,字体也很小,需要对 TeXworks 进行简单的设置。
对 TeXworks 的字体及大小、语法高亮、默认编译方式等进行设置如上图所示,推荐:
- 字体选择为 Verdana, 字号 14 磅;
- 将默认编译方式设为 XeLaTeX;
- 对编译方式可以按自己的喜好排序, 比如图中依次为XeLaTeX, pdfLaTeX, BibTeX等.
TEX Live + WinEdt + Sumatra PDF
很多用户习惯使用 WinEdt, 安装 TEX Live 之后也可以选配WinEdt 以及 Sumatra PDF.
在 WinEdt 的发布网站 http://www.winedt.com/ 下载安装即可. 安装过程中, WinEdt会自动配置连接到 TEX Live.
接着安装 Sumatra PDF, 方便文件的反向查找(鼠标双击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 文档, 由三个部分组成: 文档类声明, 导言区, 正文.
1\documentclass{article}2\usepackage{hyperref}3\begin{document}4 Hello World!5\end{document}
文档类就是\documentclass{...}
, 里面声明你要书写什么样式的文档, 常用的有: article
, book
,report
.
可以自己定义一个新的文档类, 对文章的总体样式和各个细节进行声明, 或者定义自己的命令.
正文, 即\begin{document}
和\end{document}
之间的部分.
导言区, 夹在\documentclass{...}
和\begin{document}
之间的部分, 放置需要使用的宏包,或者自己规定一些新的命令.
1\documentclass{ctexart}2\newcommand{\hubei}{中国湖北}3\begin{document}4 我来自\hubei.5\end{document}
上例中, 我们自己定义了一个全新的命令\hubei
, 在正文使用该命令时, 得到的就是该命令的内容“中国湖北”. 还可以定义更复杂的结构或内容.
可能你需要定义的东西太多, 这时可以把它们写在一个文档里面, 这种文档就是宏包. 使用时在导言区使用\usepackage{...}
, 即可以插入该文档的内容.
例如我们想书写一个数学符号⊵
. 该数学符号已经由宏包amssymb
定义过了, 这样只需要在导言区写上\usepackage{amssymb}
, 加载该宏包即可.
1\documentclass{ctexart}2\usepackage{amssymb}3\begin{document}4 $\unrhd$5\end{document}
3.2 文档的编译方法
3.2.1 编译方式的选择
几种常见的编译方式: XeLaTeX, pdfLaTeX, LaTeX. 推荐使用XeLaTeX, pdfLaTeX 编译, 直接得到pdf 文档.
不同的编译方法, 对应的源文件一般略有不同. 比如第一页的例子,使用pdfLATEX 编译得到的pdf 文件, 其中文是乱码. 需要增加UTF8 选项:
1\documentclass[UTF8]{ctexart}2\begin{document}3 中文文档测试.4\end{document}
不同的编译方式, 得到不同的效果. 下图可见XeLaTeX 处理得更好, 这也是推荐使用XeLaTeX 的一个重要原因.
1\documentclass[UTF8]{ctexart}2\begin{document}3 方程$x^3=1$有3个复根. \\4 方程$x^3=1$ 有3 个复根. \\5 方程~$x^3=1$ 有~3 个复根.6\end{document}
左侧是pdfLaTeX 编译的结果, 右侧是XeLaTeX 编译的结果.
如果文档加入了交叉引用、目录、导航书签等, 需要编译至少两遍, 才能使相关部分正确显示.文档编码的类型, 可以在编辑器下方的状态栏看到.
3.2.2 中文文档的处理
中文的实现, 推荐使用CTEX 宏集.
下面是article
类中文文档的例子.
1\documentclass{ctexart} 2\begin{document} 3\title{中文\LaTeX{} 测试} 4\author{姓名} 5\maketitle 6\tableofcontents 7\section{测试} 8中文测试. 9\section{再测试}10中文测试.11\end{document}
下面是book
类中文文档的例子.
1\documentclass{ctexbook} 2\begin{document} 3\title{中文\LaTeX{} 测试} 4\author{姓名} 5\maketitle 6\tableofcontents 7\chapter{测试} 8中文测试. 9\chapter{再测试}10中文测试.11\end{document}
以下是使用beamer
文档类编写幻灯片的一个示例.
1\documentclass{beamer} 2\usepackage[UTF8]{ctex} 3\usetheme{Warsaw} 4\begin{document} 5\begin{frame}{中文演示文档} 6\begin{itemize}[<+->] 7\item 这是一个幻灯片; 8\item 你可以使用XeLaTeX 编译; 9\item 也可以使用pdfLaTeX 编译;10\item 推荐使用XeLaTeX 编译.11\end{itemize}12\end{frame}13\end{document}
4. 编辑器的基本知识
LATEX 的入门都看过了, 但你是否感觉无从下手? 因为你需要面对的是TeXworks, WinEdt等编辑器, 下面我们简要介绍一下.
4.1 TeXworks 的基本用法
- 注释功能
Ctrl+Shift+]
: 对选定区域进行注释, 该段不参与编译;
Ctrl+Shift+[
: 取消注释.
- 自动补全
使用方法是在输入若干字母后按Ctrl+Tab
或者Shift+Tab
. 比如, 输入\i 之后按Shift+Tab
就会得到\item
, 输入xg 之后按Shift+Tab
会得到\gamma
, 输入\bth 之后按Shift+Tab
会得到
1\begin{theorem}23\end{theorem}
如果有几种可能的补全方式, 多按几次就会在这几种方式之间循环.具体可以参考TeXworks 的帮助文档, 里面还介绍了很多快捷键命令.
4.2 WinEdt 的基本用法
最新版本为WinEdt 10.3, 这里以WinEdt 9.1 为例,两个版本没有大的区别.
- 环境的自动补全
输入一个环境名, 比如\begin{definiton}
, 紧接着输入一个右括号}
, 即输入
1\begin{definiton}}
窗口会自动出现与之配对的\end{definiton}, 即得到
1\begin{definiton}2*3\end{definiton}
- 工具栏的介绍
- 状态栏的介绍
- 右键菜单介绍
- 查找与替换
-
Ctrl+R
, 在弹出的窗口填入要查找和替换的对象. - 用正则表达式完成查找和替换.
1%比如要把文中所有形如2\url{user@website.com}3%的文字换成形如4\href{mailto:user@website.com}{user@website.com},5%搜索6\\url\{\(0*\)\}7%替换为8\\href\{mailto:\0\}\{\0\}9%即可
4.3 不用编辑器亦可
没有WinEdt 之类的编辑器也行?事实上, 不借助编辑器, 仅用记事本和DOS, 也可以使TEX工作.
- 书写文档. 打开记事本(假定文件保存在D 盘. 在D 盘点击右键, 选择“新建文本文档”),在记事本窗口写一小段完整的TEX 文档.
1\documentclass{ctexart}2\begin{document}3中文文档测试.4\end{document}
- 保存文档. 在记事本窗口点击“另存为”, 记文件名为mytest.tex, 文件保存在D 盘.注意选择保存类型为所有文件, 否则上述操作只会得到一个名为mytest.tex.txt 的文本文档.
- 编译文档. 打开DOS窗口(win 键+ R, 输入“cmd”, 回车), 在DOS窗口下进入D 盘(输入“d:” 回车), 键入“pdflatex mytest” 并回车, 使文件得以编译.
- 预览文档. 打开D 盘, 可以看到mytest.pdf 文件.另外, 若想使用XeLaTeX编译, 保存文件时, 编码要选为UTF-8. 执行命令“xelatex mytest”, 即得到mytest.pdf 文件.
显然, 专业的编辑器更方便, 更擅长于TEX文档的编辑和编译.
5. 初学LaTeX 容易忽视的细节
有一些初学者容易忽视的小问题, 不能说是错误, 但这些是不规范、不专业的,我觉得有必要在学习之前就指出来加以规避.
5.1 括号
image5.2 函数名
- max; sin; ln; sup 等记号要用
$ \max, \sin, \ln, \sup $
输入,$ max, sin, ln, sup $
得到的是max; sin; ln; sup, 这不符合运算符要用正体的要求. - 有一些数学符号没有现成的LATEX 命令, 比如arccot, 需要在导言区调用amsmath 宏包, 并定义:
1\DeclareMathOperator{\arccot}{arccot}23%再使用$\arccot x$ 就可以得到arccot x.
5.3 标点符号
- 使用半角标点, 后边要键入一个空格.
- 建议全文使用半角标点, 无论是中文或英文文章. 英文中不应该有全角标点, 而数学环境中就根本不能有全角标点.
- 存在的问题: 顿号、书名号、破折号等中文特有的标点怎么办? 个人折衷的办法是只在这些特定的情形使用全角标点.
- 无论偏向于全角或半角, 强烈建议使用实心的句号, 只要书写的是自然科学的文章.因为, 比如使用全角句号的句子结尾处的“ image ” 容易和数学式“ image ” 混淆吧.
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 自动完成的.
请复制测试下例. 先编译两遍; 然后去掉例子中的注释符号%, 再编译两遍, 看编号有何变化.
1\documentclass[UTF8]{ctexart} 2\begin{document} 3\title{文档测试} 4\author{Superman} 5\maketitle 6\tableofcontents 7\section{测试一节} 8公式: 9\begin{equation}101+1=2.11\end{equation}12%\section{插入一节}13% 新公式:14%\begin{equation}15%1+1.5=2.5.16%\end{equation}17\section{再来一节}18又一个公式:19\begin{equation}201+2=3.21\end{equation}22\end{document}
比较编译的结果可以看到, 所有的编号都是自动调整的.
7.3 交叉引用便捷
对需要引用的公式、图、表、参考文献, 给它取一个名字, 可以很方便地进行引用. 这正是LATEX的一个特色.
下面是一个对公式引用的例子. 请试试编译该例子:
- 先编译一遍, 看结果; 编译第二遍, 注意有什么不同.
- 去掉例子中的注释符号%, 再编译两遍, 看编号及引用有何变化.
1\documentclass{ctexart} 2\begin{document} 3\section{A test section} 4\begin{equation}\label{eq-1} 51+1=2. 6\end{equation} 7等式\ref{eq-1} 是众所周知的. 8%\section{A new section} 9%\begin{equation}\label{eq-1.5}10%1+1.5=2.5.11%\end{equation}12% 等式\ref{eq-1.5} 也不难理解.13\section{Another section}14\begin{equation}\label{eq-2}151+2=3.16\end{equation}17等式\ref{eq-2} 是简单的.18\end{document}
一个重要的常识: 在LATEX 中, 公式、图、表等的引用, 是通过命令\label{name}
和\ref{name}
的配合使用实现的.
在实际使用中, 我们调用amsmath
宏包, 用命令\eqref{...}
使引用公式的编号是带括号的:
1\documentclass{ctexart}2\usepackage{amsmath}3\begin{document}4\section{A test section}5\begin{equation}\label{eq-1}61+1=2.7\end{equation}8等式\eqref{eq-1} 是众所周知的.9\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 格式. 如果我在参加美赛时知道这一点, 就没有必要大费周章的转换图片格式了.
学习建议:
- 熟悉各种环境命令. 环境用
\begin{…}
和\end{…}
来声明. 比如\begin{document}
和\end{document}
就声明了其内部是正文环境. 常用的环境很多, 要留意熟悉. - 注意各种空格、距离命令: LATEX 提供的是一张白纸, 一张没有边界的白纸, 你要在一张多大的纸上写东西, 边上空多少, 字距、行距是多少, 等等, 都得你告诉LATEX.
- 数学公式指令熟悉一下就可以了, 不必死记. WinEdt 窗口上都有快捷键, 有约500 个常用的数学符号命令. 对于初学者, 数学公式稍微复杂一点的时候, 还可以借助MathType.
结语
能看到这里的都是真爱,首先要感谢你们的时间。没有编程基础的同学看到这里可能会感觉一点点烧脑。
为了让大家不觉得那么枯燥,接下来我会从一份专业的美赛 LATEX 模板展开,一点点深入剖析。很多地方不刨根问底对话,可能你看完我下一篇文章,就能熟练运用模板了。尽情的用别人的轮子开自己的车吧!
那么,好奇轮子是怎么造出来的同学们,请继续关注本系列的文章。毕竟,从用模板的人变成写模板的人,还是有一点小帅的哈!
嗯,我是秦迷至于本系列下一篇文章的更新时间,我也不知道,请大家持续关注啦!这段时间比较忙,学长也要开始准备毕设了。
其实,还是主要看大家的反馈情况啦!反馈良好,动力卓越嘛,激素的正向调节哈哈。
拟用九章来讲述 LATEX,以效仿独孤九剑。如果你身边有朋友对 LATEX 感兴趣,你也可以将本文直接转发给他。另外,听说点右下角好看的朋友,都变好看了哟!
一个有一点情怀的大学生独立新媒体