本文已加入专栏文章目录。
宏包的概念
本文所指宏包(package),特指安装后提供 .sty
文件的、能以 usepackage{...}
方式调用的宏包。这类宏包,旨在扩展或提供 LaTeX 的某一特定功能,以便利用户使用。
在 CTAN 上,除了上述提供 .sty
文件的宏包,一些其他形式的内容,也都以宏包的形式进行收录和呈现,它们是广义上的宏包。这些其他形式的内容,有的提供文档类,有的提供字体,有的提供(多种形式的纯粹的)文档,还有的提供外部工具。
一般,在提到「使用/依赖/缺/安装某某宏包」时,使用的是狭义的「宏包」概念。有时,为了强调是在使用「狭义的」宏包概念,笔者会使用「功能性宏包」一词。
宏包的名字
- 调用时,
usepackage{amsmath}
相当于插入了文件amsmath.sty
,此时,宏包名就是文件名。 - 被 CTAN 收录时,一个 CTAN 上的宏包,可以包含一个或多个「广义」的宏包。通常,一个功能性宏包,被 CTAN 收录时的名字和被调用时的名字是一致的。
- 安装/更新某个宏包时,实际使用的是发行版对宏包的命名。对大部分宏包而言,这和它被 CTAN 收录时的名字是一致的。每个 CTAN 宏包的页面里,都包含以下信息:其是否被发行版 TeX Live 和 MikTeX 收录,及若被收录,其在发行版内部的名称。
通常,我们在使用「某某宏包」一词时,是在使用该宏包被调用时的名字。
宏包的文档
使用宏包,离不开阅读宏包文档。
- 形式上,除了常见的提供一个或多个 PDF 文件作为文档,某些简单和年代较早的宏包,还可能仅提供纯文本形式的文档。
- 内容上,除了必须的用户手册,宏包文档还可能包含带注释的代码实现、示例集等部分,不同部分可能集中于同一个文件,也可能分散在多个文件。
- 特别地,几个可以单独调用的宏包,它们的文档可能是同一个文件。
假设在安装宏包时,同时安装了对应的文档,那么
- 对于大部分宏包,在终端使用
texdoc <name-of-package>
即可打开其(主)文档。 - 对于提供多个文档文件的宏包,可以使用
texdoc -l <name-of-package>
列出所有文档,再根据终端的提示,选择打开其中的某一个。 - 有些宏包的(主)文档不是英语的,其对应的英译文档,可能在同一宏包中提供,可能在单独的宏包中提供,也可能没有提供。
本文剩余部分,以 <功能介绍> - <宏包名>
的形式,推荐了一些功能性宏包(不包括符号及字体包)。推荐不仅基于宏包自身的功能完成度、使用便利性、使用广泛性和维护状态等,也受到笔者认知范围、使用经验、个人偏好的影响。
如果是从现在开始,以加载、配置宏包的方式学用 LaTeX,这些推荐是值得信赖的。如果想要深入宏包内部,则这个推荐列表就不恰当也不够用了。
几乎必须
数学公式 - amsmath
插图 - graphicx
颜色 - xcolor
表格 - array
中文 - ctex, xecjk
西文 otf 字体 - fontspec
样式定制
页面布局 - geometry, typearea(额外支持在文档中途改变纸型)
页眉页脚 - fancyhdr
- fancyhdr 不会自动更新版心宽度,与 geometry 配合使用时可能出现问题。宏包 autofancyhdr 修复了这个问题
章节标题 - ctexheading(ctex 宏集的子包),titlesec
目录 - tocloft, titletoc
列表 - enumitem
脚注 - footmisc
抄录环境 - listings, fancyvrb(及扩展 fvextra), minted(不分先后)
定理环境 - amsthm, thmtools, 不推荐 ntheorem
文本强调(下划线、文字底纹等) - ulem, soul(均不支持中文), xeCJKfntef(仅 xetex),lua-ul(仅 luatex)
特定领域
更多公式符号 - amssymb
交换图 - amsmath(amscd 环境),tikzcd(有在线编辑器)
段落对齐方式 - ragged2e
幻灯片,学术报告向 - beamer
多栏模式 - multicol
允许栏宽不等的多栏模式(不可跨页) - vwcol
数字、单位与量 - siunitx
参考文献引用格式 - cite, natbib(提供了「人名年份」引用格式)
索引 - makeindex(定制索引样式见 texdoc ind)
绘制分子和反应流程,偏有机化学 - chemfig
排版分子和反应式,偏无机化学 - chemformula, mhchem
排版算法和伪代码 - algorithm2e,另见知乎回答
排版代码,带语法高亮 - minted(需安装 Python 库 Pygments)
排版示例,「一边是源码,一边是结果」 - showexpl, tcolorbox 的 listings 等模块
插入多页 PDF - pdfpages
自动切边 - standalone
特定需求
四则运算 - calc
术语表 - nomencl
自动调整宽度的子段盒子 - varwidth
让长章节拥有自己的子目录 - minitoc
为目录、参考文献和索引添加目录项 - tocbibind
多栏目录 - multitoc
首字下沉 - lettrine
章首名人名言 - epigraph
尾注 - endnotes
多个参考文献列表 - chapterbib
获知文档总页数 - lastpage
获知文档各部分的总页数 - pageslts
插入终端执行命令后返回的结果 - bashful
使用相对于子文件的路径 - import
页面水印 - watermark, atbegshi
浮动体专题
浮动体标题的格式 - caption
双语标题 - bicaption
定义新浮动体系列,让浮动体「不浮动」 - float
定义新浮动体系列,允许一个浮动体环境包含多个标题 - newfloat
提供「算法」浮动体系列,基于 float 宏包 - algorithm
子图的标题 - subcatpion, subfig
在侧边排版标题,及其他 - floatrow
避免浮动体跨章节出现 - placeins
表格专题
在单元格中自由换行 - makecell
纵向合并单元格 - multirow
均分列宽 - tabularx
在小数点处对齐的列 - dcolumn, siunitx
三线表 - booktabs
表头斜线 - diagbox
使横表线避开纵表线 - hhline
彩色的单元格和表线 - colortbl(常通过usepackage[table]{xcolor}
间接调用)
可跨页表格 - longtable, supertabular
使列按比例分配宽度 - tabu(缺乏维护,色彩支持部分有 bug)
PDF 专题
超链接 - hyperref
书签 - bookmark
注释 - pdfcomment
附件 - embedall, embedfile
辅助工具专题
以表格形式输出指定字体前256个符号 - fonttable
输出页面布局示意图,列出页面参数的值 - layout
可视化各文档部件的布局参数,提供调整接口 - layouts
英文测试文本,可用于测试排版效果 - lipsum
中文测试文本 - zhlipsum
输出测试文档,可包含目录、各级标题、列表、公式、文本等 - blindtext
提供示例图片 - mwe
长度的单位转换 - printlen
输出文件加载依赖关系 - inputtrc
命令定义、宏包编写专题
综合工具 - etoolbox
指定命令参数「类型」 - xparse
修改已定义命令 - xpatch, regexpatch
操作「字符串」 - xstring
个人推荐
功能类
数学公式辅助 - mathtools
公式输入便捷命令 - physics
使用 opentype 数学字体 - unicode-math
自动调整引号方向 - csquote
兴趣类
排版微调 - microtype
为一系列宏包统一配置接口 - interfaces
高度可配置的彩色盒子 - tcolorbox
选项形式提供对「盒子」的操作,避免命令嵌套 - adjustbox
其他
数学公式样式配置和小宏包功能汇总 - voss-mathmode(TeX Live 未收录,CTAN 标记为「已废弃」)
有名但笔者尚不了解
高度可定制的专业文档类 - koma-script, memoir
知乎相关讨论
用 TeX 编辑论文时,如何选择合适的 Packages ?
LaTeX的宏包选择的最佳实践一般都是怎么找的?
【CTeX 套装】暂拟常用宏包列表