home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / unixtex-6.1b-bin0.lha / lib / texmf / tex / ams / amstex.tex < prev    next >
Text File  |  1996-10-12  |  78KB  |  1,798 lines

  1. %% @texfile{
  2. %%     filename="amstex.tex",
  3. %%     version="2.1",
  4. %%     date="5-APR-1991",
  5. %%     filetype="AMS-TeX: documentstyle",
  6. %%     copyright="Copyright (C) American Mathematical Society,
  7. %%            all rights reserved.  Copying of this file is
  8. %%            authorized only if either:
  9. %%            (1) you make absolutely no changes to your copy
  10. %%                including name; OR
  11. %%            (2) if you do make changes, you first rename it to some
  12. %%                other name.",
  13. %%     author="American Mathematical Society",
  14. %%     address="American Mathematical Society,
  15. %%            Technical Support Department,
  16. %%            P. O. Box 6248,
  17. %%            Providence, RI 02940,
  18. %%            USA",
  19. %%     telephone="401-455-4080 or (in the USA) 800-321-4AMS",
  20. %%     email="Internet: Tech-Support@Math.AMS.org",
  21. %%     codetable="ISO/ASCII",
  22. %%     checksumtype="line count",
  23. %%     checksum="1797",
  24. %%     keywords="amstex, ams-tex, tex",
  25. %%     abstract="This file contains the AMS-TeX Version 2.1 macro
  26. %%            package.  It is intended to be used in conjunction with
  27. %%            plain TeX. The macros defined herein are chiefly oriented
  28. %%            to the construction of mathematical formulas, both display
  29. %%            and nondisplay, using AMS conventions for fonts, spacing,
  30. %%            and other details."
  31. %%     }
  32. \def\fmtname{AmS-TeX}
  33. \let\plainfmtversion\fmtversion
  34. \def\fmtversion{2.1}
  35. \catcode`\@=11
  36. \ifx\amstexloaded@\relax\catcode`\@=\active
  37.   \endinput\else\let\amstexloaded@\relax\fi
  38. \newlinechar=`\^^J
  39. \def\W@{\immediate\write\sixt@@n}
  40. \def\CR@{\W@{^^J\fmtname - Version \fmtversion^^J%
  41. COPYRIGHT 1985, 1990, 1991 - AMERICAN MATHEMATICAL SOCIETY^^J%
  42. Use of this macro package is not restricted provided^^J%
  43. each use is acknowledged upon publication.^^J}}
  44. \CR@ \everyjob{\CR@}
  45. \message{Loading definitions for}
  46. \message{misc utility macros,}
  47. \toksdef\toks@@=2
  48. \long\def\rightappend@#1\to#2{\toks@{\\{#1}}\toks@@
  49.  =\expandafter{#2}\xdef#2{\the\toks@@\the\toks@}\toks@{}\toks@@{}}
  50. \def\alloclist@{}
  51. \newif\ifalloc@
  52. \def\showallocations{{\def\\{\immediate\write\m@ne}\alloclist@}\alloc@true}
  53. \def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
  54.  \ch@ck#1#4#2\allocationnumber=\count1#1
  55.  \global#3#5=\allocationnumber
  56.  \edef\next@{\string#5=\string#2\the\allocationnumber}%
  57.  \expandafter\rightappend@\next@\to\alloclist@}
  58. \newcount\count@@
  59. \newcount\count@@@
  60. \def\FN@{\futurelet\next}
  61. \def\DN@{\def\next@}
  62. \def\DNii@{\def\nextii@}
  63. \def\RIfM@{\relax\ifmmode}
  64. \def\RIfMIfI@{\relax\ifmmode\ifinner}
  65. \def\setboxz@h{\setbox\z@\hbox}
  66. \def\wdz@{\wd\z@}
  67. \def\boxz@{\box\z@}
  68. \def\setbox@ne{\setbox\@ne}
  69. \def\wd@ne{\wd\@ne}
  70. \def\iterate{\body\expandafter\iterate\else\fi}
  71. \def\err@#1{\errmessage{AmS-TeX error: #1}}
  72. \newhelp\defaulthelp@{Sorry, I already gave what help I could...^^J
  73. Maybe you should try asking a human?^^J
  74. An error might have occurred before I noticed any problems.^^J
  75. ``If all else fails, read the instructions.''}
  76. \def\Err@{\errhelp\defaulthelp@\err@}
  77. \def\eat@#1{}
  78. \def\in@#1#2{\def\in@@##1#1##2##3\in@@{\ifx\in@##2\in@false\else\in@true\fi}%
  79.  \in@@#2#1\in@\in@@}
  80. \newif\ifin@
  81. \def\space@.{\futurelet\space@\relax}
  82. \space@. %
  83. \newhelp\athelp@
  84. {Only certain combinations beginning with @ make sense to me.^^J
  85. Perhaps you wanted \string\@\space for a printed @?^^J
  86. I've ignored the character or group after @.}
  87. {\catcode`\~=\active % just in case
  88.  \lccode`\~=`\@ \lowercase{\gdef~{\FN@\at@}}}
  89. \def\at@{\let\next@\at@@
  90.  \ifcat\noexpand\next a\else\ifcat\noexpand\next0\else
  91.  \ifcat\noexpand\next\relax\else
  92.    \let\next\at@@@\fi\fi\fi
  93.  \next@}
  94. \def\at@@#1{\expandafter
  95.  \ifx\csname\space @\string#1\endcsname\relax
  96.   \expandafter\at@@@ \else
  97.   \csname\space @\string#1\expandafter\endcsname\fi}
  98. \def\at@@@#1{\errhelp\athelp@ \err@{\Invalid@@ @}}%%
  99. \def\atdef@#1{\expandafter\def\csname\space @\string#1\endcsname}%%
  100. \newhelp\defahelp@{If you typed \string\define\space cs instead of
  101. \string\define\string\cs\space^^J
  102. I've substituted an inaccessible control sequence so that your^^J
  103. definition will be completed without mixing me up too badly.^^J
  104. If you typed \string\define{\string\cs} the inaccessible control sequence^^J
  105. was defined to be \string\cs, and the rest of your^^J
  106. definition appears as input.}
  107. \newhelp\defbhelp@{I've ignored your definition, because it might^^J
  108. conflict with other uses that are important to me.}
  109. \def\define{\FN@\define@}
  110. \def\define@{\ifcat\noexpand\next\relax
  111.  \expandafter\define@@\else\errhelp\defahelp@                               %1
  112.  \err@{\string\define\space must be followed by a control
  113.  sequence}\expandafter\def\expandafter\nextii@\fi}                          %2
  114. \def\undefined@@@@@@@@@@{}
  115. \def\preloaded@@@@@@@@@@{}
  116. \def\next@@@@@@@@@@{}
  117. \def\define@@#1{\ifx#1\relax\errhelp\defbhelp@                              %1
  118.  \err@{\string#1\space is already defined}\DN@{\DNii@}\else
  119.  \expandafter\ifx\csname\expandafter\eat@\string                            %2
  120.  #1@@@@@@@@@@\endcsname\undefined@@@@@@@@@@\errhelp\defbhelp@
  121.  \err@{\string#1\space can't be defined}\DN@{\DNii@}\else
  122.  \expandafter\ifx\csname\expandafter\eat@\string#1\endcsname\relax          %3
  123.  \global\let#1\undefined\DN@{\def#1}\else\errhelp\defbhelp@
  124.  \err@{\string#1\space is already defined}\DN@{\DNii@}\fi
  125.  \fi\fi\next@}
  126. \let\redefine\def
  127. \def\predefine#1#2{\let#1#2}
  128. \def\undefine#1{\let#1\undefined}
  129. \message{page layout,}
  130. \newdimen\captionwidth@
  131. \captionwidth@\hsize
  132. \advance\captionwidth@-1.5in
  133. \def\pagewidth#1{\hsize#1\relax
  134.  \captionwidth@\hsize\advance\captionwidth@-1.5in}
  135. \def\pageheight#1{\vsize#1\relax}
  136. \def\hcorrection#1{\advance\hoffset#1\relax}
  137. \def\vcorrection#1{\advance\voffset#1\relax}
  138. \message{accents/punctuation,}
  139. \def\tie{\unskip\nobreak\ }
  140. \let\graveaccent\`
  141. \let\acuteaccent\'
  142. \let\tildeaccent\~
  143. \let\hataccent\^
  144. \let\underscore\_
  145. \let\B\=
  146. \let\D\.
  147. \let\ic@\/
  148. \def\/{\unskip\ic@}
  149. \def\textfonti{\the\textfont\@ne}
  150. \def\t#1#2{{\edef\next@{\the\font}\textfonti\accent"7F \next@#1#2}}
  151. \def~{\unskip\nobreak\ \ignorespaces}
  152. \def\.{.\spacefactor\@m}
  153. \atdef@;{\leavevmode\null;}
  154. \atdef@:{\leavevmode\null:}
  155. \atdef@?{\leavevmode\null?}
  156. \edef\@{\string @}
  157. \def\relaxnext@{\let\next\relax}
  158. \atdef@-{\relaxnext@\leavevmode
  159.  \DN@{\ifx\next-\DN@-{\FN@\nextii@}\else
  160.   \DN@{\leavevmode\hbox{-}}\fi\next@}%
  161.  \DNii@{\ifx\next-\DN@-{\leavevmode\hbox{---}}\else
  162.   \DN@{\leavevmode\hbox{--}}\fi\next@}%
  163.  \FN@\next@}
  164. \def\srdr@{\kern.16667em}
  165. \def\drsr@{\kern.02778em}
  166. \def\sldl@{\drsr@}
  167. \def\dlsl@{\srdr@}
  168. \atdef@"{\unskip\relaxnext@
  169.  \DN@{\ifx\next\space@\DN@. {\FN@\nextii@}\else
  170.   \DN@.{\FN@\nextii@}\fi\next@.}%
  171.  \DNii@{\ifx\next`\DN@`{\FN@\nextiii@}\else
  172.   \ifx\next\lq\DN@\lq{\FN@\nextiii@}\else
  173.   \DN@####1{\FN@\nextiv@}\fi\fi\next@}%
  174.  \def\nextiii@{\ifx\next`\DN@`{\sldl@``}\else\ifx\next\lq
  175.   \DN@\lq{\sldl@``}\else\DN@{\dlsl@`}\fi\fi\next@}%
  176.  \def\nextiv@{\ifx\next'\DN@'{\srdr@''}\else
  177.   \ifx\next\rq\DN@\rq{\srdr@''}\else\DN@{\drsr@'}\fi\fi\next@}%
  178.  \FN@\next@}
  179. \def\flushpar{\par\noindent}
  180. \def\textfontii{\the\textfont\tw@}
  181. \def\lbrace@{\delimiter"4266308 }
  182. \def\rbrace@{\delimiter"5267309 }
  183. \def\{{\RIfM@\lbrace@\else{\textfontii f}\spacefactor\@m\fi}
  184. \def\}{\RIfM@\rbrace@\else
  185.  \let\@sf\empty\ifhmode\edef\@sf{\spacefactor\the\spacefactor}\fi
  186.  {\textfontii g}\@sf\relax\fi}
  187. \let\lbrace\{
  188. \let\rbrace\}
  189. \def\AmSTeX{{\textfontii A\kern-.1667em%
  190.   \lower.5ex\hbox{M}\kern-.125emS}-\TeX}
  191. \message{line and page breaks,}
  192. \def\vmodeerr@#1{\Err@{\string#1\space not allowed between paragraphs}}
  193. \def\mathmodeerr@#1{\Err@{\string#1\space not allowed in math mode}}
  194. \def\linebreak{\RIfM@\mathmodeerr@\linebreak\else
  195.  \ifhmode\unskip\unkern\break\else\vmodeerr@\linebreak\fi\fi}
  196. \def\slash{\unskip/\penalty\exhyphenpenalty}
  197. \newskip\saveskip@
  198. \def\allowlinebreak{\RIfM@\mathmodeerr@\allowlinebreak\else
  199.  \ifhmode\saveskip@\lastskip\unskip
  200.  \allowbreak\ifdim\saveskip@>\z@\hskip\saveskip@\fi
  201.  \else\vmodeerr@\allowlinebreak\fi\fi}
  202. \def\nolinebreak{\RIfM@\mathmodeerr@\nolinebreak\else
  203.  \ifhmode\saveskip@\lastskip\unskip
  204.  \nobreak\ifdim\saveskip@>\z@\hskip\saveskip@\fi
  205.  \else\vmodeerr@\nolinebreak\fi\fi}
  206. \def\newline{\relaxnext@
  207.  \DN@{\RIfM@\expandafter\mathmodeerr@\expandafter\newline\else
  208.   \ifhmode\ifx\next\par\else
  209.   \expandafter\unskip\expandafter\null\expandafter\hfill\expandafter\break\fi
  210.   \else
  211.   \expandafter\vmodeerr@\expandafter\newline\fi\fi}%
  212.  \FN@\next@}
  213. \def\dmatherr@#1{\Err@{\string#1\space not allowed in display math mode}}
  214. \def\nondmatherr@#1{\Err@{\string#1\space not allowed in non-display math
  215.  mode}}
  216. \def\onlydmatherr@#1{\Err@{\string#1\space allowed only in display math mode}}
  217. \def\nonmatherr@#1{\Err@{\string#1\space allowed only in math mode}}
  218. \def\mathbreak{\RIfMIfI@\break\else
  219.  \dmatherr@\mathbreak\fi\else\nonmatherr@\mathbreak\fi}
  220. \def\nomathbreak{\RIfMIfI@\nobreak\else
  221.  \dmatherr@\nomathbreak\fi\else\nonmatherr@\nomathbreak\fi}
  222. \def\allowmathbreak{\RIfMIfI@\allowbreak\else
  223.  \dmatherr@\allowmathbreak\fi\else\nonmatherr@\allowmathbreak\fi}
  224. \def\pagebreak{\RIfM@
  225.  \ifinner\nondmatherr@\pagebreak\else\postdisplaypenalty-\@M\fi
  226.  \else\ifvmode\removelastskip\break\else\vadjust{\break}\fi\fi}
  227. \def\nopagebreak{\RIfM@
  228.  \ifinner\nondmatherr@\nopagebreak\else\postdisplaypenalty\@M\fi
  229.  \else\ifvmode\nobreak\else\vadjust{\nobreak}\fi\fi}
  230. \def\nonvmodeerr@#1{\Err@{\string#1\space not allowed within a paragraph
  231.  or in math}}
  232. \def\vnonvmode@#1#2{\relaxnext@\DNii@{\ifx\next\par\DN@{#1}\else
  233.  \DN@{#2}\fi\next@}%
  234.  \ifvmode\DN@{#1}\else
  235.  \DN@{\FN@\nextii@}\fi\next@}
  236. \def\newpage{\vnonvmode@{\vfill\break}{\nonvmodeerr@\newpage}}
  237. \def\smallpagebreak{\vnonvmode@\smallbreak{\nonvmodeerr@\smallpagebreak}}
  238. \def\medpagebreak{\vnonvmode@\medbreak{\nonvmodeerr@\medpagebreak}}
  239. \def\bigpagebreak{\vnonvmode@\bigbreak{\nonvmodeerr@\bigpagebreak}}
  240. \def\NoBlackBoxes{\global\overfullrule\z@}
  241. \def\BlackBoxes{\global\overfullrule5\p@}
  242. \def\Invalid@#1{\def#1{\Err@{\Invalid@@\string#1}}}
  243. \def\Invalid@@{Invalid use of }
  244. \message{figures,}
  245. \Invalid@\caption
  246. \Invalid@\captionwidth
  247. \newdimen\smallcaptionwidth@
  248. \def\topspace{\mid@false\ins@}
  249. \def\midspace{\mid@true\ins@}
  250. \newif\ifmid@
  251. \def\captionfont@{}
  252. \def\ins@#1{\relaxnext@\allowbreak
  253.  \smallcaptionwidth@\captionwidth@\gdef\thespace@{#1}%
  254.  \DN@{\ifx\next\space@\DN@. {\FN@\nextii@}\else
  255.   \DN@.{\FN@\nextii@}\fi\next@.}%
  256.  \DNii@{\ifx\next\caption\DN@\caption{\FN@\nextiii@}%
  257.   \else\let\next@\nextiv@\fi\next@}%
  258.  \def\nextiv@{\vnonvmode@
  259.   {\ifmid@\expandafter\midinsert\else\expandafter\topinsert\fi
  260.    \vbox to\thespace@{}\endinsert}
  261.   {\ifmid@\nonvmodeerr@\midspace\else\nonvmodeerr@\topspace\fi}}%
  262.  \def\nextiii@{\ifx\next\captionwidth\expandafter\nextv@
  263.   \else\expandafter\nextvi@\fi}%
  264.  \def\nextv@\captionwidth##1##2{\smallcaptionwidth@##1\relax\nextvi@{##2}}%
  265.  \def\nextvi@##1{\def\thecaption@{\captionfont@##1}%
  266.   \DN@{\ifx\next\space@\DN@. {\FN@\nextvii@}\else
  267.    \DN@.{\FN@\nextvii@}\fi\next@.}%
  268.   \FN@\next@}%
  269.  \def\nextvii@{\vnonvmode@
  270.   {\ifmid@\expandafter\midinsert\else
  271.   \expandafter\topinsert\fi\vbox to\thespace@{}\nobreak\smallskip
  272.   \setboxz@h{\noindent\ignorespaces\thecaption@\unskip}%
  273.   \ifdim\wdz@>\smallcaptionwidth@\centerline{\vbox{\hsize\smallcaptionwidth@
  274.    \noindent\ignorespaces\thecaption@\unskip}}%
  275.   \else\centerline{\boxz@}\fi\endinsert}
  276.   {\ifmid@\nonvmodeerr@\midspace
  277.   \else\nonvmodeerr@\topspace\fi}}%
  278.  \FN@\next@}
  279. \message{comments,}
  280. \def\newcodes@{\catcode`\\12\catcode`\{12\catcode`\}12\catcode`\#12%
  281.  \catcode`\%12\relax}
  282. \def\oldcodes@{\catcode`\\0\catcode`\{1\catcode`\}2\catcode`\#6%
  283.  \catcode`\%14\relax}
  284. \def\comment{\newcodes@\endlinechar=10 \comment@}
  285. {\lccode`\0=`\\
  286. \lowercase{\gdef\comment@#1^^J{\comment@@#10endcomment\comment@@@}%
  287. \gdef\comment@@#10endcomment{\FN@\comment@@@}%
  288. \gdef\comment@@@#1\comment@@@{\ifx\next\comment@@@\let\next\comment@
  289.  \else\def\next{\oldcodes@\endlinechar=`\^^M\relax}%
  290.  \fi\next}}}
  291. \def\pr@m@s{\ifx'\next\DN@##1{\prim@s}\else\let\next@\egroup\fi\next@}
  292. \def\prime{{\null\prime@\null}}
  293. \mathchardef\prime@="0230
  294. \let\dsize\displaystyle
  295. \let\tsize\textstyle
  296. \let\ssize\scriptstyle
  297. \let\sssize\scriptscriptstyle
  298. \message{math spacing,}
  299. \def\,{\RIfM@\mskip\thinmuskip\relax\else\kern.16667em\fi}
  300. \def\!{\RIfM@\mskip-\thinmuskip\relax\else\kern-.16667em\fi}
  301. \let\thinspace\,
  302. \let\negthinspace\!
  303. \def\medspace{\RIfM@\mskip\medmuskip\relax\else\kern.222222em\fi}
  304. \def\negmedspace{\RIfM@\mskip-\medmuskip\relax\else\kern-.222222em\fi}
  305. \def\thickspace{\RIfM@\mskip\thickmuskip\relax\else\kern.27777em\fi}
  306. \let\;\thickspace
  307. \def\negthickspace{\RIfM@\mskip-\thickmuskip\relax\else
  308.  \kern-.27777em\fi}
  309. \atdef@,{\RIfM@\mskip.1\thinmuskip\else\leavevmode\null,\fi}
  310. \atdef@!{\RIfM@\mskip-.1\thinmuskip\else\leavevmode\null!\fi}
  311. \atdef@.{\RIfM@&&\else\leavevmode.\spacefactor3000 \fi}
  312. \def\and{\DOTSB\;\mathchar"3026 \;}
  313. \def\implies{\DOTSB\;\Longrightarrow\;}
  314. \def\impliedby{\DOTSB\;\Longleftarrow\;}
  315. \message{fractions,}
  316. \def\frac#1#2{{#1\over#2}}
  317. \def\dfrac#1#2{{\displaystyle{#1\over#2}}}
  318. \def\tfrac#1#2{{\textstyle{#1\over#2}}}
  319. \newdimen\ex@
  320. \ex@.2326ex
  321. \Invalid@\thickness
  322. \def\thickfrac{\relaxnext@
  323.  \DN@{\ifx\next\thickness\let\next@\nextii@\else
  324.  \DN@{\nextii@\thickness1}\fi\next@}%
  325.  \DNii@\thickness##1##2##3{{##2\above##1\ex@##3}}%
  326.  \FN@\next@}
  327. \def\fracwithdelims#1#2#3#4{{#3\overwithdelims#1#2#4}}
  328. \def\thickfracwithdelims#1#2{\relaxnext@\def\ldelim@{#1}\def\rdelim@{#2}%
  329.  \DN@{\ifx\next\thickness\let\next@\nextii@\else
  330.  \DN@{\nextii@\thickness1}\fi\next@}%
  331.  \DNii@\thickness##1##2##3{{##2\abovewithdelims
  332.  \ldelim@\rdelim@##1\ex@##3}}%
  333.  \FN@\next@}
  334. \def\binom#1#2{{#1\choose#2}}
  335. \def\dbinom#1#2{{\displaystyle{#1\choose#2}}}
  336. \def\tbinom#1#2{{\textstyle{#1\choose#2}}}
  337. \def\:{\nobreak\hskip.1111em\mathpunct{}\nonscript\mkern-\thinmuskip{:}\hskip
  338.  .3333emplus.0555em\relax}
  339. \def\snug{\unskip\kern-\mathsurround}
  340. \message{smash commands,}
  341. \def\topsmash{\top@true\bot@false\smash@}
  342. \def\botsmash{\top@false\bot@true\smash@}
  343. \newif\iftop@
  344. \newif\ifbot@
  345. \def\smash{\top@true\bot@true\smash@}
  346. \def\smash@{\RIfM@\expandafter\mathpalette\expandafter\mathsm@sh\else
  347.  \expandafter\makesm@sh\fi}
  348. \def\finsm@sh{\iftop@\ht\z@\z@\fi\ifbot@\dp\z@\z@\fi\leavevmode\boxz@}
  349. \message{large operator symbols,}
  350. \def\LimitsOnSums{\global\let\slimits@\displaylimits}
  351. \def\NoLimitsOnSums{\global\let\slimits@\nolimits}
  352. \LimitsOnSums
  353. \mathchardef\coprod@="1360       \def\coprod{\DOTSB\coprod@\slimits@}
  354. \mathchardef\bigvee@="1357       \def\bigvee{\DOTSB\bigvee@\slimits@}
  355. \mathchardef\bigwedge@="1356     \def\bigwedge{\DOTSB\bigwedge@\slimits@}
  356. \mathchardef\biguplus@="1355     \def\biguplus{\DOTSB\biguplus@\slimits@}
  357. \mathchardef\bigcap@="1354       \def\bigcap{\DOTSB\bigcap@\slimits@}
  358. \mathchardef\bigcup@="1353       \def\bigcup{\DOTSB\bigcup@\slimits@}
  359. \mathchardef\prod@="1351         \def\prod{\DOTSB\prod@\slimits@}
  360. \mathchardef\sum@="1350          \def\sum{\DOTSB\sum@\slimits@}
  361. \mathchardef\bigotimes@="134E    \def\bigotimes{\DOTSB\bigotimes@\slimits@}
  362. \mathchardef\bigoplus@="134C     \def\bigoplus{\DOTSB\bigoplus@\slimits@}
  363. \mathchardef\bigodot@="134A      \def\bigodot{\DOTSB\bigodot@\slimits@}
  364. \mathchardef\bigsqcup@="1346     \def\bigsqcup{\DOTSB\bigsqcup@\slimits@}
  365. \message{integrals,}
  366. \def\LimitsOnInts{\global\let\ilimits@\displaylimits}
  367. \def\NoLimitsOnInts{\global\let\ilimits@\nolimits}
  368. \NoLimitsOnInts
  369. \def\int{\DOTSI\intop\ilimits@}
  370. \def\oint{\DOTSI\ointop\ilimits@}
  371. \def\intic@{\mathchoice{\hskip.5em}{\hskip.4em}{\hskip.4em}{\hskip.4em}}
  372. \def\negintic@{\mathchoice
  373.  {\hskip-.5em}{\hskip-.4em}{\hskip-.4em}{\hskip-.4em}}
  374. \def\intkern@{\mathchoice{\!\!\!}{\!\!}{\!\!}{\!\!}}
  375. \def\intdots@{\mathchoice{\plaincdots@}
  376.  {{\cdotp}\mkern1.5mu{\cdotp}\mkern1.5mu{\cdotp}}
  377.  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}
  378.  {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}}
  379. \newcount\intno@
  380. \def\iint{\DOTSI\intno@\tw@\FN@\ints@}
  381. \def\iiint{\DOTSI\intno@\thr@@\FN@\ints@}
  382. \def\iiiint{\DOTSI\intno@4 \FN@\ints@}
  383. \def\idotsint{\DOTSI\intno@\z@\FN@\ints@}
  384. \def\ints@{\findlimits@\ints@@}
  385. \newif\iflimtoken@
  386. \newif\iflimits@
  387. \def\findlimits@{\limtoken@true\ifx\next\limits\limits@true
  388.  \else\ifx\next\nolimits\limits@false\else
  389.  \limtoken@false\ifx\ilimits@\nolimits\limits@false\else
  390.  \ifinner\limits@false\else\limits@true\fi\fi\fi\fi}
  391. \def\multint@{\int\ifnum\intno@=\z@\intdots@                                %1
  392.  \else\intkern@\fi                                                          %2
  393.  \ifnum\intno@>\tw@\int\intkern@\fi                                         %3
  394.  \ifnum\intno@>\thr@@\int\intkern@\fi                                       %4
  395.  \int}                                                                      %5
  396. \def\multintlimits@{\intop\ifnum\intno@=\z@\intdots@\else\intkern@\fi
  397.  \ifnum\intno@>\tw@\intop\intkern@\fi
  398.  \ifnum\intno@>\thr@@\intop\intkern@\fi\intop}
  399. \def\ints@@{\iflimtoken@                                                    %1
  400.  \def\ints@@@{\iflimits@\negintic@\mathop{\intic@\multintlimits@}\limits    %2
  401.   \else\multint@\nolimits\fi                                                %3
  402.   \eat@}                                                                    %4
  403.  \else                                                                      %5
  404.  \def\ints@@@{\iflimits@\negintic@
  405.   \mathop{\intic@\multintlimits@}\limits\else
  406.   \multint@\nolimits\fi}\fi\ints@@@}
  407. \def\LimitsOnNames{\global\let\nlimits@\displaylimits}
  408. \def\NoLimitsOnNames{\global\let\nlimits@\nolimits@}
  409. \LimitsOnNames
  410. \def\nolimits@{\relaxnext@
  411.  \DN@{\ifx\next\limits\DN@\limits{\nolimits}\else
  412.   \let\next@\nolimits\fi\next@}%
  413.  \FN@\next@}
  414. \message{operator names,}
  415. \def\newmcodes@{\mathcode`\'"27\mathcode`\*"2A\mathcode`\."613A%
  416.  \mathcode`\-"2D\mathcode`\/"2F\mathcode`\:"603A }
  417. \def\operatorname#1{\mathop{\newmcodes@\kern\z@\fam\z@#1}\nolimits@}
  418. \def\operatornamewithlimits#1{\mathop{\newmcodes@\kern\z@\fam\z@#1}\nlimits@}
  419. \def\qopname@#1{\mathop{\fam\z@#1}\nolimits@}
  420. \def\qopnamewl@#1{\mathop{\fam\z@#1}\nlimits@}
  421. \def\arccos{\qopname@{arccos}}
  422. \def\arcsin{\qopname@{arcsin}}
  423. \def\arctan{\qopname@{arctan}}
  424. \def\arg{\qopname@{arg}}
  425. \def\cos{\qopname@{cos}}
  426. \def\cosh{\qopname@{cosh}}
  427. \def\cot{\qopname@{cot}}
  428. \def\coth{\qopname@{coth}}
  429. \def\csc{\qopname@{csc}}
  430. \def\deg{\qopname@{deg}}
  431. \def\det{\qopnamewl@{det}}
  432. \def\dim{\qopname@{dim}}
  433. \def\exp{\qopname@{exp}}
  434. \def\gcd{\qopnamewl@{gcd}}
  435. \def\hom{\qopname@{hom}}
  436. \def\inf{\qopnamewl@{inf}}
  437. \def\injlim{\qopnamewl@{inj\,lim}}
  438. \def\ker{\qopname@{ker}}
  439. \def\lg{\qopname@{lg}}
  440. \def\lim{\qopnamewl@{lim}}
  441. \def\liminf{\qopnamewl@{lim\,inf}}
  442. \def\limsup{\qopnamewl@{lim\,sup}}
  443. \def\ln{\qopname@{ln}}
  444. \def\log{\qopname@{log}}
  445. \def\max{\qopnamewl@{max}}
  446. \def\min{\qopnamewl@{min}}
  447. \def\Pr{\qopnamewl@{Pr}}
  448. \def\projlim{\qopnamewl@{proj\,lim}}
  449. \def\sec{\qopname@{sec}}
  450. \def\sin{\qopname@{sin}}
  451. \def\sinh{\qopname@{sinh}}
  452. \def\sup{\qopnamewl@{sup}}
  453. \def\tan{\qopname@{tan}}
  454. \def\tanh{\qopname@{tanh}}
  455. \def\varinjlim{\mathop{\vtop{\ialign{##\crcr
  456.  \hfil\rm lim\hfil\crcr\noalign{\nointerlineskip}\rightarrowfill\crcr
  457.  \noalign{\nointerlineskip\kern-\ex@}\crcr}}}}
  458. \def\varprojlim{\mathop{\vtop{\ialign{##\crcr
  459.  \hfil\rm lim\hfil\crcr\noalign{\nointerlineskip}\leftarrowfill\crcr
  460.  \noalign{\nointerlineskip\kern-\ex@}\crcr}}}}
  461. \def\varliminf{\mathop{\underline{\vrule height\z@ depth.2exwidth\z@
  462.  \hbox{\rm lim}}}}
  463. \def\varlimsup{\mathop{\overline{\hbox{\rm lim}}}}
  464. \newdimen\buffer@
  465. \buffer@\fontdimen13 \tenex
  466. \newdimen\buffer
  467. \buffer\buffer@
  468. \def\ChangeBuffer#1{\fontdimen13 \tenex#1\relax
  469.  \global\buffer\fontdimen13 \tenex}
  470. \def\ResetBuffer{\fontdimen13 \tenex\buffer@\global\buffer\buffer@}
  471. \def\shave#1{\mathop{\hbox{$\m@th\fontdimen13 \tenex\z@                     %1
  472.  \displaystyle{#1}$}}\fontdimen13 \tenex\buffer}
  473. \def\topshave#1{\mathop{\topsmash{\displaystyle{#1}}\vphantom{\shave{#1}}}}
  474. \def\botshave#1{\mathop{\botsmash{\displaystyle{#1}}\vphantom{\shave{#1}}}}
  475. \message{multilevel sub/superscripts,}
  476. \Invalid@\\
  477. \def\Let@{\relax\iffalse{\fi\let\\=\cr\iffalse}\fi}
  478. \Invalid@\vspace
  479. \def\vspace@{\def\vspace##1{\crcr\noalign{\vskip##1\relax}}}
  480. \def\multilimits@{\bgroup\vspace@\Let@
  481.  \baselineskip\fontdimen10 \scriptfont\tw@
  482.  \advance\baselineskip\fontdimen12 \scriptfont\tw@
  483.  \lineskip\thr@@\fontdimen8 \scriptfont\thr@@
  484.  \lineskiplimit\lineskip
  485.  \vbox\bgroup\ialign\bgroup\hfil$\m@th\scriptstyle{##}$\hfil\crcr}
  486. \def\Sb{_\multilimits@}
  487. \def\endSb{\crcr\egroup\egroup\egroup}
  488. \def\Sp{^\multilimits@}
  489. \let\endSp\endSb
  490. \def\spreadlines#1{\RIfMIfI@\onlydmatherr@\spreadlines\else
  491.  \openup#1\relax\fi\else\onlydmatherr@\spreadlines\fi}
  492. \def\Mathstrut@{\copy\Mathstrutbox@}
  493. \newbox\Mathstrutbox@
  494. \setbox\Mathstrutbox@\null
  495. \setboxz@h{$\m@th($}
  496. \ht\Mathstrutbox@\ht\z@
  497. \dp\Mathstrutbox@\dp\z@
  498. \message{matrices,}
  499. \newdimen\spreadmlines@
  500. \def\spreadmatrixlines#1{\RIfMIfI@
  501.  \onlydmatherr@\spreadmatrixlines\else
  502.  \spreadmlines@#1\relax\fi\else\onlydmatherr@\spreadmatrixlines\fi}
  503. \def\matrix{\null\,\vcenter\bgroup\Let@\vspace@
  504.  \normalbaselines\openup\spreadmlines@\ialign
  505.  \bgroup\hfil$\m@th##$\hfil&&\quad\hfil$\m@th##$\hfil\crcr
  506.  \Mathstrut@\crcr\noalign{\kern-\baselineskip}}
  507. \def\endmatrix{\crcr\Mathstrut@\crcr\noalign{\kern-\baselineskip}\egroup
  508.  \egroup\,}
  509. \def\format{\crcr\egroup\iffalse{\fi\ifnum`}=0 \fi\format@}
  510. \newtoks\hashtoks@
  511. \hashtoks@{#}
  512. \def\format@#1\\{\def\preamble@{#1}%
  513.  \def\l{$\m@th\the\hashtoks@$\hfil}%
  514.  \def\c{\hfil$\m@th\the\hashtoks@$\hfil}%
  515.  \def\r{\hfil$\m@th\the\hashtoks@$}%
  516.  \edef\preamble@@{\preamble@}\ifnum`{=0 \fi\iffalse}\fi
  517.  \ialign\bgroup\span\preamble@@\crcr}
  518. \def\smallmatrix{\null\,\vcenter\bgroup\vspace@\Let@
  519.  \baselineskip9\ex@\lineskip\ex@
  520.  \ialign\bgroup\hfil$\m@th\scriptstyle{##}$\hfil&&\thickspace\hfil
  521.  $\m@th\scriptstyle{##}$\hfil\crcr}
  522. \def\endsmallmatrix{\crcr\egroup\egroup\,}
  523. \def\pmatrix{\left(\matrix}
  524. \def\endpmatrix{\endmatrix\right)}
  525. \def\bmatrix{\left[\matrix}
  526. \def\endbmatrix{\endmatrix\right]}
  527. \def\vmatrix{\left|\matrix}
  528. \def\endvmatrix{\endmatrix\right|}
  529. \def\Vmatrix{\left\|\matrix}
  530. \def\endVmatrix{\endmatrix\right\|}
  531. \def\hdots{\mathinner{\ldotp\ldotp\ldotp}}
  532. \newmuskip\dotsspace@
  533. \dotsspace@1.5mu
  534. \def\strip@#1 {#1}
  535. \def\spacehdots#1\for#2{\multispan{#2}\xleaders
  536.  \hbox{$\m@th\mkern\strip@#1 \dotsspace@.\mkern\strip@#1 \dotsspace@$}\hfill}
  537. \def\hdotsfor#1{\spacehdots\@ne\for{#1}}
  538. \def\multispan@#1{\omit\mscount#1\unskip\loop\ifnum\mscount>\@ne\sp@n\repeat}
  539. \def\spaceinnerhdots#1\for#2\after#3{\multispan@{\strip@#2 }#3\xleaders
  540.  \hbox{$\m@th\mkern\strip@#1 \dotsspace@.\mkern\strip@#1 \dotsspace@$}\hfill}
  541. \def\innerhdotsfor#1\after#2{\spaceinnerhdots\@ne\for#1\after{#2}}
  542. \def\cases{\bgroup\spreadmlines@\jot\left\{\,\matrix\format\l&\quad\l\\}
  543. \def\endcases{\endmatrix\right.\egroup}
  544. \message{multiline displays,}
  545. \newif\ifinany@
  546. \newif\ifinalign@
  547. \newif\ifingather@
  548. \def\strut@{\copy\strutbox@}
  549. \newbox\strutbox@
  550. \setbox\strutbox@\hbox{\vrule height8\p@ depth3\p@ width\z@}
  551. \def\topaligned{\null\,\vtop\aligned@}
  552. \def\botaligned{\null\,\vbox\aligned@}
  553. \def\aligned{\null\,\vcenter\aligned@}
  554. \def\aligned@{\bgroup\vspace@\Let@
  555.  \ifinany@\else\openup\jot\fi\ialign
  556.  \bgroup\hfil\strut@$\m@th\displaystyle{##}$&
  557.  $\m@th\displaystyle{{}##}$\hfil\crcr}
  558. \def\endaligned{\crcr\egroup\egroup}
  559. \let\endtopaligned\endaligned
  560. \let\endbotaligned\endaligned
  561. \def\alignedat#1{\null\,\vcenter\bgroup\doat@{#1}\vspace@\Let@
  562.  \ifinany@\else\openup\jot\fi\ialign\bgroup\span\preamble@@\crcr}
  563. \newcount\atcount@
  564. \def\doat@#1{\toks@{\hfil\strut@$\m@th
  565.  \displaystyle{\the\hashtoks@}$&$\m@th\displaystyle
  566.  {{}\the\hashtoks@}$\hfil}%                                                 %1
  567.  \atcount@#1\relax\advance\atcount@\m@ne                                    %2
  568.  \loop\ifnum\atcount@>\z@\toks@=\expandafter{\the\toks@&\hfil$\m@th
  569.  \displaystyle{\the\hashtoks@}$&$\m@th
  570.  \displaystyle{{}\the\hashtoks@}$\hfil}\advance
  571.   \atcount@\m@ne\repeat                                                     %3
  572.  \xdef\preamble@{\the\toks@}\xdef\preamble@@{\preamble@}}
  573. \let\endalignedat\endaligned
  574. \def\gathered{\null\,\vcenter\bgroup\vspace@\Let@
  575.  \ifinany@\else\openup\jot\fi\ialign
  576.  \bgroup\hfil\strut@$\m@th\displaystyle{##}$\hfil\crcr}
  577. \def\endgathered{\crcr\egroup\egroup}
  578. \newif\iftagsleft@
  579. \def\TagsOnLeft{\global\tagsleft@true}
  580. \def\TagsOnRight{\global\tagsleft@false}
  581. \TagsOnLeft
  582. \newif\ifmathtags@
  583. \def\TagsAsMath{\global\mathtags@true}
  584. \def\TagsAsText{\global\mathtags@false}
  585. \TagsAsText
  586. \def\tagform@#1{\hbox{\rm(\ignorespaces#1\unskip)}}
  587. \def\thetag{\leavevmode\tagform@}
  588. \def\tag#1$${\iftagsleft@\leqno\else\eqno\fi                                %1
  589.  \maketag@#1\maketag@                                                       %2
  590.  $$}                                                                        %3
  591. \def\maketag@{\FN@\maketag@@}
  592. \def\maketag@@{\ifx\next"\expandafter\maketag@@@\else\expandafter\maketag@@@@
  593.  \fi}
  594. \def\maketag@@@"#1"#2\maketag@{\hbox{\rm#1}}                                %1
  595. \def\maketag@@@@#1\maketag@{\ifmathtags@\tagform@{$\m@th#1$}\else
  596.  \tagform@{#1}\fi}
  597. \interdisplaylinepenalty\@M
  598. \def\allowdisplaybreaks{\RIfMIfI@
  599.  \onlydmatherr@\allowdisplaybreaks\else
  600.  \interdisplaylinepenalty\z@\fi\else\onlydmatherr@\allowdisplaybreaks\fi}
  601. \Invalid@\allowdisplaybreak
  602. \Invalid@\displaybreak
  603. \Invalid@\intertext
  604. \def\allowdisplaybreak@{\def\allowdisplaybreak{\crcr\noalign{\allowbreak}}}
  605. \def\displaybreak@{\def\displaybreak{\crcr\noalign{\break}}}
  606. \def\intertext@{\def\intertext##1{\crcr\noalign{%
  607.  \penalty\postdisplaypenalty \vskip\belowdisplayskip
  608.  \vbox{\normalbaselines\noindent##1}%
  609.  \penalty\predisplaypenalty \vskip\abovedisplayskip}}}
  610. \newskip\centering@
  611. \centering@\z@ plus\@m\p@
  612. \def\align{\relax\ifingather@\DN@{\csname align (in
  613.   \string\gather)\endcsname}\else
  614.  \ifmmode\ifinner\DN@{\onlydmatherr@\align}\else
  615.   \let\next@\align@\fi
  616.  \else\DN@{\onlydmatherr@\align}\fi\fi\next@}
  617. \newhelp\andhelp@
  618. {An extra & here is so disastrous that you should probably exit^^J
  619. and fix things up.}
  620. \newif\iftag@
  621. \newcount\and@
  622. \def\align@{\inalign@true\inany@true
  623.  \vspace@\allowdisplaybreak@\displaybreak@\intertext@
  624.  \def\tag{\global\tag@true\ifnum\and@=\z@\DN@{&&}\else
  625.           \DN@{&}\fi\next@}%
  626.  \iftagsleft@\DN@{\csname align \endcsname}\else
  627.   \DN@{\csname align \space\endcsname}\fi\next@}
  628. \def\Tag@{\iftag@\else\errhelp\andhelp@\err@{Extra & on this line}\fi}
  629. \newdimen\lwidth@
  630. \newdimen\rwidth@
  631. \newdimen\maxlwidth@
  632. \newdimen\maxrwidth@
  633. \newdimen\totwidth@
  634. \def\measure@#1\endalign{\lwidth@\z@\rwidth@\z@\maxlwidth@\z@\maxrwidth@\z@
  635.  \global\and@\z@                                                            %1
  636.  \setbox@ne\vbox                                                            %2
  637.   {\everycr{\noalign{\global\tag@false\global\and@\z@}}\Let@                %3
  638.   \halign{\setboxz@h{$\m@th\displaystyle{\@lign##}$}%                       %4
  639.    \global\lwidth@\wdz@                                                     %5
  640.    \ifdim\lwidth@>\maxlwidth@\global\maxlwidth@\lwidth@\fi                  %6
  641.    \global\advance\and@\@ne                                                 %7
  642.    &\setboxz@h{$\m@th\displaystyle{{}\@lign##}$}\global\rwidth@\wdz@        %8
  643.    \ifdim\rwidth@>\maxrwidth@\global\maxrwidth@\rwidth@\fi                  %9
  644.    \global\advance\and@\@ne                                                %10
  645.    &\Tag@
  646.    \eat@{##}\crcr#1\crcr}}%                                                %11
  647.  \totwidth@\maxlwidth@\advance\totwidth@\maxrwidth@}                       %12
  648. \def\displ@y@{\global\dt@ptrue\openup\jot
  649.  \everycr{\noalign{\global\tag@false\global\and@\z@\ifdt@p\global\dt@pfalse
  650.  \vskip-\lineskiplimit\vskip\normallineskiplimit\else
  651.  \penalty\interdisplaylinepenalty\fi}}}
  652. \def\black@#1{\noalign{\ifdim#1>\displaywidth
  653.  \dimen@\prevdepth\nointerlineskip                                          %1
  654.  \vskip-\ht\strutbox@\vskip-\dp\strutbox@                                   %2
  655.  \vbox{\noindent\hbox to#1{\strut@\hfill}}%                                 %3
  656.  \prevdepth\dimen@                                                          %4
  657.  \fi}}
  658. \expandafter\def\csname align \space\endcsname#1\endalign
  659.  {\measure@#1\endalign\global\and@\z@                                       %1
  660.  \ifingather@\everycr{\noalign{\global\and@\z@}}\else\displ@y@\fi           %2
  661.  \Let@\tabskip\centering@                                                   %3
  662.  \halign to\displaywidth
  663.   {\hfil\strut@\setboxz@h{$\m@th\displaystyle{\@lign##}$}%                  %4
  664.   \global\lwidth@\wdz@\boxz@\global\advance\and@\@ne                        %5
  665.   \tabskip\z@skip                                                           %6
  666.   &\setboxz@h{$\m@th\displaystyle{{}\@lign##}$}%                            %7
  667.   \global\rwidth@\wdz@\boxz@\hfill\global\advance\and@\@ne                  %8
  668.   \tabskip\centering@                                                       %9
  669.   &\setboxz@h{\@lign\strut@\maketag@##\maketag@}%                          %10
  670.   \dimen@\displaywidth\advance\dimen@-\totwidth@
  671.   \divide\dimen@\tw@\advance\dimen@\maxrwidth@\advance\dimen@-\rwidth@     %11
  672.   \ifdim\dimen@<\tw@\wdz@\llap{\vtop{\normalbaselines\null\boxz@}}%        %12
  673.   \else\llap{\boxz@}\fi                                                    %13
  674.   \tabskip\z@skip                                                          %14
  675.   \crcr#1\crcr                                                             %15
  676.   \black@\totwidth@}}                                                      %16
  677. \newdimen\lineht@
  678. \expandafter\def\csname align \endcsname#1\endalign{\measure@#1\endalign
  679.  \global\and@\z@
  680.  \ifdim\totwidth@>\displaywidth\let\displaywidth@\totwidth@\else
  681.   \let\displaywidth@\displaywidth\fi                                        %1
  682.  \ifingather@\everycr{\noalign{\global\and@\z@}}\else\displ@y@\fi
  683.  \Let@\tabskip\centering@\halign to\displaywidth
  684.   {\hfil\strut@\setboxz@h{$\m@th\displaystyle{\@lign##}$}%
  685.   \global\lwidth@\wdz@\global\lineht@\ht\z@                                 %2
  686.   \boxz@\global\advance\and@\@ne
  687.   \tabskip\z@skip&\setboxz@h{$\m@th\displaystyle{{}\@lign##}$}%
  688.   \global\rwidth@\wdz@\ifdim\ht\z@>\lineht@\global\lineht@\ht\z@\fi         %3
  689.   \boxz@\hfil\global\advance\and@\@ne
  690.   \tabskip\centering@&\kern-\displaywidth@                                  %4
  691.   \setboxz@h{\@lign\strut@\maketag@##\maketag@}%
  692.   \dimen@\displaywidth\advance\dimen@-\totwidth@
  693.   \divide\dimen@\tw@\advance\dimen@\maxlwidth@\advance\dimen@-\lwidth@
  694.   \ifdim\dimen@<\tw@\wdz@
  695.    \rlap{\vbox{\normalbaselines\boxz@\vbox to\lineht@{}}}\else
  696.    \rlap{\boxz@}\fi
  697.   \tabskip\displaywidth@\crcr#1\crcr\black@\totwidth@}}
  698. \expandafter\def\csname align (in \string\gather)\endcsname
  699.   #1\endalign{\vcenter{\align@#1\endalign}}
  700. \Invalid@\endalign
  701. \newif\ifxat@
  702. \def\alignat{\RIfMIfI@\DN@{\onlydmatherr@\alignat}\else
  703.  \DN@{\csname alignat \endcsname}\fi\else
  704.  \DN@{\onlydmatherr@\alignat}\fi\next@}
  705. \newif\ifmeasuring@
  706. \newbox\savealignat@
  707. \expandafter\def\csname alignat \endcsname#1#2\endalignat                   %1
  708.  {\inany@true\xat@false
  709.  \def\tag{\global\tag@true\count@#1\relax\multiply\count@\tw@
  710.   \xdef\tag@{}\loop\ifnum\count@>\and@\xdef\tag@{&\tag@}\advance\count@\m@ne
  711.   \repeat\tag@}%
  712.  \vspace@\allowdisplaybreak@\displaybreak@\intertext@
  713.  \displ@y@\measuring@true                                                   %2
  714.  \setbox\savealignat@\hbox{$\m@th\displaystyle\Let@
  715.   \attag@{#1}%                                                              %3
  716.   \vbox{\halign{\span\preamble@@\crcr#2\crcr}}$}%
  717.  \measuring@false                                                           %4
  718.  \Let@\attag@{#1}%                                                          %5
  719.  \tabskip\centering@\halign to\displaywidth
  720.   {\span\preamble@@\crcr#2\crcr                                             %6
  721.   \black@{\wd\savealignat@}}}                                               %7
  722. \Invalid@\endalignat
  723. \def\xalignat{\RIfMIfI@
  724.  \DN@{\onlydmatherr@\xalignat}\else
  725.  \DN@{\csname xalignat \endcsname}\fi\else
  726.  \DN@{\onlydmatherr@\xalignat}\fi\next@}
  727. \expandafter\def\csname xalignat \endcsname#1#2\endxalignat
  728.  {\inany@true\xat@true
  729.  \def\tag{\global\tag@true\def\tag@{}\count@#1\relax\multiply\count@\tw@
  730.   \loop\ifnum\count@>\and@\xdef\tag@{&\tag@}\advance\count@\m@ne\repeat\tag@}%
  731.  \vspace@\allowdisplaybreak@\displaybreak@\intertext@
  732.  \displ@y@\measuring@true\setbox\savealignat@\hbox{$\m@th\displaystyle\Let@
  733.  \attag@{#1}\vbox{\halign{\span\preamble@@\crcr#2\crcr}}$}%
  734.  \measuring@false\Let@
  735.  \attag@{#1}\tabskip\centering@\halign to\displaywidth
  736.  {\span\preamble@@\crcr#2\crcr\black@{\wd\savealignat@}}}
  737. \def\attag@#1{\let\Maketag@\maketag@\let\TAG@\Tag@                          %1
  738.  \let\Tag@=0\let\maketag@=0%                                                %2
  739.  \ifmeasuring@\def\llap@##1{\setboxz@h{##1}\hbox to\tw@\wdz@{}}%
  740.   \def\rlap@##1{\setboxz@h{##1}\hbox to\tw@\wdz@{}}\else
  741.   \let\llap@\llap\let\rlap@\rlap\fi                                         %3
  742.  \toks@{\hfil\strut@$\m@th\displaystyle{\@lign\the\hashtoks@}$\tabskip\z@skip
  743.   \global\advance\and@\@ne&$\m@th\displaystyle{{}\@lign\the\hashtoks@}$\hfil
  744.   \ifxat@\tabskip\centering@\fi\global\advance\and@\@ne}%                   %4
  745.  \iftagsleft@
  746.   \toks@@{\tabskip\centering@&\Tag@\kern-\displaywidth
  747.    \rlap@{\@lign\maketag@\the\hashtoks@\maketag@}%
  748.    \global\advance\and@\@ne\tabskip\displaywidth}\else
  749.   \toks@@{\tabskip\centering@&\Tag@\llap@{\@lign\maketag@
  750.    \the\hashtoks@\maketag@}\global\advance\and@\@ne\tabskip\z@skip}\fi      %5
  751.  \atcount@#1\relax\advance\atcount@\m@ne
  752.  \loop\ifnum\atcount@>\z@
  753.  \toks@=\expandafter{\the\toks@&\hfil$\m@th\displaystyle{\@lign
  754.   \the\hashtoks@}$\global\advance\and@\@ne
  755.   \tabskip\z@skip&$\m@th\displaystyle{{}\@lign\the\hashtoks@}$\hfil\ifxat@
  756.   \tabskip\centering@\fi\global\advance\and@\@ne}\advance\atcount@\m@ne
  757.  \repeat                                                                    %6
  758.  \xdef\preamble@{\the\toks@\the\toks@@}%                                    %7
  759.  \xdef\preamble@@{\preamble@}%                                              %8
  760.  \let\maketag@\Maketag@\let\Tag@\TAG@}                                      %9
  761. \Invalid@\endxalignat
  762. \def\xxalignat{\RIfMIfI@
  763.  \DN@{\onlydmatherr@\xxalignat}\else\DN@{\csname xxalignat
  764.   \endcsname}\fi\else
  765.  \DN@{\onlydmatherr@\xxalignat}\fi\next@}
  766. \expandafter\def\csname xxalignat \endcsname#1#2\endxxalignat{\inany@true
  767.  \vspace@\allowdisplaybreak@\displaybreak@\intertext@
  768.  \displ@y\setbox\savealignat@\hbox{$\m@th\displaystyle\Let@
  769.  \xxattag@{#1}\vbox{\halign{\span\preamble@@\crcr#2\crcr}}$}%
  770.  \Let@\xxattag@{#1}\tabskip\z@skip\halign to\displaywidth
  771.  {\span\preamble@@\crcr#2\crcr\black@{\wd\savealignat@}}}
  772. \def\xxattag@#1{\toks@{\tabskip\z@skip\hfil\strut@
  773.  $\m@th\displaystyle{\the\hashtoks@}$&%
  774.  $\m@th\displaystyle{{}\the\hashtoks@}$\hfil\tabskip\centering@&}%
  775.  \atcount@#1\relax\advance\atcount@\m@ne\loop\ifnum\atcount@>\z@
  776.  \toks@=\expandafter{\the\toks@&\hfil$\m@th\displaystyle{\the\hashtoks@}$%
  777.   \tabskip\z@skip&$\m@th\displaystyle{{}\the\hashtoks@}$\hfil
  778.   \tabskip\centering@}\advance\atcount@\m@ne\repeat
  779.  \xdef\preamble@{\the\toks@\tabskip\z@skip}\xdef\preamble@@{\preamble@}}
  780. \Invalid@\endxxalignat
  781. \newdimen\gwidth@
  782. \newdimen\gmaxwidth@
  783. \def\gmeasure@#1\endgather{\gwidth@\z@\gmaxwidth@\z@\setbox@ne\vbox{\Let@
  784.  \halign{\setboxz@h{$\m@th\displaystyle{##}$}\global\gwidth@\wdz@
  785.  \ifdim\gwidth@>\gmaxwidth@\global\gmaxwidth@\gwidth@\fi
  786.  &\eat@{##}\crcr#1\crcr}}}
  787. \def\gather{\RIfMIfI@\DN@{\onlydmatherr@\gather}\else
  788.  \ingather@true\inany@true\def\tag{&}%
  789.  \vspace@\allowdisplaybreak@\displaybreak@\intertext@
  790.  \displ@y\Let@
  791.  \iftagsleft@\DN@{\csname gather \endcsname}\else
  792.   \DN@{\csname gather \space\endcsname}\fi\fi
  793.  \else\DN@{\onlydmatherr@\gather}\fi\next@}
  794. \expandafter\def\csname gather \space\endcsname#1\endgather
  795.  {\gmeasure@#1\endgather\tabskip\centering@
  796.  \halign to\displaywidth{\hfil\strut@\setboxz@h{$\m@th\displaystyle{##}$}%
  797.  \global\gwidth@\wdz@\boxz@\hfil&
  798.  \setboxz@h{\strut@{\maketag@##\maketag@}}%
  799.  \dimen@\displaywidth\advance\dimen@-\gwidth@
  800.  \ifdim\dimen@>\tw@\wdz@\llap{\boxz@}\else
  801.  \llap{\vtop{\normalbaselines\null\boxz@}}\fi
  802.  \tabskip\z@skip\crcr#1\crcr\black@\gmaxwidth@}}
  803. \newdimen\glineht@
  804. \expandafter\def\csname gather \endcsname#1\endgather{\gmeasure@#1\endgather
  805.  \ifdim\gmaxwidth@>\displaywidth\let\gdisplaywidth@\gmaxwidth@\else
  806.  \let\gdisplaywidth@\displaywidth\fi\tabskip\centering@\halign to\displaywidth
  807.  {\hfil\strut@\setboxz@h{$\m@th\displaystyle{##}$}%
  808.  \global\gwidth@\wdz@\global\glineht@\ht\z@\boxz@\hfil&\kern-\gdisplaywidth@
  809.  \setboxz@h{\strut@{\maketag@##\maketag@}}%
  810.  \dimen@\displaywidth\advance\dimen@-\gwidth@
  811.  \ifdim\dimen@>\tw@\wdz@\rlap{\boxz@}\else
  812.  \rlap{\vbox{\normalbaselines\boxz@\vbox to\glineht@{}}}\fi
  813.  \tabskip\gdisplaywidth@\crcr#1\crcr\black@\gmaxwidth@}}
  814. \newif\ifctagsplit@
  815. \def\CenteredTagsOnSplits{\global\ctagsplit@true}
  816. \def\TopOrBottomTagsOnSplits{\global\ctagsplit@false}
  817. \TopOrBottomTagsOnSplits
  818. \def\split{\relax\ifinany@\let\next@\insplit@\else
  819.  \ifmmode\ifinner\def\next@{\onlydmatherr@\split}\else
  820.  \let\next@\outsplit@\fi\else
  821.  \def\next@{\onlydmatherr@\split}\fi\fi\next@}
  822. \def\insplit@{\global\setbox\z@\vbox\bgroup\vspace@\Let@\ialign\bgroup
  823.  \hfil\strut@$\m@th\displaystyle{##}$&$\m@th\displaystyle{{}##}$\hfill\crcr}
  824. \def\endsplit{\crcr\egroup\egroup\iftagsleft@\expandafter\lendsplit@\else
  825.  \expandafter\rendsplit@\fi}
  826. \def\rendsplit@{\global\setbox9 \vbox
  827.  {\unvcopy\z@\global\setbox8 \lastbox\unskip}%                              %1
  828.  \setbox@ne\hbox{\unhcopy8 \unskip\global\setbox\tw@\lastbox
  829.  \unskip\global\setbox\thr@@\lastbox}%                                      %2
  830.  \global\setbox7 \hbox{\unhbox\tw@\unskip}%                                 %3
  831.  \ifinalign@\ifctagsplit@                                                   %4
  832.   \gdef\split@{\hbox to\wd\thr@@{}&
  833.    \vcenter{\vbox{\moveleft\wd\thr@@\boxz@}}}%                              %5
  834.  \else\gdef\split@{&\vbox{\moveleft\wd\thr@@\box9}\crcr
  835.   \box\thr@@&\box7}\fi                                                      %6
  836.  \else                                                                      %7
  837.   \ifctagsplit@\gdef\split@{\vcenter{\boxz@}}\else
  838.   \gdef\split@{\box9\crcr\hbox{\box\thr@@\box7}}\fi
  839.  \fi
  840.  \split@}                                                                   %8
  841. \def\lendsplit@{\global\setbox9\vtop{\unvcopy\z@}%                          %1
  842.  \setbox@ne\vbox{\unvcopy\z@\global\setbox8\lastbox}%                       %2
  843.  \setbox@ne\hbox{\unhcopy8\unskip\setbox\tw@\lastbox
  844.   \unskip\global\setbox\thr@@\lastbox}%                                     %3
  845.  \ifinalign@\ifctagsplit@                                                   %4
  846.   \gdef\split@{\hbox to\wd\thr@@{}&
  847.   \vcenter{\vbox{\moveleft\wd\thr@@\box9}}}%                                %5
  848.   \else                                                                     %6
  849.   \gdef\split@{\hbox to\wd\thr@@{}&\vbox{\moveleft\wd\thr@@\box9}}\fi
  850.  \else
  851.   \ifctagsplit@\gdef\split@{\vcenter{\box9}}\else
  852.   \gdef\split@{\box9}\fi
  853.  \fi\split@}
  854. \def\outsplit@#1$${\align\insplit@#1\endalign$$}
  855. \newdimen\multlinegap@
  856. \multlinegap@1em
  857. \newdimen\multlinetaggap@
  858. \multlinetaggap@1em
  859. \def\MultlineGap#1{\global\multlinegap@#1\relax}
  860. \def\multlinegap#1{\RIfMIfI@\onlydmatherr@\multlinegap\else
  861.  \multlinegap@#1\relax\fi\else\onlydmatherr@\multlinegap\fi}
  862. \def\nomultlinegap{\multlinegap{\z@}}
  863. \def\multline{\RIfMIfI@
  864.  \DN@{\onlydmatherr@\multline}\else
  865.  \DN@{\multline@}\fi\else
  866.  \DN@{\onlydmatherr@\multline}\fi\next@}
  867. \newif\iftagin@
  868. \def\tagin@#1{\tagin@false\in@\tag{#1}\ifin@\tagin@true\fi}
  869. \def\multline@#1$${\inany@true\vspace@\allowdisplaybreak@\displaybreak@
  870.  \tagin@{#1}\iftagsleft@\DN@{\multline@l#1$$}\else
  871.  \DN@{\multline@r#1$$}\fi\next@}
  872. \newdimen\mwidth@
  873. \def\rmmeasure@#1\endmultline{%
  874.  \def\shoveleft##1{##1}\def\shoveright##1{##1}%                             %1
  875.  \setbox@ne\vbox{\Let@\halign{\setboxz@h
  876.   {$\m@th\@lign\displaystyle{}##$}\global\mwidth@\wdz@
  877.   \crcr#1\crcr}}}
  878. \newdimen\mlineht@
  879. \newif\ifzerocr@
  880. \newif\ifonecr@
  881. \def\lmmeasure@#1\endmultline{\global\zerocr@true\global\onecr@false
  882.  \everycr{\noalign{\ifonecr@\global\onecr@false\fi
  883.   \ifzerocr@\global\zerocr@false\global\onecr@true\fi}}%                    %1
  884.   \def\shoveleft##1{##1}\def\shoveright##1{##1}%
  885.  \setbox@ne\vbox{\Let@\halign{\setboxz@h
  886.   {$\m@th\@lign\displaystyle{}##$}\ifonecr@\global\mwidth@\wdz@
  887.   \global\mlineht@\ht\z@\fi\crcr#1\crcr}}}
  888. \newbox\mtagbox@
  889. \newdimen\ltwidth@
  890. \newdimen\rtwidth@
  891. \def\multline@l#1$${\iftagin@\DN@{\lmultline@@#1$$}\else
  892.  \DN@{\setbox\mtagbox@\null\ltwidth@\z@\rtwidth@\z@
  893.   \lmultline@@@#1$$}\fi\next@}
  894. \def\lmultline@@#1\endmultline\tag#2$${%
  895.  \setbox\mtagbox@\hbox{\maketag@#2\maketag@}%                               %1
  896.  \lmmeasure@#1\endmultline\dimen@\mwidth@\advance\dimen@\wd\mtagbox@
  897.  \advance\dimen@\multlinetaggap@                                            %2
  898.  \ifdim\dimen@>\displaywidth\ltwidth@\z@\else\ltwidth@\wd\mtagbox@\fi       %3
  899.  \lmultline@@@#1\endmultline$$}
  900. \def\lmultline@@@{\displ@y
  901.  \def\shoveright##1{##1\hfilneg\hskip\multlinegap@}%
  902.  \def\shoveleft##1{\setboxz@h{$\m@th\displaystyle{}##1$}%
  903.   \setbox@ne\hbox{$\m@th\displaystyle##1$}%
  904.   \hfilneg
  905.   \iftagin@
  906.    \ifdim\ltwidth@>\z@\hskip\ltwidth@\hskip\multlinetaggap@\fi
  907.   \else\hskip\multlinegap@\fi\hskip.5\wd@ne\hskip-.5\wdz@##1}%              %1
  908.   \halign\bgroup\Let@\hbox to\displaywidth
  909.    {\strut@$\m@th\displaystyle\hfil{}##\hfil$}\crcr
  910.    \hfilneg                                                                 %2
  911.    \iftagin@                                                                %3
  912.     \ifdim\ltwidth@>\z@                                                     %4
  913.      \box\mtagbox@\hskip\multlinetaggap@                                    %5
  914.     \else
  915.      \rlap{\vbox{\normalbaselines\hbox{\strut@\box\mtagbox@}%
  916.      \vbox to\mlineht@{}}}\fi                                               %6
  917.    \else\hskip\multlinegap@\fi}                                             %7
  918. \def\multline@r#1$${\iftagin@\DN@{\rmultline@@#1$$}\else
  919.  \DN@{\setbox\mtagbox@\null\ltwidth@\z@\rtwidth@\z@
  920.   \rmultline@@@#1$$}\fi\next@}
  921. \def\rmultline@@#1\endmultline\tag#2$${\ltwidth@\z@
  922.  \setbox\mtagbox@\hbox{\maketag@#2\maketag@}%
  923.  \rmmeasure@#1\endmultline\dimen@\mwidth@\advance\dimen@\wd\mtagbox@
  924.  \advance\dimen@\multlinetaggap@
  925.  \ifdim\dimen@>\displaywidth\rtwidth@\z@\else\rtwidth@\wd\mtagbox@\fi
  926.  \rmultline@@@#1\endmultline$$}
  927. \def\rmultline@@@{\displ@y
  928.  \def\shoveright##1{##1\hfilneg\iftagin@\ifdim\rtwidth@>\z@
  929.   \hskip\rtwidth@\hskip\multlinetaggap@\fi\else\hskip\multlinegap@\fi}%
  930.  \def\shoveleft##1{\setboxz@h{$\m@th\displaystyle{}##1$}%
  931.   \setbox@ne\hbox{$\m@th\displaystyle##1$}%
  932.   \hfilneg\hskip\multlinegap@\hskip.5\wd@ne\hskip-.5\wdz@##1}%
  933.  \halign\bgroup\Let@\hbox to\displaywidth
  934.   {\strut@$\m@th\displaystyle\hfil{}##\hfil$}\crcr
  935.  \hfilneg\hskip\multlinegap@}
  936. \def\endmultline{\iftagsleft@\expandafter\lendmultline@\else
  937.  \expandafter\rendmultline@\fi}
  938. \def\lendmultline@{\hfilneg\hskip\multlinegap@\crcr\egroup}
  939. \def\rendmultline@{\iftagin@                                                %1
  940.  \ifdim\rtwidth@>\z@                                                        %2
  941.   \hskip\multlinetaggap@\box\mtagbox@                                       %3
  942.  \else\llap{\vtop{\normalbaselines\null\hbox{\strut@\box\mtagbox@}}}\fi     %4
  943.  \else\hskip\multlinegap@\fi                                                %5
  944.  \hfilneg\crcr\egroup}
  945. \def\bmod{\mskip-\medmuskip\mkern5mu\mathbin{\fam\z@ mod}\penalty900
  946.  \mkern5mu\mskip-\medmuskip}
  947. \def\pmod#1{\allowbreak\ifinner\mkern8mu\else\mkern18mu\fi
  948.  ({\fam\z@ mod}\,\,#1)}
  949. \def\pod#1{\allowbreak\ifinner\mkern8mu\else\mkern18mu\fi(#1)}
  950. \def\mod#1{\allowbreak\ifinner\mkern12mu\else\mkern18mu\fi{\fam\z@ mod}\,\,#1}
  951. \message{continued fractions,}
  952. \newcount\cfraccount@
  953. \def\cfrac{\bgroup\bgroup\advance\cfraccount@\@ne\strut
  954.  \iffalse{\fi\def\\{\over\displaystyle}\iffalse}\fi}
  955. \def\lcfrac{\bgroup\bgroup\advance\cfraccount@\@ne\strut
  956.  \iffalse{\fi\def\\{\hfill\over\displaystyle}\iffalse}\fi}
  957. \def\rcfrac{\bgroup\bgroup\advance\cfraccount@\@ne\strut\hfill
  958.  \iffalse{\fi\def\\{\over\displaystyle}\iffalse}\fi}
  959. \def\gloop@#1\repeat{\gdef\body{#1}\iterate}
  960. \def\endcfrac{\gloop@\ifnum\cfraccount@>\z@\global\advance\cfraccount@\m@ne
  961.  \egroup\hskip-\nulldelimiterspace\egroup\repeat}
  962. \message{compound symbols,}
  963. \def\binrel@#1{\setboxz@h{\thinmuskip0mu
  964.   \medmuskip\m@ne mu\thickmuskip\@ne mu$#1\m@th$}%
  965.  \setbox@ne\hbox{\thinmuskip0mu\medmuskip\m@ne mu\thickmuskip
  966.   \@ne mu${}#1{}\m@th$}%
  967.  \setbox\tw@\hbox{\hskip\wd@ne\hskip-\wdz@}}
  968. \def\overset#1\to#2{\binrel@{#2}\ifdim\wd\tw@<\z@
  969.  \mathbin{\mathop{\kern\z@#2}\limits^{#1}}\else\ifdim\wd\tw@>\z@
  970.  \mathrel{\mathop{\kern\z@#2}\limits^{#1}}\else
  971.  {\mathop{\kern\z@#2}\limits^{#1}}{}\fi\fi}
  972. \def\underset#1\to#2{\binrel@{#2}\ifdim\wd\tw@<\z@
  973.  \mathbin{\mathop{\kern\z@#2}\limits_{#1}}\else\ifdim\wd\tw@>\z@
  974.  \mathrel{\mathop{\kern\z@#2}\limits_{#1}}\else
  975.  {\mathop{\kern\z@#2}\limits_{#1}}{}\fi\fi}
  976. \def\oversetbrace#1\to#2{\overbrace{#2}^{#1}}
  977. \def\undersetbrace#1\to#2{\underbrace{#2}_{#1}}
  978. \def\sideset#1\and#2\to#3{%
  979.  \setbox@ne\hbox{$\dsize{\vphantom{#3}}#1{#3}\m@th$}%
  980.  \setbox\tw@\hbox{$\dsize{#3}#2\m@th$}%
  981.  \hskip\wd@ne\hskip-\wd\tw@\mathop{\hskip\wd\tw@\hskip-\wd@ne
  982.   {\vphantom{#3}}#1{#3}#2}}
  983. \def\rightarrowfill@#1{\setboxz@h{$#1-\m@th$}\ht\z@\z@
  984.   $#1\m@th\copy\z@\mkern-6mu\cleaders
  985.   \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill
  986.   \mkern-6mu\mathord\rightarrow$}
  987. \def\leftarrowfill@#1{\setboxz@h{$#1-\m@th$}\ht\z@\z@
  988.   $#1\m@th\mathord\leftarrow\mkern-6mu\cleaders
  989.   \hbox{$#1\mkern-2mu\copy\z@\mkern-2mu$}\hfill
  990.   \mkern-6mu\box\z@$}
  991. \def\leftrightarrowfill@#1{\setboxz@h{$#1-\m@th$}\ht\z@\z@
  992.   $#1\m@th\mathord\leftarrow\mkern-6mu\cleaders
  993.   \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill
  994.   \mkern-6mu\mathord\rightarrow$}
  995. \def\overrightarrow{\mathpalette\overrightarrow@}
  996. \def\overrightarrow@#1#2{\vbox{\ialign{##\crcr\rightarrowfill@#1\crcr
  997.  \noalign{\kern-\ex@\nointerlineskip}$\m@th\hfil#1#2\hfil$\crcr}}}
  998. \let\overarrow\overrightarrow
  999. \def\overleftarrow{\mathpalette\overleftarrow@}
  1000. \def\overleftarrow@#1#2{\vbox{\ialign{##\crcr\leftarrowfill@#1\crcr
  1001.  \noalign{\kern-\ex@\nointerlineskip}$\m@th\hfil#1#2\hfil$\crcr}}}
  1002. \def\overleftrightarrow{\mathpalette\overleftrightarrow@}
  1003. \def\overleftrightarrow@#1#2{\vbox{\ialign{##\crcr\leftrightarrowfill@#1\crcr
  1004.  \noalign{\kern-\ex@\nointerlineskip}$\m@th\hfil#1#2\hfil$\crcr}}}
  1005. \def\underrightarrow{\mathpalette\underrightarrow@}
  1006. \def\underrightarrow@#1#2{\vtop{\ialign{##\crcr$\m@th\hfil#1#2\hfil$\crcr
  1007.  \noalign{\nointerlineskip}\rightarrowfill@#1\crcr}}}
  1008. \let\underarrow\underrightarrow
  1009. \def\underleftarrow{\mathpalette\underleftarrow@}
  1010. \def\underleftarrow@#1#2{\vtop{\ialign{##\crcr$\m@th\hfil#1#2\hfil$\crcr
  1011.  \noalign{\nointerlineskip}\leftarrowfill@#1\crcr}}}
  1012. \def\underleftrightarrow{\mathpalette\underleftrightarrow@}
  1013. \def\underleftrightarrow@#1#2{\vtop{\ialign{##\crcr$\m@th\hfil#1#2\hfil$\crcr
  1014.  \noalign{\nointerlineskip}\leftrightarrowfill@#1\crcr}}}
  1015. \message{various kinds of dots,}
  1016. \let\DOTSI\relax
  1017. \let\DOTSB\relax
  1018. \let\DOTSX\relax
  1019. \newif\ifmath@
  1020. {\uccode`7=`\\ \uccode`8=`m \uccode`9=`a \uccode`0=`t \uccode`!=`h
  1021.  \uppercase{\gdef\math@#1#2#3#4#5#6\math@{\global\math@false\ifx 7#1\ifx 8#2%
  1022.  \ifx 9#3\ifx 0#4\ifx !#5\xdef\meaning@{#6}\global\math@true\fi\fi\fi\fi\fi}}}
  1023. \newif\ifmathch@
  1024. {\uccode`7=`c \uccode`8=`h \uccode`9=`\"
  1025.  \uppercase{\gdef\mathch@#1#2#3#4#5#6\mathch@{\global\mathch@false
  1026.   \ifx 7#1\ifx 8#2\ifx 9#5\global\mathch@true\xdef\meaning@{9#6}\fi\fi\fi}}}
  1027. \newcount\classnum@
  1028. \def\getmathch@#1.#2\getmathch@{\classnum@#1 \divide\classnum@4096
  1029.  \ifcase\number\classnum@\or\or\gdef\thedots@{\dotsb@}\or
  1030.  \gdef\thedots@{\dotsb@}\fi}
  1031. \newif\ifmathbin@
  1032. {\uccode`4=`b \uccode`5=`i \uccode`6=`n
  1033.  \uppercase{\gdef\mathbin@#1#2#3{\relaxnext@
  1034.   \DNii@##1\mathbin@{\ifx\space@\next\global\mathbin@true\fi}%
  1035.  \global\mathbin@false\DN@##1\mathbin@{}%
  1036.  \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}}
  1037. \newif\ifmathrel@
  1038. {\uccode`4=`r \uccode`5=`e \uccode`6=`l
  1039.  \uppercase{\gdef\mathrel@#1#2#3{\relaxnext@
  1040.   \DNii@##1\mathrel@{\ifx\space@\next\global\mathrel@true\fi}%
  1041.  \global\mathrel@false\DN@##1\mathrel@{}%
  1042.  \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}}
  1043. \newif\ifmacro@
  1044. {\uccode`5=`m \uccode`6=`a \uccode`7=`c
  1045.  \uppercase{\gdef\macro@#1#2#3#4\macro@{\global\macro@false
  1046.   \ifx 5#1\ifx 6#2\ifx 7#3\global\macro@true
  1047.   \xdef\meaning@{\macro@@#4\macro@@}\fi\fi\fi}}}
  1048. \def\macro@@#1->#2\macro@@{#2}
  1049. \newif\ifDOTS@
  1050. \newcount\DOTSCASE@
  1051. {\uccode`6=`\\ \uccode`7=`D \uccode`8=`O \uccode`9=`T \uccode`0=`S
  1052.  \uppercase{\gdef\DOTS@#1#2#3#4#5{\global\DOTS@false\DN@##1\DOTS@{}%
  1053.   \ifx 6#1\ifx 7#2\ifx 8#3\ifx 9#4\ifx 0#5\let\next@\DOTS@@\fi\fi\fi\fi\fi
  1054.   \next@}}}
  1055. {\uccode`3=`B \uccode`4=`I \uccode`5=`X
  1056.  \uppercase{\gdef\DOTS@@#1{\relaxnext@
  1057.   \DNii@##1\DOTS@{\ifx\space@\next\global\DOTS@true\fi}%
  1058.   \DN@{\FN@\nextii@}%
  1059.   \ifx 3#1\global\DOTSCASE@\z@\else
  1060.   \ifx 4#1\global\DOTSCASE@\@ne\else
  1061.   \ifx 5#1\global\DOTSCASE@\tw@\else\DN@##1\DOTS@{}%
  1062.   \fi\fi\fi\next@}}}
  1063. \newif\ifnot@
  1064. {\uccode`5=`\\ \uccode`6=`n \uccode`7=`o \uccode`8=`t
  1065.  \uppercase{\gdef\not@#1#2#3#4{\relaxnext@
  1066.   \DNii@##1\not@{\ifx\space@\next\global\not@true\fi}%
  1067.  \global\not@false\DN@##1\not@{}%
  1068.  \ifx 5#1\ifx 6#2\ifx 7#3\ifx 8#4\DN@{\FN@\nextii@}\fi\fi\fi
  1069.  \fi\next@}}}
  1070. \newif\ifkeybin@
  1071. \def\keybin@{\keybin@true
  1072.  \ifx\next+\else\ifx\next=\else\ifx\next<\else\ifx\next>\else\ifx\next-\else
  1073.  \ifx\next*\else\ifx\next:\else\keybin@false\fi\fi\fi\fi\fi\fi\fi}
  1074. \def\dots{\RIfM@\expandafter\mdots@\else\expandafter\tdots@\fi}
  1075. \def\tdots@{\unskip\relaxnext@
  1076.  \DN@{$\m@th\mathinner{\ldotp\ldotp\ldotp}\,
  1077.    \ifx\next,\,$\else\ifx\next.\,$\else\ifx\next;\,$\else\ifx\next:\,$\else
  1078.    \ifx\next?\,$\else\ifx\next!\,$\else$ \fi\fi\fi\fi\fi\fi}%
  1079.  \ \FN@\next@}
  1080. \def\mdots@{\FN@\mdots@@}
  1081. \def\mdots@@{\gdef\thedots@{\dotso@}%                                       %1
  1082.  \ifx\next\boldkey\gdef\thedots@\boldkey{\boldkeydots@}\else                %2
  1083.  \ifx\next\boldsymbol\gdef\thedots@\boldsymbol{\boldsymboldots@}\else       %3
  1084.  \ifx,\next\gdef\thedots@{\dotsc}%                                          %4
  1085.  \else\ifx\not\next\gdef\thedots@{\dotsb@}%                                 %5
  1086.  \else\keybin@
  1087.  \ifkeybin@\gdef\thedots@{\dotsb@}%                                         %6
  1088.  \else\xdef\meaning@{\meaning\next..........}\xdef\meaning@@{\meaning@}%    %7
  1089.   \expandafter\math@\meaning@\math@
  1090.   \ifmath@
  1091.    \expandafter\mathch@\meaning@\mathch@
  1092.    \ifmathch@\expandafter\getmathch@\meaning@\getmathch@\fi                 %8
  1093.   \else\expandafter\macro@\meaning@@\macro@                                 %9
  1094.   \ifmacro@                                                                %10
  1095.    \expandafter\not@\meaning@\not@\ifnot@\gdef\thedots@{\dotsb@}%          %11
  1096.   \else\expandafter\DOTS@\meaning@\DOTS@
  1097.   \ifDOTS@
  1098.    \ifcase\number\DOTSCASE@\gdef\thedots@{\dotsb@}%
  1099.     \or\gdef\thedots@{\dotsi}\else\fi                                      %12
  1100.   \else\expandafter\math@\meaning@\math@                                   %13
  1101.   \ifmath@\expandafter\mathbin@\meaning@\mathbin@
  1102.   \ifmathbin@\gdef\thedots@{\dotsb@}%                                      %14
  1103.   \else\expandafter\mathrel@\meaning@\mathrel@
  1104.   \ifmathrel@\gdef\thedots@{\dotsb@}%                                      %15
  1105.   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  1106.  \thedots@}
  1107. \def\plainldots@{\mathinner{\ldotp\ldotp\ldotp}}
  1108. \def\plaincdots@{\mathinner{\cdotp\cdotp\cdotp}}
  1109. \def\dotsi{\!\plaincdots@}
  1110. \let\dotsb@\plaincdots@
  1111. \newif\ifextra@
  1112. \newif\ifrightdelim@
  1113. \def\rightdelim@{\global\rightdelim@true                                    %1
  1114.  \ifx\next)\else                                                            %2
  1115.  \ifx\next]\else
  1116.  \ifx\next\rbrack\else
  1117.  \ifx\next\}\else
  1118.  \ifx\next\rbrace\else
  1119.  \ifx\next\rangle\else
  1120.  \ifx\next\rceil\else
  1121.  \ifx\next\rfloor\else
  1122.  \ifx\next\rgroup\else
  1123.  \ifx\next\rmoustache\else
  1124.  \ifx\next\right\else
  1125.  \ifx\next\bigr\else
  1126.  \ifx\next\biggr\else
  1127.  \ifx\next\Bigr\else                                                        %3
  1128.  \ifx\next\Biggr\else\global\rightdelim@false
  1129.  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
  1130. \def\extra@{%
  1131.  \global\extra@false\rightdelim@\ifrightdelim@\global\extra@true            %1
  1132.  \else\ifx\next$\global\extra@true                                          %2
  1133.  \else\xdef\meaning@{\meaning\next..........}%                              %3
  1134.  \expandafter\macro@\meaning@\macro@\ifmacro@                               %4
  1135.  \expandafter\DOTS@\meaning@\DOTS@
  1136.  \ifDOTS@
  1137.  \ifnum\DOTSCASE@=\tw@\global\extra@true                                    %5
  1138.  \fi\fi\fi\fi\fi}
  1139. \newif\ifbold@
  1140. \def\dotso@{\relaxnext@
  1141.  \ifbold@
  1142.   \let\next\delayed@
  1143.   \DNii@{\extra@\plainldots@\ifextra@\,\fi}%
  1144.  \else
  1145.   \DNii@{\DN@{\extra@\plainldots@\ifextra@\,\fi}\FN@\next@}%
  1146.  \fi
  1147.  \nextii@}
  1148. \def\extrap@#1{%
  1149.  \ifx\next,\DN@{#1\,}\else
  1150.  \ifx\next;\DN@{#1\,}\else
  1151.  \ifx\next.\DN@{#1\,}\else\extra@
  1152.  \ifextra@\DN@{#1\,}\else
  1153.  \let\next@#1\fi\fi\fi\fi\next@}
  1154. \def\ldots{\DN@{\extrap@\plainldots@}%
  1155.  \FN@\next@}
  1156. \def\cdots{\DN@{\extrap@\plaincdots@}%
  1157.  \FN@\next@}
  1158. \let\dotso\ldots
  1159. \let\dotsb\cdots
  1160. \let\dotsm\dotsb
  1161. \def\dotsc{\relaxnext@
  1162.  \DN@{\ifx\next;\plainldots@\,\else
  1163.   \ifx\next.\plainldots@\,\else\extra@\plainldots@
  1164.   \ifextra@\,\fi\fi\fi}%
  1165.  \FN@\next@}
  1166. \def\cdot{\mathchar"2201 }
  1167. \def\longrightarrow{\DOTSB\relbar\joinrel\rightarrow}
  1168. \def\Longrightarrow{\DOTSB\Relbar\joinrel\Rightarrow}
  1169. \def\longleftarrow{\DOTSB\leftarrow\joinrel\relbar}
  1170. \def\Longleftarrow{\DOTSB\Leftarrow\joinrel\Relbar}
  1171. \def\longleftrightarrow{\DOTSB\leftarrow\joinrel\rightarrow}
  1172. \def\Longleftrightarrow{\DOTSB\Leftarrow\joinrel\Rightarrow}
  1173. \def\mapsto{\DOTSB\mapstochar\rightarrow}
  1174. \def\longmapsto{\DOTSB\mapstochar\longrightarrow}
  1175. \def\hookrightarrow{\DOTSB\lhook\joinrel\rightarrow}
  1176. \def\hookleftarrow{\DOTSB\leftarrow\joinrel\rhook}
  1177. \def\doteq{\DOTSB\buildrel\textstyle.\over=}
  1178. \def\iff{\DOTSB\;\Longleftrightarrow\;}
  1179. \message{special superscripts,}
  1180. \def\dddot#1{{\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
  1181.  \hbox{\rm...}\vss}}}}
  1182. \def\ddddot#1{{\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
  1183.  \hbox{\rm....}\vss}}}}
  1184. \def\sphat{^{\mathchoice{}{}%
  1185.  {\,\,\botsmash{\hbox{\lower4\ex@\hbox{$\m@th\widehat{\null}$}}}}%
  1186.  {\,\botsmash{\hbox{\lower3\ex@\hbox{$\m@th\hat{\null}$}}}}}}
  1187. \def\spcheck{^\vee}
  1188. \def\sptilde{^\sim}
  1189. \def\spacute{^{\!\botsmash{\hbox{\lower\@ne ex\hbox{\'{}}}}}}
  1190. \def\spgrave{^{\mathchoice{}{}{}{\!}%
  1191.  \botsmash{\hbox{\lower\@ne ex\hbox{\`{}}}}}}
  1192. \def\spdot{^{\hbox{\raise\ex@\hbox{\rm.}}}}
  1193. \def\spddot{^{\hbox{\raise\ex@\hbox{\rm..}}}}
  1194. \def\spdddot{^{\hbox{\raise\ex@\hbox{\rm...}}}}
  1195. \def\spddddot{^{\hbox{\raise\ex@\hbox{\rm....}}}}
  1196. \def\spbreve{^{\!\botsmash{\hbox{\lower4\ex@\hbox{\u{}}}}}}
  1197. \def\spbar{^-}
  1198. \def\spvec{^\rightarrow}
  1199. \message{\string\text,}
  1200. \def\textonlyfont@#1#2{\def#1{\RIfM@
  1201.  \Err@{Use \string#1\space only in text}\else#2\fi}}
  1202. \textonlyfont@\rm\tenrm
  1203. \textonlyfont@\it\tenit
  1204. \textonlyfont@\sl\tensl
  1205. \textonlyfont@\bf\tenbf
  1206. \def\oldnos#1{\RIfM@{\mathcode`\,="013B \fam\@ne#1}\else
  1207.  \leavevmode\hbox{$\m@th\mathcode`\,="013B \fam\@ne#1$}\fi}
  1208. \def\text{\RIfM@\expandafter\text@\else\expandafter\text@@\fi}
  1209. \def\text@@#1{\leavevmode\hbox{#1}}
  1210. \def\mathhexbox@#1#2#3{\text{$\m@th\mathchar"#1#2#3$}}
  1211. \def\dag{{\mathhexbox@279}}
  1212. \def\ddag{{\mathhexbox@27A}}
  1213. \def\S{{\mathhexbox@278}}
  1214. \def\P{{\mathhexbox@27B}}
  1215. \newif\iffirstchoice@
  1216. \firstchoice@true
  1217. \def\text@#1{\mathchoice
  1218.  {\hbox{\everymath{\displaystyle}\def\textfonti{\the\textfont\@ne}%
  1219.   \def\textfontii{\the\textfont\tw@}\textdef@@ T#1}}
  1220.  {\hbox{\firstchoice@false
  1221.   \everymath{\textstyle}\def\textfonti{\the\textfont\@ne}%
  1222.   \def\textfontii{\the\textfont\tw@}\textdef@@ T#1}}
  1223.  {\hbox{\firstchoice@false
  1224.   \everymath{\scriptstyle}\def\textfonti{\the\scriptfont\@ne}%
  1225.   \def\textfontii{\the\scriptfont\tw@}\textdef@@ S\rm#1}}
  1226.  {\hbox{\firstchoice@false
  1227.   \everymath{\scriptscriptstyle}\def\textfonti
  1228.   {\the\scriptscriptfont\@ne}%
  1229.   \def\textfontii{\the\scriptscriptfont\tw@}\textdef@@ s\rm#1}}}
  1230. \def\textdef@@#1{\textdef@#1\rm\textdef@#1\bf\textdef@#1\sl\textdef@#1\it}
  1231. \def\rmfam{0}
  1232. \def\textdef@#1#2{%
  1233.  \DN@{\csname\expandafter\eat@\string#2fam\endcsname}%
  1234.  \if S#1\edef#2{\the\scriptfont\next@\relax}%
  1235.  \else\if s#1\edef#2{\the\scriptscriptfont\next@\relax}%
  1236.  \else\edef#2{\the\textfont\next@\relax}\fi\fi}
  1237. \scriptfont\itfam\tenit \scriptscriptfont\itfam\tenit
  1238. \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
  1239. \newif\iftopfolded@
  1240. \newif\ifbotfolded@
  1241. \def\topfoldedtext{\topfolded@true\botfolded@false\foldedtext@}
  1242. \def\botfoldedtext{\botfolded@true\topfolded@false\foldedtext@}
  1243. \def\foldedtext{\topfolded@false\botfolded@false\foldedtext@}
  1244. \Invalid@\foldedwidth
  1245. \def\foldedtext@{\relaxnext@
  1246.  \DN@{\ifx\next\foldedwidth\let\next@\nextii@\else
  1247.   \DN@{\nextii@\foldedwidth{.3\hsize}}\fi\next@}%
  1248.  \DNii@\foldedwidth##1##2{\setbox\z@\vbox
  1249.   {\normalbaselines\hsize##1\relax
  1250.   \tolerance1600 \noindent\ignorespaces##2}\ifbotfolded@\boxz@\else
  1251.   \iftopfolded@\vtop{\unvbox\z@}\else\vcenter{\boxz@}\fi\fi}%
  1252.  \FN@\next@}
  1253. \message{math font commands,}
  1254. \def\bold{\RIfM@\expandafter\bold@\else
  1255.  \expandafter\nonmatherr@\expandafter\bold\fi}
  1256. \def\bold@#1{{\bold@@{#1}}}
  1257. \def\bold@@#1{\fam\bffam\relax#1}
  1258. \def\slanted{\RIfM@\expandafter\slanted@\else
  1259.  \expandafter\nonmatherr@\expandafter\slanted\fi}
  1260. \def\slanted@#1{{\slanted@@{#1}}}
  1261. \def\slanted@@#1{\fam\slfam\relax#1}
  1262. \def\roman{\RIfM@\expandafter\roman@\else
  1263.  \expandafter\nonmatherr@\expandafter\roman\fi}
  1264. \def\roman@#1{{\roman@@{#1}}}
  1265. \def\roman@@#1{\fam\rmfam\relax#1}
  1266. \def\italic{\RIfM@\expandafter\italic@\else
  1267.  \expandafter\nonmatherr@\expandafter\italic\fi}
  1268. \def\italic@#1{{\italic@@{#1}}}
  1269. \def\italic@@#1{\fam\itfam\relax#1}
  1270. \def\Cal{\RIfM@\expandafter\Cal@\else
  1271.  \expandafter\nonmatherr@\expandafter\Cal\fi}
  1272. \def\Cal@#1{{\Cal@@{#1}}}
  1273. \def\Cal@@#1{\noaccents@\fam\tw@#1}
  1274. \mathchardef\Gamma="0000
  1275. \mathchardef\Delta="0001
  1276. \mathchardef\Theta="0002
  1277. \mathchardef\Lambda="0003
  1278. \mathchardef\Xi="0004
  1279. \mathchardef\Pi="0005
  1280. \mathchardef\Sigma="0006
  1281. \mathchardef\Upsilon="0007
  1282. \mathchardef\Phi="0008
  1283. \mathchardef\Psi="0009
  1284. \mathchardef\Omega="000A
  1285. \mathchardef\varGamma="0100
  1286. \mathchardef\varDelta="0101
  1287. \mathchardef\varTheta="0102
  1288. \mathchardef\varLambda="0103
  1289. \mathchardef\varXi="0104
  1290. \mathchardef\varPi="0105
  1291. \mathchardef\varSigma="0106
  1292. \mathchardef\varUpsilon="0107
  1293. \mathchardef\varPhi="0108
  1294. \mathchardef\varPsi="0109
  1295. \mathchardef\varOmega="010A
  1296. \let\alloc@@\alloc@
  1297. \def\hexnumber@#1{\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or
  1298.  9\or A\or B\or C\or D\or E\or F\fi}
  1299. \def\loadmsam{%
  1300.  \font@\tenmsa=msam10
  1301.  \font@\sevenmsa=msam7
  1302.  \font@\fivemsa=msam5
  1303.  \alloc@@8\fam\chardef\sixt@@n\msafam
  1304.  \textfont\msafam=\tenmsa
  1305.  \scriptfont\msafam=\sevenmsa
  1306.  \scriptscriptfont\msafam=\fivemsa
  1307.  \edef\next{\hexnumber@\msafam}%
  1308.  \mathchardef\dabar@"0\next39
  1309.  \edef\dashrightarrow{\mathrel{\dabar@\dabar@\mathchar"0\next4B}}%
  1310.  \edef\dashleftarrow{\mathrel{\mathchar"0\next4C\dabar@\dabar@}}%
  1311.  \let\dasharrow\dashrightarrow
  1312.  \edef\ulcorner{\delimiter"4\next70\next70 }%
  1313.  \edef\urcorner{\delimiter"5\next71\next71 }%
  1314.  \edef\llcorner{\delimiter"4\next78\next78 }%
  1315.  \edef\lrcorner{\delimiter"5\next79\next79 }%
  1316.  \edef\yen{{\noexpand\mathhexbox@\next55}}%
  1317.  \edef\checkmark{{\noexpand\mathhexbox@\next58}}%
  1318.  \edef\circledR{{\noexpand\mathhexbox@\next72}}%
  1319.  \edef\maltese{{\noexpand\mathhexbox@\next7A}}%
  1320.  \global\let\loadmsam\empty}%
  1321. \def\loadmsbm{%
  1322.  \font@\tenmsb=msbm10 \font@\sevenmsb=msbm7 \font@\fivemsb=msbm5
  1323.  \alloc@@8\fam\chardef\sixt@@n\msbfam
  1324.  \textfont\msbfam=\tenmsb
  1325.  \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb
  1326.  \global\let\loadmsbm\empty
  1327.  }
  1328. \def\widehat#1{\ifx\undefined\msbfam \DN@{362}%
  1329.   \else \setboxz@h{$\m@th#1$}%
  1330.     \edef\next@{\ifdim\wdz@>\tw@ em%
  1331.         \hexnumber@\msbfam 5B%
  1332.       \else 362\fi}\fi
  1333.   \mathaccent"0\next@{#1}}
  1334. \def\widetilde#1{\ifx\undefined\msbfam \DN@{365}%
  1335.   \else \setboxz@h{$\m@th#1$}%
  1336.     \edef\next@{\ifdim\wdz@>\tw@ em%
  1337.         \hexnumber@\msbfam 5D%
  1338.       \else 365\fi}\fi
  1339.   \mathaccent"0\next@{#1}}
  1340. \message{\string\newsymbol,}
  1341. \def\newsymbol#1#2#3#4#5{\define#1{}%
  1342.   \count@#2\relax \advance\count@\m@ne % to push case 0 to the \else clause
  1343.  \ifcase\count@
  1344.    \ifx\undefined\msafam\loadmsam\fi \let\next@\msafam
  1345.  \or \ifx\undefined\msbfam\loadmsbm\fi \let\next@\msbfam
  1346.  \else  \Err@{\Invalid@@\string\newsymbol}\let\next@\tw@\fi
  1347.  \mathchardef#1="#3\hexnumber@\next@#4#5\space}
  1348. \def\UseAMSsymbols{\loadmsam\loadmsbm \input amssym.tex }
  1349. \def\Bbb{\RIfM@\expandafter\Bbb@\else
  1350.  \expandafter\nonmatherr@\expandafter\Bbb\fi}
  1351. \def\Bbb@#1{{\Bbb@@{#1}}}
  1352. \def\Bbb@@#1{\noaccents@\fam\msbfam\relax#1}
  1353. \message{bold Greek and bold symbols,}
  1354. \def\loadbold{%
  1355.  \font@\tencmmib=cmmib10 \font@\sevencmmib=cmmib7 \font@\fivecmmib=cmmib5
  1356.  \skewchar\tencmmib'177 \skewchar\sevencmmib'177 \skewchar\fivecmmib'177
  1357.  \alloc@@8\fam\chardef\sixt@@n\cmmibfam
  1358.  \textfont\cmmibfam\tencmmib
  1359.  \scriptfont\cmmibfam\sevencmmib \scriptscriptfont\cmmibfam\fivecmmib
  1360.  \font@\tencmbsy=cmbsy10 \font@\sevencmbsy=cmbsy7 \font@\fivecmbsy=cmbsy5
  1361.  \skewchar\tencmbsy'60 \skewchar\sevencmbsy'60 \skewchar\fivecmbsy'60
  1362.  \alloc@@8\fam\chardef\sixt@@n\cmbsyfam
  1363.  \textfont\cmbsyfam\tencmbsy
  1364.  \scriptfont\cmbsyfam\sevencmbsy \scriptscriptfont\cmbsyfam\fivecmbsy
  1365.  \let\loadbold\empty
  1366. }
  1367. \def\boldnotloaded#1{\Err@{\ifcase#1\or First\else Second\fi
  1368.        bold symbol font not loaded}}
  1369. \def\mathchari@#1#2#3{\ifx\undefined\cmmibfam
  1370.     \boldnotloaded@\@ne
  1371.   \else\mathchar"#1\hexnumber@\cmmibfam#2#3\space \fi}
  1372. \def\mathcharii@#1#2#3{\ifx\undefined\cmbsyfam
  1373.     \boldnotloaded\tw@
  1374.   \else \mathchar"#1\hexnumber@\cmbsyfam#2#3\space\fi}
  1375. \edef\bffam@{\hexnumber@\bffam}
  1376. \def\boldkey#1{\ifcat\noexpand#1A%
  1377.   \ifx\undefined\cmmibfam \boldnotloaded\@ne
  1378.   \else {\fam\cmmibfam#1}\fi
  1379.  \else
  1380.  \ifx#1!\mathchar"5\bffam@21 \else
  1381.  \ifx#1(\mathchar"4\bffam@28 \else\ifx#1)\mathchar"5\bffam@29 \else
  1382.  \ifx#1+\mathchar"2\bffam@2B \else\ifx#1:\mathchar"3\bffam@3A \else
  1383.  \ifx#1;\mathchar"6\bffam@3B \else\ifx#1=\mathchar"3\bffam@3D \else
  1384.  \ifx#1?\mathchar"5\bffam@3F \else\ifx#1[\mathchar"4\bffam@5B \else
  1385.  \ifx#1]\mathchar"5\bffam@5D \else
  1386.  \ifx#1,\mathchari@63B \else
  1387.  \ifx#1-\mathcharii@200 \else
  1388.  \ifx#1.\mathchari@03A \else
  1389.  \ifx#1/\mathchari@03D \else
  1390.  \ifx#1<\mathchari@33C \else
  1391.  \ifx#1>\mathchari@33E \else
  1392.  \ifx#1*\mathcharii@203 \else
  1393.  \ifx#1|\mathcharii@06A \else
  1394.  \ifx#10\bold0\else\ifx#11\bold1\else\ifx#12\bold2\else\ifx#13\bold3\else
  1395.  \ifx#14\bold4\else\ifx#15\bold5\else\ifx#16\bold6\else\ifx#17\bold7\else
  1396.  \ifx#18\bold8\else\ifx#19\bold9\else
  1397.   \Err@{\string\boldkey\space can't be used with #1}%
  1398.  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  1399.  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
  1400. \def\boldsymbol#1{%
  1401.  \DN@{\Err@{You can't use \string\boldsymbol\space with \string#1}#1}%
  1402.  \ifcat\noexpand#1A%
  1403.    \let\next@\relax
  1404.    \ifx\undefined\cmmibfam \boldnotloaded\@ne
  1405.    \else {\fam\cmmibfam#1}\fi
  1406.  \else
  1407.   \xdef\meaning@{\meaning#1.........}%
  1408.   \expandafter\math@\meaning@\math@
  1409.   \ifmath@
  1410.    \expandafter\mathch@\meaning@\mathch@
  1411.    \ifmathch@
  1412.     \expandafter\boldsymbol@@\meaning@\boldsymbol@@
  1413.    \fi
  1414.   \else
  1415.    \expandafter\macro@\meaning@\macro@
  1416.    \expandafter\delim@\meaning@\delim@
  1417.    \ifdelim@
  1418.     \expandafter\delim@@\meaning@\delim@@
  1419.    \else
  1420.     \boldsymbol@{#1}%
  1421.    \fi
  1422.   \fi
  1423.  \fi
  1424.  \next@}
  1425. \def\mathhexboxii@#1#2{\ifx\undefined\cmbsyfam
  1426.     \boldnotloaded\tw@
  1427.   \else \mathhexbox@{\hexnumber@\cmbsyfam}{#1}{#2}\fi}
  1428. \def\boldsymbol@#1{\let\next@\relax\let\next#1%
  1429.  \ifx\next\cdot\mathcharii@201 \else
  1430.  \ifx\next\prime{{\null\mathcharii@030 \null}}\else
  1431.  \ifx\next\lbrack\mathchar"4\bffam@5B \else
  1432.  \ifx\next\rbrack\mathchar"5\bffam@5D \else
  1433.  \ifx\next\{\mathcharii@466 \else
  1434.  \ifx\next\lbrace\mathcharii@466 \else
  1435.  \ifx\next\}\mathcharii@567 \else
  1436.  \ifx\next\rbrace\mathcharii@567 \else
  1437.  \ifx\next\surd{{\mathcharii@170}}\else
  1438.  \ifx\next\S{{\mathhexboxii@78}}\else
  1439.  \ifx\next\P{{\mathhexboxii@7B}}\else
  1440.  \ifx\next\dag{{\mathhexboxii@79}}\else
  1441.  \ifx\next\ddag{{\mathhexboxii@7A}}\else
  1442.  \DN@{\Err@{You can't use \string\boldsymbol\space with \string#1}#1}%
  1443.  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
  1444. \def\boldsymbol@@#1.#2\boldsymbol@@{\classnum@#1 \count@@@\classnum@        %1
  1445.  \divide\classnum@4096 \count@\classnum@                                    %2
  1446.  \multiply\count@4096 \advance\count@@@-\count@ \count@@\count@@@           %3
  1447.  \divide\count@@@\@cclvi \count@\count@@                                    %4
  1448.  \multiply\count@@@\@cclvi \advance\count@@-\count@@@                       %5
  1449.  \divide\count@@@\@cclvi                                                    %6
  1450.  \multiply\classnum@4096 \advance\classnum@\count@@                         %7
  1451.  \ifnum\count@@@=\z@                                                        %8
  1452.   \count@"\bffam@ \multiply\count@\@cclvi
  1453.   \advance\classnum@\count@
  1454.   \DN@{\mathchar\number\classnum@}%
  1455.  \else
  1456.   \ifnum\count@@@=\@ne                                                      %9
  1457.    \ifx\undefined\cmmibfam \DN@{\boldnotloaded\@ne}%
  1458.    \else \count@\cmmibfam \multiply\count@\@cclvi
  1459.      \advance\classnum@\count@
  1460.      \DN@{\mathchar\number\classnum@}\fi
  1461.   \else
  1462.    \ifnum\count@@@=\tw@                                                    %10
  1463.      \ifx\undefined\cmbsyfam
  1464.        \DN@{\boldnotloaded\tw@}%
  1465.      \else
  1466.        \count@\cmbsyfam \multiply\count@\@cclvi
  1467.        \advance\classnum@\count@
  1468.        \DN@{\mathchar\number\classnum@}%
  1469.      \fi
  1470.   \fi
  1471.  \fi
  1472. \fi}
  1473. \newif\ifdelim@
  1474. \newcount\delimcount@
  1475. {\uccode`6=`\\ \uccode`7=`d \uccode`8=`e \uccode`9=`l
  1476.  \uppercase{\gdef\delim@#1#2#3#4#5\delim@
  1477.   {\delim@false\ifx 6#1\ifx 7#2\ifx 8#3\ifx 9#4\delim@true
  1478.    \xdef\meaning@{#5}\fi\fi\fi\fi}}}
  1479. \def\delim@@#1"#2#3#4#5#6\delim@@{\if#32%
  1480. \let\next@\relax
  1481.  \ifx\undefined\cmbsyfam \boldnotloaded\@ne
  1482.  \else \mathcharii@#2#4#5\space \fi\fi}
  1483. \def\vert{\delimiter"026A30C }
  1484. \def\Vert{\delimiter"026B30D }
  1485. \let\|\Vert
  1486. \def\backslash{\delimiter"026E30F }
  1487. \def\boldkeydots@#1{\bold@true\let\next=#1\let\delayed@=#1\mdots@@
  1488.  \boldkey#1\bold@false}  % = required!
  1489. \def\boldsymboldots@#1{\bold@true\let\next#1\let\delayed@#1\mdots@@
  1490.  \boldsymbol#1\bold@false}
  1491. \message{Euler fonts,}
  1492. \def\loadeufm{\loadmathfont{eufm}}
  1493. \def\loadeufb{\loadmathfont{eufb}}
  1494. \def\loadeusm{\loadmathfont{eusm}}
  1495. \def\loadeusb{\loadmathfont{eusb}}
  1496. \def\loadeurm{\loadmathfont{eurm}}
  1497. \def\loadeurb{\loadmathfont{eurb}}
  1498. \def\frak{\mathfont@\frak}
  1499. \def\frakfam{\eufmfam}
  1500. \let\goth\frak
  1501. \def\loadmathfont#1{% 
  1502.    \expandafter\font@\csname ten#1\endcsname=#110
  1503.    \expandafter\font@\csname seven#1\endcsname=#17
  1504.    \expandafter\font@\csname five#1\endcsname=#15
  1505.    \edef\next{\noexpand\alloc@@8\fam\chardef\sixt@@n
  1506.      \expandafter\noexpand\csname#1fam\endcsname}%
  1507.    \next
  1508.    \textfont\csname#1fam\endcsname \csname ten#1\endcsname
  1509.    \scriptfont\csname#1fam\endcsname \csname seven#1\endcsname
  1510.    \scriptscriptfont\csname#1fam\endcsname \csname five#1\endcsname
  1511.    \expandafter\def\csname #1\expandafter\endcsname\expandafter{%
  1512.       \expandafter\mathfont@\csname#1\endcsname}%
  1513.  \expandafter\gdef\csname load#1\endcsname{}%
  1514. }
  1515. \def\mathfont@#1{\RIfM@\expandafter\mathfont@@\expandafter#1\else
  1516.   \expandafter\nonmatherr@\expandafter#1\fi}
  1517. \def\mathfont@@#1#2{{\mathfont@@@#1{#2}}}
  1518. \def\mathfont@@@#1#2{\noaccents@
  1519.    \fam\csname\expandafter\eat@\string#1fam\endcsname
  1520.    \relax#2}
  1521. \message{math accents,}
  1522. \def\accentclass@{7}
  1523. \def\noaccents@{\def\accentclass@{0}}
  1524. \def\makeacc@#1#2{\def#1{\mathaccent"\accentclass@#2 }}
  1525. \makeacc@\hat{05E}
  1526. \makeacc@\check{014}
  1527. \makeacc@\tilde{07E}
  1528. \makeacc@\acute{013}
  1529. \makeacc@\grave{012}
  1530. \makeacc@\dot{05F}
  1531. \makeacc@\ddot{07F}
  1532. \makeacc@\breve{015}
  1533. \makeacc@\bar{016}
  1534. \def\vec{\mathaccent"017E }
  1535. \newcount\skewcharcount@
  1536. \newcount\familycount@
  1537. \def\theskewchar@{\familycount@\@ne
  1538.  \global\skewcharcount@\the\skewchar\textfont\@ne                           %1
  1539.  \ifnum\fam>\m@ne\ifnum\fam<16
  1540.   \global\familycount@\the\fam\relax
  1541.   \global\skewcharcount@\the\skewchar\textfont\the\fam\relax\fi\fi          %2
  1542.  \ifnum\skewcharcount@>\m@ne
  1543.   \ifnum\skewcharcount@<128
  1544.   \multiply\familycount@256
  1545.   \global\advance\skewcharcount@\familycount@
  1546.   \global\advance\skewcharcount@28672
  1547.   \mathchar\skewcharcount@\else
  1548.   \global\skewcharcount@\m@ne\fi\else
  1549.  \global\skewcharcount@\m@ne\fi}                                            %3
  1550. \newcount\pointcount@
  1551. \def\getpoints@#1.#2\getpoints@{\pointcount@#1 }
  1552. \newdimen\accentdimen@
  1553. \newcount\accentmu@
  1554. \def\dimentomu@{\multiply\accentdimen@ 100
  1555.  \expandafter\getpoints@\the\accentdimen@\getpoints@
  1556.  \multiply\pointcount@18
  1557.  \divide\pointcount@\@m
  1558.  \global\accentmu@\pointcount@}
  1559. \def\Makeacc@#1#2{\def#1{\RIfM@\DN@{\mathaccent@
  1560.  {"\accentclass@#2 }}\else\DN@{\nonmatherr@{#1}}\fi\next@}}
  1561. \def\unbracefonts@{\let\Cal@\Cal@@\let\roman@\roman@@\let\bold@\bold@@
  1562.  \let\slanted@\slanted@@}
  1563. \def\mathaccent@#1#2{\ifnum\fam=\m@ne\xdef\thefam@{1}\else
  1564.  \xdef\thefam@{\the\fam}\fi                                                 %1
  1565.  \accentdimen@\z@                                                           %2
  1566.  \setboxz@h{\unbracefonts@$\m@th\fam\thefam@\relax#2$}%                     %3
  1567.  \ifdim\accentdimen@=\z@\DN@{\mathaccent#1{#2}}%                            %4
  1568.   \setbox@ne\hbox{\unbracefonts@$\m@th\fam\thefam@\relax#2\theskewchar@$}% %5a
  1569.   \setbox\tw@\hbox{$\m@th\ifnum\skewcharcount@=\m@ne\else
  1570.    \mathchar\skewcharcount@\fi$}%                                          %5b
  1571.   \global\accentdimen@\wd@ne\global\advance\accentdimen@-\wdz@
  1572.   \global\advance\accentdimen@-\wd\tw@                                     %5c
  1573.   \global\multiply\accentdimen@\tw@
  1574.   \dimentomu@\global\advance\accentmu@\@ne                                 %5d
  1575.  \else\DN@{{\mathaccent#1{#2\mkern\accentmu@ mu}%
  1576.     \mkern-\accentmu@ mu}{}}\fi                                             %6
  1577.  \next@}\Makeacc@\Hat{05E}
  1578. \Makeacc@\Check{014}
  1579. \Makeacc@\Tilde{07E}
  1580. \Makeacc@\Acute{013}
  1581. \Makeacc@\Grave{012}
  1582. \Makeacc@\Dot{05F}
  1583. \Makeacc@\Ddot{07F}
  1584. \Makeacc@\Breve{015}
  1585. \Makeacc@\Bar{016}
  1586. \def\Vec{\RIfM@\DN@{\mathaccent@{"017E }}\else
  1587.  \DN@{\nonmatherr@\Vec}\fi\next@}
  1588. \def\accentedsymbol#1#2{\csname newbox\expandafter\endcsname
  1589.   \csname\expandafter\eat@\string#1@box\endcsname
  1590.  \expandafter\setbox\csname\expandafter\eat@
  1591.   \string#1@box\endcsname\hbox{$\m@th#2$}\define
  1592.   #1{\copy\csname\expandafter\eat@\string#1@box\endcsname{}}}
  1593. \message{roots,}
  1594. \def\sqrt#1{\radical"270370 {#1}}
  1595. \let\underline@\underline
  1596. \let\overline@\overline
  1597. \def\underline#1{\underline@{#1}}
  1598. \def\overline#1{\overline@{#1}}
  1599. \Invalid@\leftroot
  1600. \Invalid@\uproot
  1601. \newcount\uproot@
  1602. \newcount\leftroot@
  1603. \def\root{\relaxnext@
  1604.   \DN@{\ifx\next\uproot\let\next@\nextii@\else
  1605.    \ifx\next\leftroot\let\next@\nextiii@\else
  1606.    \let\next@\plainroot@\fi\fi\next@}%
  1607.   \DNii@\uproot##1{\uproot@##1\relax\FN@\nextiv@}%
  1608.   \def\nextiv@{\ifx\next\space@\DN@. {\FN@\nextv@}\else
  1609.    \DN@.{\FN@\nextv@}\fi\next@.}%
  1610.   \def\nextv@{\ifx\next\leftroot\let\next@\nextvi@\else
  1611.    \let\next@\plainroot@\fi\next@}%
  1612.   \def\nextvi@\leftroot##1{\leftroot@##1\relax\plainroot@}%
  1613.    \def\nextiii@\leftroot##1{\leftroot@##1\relax\FN@\nextvii@}%
  1614.   \def\nextvii@{\ifx\next\space@
  1615.    \DN@. {\FN@\nextviii@}\else
  1616.    \DN@.{\FN@\nextviii@}\fi\next@.}%
  1617.   \def\nextviii@{\ifx\next\uproot\let\next@\nextix@\else
  1618.    \let\next@\plainroot@\fi\next@}%
  1619.   \def\nextix@\uproot##1{\uproot@##1\relax\plainroot@}%
  1620.   \bgroup\uproot@\z@\leftroot@\z@\FN@\next@}
  1621. \def\plainroot@#1\of#2{\setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}%
  1622.  \mathchoice{\r@@t\displaystyle{#2}}{\r@@t\textstyle{#2}}
  1623.  {\r@@t\scriptstyle{#2}}{\r@@t\scriptscriptstyle{#2}}\egroup}
  1624. \def\r@@t#1#2{\setboxz@h{$\m@th#1\sqrt{#2}$}%
  1625.  \dimen@\ht\z@\advance\dimen@-\dp\z@
  1626.  \setbox@ne\hbox{$\m@th#1\mskip\uproot@ mu$}\advance\dimen@ 1.667\wd@ne
  1627.  \mkern-\leftroot@ mu\mkern5mu\raise.6\dimen@\copy\rootbox
  1628.  \mkern-10mu\mkern\leftroot@ mu\boxz@}
  1629. \def\boxed#1{\setboxz@h{$\m@th\displaystyle{#1}$}\dimen@.4\ex@
  1630.  \advance\dimen@3\ex@\advance\dimen@\dp\z@
  1631.  \hbox{\lower\dimen@\hbox{%
  1632.  \vbox{\hrule height.4\ex@
  1633.  \hbox{\vrule width.4\ex@\hskip3\ex@\vbox{\vskip3\ex@\boxz@\vskip3\ex@}%
  1634.  \hskip3\ex@\vrule width.4\ex@}\hrule height.4\ex@}%
  1635.  }}}
  1636. \message{commutative diagrams,}
  1637. \let\ampersand@\relax
  1638. \newdimen\minaw@
  1639. \minaw@11.11128\ex@
  1640. \newdimen\minCDaw@
  1641. \minCDaw@2.5pc
  1642. \def\minCDarrowwidth#1{\RIfMIfI@\onlydmatherr@\minCDarrowwidth
  1643.  \else\minCDaw@#1\relax\fi\else\onlydmatherr@\minCDarrowwidth\fi}
  1644. \newif\ifCD@
  1645. \def\CD{\bgroup\vspace@\relax\iffalse{\fi\let\ampersand@&\iffalse}\fi
  1646.  \CD@true\vcenter\bgroup\Let@\tabskip\z@skip\baselineskip20\ex@
  1647.  \lineskip3\ex@\lineskiplimit3\ex@\halign\bgroup
  1648.  &\hfill$\m@th##$\hfill\crcr}
  1649. \def\endCD{\crcr\egroup\egroup\egroup}
  1650. \newdimen\bigaw@
  1651. \atdef@>#1>#2>{\ampersand@                                                  %1
  1652.  \setboxz@h{$\m@th\ssize\;{#1}\;\;$}%                                       %2
  1653.  \setbox@ne\hbox{$\m@th\ssize\;{#2}\;\;$}%                                  %3
  1654.  \setbox\tw@\hbox{$\m@th#2$}%                                               %4
  1655.  \ifCD@\global\bigaw@\minCDaw@\else\global\bigaw@\minaw@\fi                 %5
  1656.  \ifdim\wdz@>\bigaw@\global\bigaw@\wdz@\fi
  1657.  \ifdim\wd@ne>\bigaw@\global\bigaw@\wd@ne\fi                                %6
  1658.  \ifCD@\enskip\fi                                                           %7
  1659.  \ifdim\wd\tw@>\z@
  1660.   \mathrel{\mathop{\hbox to\bigaw@{\rightarrowfill@\displaystyle}}%
  1661.     \limits^{#1}_{#2}}%                                                     %8
  1662.  \else\mathrel{\mathop{\hbox to\bigaw@{\rightarrowfill@\displaystyle}}%
  1663.     \limits^{#1}}\fi                                                        %9
  1664.  \ifCD@\enskip\fi                                                          %10
  1665.  \ampersand@}                                                              %11
  1666. \atdef@<#1<#2<{\ampersand@\setboxz@h{$\m@th\ssize\;\;{#1}\;$}%
  1667.  \setbox@ne\hbox{$\m@th\ssize\;\;{#2}\;$}\setbox\tw@\hbox{$\m@th#2$}%
  1668.  \ifCD@\global\bigaw@\minCDaw@\else\global\bigaw@\minaw@\fi
  1669.  \ifdim\wdz@>\bigaw@\global\bigaw@\wdz@\fi
  1670.  \ifdim\wd@ne>\bigaw@\global\bigaw@\wd@ne\fi
  1671.  \ifCD@\enskip\fi
  1672.  \ifdim\wd\tw@>\z@
  1673.   \mathrel{\mathop{\hbox to\bigaw@{\leftarrowfill@\displaystyle}}%
  1674.        \limits^{#1}_{#2}}\else
  1675.   \mathrel{\mathop{\hbox to\bigaw@{\leftarrowfill@\displaystyle}}%
  1676.        \limits^{#1}}\fi
  1677.  \ifCD@\enskip\fi\ampersand@}
  1678. \begingroup
  1679.  \catcode`\~=\active \lccode`\~=`\@
  1680.  \lowercase{%
  1681.   \global\atdef@)#1)#2){~>#1>#2>}
  1682.   \global\atdef@(#1(#2({~<#1<#2<}}
  1683. \endgroup
  1684. \atdef@ A#1A#2A{\llap{$\m@th\vcenter{\hbox
  1685.  {$\ssize#1$}}$}\Big\uparrow\rlap{$\m@th\vcenter{\hbox{$\ssize#2$}}$}&&}
  1686. \atdef@ V#1V#2V{\llap{$\m@th\vcenter{\hbox
  1687.  {$\ssize#1$}}$}\Big\downarrow\rlap{$\m@th\vcenter{\hbox{$\ssize#2$}}$}&&}
  1688. \atdef@={&\enskip\mathrel
  1689.  {\vbox{\hrule width\minCDaw@\vskip3\ex@\hrule width
  1690.  \minCDaw@}}\enskip&}
  1691. \atdef@|{\Big\Vert&&}
  1692. \atdef@\vert{\Big\Vert&&}
  1693. \def\pretend#1\haswidth#2{\setboxz@h{$\m@th\scriptstyle{#2}$}\hbox
  1694.  to\wdz@{\hfill$\m@th\scriptstyle{#1}$\hfill}}
  1695. \message{poor man's bold,}
  1696. \def\pmb{\RIfM@\expandafter\mathpalette\expandafter\pmb@\else
  1697.  \expandafter\pmb@@\fi}
  1698. \def\pmb@@#1{\leavevmode\setboxz@h{#1}%
  1699.    \dimen@-\wdz@
  1700.    \kern-.5\ex@\copy\z@
  1701.    \kern\dimen@\kern.25\ex@\raise.4\ex@\copy\z@
  1702.    \kern\dimen@\kern.25\ex@\box\z@
  1703. }
  1704. \def\binrel@@#1{\ifdim\wd2<\z@\mathbin{#1}\else\ifdim\wd\tw@>\z@
  1705.  \mathrel{#1}\else{#1}\fi\fi}
  1706. \newdimen\pmbraise@
  1707. %      Note: because of the use of \mathpalette, if \pmb@ is
  1708. %      applied to a single math italic character (or a single
  1709. %      character from some other slanted math font), the italic
  1710. %      correction will be added.  This will cause subscripts
  1711. %      to fall too far away from the character in some
  1712. %      cases, e.g., $\pmb{T}_1$ or $\pmb{\Cal T}_1$.
  1713. \def\pmb@#1#2{\setbox\thr@@\hbox{$\m@th#1{#2}$}%
  1714.  \setbox4\hbox{$\m@th#1\mkern.5mu$}\pmbraise@\wd4\relax
  1715.  \binrel@{#2}%
  1716.  \dimen@-\wd\thr@@
  1717.    \binrel@@{%
  1718.    \mkern-.8mu\copy\thr@@
  1719.    \kern\dimen@\mkern.4mu\raise\pmbraise@\copy\thr@@
  1720.    \kern\dimen@\mkern.4mu\box\thr@@
  1721. }}
  1722. \def\documentstyle#1{\W@{}\input #1.sty\relax}
  1723. \message{syntax check,}
  1724. \font\dummyft@=dummy
  1725. \fontdimen1 \dummyft@=\z@
  1726. \fontdimen2 \dummyft@=\z@
  1727. \fontdimen3 \dummyft@=\z@
  1728. \fontdimen4 \dummyft@=\z@
  1729. \fontdimen5 \dummyft@=\z@
  1730. \fontdimen6 \dummyft@=\z@
  1731. \fontdimen7 \dummyft@=\z@
  1732. \fontdimen8 \dummyft@=\z@
  1733. \fontdimen9 \dummyft@=\z@
  1734. \fontdimen10 \dummyft@=\z@
  1735. \fontdimen11 \dummyft@=\z@
  1736. \fontdimen12 \dummyft@=\z@
  1737. \fontdimen13 \dummyft@=\z@
  1738. \fontdimen14 \dummyft@=\z@
  1739. \fontdimen15 \dummyft@=\z@
  1740. \fontdimen16 \dummyft@=\z@
  1741. \fontdimen17 \dummyft@=\z@
  1742. \fontdimen18 \dummyft@=\z@
  1743. \fontdimen19 \dummyft@=\z@
  1744. \fontdimen20 \dummyft@=\z@
  1745. \fontdimen21 \dummyft@=\z@
  1746. \fontdimen22 \dummyft@=\z@
  1747. \def\fontlist@{\\{\tenrm}\\{\sevenrm}\\{\fiverm}\\{\teni}\\{\seveni}%
  1748.  \\{\fivei}\\{\tensy}\\{\sevensy}\\{\fivesy}\\{\tenex}\\{\tenbf}\\{\sevenbf}%
  1749.  \\{\fivebf}\\{\tensl}\\{\tenit}}
  1750. \def\font@#1=#2 {\rightappend@#1\to\fontlist@\font#1=#2 }
  1751. \def\dodummy@{{\def\\##1{\global\let##1\dummyft@}\fontlist@}}
  1752. \def\nopages@{\output{\setbox\z@\box\@cclv \deadcycles\z@}%
  1753.  \alloc@5\toks\toksdef\@cclvi\output}
  1754. \let\galleys\nopages@
  1755. \newif\ifsyntax@
  1756. \newcount\countxviii@
  1757. \def\syntax{\syntax@true\dodummy@\countxviii@\count18
  1758.  \loop\ifnum\countxviii@>\m@ne\textfont\countxviii@=\dummyft@
  1759.  \scriptfont\countxviii@=\dummyft@\scriptscriptfont\countxviii@=\dummyft@
  1760.  \advance\countxviii@\m@ne\repeat                                           %1
  1761.  \dummyft@\tracinglostchars\z@\nopages@\frenchspacing\hbadness\@M}
  1762. \def\first@#1#2\end{#1}
  1763. \def\printoptions{\W@{Do you want S(yntax check),
  1764.   G(alleys) or P(ages)?}%
  1765.  \message{Type S, G or P, followed by <return>: }%
  1766.  \begingroup % to localize the following change to \endlinechar:
  1767.  \endlinechar\m@ne % to prevent a space or \par in \ans@ from ^^M
  1768.  \read\m@ne to\ans@
  1769. %  Define \ans@ to uppercase itself, and default to P if the user
  1770. %  just pressed <return>.
  1771.  \edef\ans@{\uppercase{\def\noexpand\ans@{%
  1772.    \expandafter\first@\ans@ P\end}}}%
  1773. %  Cast the new definition of \ans@ outside the group
  1774.  \expandafter\endgroup\ans@
  1775.  \if\ans@ P% fine, no action needs to be taken
  1776.  \else \if\ans@ S\syntax
  1777.  \else \if\ans@ G\galleys
  1778.  \else\message{? Unknown option: \ans@; using the `pages' option.}%
  1779.  \fi\fi\fi}
  1780. \def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
  1781.  \ch@ck#1#4#2\allocationnumber=\count1#1
  1782.  \global#3#5=\allocationnumber
  1783.  \ifalloc@\wlog{\string#5=\string#2\the\allocationnumber}\fi}
  1784. \def\document{\def\alloclist@{}\def\fontlist@{}}
  1785. \let\enddocument\bye
  1786. \let\plainproclaim\proclaim
  1787. \let\plainfootnote\footnote
  1788. \let\proclaim\undefined
  1789. \let\footnote\undefined
  1790. \let\=\undefined
  1791. \let\>\undefined
  1792. \let\cal\undefined
  1793. \let\mit\undefined
  1794. \let\oldstyle\undefined
  1795. \catcode`\@=\active
  1796. \message{... finished}
  1797. \endinput
  1798.