撰写论文【LaTeX】

为什么要学LaTeX?

LaTeX是用来处理文字、用于出版的开源软件系统,和微软的Word相比相对小众。从撰写学术论文的角度,先说一下LaTeX的优势:

  1. LaTeX将文本和格式分离,撰写者只需要关注文本内容,格式的处理都是自动完成的。因此在写论文时,不需要考虑期刊的格式要求(比如单栏还是双栏,单倍行距还是多倍行距)。完成论文内容后,去目标期刊寻找LaTeX模板,稍作修改即可转换为符合期刊要求的文稿。如果你的论文不幸被拒稿多次,需要转投不同类型的期刊,那么LaTeX能帮你节约很多排版时间。这方面国内的期刊还有很大的提升空间,但也可喜的看到有很多期刊、学校和个人在努力。比如国科大的学位论文就有LaTeX模板,这样学生们不用把时间浪费在繁琐的排版上。
  2. LaTeX非常适合编写公式。在Word里输入公式涉及大量的鼠标操作,即便是有MathType也是较为繁琐的,何况MathType本身是收费软件。LaTeX输入公式非常简单,只需要记住一些基本符号的意义和名称,文本和公式的输入完全是无缝的,不需要用到鼠标来回点击(如果你的编辑器支持snippet会更加便利)。
  3. LaTeX便于处理参考文献。学术论文写作的一个痛点就是对参考文献的引用和格式的整理,不同期刊的要求有很大不同。如果是Word,要做这样的更改是非常痛苦的,即便有Endnote的协助(当然,Endnote也是收费的)。LaTeX可以通过bib文件管理文献,引用过程和文本输入非常类似,而参考文献格式则完全自动处理(格式文件以bst结尾,一般由出版社提供),可节省大量的时间。如果拟投Elsvier旗下的期刊,可在这个文件里获取期刊所采用的参考文件格式。对于bib文件的管理,也有专门的软件,比如JabRef。
  4. 维护的TeX文件可实现代码复用。写论文的时候,实际上所有的文本和排版信息都在TeX文件里。这是一个可以被记事本打开的文件,文件的不同区域可以实现不同的功能。比如你可以在导言区(preamble)定义一些命令和参数,也可以在修改论文时随时注释掉一些文本,甚至于可以和Python、Git等语言和工具结合起来,实现自动处理文本、版本协同控制等等。总而言之,一切用于代码管理的工具都可以用上,从而提高编辑效率。
  5. 交叉引用。在Word中处理交叉引用时必然会用到鼠标,而在LaTeX一切都可以在键盘上完成。对于需要引用的图、表等区域,可以自定义可读性强的标签(label),比如\label{sec:introduction}\lable{fig:model:agent},便于引用。在Word中不仅需要鼠标点击,而且还需要手动更新域,在处理大型文档(毕业论文、书本等)时较为繁琐。
  6. 可以做PPT。是的,因为有beamer这个文档类别(class)的存在,LaTeX可以非常方便的制作PDF格式的PPT。优势在于前面所提及的各种优点,而缺陷则是因为受限于PDF格式,对多媒体(视频、音乐等)的支持不太友好,在实现某些动画效果的时候也力不从心。如果你打算做一个学术型的PPT,那么LaTeX应该会优于PowerPoint。

