首先看你学了这些想做什么。
如果只是要做模板、普通宏包的话,可以参看这篇回答。如果想做到更深一点,涉及到和字体、PDF 等相关内容的话,学怎么写 TeX 宏就不再是首要任务了。
要写宏的话,The TeXbook(以下简写为 BOOK)第 7、20 章、TeX by Topic(以下简写为 TOPIC)第 1、2 章是一定要看的。然后核心的一些概念比如 count、dim 寄存器等等都可以从 BOOK 中找到,TOPIC 和另一本叫 The advanced TeXbook (by David Salomon) 的书可做参考。BOOK 第 24、25、26 是一些东西的汇总,其中有很重要的一个东西就是给出了 TeX 的语法(syntax)规则,比如什么是一个 TeX 意义上的数字,对于理解一些 tricks 有作用(比如 \exp_end_continue_f:w
和 \exp_end:
是怎么实现的)。
然后就是和排版有关的一些宏和 primitive 了,比如每行之间的间距是多少,怎么计算的,怎么断行的,允许在哪些位置断行,哪些位置不能断行,怎么分页的,页眉页脚是怎么实现的,没了 amsmath 怎么打数学公式,等等这些内容基本都是各个引擎通用的,都可以在 BOOK 和 TOPIC 上找到。
还有 output routine,这在 LaTeX 格式下非常复杂,但也是阅读 multicol、lineno 源码的所必需的,属于比较“高级”的内容了。
有了一定的 TeX 基础后,读 BOOK、TOPIC 就可以选读了,从它们的目录就能找到这些知识对应的章节。
但是呢,只是读 BOOK 和 TOPIC 还不能知道诸如 \marks
\expanded
\Ucharcat
这些 primitive 的用法,这时就需要读 etex、pdftex、xetex、luatex 等等的文档了。
对于 luatex,还有要提的就是嵌入的 lua 脚本引擎了,它扩展了 TeX 的很多功能,文档上都有,这里不多赘述。
对于 LaTeX,新内容说多不多,说少也不少。一些新的玩意,比如 hook、marks、properties、template 等等,基本上看看文档就行了。对于 NTFS(现在基本都用 fontspec 了)、output routine 这种可以不读,但是如果涉及字体就离不开 NTFS 的文档,涉及多栏排版就离不开 output routine(还有“意想不到的”lineno 也和 output routine 有关),如果要编写比较好的绕排宏包需要的知识就更多了,首先对 TeX 的分段算法要了解,LaTeX 的列表的实现也需要了解(可参考 wrapstuff),自定义标题和目录要对 LaTeX 定义标题和目录的方式有所了解,诸如此类,如果在阅读源码是发现不熟悉的命令可以先看看是不是 LaTeX 定义的。
当然,很多时候用 LaTeX 并不需要自己写轮子,用别人写好的宏包就行了,不过有时还是少不了要看源码的。
还有用的很多的就是用 \NewDocumentCommand
定义命令,文档写得也算比较详细了,也可以看看我写的一个相似的宏包 https://github.com/Sophanatprime/lt3ekeys 。如果想知道是怎么实现的,也可以参考它的源码,和 ltcmd 的实现方式基本一致。
对于 LaTeX3,其实只要知道有哪些基本类型,每个类型有什么操作,对它有一个整体了解就行,需要用的时候查查文档。有些命令不知道用法的,一般都有其它宏包用过了,LaTeX3 项目组写的宏包都是不错的参考例子。
如果想读它的源码,挑自己感兴趣的命令去读就好了,很多命令的实现还是很有技巧的。
学 TeX,要多用,用的多了就了解了。
我认为主要就3个方面上的内容:
在大多数人的使用上,只需要粗略的学习 1 和 2 就足以面对大多数场景的使用,这也是为什么市面上大多数说教你 "TeX" 的书籍都不会讲得太深的原因。
当然你可以把这三点看成技能树方向,你有空闲时间就可以通过阅读文档来加点。
针对 TeX 编程可以去阅读 Notes On Programming in TEX 这很新并且不会太长完全适合阅读。
针对宏语言最经典的就是 The TeXbook 和 TeX by Topic,当然这两本的块头太大,也可以先读 How to Package Your LATEX Package 或者 LATEX for package and class authors current version
针对排版上的问题,其实阅读 The TeXbook 也是一样有用的,建议也先避开大块头,先去了解一些排版的基本常识,比如了解 word 里所有出现的名词的具体含义再回到 TeX 方向上(相信我,不同软件的理念并不是如此割裂)
再进阶的话就很难单独加点了,同时也会不可避免地涉及到各个方面的内容。想要继续学习的话,总之在字体、PDF、引擎上缺失的内容迟早都要补上的。可以去看看 PDF Reference、PostScript Language Reference Manual、TeX in Practice、Fonts & Encodings、The Craft of Text Editing...
说到最后,其实我更觉得学习路径应该是 latex3——latex2e——plainTeX ,毕竟 l3 的内容已经由团队的努力下变得相对抽象化了更适合用户端的直接使用。
谢谢雾月老师,我会找时间慢慢积累的。至于我的目标嘛,能看懂基本的latex2e命令,了解宏展开的关系,也许(?)能写简单宏包就差不多啦,再次感谢!