高效使用 LaTeX 习惯略见

本文所述部分学习自他人.

首先的首先是先学习了解一下, 而不是一开始就拿着该进历史坟墓的所谓模板浪费别人时间.

首先选择发行版, 但凡有一丝可能, 最好选择最新版. 尤其是国内有些人为了某些期刊而不得不用 CTeX 套装, 尽管这是一个无奈的选择, 但实际上只要不自定义一些乱七八糟, 就可以使用新版本编译好, 把 document 复制过去就可以. 在金城时就这么干过, 也帮同学同样处理过稿件. 目前发行版主要是 TeXlive 和 MikTeX, MikTeX 刚开始只安装基本宏包, 此外的使用时再安装. 但对于国内用户, 到时不一定有顺畅的网络支持, 因此推荐的是 TeXlive. 那为何推荐不用 CTeX 呢, 看看”最新版” 2.9.2.164 的发布时间估计也就猜个八九不离十了. 另外中文处理方案 cct 和 CJK 在早期的确是很不错的工具, 但历史在进步, 现在 ctex 宏包集成的 xeCJK 方案能更方便地处理中日朝文字, 同时只要字体支持, 处理其他非拉丁字母文字和编译英语一样. 有兴趣可以参考小站中之前的两篇关于字体的拙作. 另外最近一个切身例子是关于 tasks 宏包提供的 tasks 环境, 去年优化题库代码是想用它, 但是出现了一个小 bug, 今年安装了新版 texlive 之后, 编译报错, 原来是更改了设置规则, 但同时也修复了这个 bug, 后来就抽时间把选择题的选项用 tasks 修改了.

其次是选择编辑器, 虽然从本质上说只要一个文本编辑器足矣, 但是不同的编辑器集成的小工具未必一致, 且有倾向性. 如果自身已经有习惯的编辑器, 完全可以直接使用, 顶多就是对于某些编辑器再稍微设置一下. 想要推荐的就是 TeXstudio, 而且 TeXstudio 从 3.0.5 开始就已经支持 ctex 宏集的命令补全了, 敲命令也更省事了. 当然还有一串: sublime text, vscode (vscodium), winedt, kate, gedit, geany, vim, emacs 等可供选择. 选定一个编辑器, 学习一下常用的快捷键, 要比鼠标点的速度要快.

再者就是代码, 不管怎样, 至少正确不过时的代码才有合格的可能性吧. 比如现在不少地方使用方框表示卡氏积 (笛卡尔积, Cartesian product), 但注意到这实际上是一个二元运算符, 因此 $A$ 和 $B$ 的卡氏积 $A \mathbin{\square} B$ 应该写成 A \mathbin{\square} B, 而不是 A \square B, 可以编译之后看看区别 (\usepackage{amssymb}). 使用 \bfseries 而不是过时的 \bf, 是 \rmfamily 而不是过时的 \rm 等等.

注意编写代码的习惯, 尽管 LaTeX 没有太多对代码格式的要求, 但是良好的代码习惯对于自己再次修改或者给别人看都是不错的. 典型的反例就是某些人拿着机器转换的代码让别人修改, 一眼看上去就是一堆字符而已, 相信没几个人愿意看那样的”代码”. 以下是一些个人认为比较好的习惯.

代码块区分清楚. 比如插图代码, 全部连着写也不会影响输出结果, 但是代码阅读就尴尬了. 所以我一般使用的是

\begin{figure}[!ht]
\centering
\includegraphics{foo.jpg}
\caption{Title}\label{fig:foo}
\end{figure}

这样看起来就很清晰, 每行什么意思也容易理解. 接下来就说说标签和引用.

对于标签和引用, 首先要分清楚不用的命令. 个人建议在一篇稍微长点的文章中, label 也可以区分着写, 方便后面引用, 关键词要与图表之类有关联, 见的不少都是什么 fig1 之类, 若修改顺序后, 可还知道那是哪个吗? 实际中参考文献也经常见到 \bibitem{1} 之类! 用 equation* 然后 tag{1-1} 之类. 其实稍微学习一下就能发现还有个 ref, eqref, cite 之类, 另外 cleveref 宏包提供的 Cref 命令更智能.

对于参考文献, 建议从第一天准备写论文开始, 就使用一个参考文献数据库管理软件, 本人现在使用是 JabRef, 当然类似的也不少, 都大同小异. 这个还是姚老师教的, 还有不少的 LaTeX 知识. 似乎唯一的缺点就是刚开始整理有点麻烦, 但如果使用搜索引擎的导出功能, 那也就不算个事.

数学公式行内行间区别对待. 行内使用 $a^2+b^2=c^2$, 行间使用

\[
a^2+b^2=c^2.
\]

而不是 $$ abc $$, 清晰明了.

很多时候需要掂量一下, 是否自己排版设计水平高于 Knuth 或 Lamport, 没有十足把握或特殊需求, 使用默认即可.