最后更新时间:2024-10-5
Here are some of my practical tips and tools for using LaTeX.
这里收集了我使用 LaTeX 的各种使用建议和实用工具。
-
pdflatex
这个引擎是三类引擎中速度最快的。
如果你只使用英语这一种语言且不在意字体,仅在这一种情况下,推荐使用这个引擎。
-
xelatex
这个引擎,是很多网上教程推荐使用的,但是我并不是很推荐。不可否认的是,我一开始写 LaTeX 中文笔记时,也是使用这个引擎。但是 xelatex 和其他两种本身不是属于同一个分支的产物,很多宏包在不同引擎中切换会出现了很多警告和报错。
-
lualatex
这个引擎(应该)是三类引擎中速度最慢的。但也是我最推荐的引擎,无论你使用哪种语言。
我使用这个引擎其实不是很长时间,在之前,我一直使用 pdflatex 引擎(是的,我很少用 LaTeX 写中文的文档)我从 pdflatex 切换过来,仅仅是修改了字体相关的宏包就可以无缝衔接使用了。
-
latexmk
这不是一个严格意义上的编译引擎,它是一个类似于 Makefile 的 LaTeX 自动化构建工具。但是它的速度是非常慢的,尤其是在构建大型文档项目的时候。急性子(e.g. Me)不推荐使用。
LaTeX 的使用群体绝大多数的共同需求就是需要输入数学公式。以下这五个是我使用很久的数学公式符号的宏包。
amsmath
,amssymb
,amsthm
amsfonts
mathtools
如果你和我一样,以上五个宏包都要使用。请将它们这样放置在文档的合适位置(警告:千万不要更改它们其中任何一个的顺序!否则你会像过去的我一样,被迫去 tex stack exchange 找解决方法)
\usepackage{amsmath,amssymb,amsthm}
\usepackage{amsfonts}
\usepackage{mathtools}
-
microtype
调整字母间间隔的宏包。目前仅支持 pdflatex(lualatex 实测也有效),部分支持 xelatex。
-
geometry
纸张大小,页面布局设置
-
fancyhdr
页首页脚设置
-
thmtools
推荐使用这个宏包来定义更精细的定理环境,而不要使用
ntheorem
。 -
tcolorbox
这个其实和定理环境没啥关系,它主要是提供一个颜色盒子。使得你的环境变得五(花)彩(里)斑(胡)斓(哨)。
-
hyperref
这是一个生成超链接引用宏包。例如目录,定理引用等各种在 PDF 中需要超链接进行跳转的都可以使用它。
-
bookmark
书签宏包。一般搭配
hyperref
进行使用。
-
color
和xcolor
建议两个宏包一起使用,这样基本能覆盖大部分颜色。如果你对颜色还有更高的要求,我推荐你去这里寻找你感兴趣的颜色。
-
inputenc
和fontenc
这两个宏包是在 pdflatex 上使用的。
-
fontspec
本身对字体支持友好的 xelatex 和 lualatex 都可以使用。
-
ctex
这个宏包是我目前用过最好的中文宏包了。不推荐使用
xeCJK
。如果你是在文档中少量使用中文(即文档的主要语言不是中文),请使用设置一下命令选项:
\usepackage[scheme=plain]{ctex}
主要有两个宏包 babel
和 polyglossia
。我两个宏包都使用过(我文档中有时会使用到三种语言,分别是中文,英语和法语),这两个宏包都是经常更新的。
-
babel
比较推荐使用这个。无论是 xelatex 还是在 lualatex 上,这个宏包都能很好地实现功能。
-
polyglossia
这个使用文档写得比较好。但是一旦出现问题,去 tex stack exchange 求助的时候,有很多人都会建议你使用
babel
,我也不知道为什么。反正看个人需求吧,其实看文档基本也可以修复大部分问题。只要少数涉及 LaTeX 排版底层的东西才会去 stack exchange 寻求解决。
对于在 LaTeX 上实现画图功能,我建议大家不要插入图片或插入 PDF,而是使用以下宏包画矢量图。
-
tikz
能画各种矢量图。详情请看使用文档(上千页的使用文档,我几句话是无法表达清楚的)
-
pgfplots
一般用于画函数图像。
-
enumitem
有序条目和无序条目都可以实现自定义。
-
de-macro
这是一个可以修改命令的 Python 脚本(不是 LaTeX 宏包!)。它可以将自定义命令恢复成 LaTeX 的原有命令(当然还有其他功能,我主要使用的是这个功能)
目前最新版的 TeXLive2024 已将它移除,所以,要使用它只能去 CTAN 上的地址下载,然后自己操作。
编写 sty 和 cls 使用的宏包
-
iftex
功能和宏包名称一样。提供
if...then...
语法,我使用它实现引擎之间的判断,也就是在使用不用引擎的时候会调用不同的宏包,避免报错。