AMS-TeX

TeX Live 2024 里至今仍有一条名叫 amstex 的命令。跑起来,横幅先是 This is pdfTeX ... (preloaded format=amstex),接着是 AmS-TeX- Version 2.2,然后生成一个 .dvi。它背后那个文件 amstex.tex 的日期是 2001 年 10 月 4 日——将近四分之一个世纪没动过。AMS-TeX 是数学家 迈克尔·斯皮瓦克 为美国数学会在 plain TeX 之上写的宏包,是与 LaTeX 平行而分立的另一种「用 TeX 的方式」。如今没人再直接调用它,可你每写一次 \usepackage{amsmath},跑的都是它的后代。本页打开真实的文件,把冻结的一半与活着的一半都核对一遍。

AMS-TeX 是什么——叠在 plain TeX 之上的宏包

AMS-TeX 是叠在高德纳 plain TeX 之上的宏包,它既不是莱斯利·兰波特 LaTeX 的祖先也不是兄弟,而是站在同一地基上的另一种流派。1980 年代,人们清楚 TeX 能排数学,但要让作者亲手搭出多行对齐和交换图并不现实。斯皮瓦克接过这件事,把 AMS 的排版规约——字体、间距、符号处理——写成宏。讲解用法的手册是 《The Joy of TeX》,TeX Live 附带的 amsldoc.tex 参考文献里至今列着:Michael Spivak, The joy of TeX, 2nd revised ed., Amer. Math. Soc., Providence, RI, 1990.

因为它自成一格,写法与 LaTeX 全然不同。正文不用 \documentclass\begin{document},而用 \document\enddocument 包住;标题是 \head;定理一类是 \proclaim;整套体裁由 \documentstyle{amsppt} 载入。数学字母表也各有其名:花体(fraktur)是 \frak,黑板粗体(空心大写)是 \Bbb。它们的底子是 AMS 整理的字体集 AMSFonts,其中 eufm(fraktur)、msammsbm(额外符号)等字体名,至今仍在 LaTeX 一侧使用。

amstex 是格式而非引擎——里面是 pdfTeX

并不存在名为 amstex 的可执行文件。 在 TeX Live 2024 里它是指向 pdftex 的符号链接,而 fmtutil.cnf 第 48 行的 amstex pdftex - -translate-file=cp227.tcx *amstex.ini,正是把 AMS-TeX 格式烧在 pdfTeX 之上的指令。同一手法也用在 latexpdflatexcsplainetex 上,它们同样是指向 pdftex 的符号链接——TeX 的基本结构在这里一览无遗:引擎只有一个,格式有好几个。有趣的是输出:明明跑在 pdfTeX 上,amstex吐出 DVI。因为它的 amstex.ini 从不打开 PDF 输出,就这一点而言,1990 年代的样子也被原样保存了下来。

terminal
$ ls -l /usr/local/texlive/2024/bin/universal-darwin/amstex
amstex -> pdftex

$ grep "^amstex" /usr/local/texlive/2024/texmf-dist/web2c/fmtutil.cnf
amstex pdftex - -translate-file=cp227.tcx *amstex.ini

$ amstex paper.tex
This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024) (preloaded format=amstex)

AmS-TeX- Version 2.2

(.../amstex/base/amsppt.sty version 2.2 (2001/08/07): ... )
Output written on paper.dvi (1 page, 1168 bytes).

这种分离能直接从错误信息里感受到。把 LaTeX 稿子喂给 amstex,第一行就报 ! Undefined control sequence.,紧接着显示 l.1 \documentclass——因为 AMS-TeX 里根本没有这条命令。反过来把 AMS-TeX 稿子交给 pdflatex\documentstyle\topmatter\endtitle 等会逐一报 ! Undefined control sequence.,最后以 ! LaTeX Error: Missing \begin{document}. 收场。看到这两类错误的组合,就说明稿子和命令对不上号。

amsmath 的历史——\frac 的三代