说完优势,接下来说说劣势,以及对应的解决方案。

  1. LaTeX并非所见即所得,所以有一个单独的编译过程,类似于运行一个将代码转为文件的程序。这就导致大部分编辑器的界面不如Word易上手,学习曲线陡峭。即便如此,还是建议大家适应这种编译方式,大致了解PDFLaTeX、XeLaTeX等命令的区别。如果确实学习难度较大,可以选择Lyx等支持所见即所得的软件,或者选择Overleaf网站
  2. LaTeX的生态环境以开源为主,意味着很多功能没有商业支持,出现的一些bug需要自己想办法去解决。一般而言,常见的注意事项包括:不要在路径和文件名中出现中文、有些符号(如$, {})应当成对出现等。遇到问题首先将问题的关键字放到搜索引擎中查找,尝试网上的解决方案。如果解决不了,可以咨询其他LaTeX使用者,寻求对方的帮助。
  3. 表格难以处理。对于表格,除了常规输入,还有几种方法。一是将数据整理到Excel,然后通过Excel2LaTeX插件转成LaTeX代码贴上去。也有latex-tablestablesgenerator等网页可以实现类似功能。二是通过Python等语言直接从数据库中读取数据并生成LaTeX代码。更多用Python操作LaTeX的方式可参考PyLaTeX包。
  4. 图片格式。图片格式大致有两种:一种是位图(如jpg,bmp),常见于镜头拍摄所得,不断放大时会逐渐变得模糊;另一种是矢量格式(如svg,eps),即便放大也能保持清晰和光滑的边缘。写论文一般涉及坐标轴、点、线、图形、文字等,应当存为矢量图。根据我的经验,不管用什么软件制图(比如PowerPoint、Visio、Photoshop、AI、Origin、Python、TikZ),最好把输出的图片存为单独的、矢量的pdf格式,以便LaTeX编译。以上提及的软件中,首推Python(常用于读取数据后直接输出图片),其次是更难学习的TikZ(常用于绘制复杂的函数图形)。主要是因为这两个方式生成图片的过程都是用代码形式储存的,便于修改。
  5. 批阅修订功能。这方面Word是碾压优势的,但LaTeX也有不少解决方案。比如引入changes这个包突出修改内容(利用Latexdiff也可自动实现)、在生成的PDF文件上直接批注、使用Lyx编辑器(通过自己定义了新的文件类型实现批阅)、使用Overleaf(通过网页功能实现多人在线批阅)。如果你都不想用,那么可以通过Git实现版本控制和代码对比。不过,由于Git对于单行长文本的显示不太友好,故建议在每一句话的后面加一个回车,将长文本改为短文本,便于定位修改之处。

LaTeX环境的安装

LaTeX是跨平台的,也就是说Windows、Mac和Linux都可以安装。LaTeX有两大软件包,一个是MikTex,一是个TexLive。不管选择哪个,都建议采用完整安装,以避免莫名其妙的找不到某些包的问题。以TexLive为例,访问清华的镜像网站选择最大的iso文件下载,之后可以解压或者用虚拟光驱挂载,找到可执行文件(bat格式)双击安装即可。
和Python类似,安装完软件包之后其实只是将一些编译程序和包准备好了,但编辑tex最好再借助其他专用软件。我常用TexStudio,其他如LyX、TeXworks等也可以考虑。目前,不少通用编辑器在LaTeX插件的支持下也支持tex编辑,如Pycharm、VS code、Emacs等。这个网页有对比,自己尝试几款后选择一款即可。

如何学习LaTeX?

正如前面说言,学习LaTeX成本巨大,但可能节约的时间精力也很可观。给几个学习LaTeX的建议:

  1. 从期刊官网上下载一个论文模板,编译运行。如果能成功生成pdf,则走通了流程,剩下的就是自己去替换模板内容、尝试理解每一行内容和每一个命令的含义了。个人还是推荐Elsvier的模板,下载解压(还记得前面提醒的路径中不要有中文吗?)后直接打开任意一个tex文件,直接点击编译,你会看到目录下生成各种文件,最终出现了一个pdf文件。
  2. 用LaTeX制作一份自己的简历。网上有很多LaTeX简历供参考,也可以采用Overleaf自带的简历模板,找一个喜欢的动手改起来吧。
  3. 尽量降低对Office的依赖,强迫自己多用LaTeX制作各种文档。除了上面提到的毕业论文、期刊论文、简历、PPT之外,还可以制作海报、信件、日历甚至棋盘(象棋的cchess包、围棋的igo包)。你会发现开源社区的魅力所在。

与Python、Word的对比

前面已经介绍了不少LaTeX与python、word的关系了,最后通过两个表格简单对比一下:

对比 LaTeX Python
目的 编译Tex文件制作PDF文件 执行py文件代码
文本文件 tex文件 py文件
编译体系 TeX typesetting system Python
依赖管理 MiKTeX、TeX Live Anaconda
常用的包 amsmath, algorithm2e, … numpy, scipy, …
Editor TexStudio PyCharm
对比 LaTeX Word
效率提升 文本和格式分开 自动编译文本格式,所见即所得
公式输入 直接键盘输入 MathType、自带方法
参考文献 输入到Tex文件中或调用bib文件 手动输入或借助Endnote等软件
代码复用 在导言区定义 难以实现(可借助宏)
交叉引用 自定义,自动处理 手动指定,通过域管理
表格图片 手动输入,或借助插件、网页 非常直观,排版方便
批阅修订 难以实现,可借助changes包等手段 非常直观,易于处理