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}로 읽어 들입니다. 수학용 서체도 고유한 이름을 가지고 있어 프락투어가 \frak, 칠판 볼드(속 빈 대문자)가 \Bbb입니다. 이들은 AMS가 정비한 글꼴 모음 AMSFonts에 기대고 있으며, eufm(프락투어), msammsbm(추가 기호) 같은 글꼴 이름은 지금도 LaTeX 쪽에서 쓰입니다.

amstex은 엔진이 아니라 포맷——속은 pdfTeX

amstex이라는 실행 파일은 존재하지 않습니다. TeX Live 2024의 amstexpdftex으로 가는 심볼릭 링크이고, fmtutil.cnf 48행의 amstex pdftex - -translate-file=cp227.tcx *amstex.ini 한 줄이 pdfTeX 위에 AMS-TeX 포맷을 굽는 지시입니다. 같은 수법은 latex, pdflatex, csplain, etex에도 쓰이며 이들 역시 모두 pdftex으로 가는 심볼릭 링크입니다——엔진은 하나, 포맷은 여럿이라는 TeX의 기본 구조가 여기서 보입니다. 재미있는 것은 출력으로, pdfTeX 위에서 도는데도 amstexDVI를 냅니다. 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.tex에도 latex.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년의 이식——패키지 이름은 6년간 amstex이었습니다

이식의 전말은 TeX Live에 동봉된 amsmath.dtx의 Credits 절에 당사자들의 말로 남아 있습니다. 이르되, amsmath의 코드 상당수는 마이클 스피박의 amstex.tex에서 유래했고, 그것을 LaTeX용 amstex.sty로 옮기는 첫 작업은 1988~1989년에 프랑크 미텔바흐와 라이너 셰프가 했습니다. 1994년 데이비드 M. 존스fleqn 옵션 지원과 align 계열 환경·수식 번호 처리의 대폭적인 개선을 더했고, AMS의 마이클 다운스가 세 사람의 작업을 조율하는 역할을 맡았습니다. 마지막 한 문장이 결정적입니다——버전 1.0과 1.1의 패키지 이름은 amsmath가 아니라 amstex였습니다. 1994년에 “역사가 아니라 사용자를 향한 이름으로 하기 위해” 개명했다고 적혀 있습니다.

이렇게 태어난 패키지군의 총칭이 AMS-LaTeX입니다. 내용은 amsmath, amssymb, amsthm, amscd 같은 패키지와 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수식 환경의 핵심. align, gather, casesv2.17o (2023/05/13). LaTeX Project와 AMS가 공동 보수
amssymb추가 기호와 수학 서체. 내부에서 amsfonts를 읽습니다\mathbbmsbm, \mathfrakeufm에서 유래
amsthm정리·증명 환경. proof와 확장된 \newtheoremAMS-TeX의 \proclaim을 대신하는 것
amscd가환 도식을 위한 환경(화살표는 수평·수직만)대각 화살표가 필요하면 tikz-cd
amsart / amsbook / amsprocAMS의 문서 클래스(논문·서적·회의록)amsart는 v2.20.6 (2020/05/29)

2001년, AMS-TeX이 “자유 소프트웨어가 아니다”라는 말을 들은 이야기

AMS-TeX이 2.2가 된 직접적인 이유는 기능이 아니라 라이선스였습니다. amstex.tex와 함께 배포되는 변경 이력 amstex.bug의 “Changes released July 2001” 항목에는 이렇게 적혀 있습니다——실행할 때마다 터미널과 로그에 인쇄되는 저작권 표시와 사용 제한을 없애 달라는 요청이 있었다. 이유는 “이 제한 때문에 AMS-TeX이 TeX Live에게 not free software가 되어 있었기” 때문입니다. 그리고 Changed: Version 2.2 (August 2001). 즉 지금 amstex을 실행했을 때 배너가 무뚝뚝한 것은 2001년에 그 십여 줄이 잘려 나갔기 때문입니다. 소프트웨어 역사에서 드문 일은 아니지만, 잘려 나간 쪽의 파일이 20년 넘게 그대로 배포되어 온 예는 그리 많지 않습니다.

새로운 수식 문서는 어떻게 쓰는가

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}
  • 본문의 입구는 \document가 아니라 \begin{document}. 클래스는 \documentstyle{amsppt}가 아니라 \documentclass{...}로 선언합니다.
  • 제목은 \head … \endhead가 아니라 \section 계열. 번호 매김과 목차가 덤으로 따라옵니다.
  • 정리는 \proclaim으로 손수 만들지 말고 amsthm\newtheorem으로 번호 체계째 만듭니다. proof 환경은 증명 끝 기호까지 챙겨 줍니다.
  • 칠판 볼드는 \Bbb이 아니라 \mathbb, 프락투어는 \frak이 아니라 \mathfrak. amssymb를 읽으면 둘 다 쓸 수 있습니다.
  • 가환 도식은 amscd로 충분한 경우가 많지만, 대각선이나 굽은 화살표가 필요해지면 tikz-cd로 옮깁니다.

옛 AMS-TeX 원고를 물려받았다면

가장 먼저 할 일은 다시 쓰기가 아니라 지금의 PDF를 재현할 수 있는 상태를 확보하는 것입니다. 연구실의 옛 강의 노트나 출판사 아카이브에서 \document, \enddocument, \documentstyle{amsppt}가 든 원고가 나오면, 먼저 amstex oldfile.tex가 그대로 통과하는지 시험합니다. TeX Live 2024에 amstex이 남아 있는 이유의 대부분이 이것이며, 20년 전 원고가 지금도 같은 조판으로 나온다는 데 값어치가 있습니다. 기준이 될 PDF를 얻은 다음, 장이나 절 단위로 LaTeX + amsmath로 옮기고 그때마다 원본 PDF와 견줍니다. 수식 번호·행 분할·정리 번호가 이행에서 가장 먼저 어긋나는 자리이니 거기를 집중해서 봅니다.

결국 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}라고 쓸 때 돌아가는 것은 스피박의 구문이고, 그것을 갱신하는 사람은 다른 이들입니다.