AMS-TeX 发明、amsmath 继承的那套语法,至今仍是 LaTeX 数学的核心。 把这点显示得最清楚的,是 \frac 的三代——它们在 TeX Live 2024 里同时活着:amstex.tex 第 325 行是 \def\frac#1#2{{#1\over#2}}latex.ltx 第 12700 行是 \DeclareRobustCommand\frac[2]{{\begingroup#1\endgroup\over#2}}amsmath.sty 第 234 行是 \DeclareRobustCommand{\frac}[2]{{\begingroup#1\endgroup\@@over#2}}。AMS-TeX 那个朴素的写法被 LaTeX 整理成把参数围起来的形式,amsmath 再把 \over 换成事先存好的 \@@over你写下 \usepackage{amsmath} 的那一刻,你的 \frac 就换成了第三代。

latex
% amstex.tex:325   (AMS-TeX 2.2, 2001)
\def\frac#1#2{{#1\over#2}}

% latex.ltx:12700  (the LaTeX kernel)
\DeclareRobustCommand\frac[2]{{\begingroup#1\endgroup\over#2}}

% amsmath.sty:234  (v2.17o, 2023/05/13 in TeX Live 2024)
\DeclareRobustCommand{\frac}[2]{{\begingroup#1\endgroup\@@over#2}}

\frac 只是冰山一角。打开 amstex.tex 数一数命令名,会不断遇到你在 LaTeX 里视为理所当然的东西:\dfrac\tfrac\binom\text\align\gather\multline\cases\matrix\pmatrix\smallmatrix\boxed\operatorname\intertext\hdotsfor\sideset这些在 plain.texlatex.ltx 里都不存在。换句话说,数学书写的许多「说法」既不是高德纳发明的,也不是兰波特发明的,而是 AMS-TeX 发明的。你在 LaTeX 里能用 align 环境,是因为斯皮瓦克写下了 \def\align

latex
% AMS-TeX (legacy: processed with the amstex format)
\align
  (a+b)^2 &= a^2 + 2ab + b^2 \\
  (a-b)^2 &= a^2 - 2ab + b^2
\endalign

% the same thing in modern LaTeX
\usepackage{amsmath}
\begin{align}
  (a+b)^2 &= a^2 + 2ab + b^2 \\
  (a-b)^2 &= a^2 - 2ab + b^2
\end{align}

1988 至 1994 年的移植——那六年里宏包就叫 amstex

这次移植的原委,以当事人自己的话保留在 TeX Live 附带的 amsmath.dtx 的 Credits 一节里。它写道:amsmath 的代码大多源自迈克尔·斯皮瓦克的 amstex.tex;把它移成 LaTeX 宏包 amstex.sty 的最初工作,由弗兰克·米特尔巴赫与莱纳·舍普夫在 1988 至 1989 年完成。1994 年,戴维·M·琼斯加入了对 fleqn 选项的支持,并大幅改进 align 系环境与公式编号;AMS 的迈克尔·唐斯则担任协调三人工作的角色。最后一句最见分晓:宏包 1.0 与 1.1 版的名字是 amstex 而非 amsmath——按文中原话,1994 年改名,是为了让名字面向用户而不是面向历史。

由此诞生的这一族的总称就是 AMS-LaTeX:包括 amsmathamssymbamsthmamscd 等宏包,以及 AMS 的文档类 amsart(论文)、amsbook(书籍)、amsproc(会议录)。符号那边也一并移植:加载 amssymb 会在内部引入 amsfonts,AMS-TeX 的 \Bbb 变成了 \mathbb(来自 msbm 字体),\frak 变成了 \mathfrak(来自 eufm 字体)。变的只是名字,字形还是那些字形。

组成部分是什么、做什么TeX Live 2024 中的版本
amstex.texAMS-TeX 本体:plain TeX 之上的宏集Version 2.2,日期 2001/10/04
amsppt.styAMS-TeX 的整套体裁;\head\proclaim\topmatter 都在这里version 2.2 (2001/08/07)
amsmath核心数学宏包:aligngathercasesv2.17o (2023/05/13);由 LaTeX Project 与 AMS 共同维护
amssymb额外符号与数学字母表;内部加载 amsfonts\mathbb 来自 msbm\mathfrak 来自 eufm
amsthm定理与证明环境;proof 以及增强的 \newtheorem取代 AMS-TeX 的 \proclaim
amscd交换图环境(只有水平与垂直箭头)需要斜箭头就改用 tikz-cd
amsart / amsbook / amsprocAMS 的文档类(论文、书籍、会议录)amsart 为 v2.20.6 (2020/05/29)

2001 年,AMS-TeX 被指「不是自由软件」的那件事

AMS-TeX 走到 2.2 版的直接原因不是功能,而是许可。 与它一同发行的变更记录 amstex.bug 在「Changes released July 2001」条目下写着:有人请求去掉每次运行都会打印到终端和日志里的版权声明与使用限制。理由是这条限制使 AMS-TeX 对 TeX Live 而言成了「not free software」。随后是 Changed: Version 2.2 (August 2001)。也就是说,今天你跑 amstex 时横幅之所以如此简短,是因为 2001 年砍掉了那十几行。这类事在软件史上并不稀奇,稀奇的是被砍的那个文件从此原样发行了二十多年。

今天该怎么写新的数学文档

已经没有理由再去启动 amstex 命令了。 新的报告、讲义、论文都当作 LaTeX 文档开始,按需加载 AMS-LaTeX 宏包:对齐公式用 amsmath,黑板粗体一类额外符号用 amssymb,定理、引理、证明用 amsthm。要投 AMS 的期刊或出书,再把 amsartamsbook 指定为文档类。该向 AMS-TeX 学的不是背诵旧命令,而是按意义划分数学结构的态度。aligngathermultline 之间取舍不是为了外观,而是要写出「要在等号处对齐」「只是并列」「单条式子太长」这三种意义上的差别

latex
\documentclass{article}
\usepackage{amsmath,amssymb,amsthm}

\newtheorem{theorem}{Theorem}

\begin{document}
\begin{theorem}
For all real $a$ and $b$ and every $z \in \mathbb{C}$,
\begin{align}
  (a+b)^2 &= a^2 + 2ab + b^2, \\
  \operatorname{Re}(z) &= \tfrac{1}{2}\left(z + \bar{z}\right).
\end{align}
\end{theorem}
\begin{proof}
Expand and collect terms.
\end{proof}
\end{document}
  • 正文入口是 \begin{document} 而不是 \document;文档类用 \documentclass{...} 声明,而不是 \documentstyle{amsppt}
  • 标题用 \section 一族,而不是 \head … \endhead;编号与目录会自动跟上。
  • 定理别用 \proclaim 手工拼;用 amsthm\newtheorem 连编号体系一起建好。proof 环境连证毕符号都替你摆好。
  • 黑板粗体用 \mathbb 而非 \Bbb,花体用 \mathfrak 而非 \frak。加载 amssymb 两者都有。
  • 交换图很多时候用 amscd 就够,但一需要斜箭头或弯箭头,就换 tikz-cd

接手一份旧的 AMS-TeX 稿子时

首先该做的不是改写,而是把「能复现当前 PDF」的状态先保住。 若从实验室的旧讲义或出版社档案里翻出含 \document\enddocument\documentstyle{amsppt} 的稿子,先原样试跑 amstex oldfile.tex。TeX Live 2024 里还留着 amstex,大半就是为此:二十年前的稿子今天仍排成当年的样子,这本身就有价值。拿到基准 PDF 之后,再按章节逐步迁到 LaTeX 加 amsmath,每迁一步都与基准对照。公式编号、断行、定理编号是迁移中最容易走样的地方,要重点盯住。

归根到底,AMS-TeX 处在一个少见的位置:冻结了,却没有死。 文件停在 2001 年,格式照样在烧,旧稿今天仍能通过。与此同时,工作转到了 amsmath 上,由 LaTeX Project 与 AMS 共同维护并持续更新(TeX Live 2024 所含为 v2.17o,2023/05/13)。amsmath.sty 开头并排写着两行:Copyright (C) 1995, 1999, 2000, 2013 American Mathematical Society.Copyright (C) 2016-2023 LaTeX Project and American Mathematical Society.——交接的年份本身就是版权声明。你写下 \usepackage{amsmath} 时,跑的是斯皮瓦克的语法,而维护它的是另一批人。