summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/plain/zztex/zzmath.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/plain/zztex/zzmath.tex')
-rw-r--r--Master/texmf-dist/tex/plain/zztex/zzmath.tex1919
1 files changed, 1919 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/zztex/zzmath.tex b/Master/texmf-dist/tex/plain/zztex/zzmath.tex
new file mode 100644
index 00000000000..9a39dd2f0b1
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/zztex/zzmath.tex
@@ -0,0 +1,1919 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Module: ZzTeX Mathematics Facilities
+%
+% Synopsis: This file provides the mathematics facilities of
+% ZzTeX. All of the Plain TeX math stuff is included.
+%
+% Author: Paul C. Anagnostopoulos
+% Created: 14 November 1990
+%
+% Copyright 1989--2020 by Paul C. Anagnostopoulos
+% under The MIT License (opensource.org/licenses/MIT)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Math Version
+% ---- -------
+
+
+\definecount{\zmathver}{0}
+
+
+\def \mathversion #1{%
+ \global\zmathver = #1\relax
+ \input zzmathv#1\relax}
+
+% Alternate Math Fonts
+% --------- ---- -----
+
+
+\outer\def \ComputerModernmathfonts {%
+ \input zzcmmath\relax}
+
+\outer\def \Lucidamathfonts #1{% {arrows?}
+ \setflag \zusemar = #1\relax
+ \input zzlucida\relax}
+
+\outer\def \MathTimefonts {%
+ \input zzmtime\relax}
+
+% Spacing
+% -------
+
+
+% Note major uses of each kind of space:
+% thin: around large operators; after punctuation
+% medium: around binary operators
+% thick: around relational operators
+
+\def \setmathspaces #1#2#3{% {thin}{medium}{thick}
+ \global\thinmuskip = #1\relax
+ \global\medmuskip = #2\relax
+ \global\thickmuskip = #3\relax}
+
+\def \mthickspace {\mkern 2\thinmuskip}
+
+\def \mthinspace {\mkern \thinmuskip}
+\def \mnegthinspace {\mkern -\thinmuskip}
+
+\def \mspace #1{\mkern #1\relax}% {mu}
+
+% Math mode \, \; \! are in ZZHMODE.
+
+\def \setTeXmathspaces {%
+ \setmathspaces{3mu}{4mu plus 2mu minus 4mu}{5mu plus 5mu}}
+
+% Character Definition
+% --------- ----------
+
+
+% These are the math character classes:
+
+\chardef \classord = 0 % An ordinary symbol (\alpha). %^math_class
+\chardef \classlargeop = 1 % A large operator (\sum).. %^math_class
+\chardef \classbinop = 2 % A binary operator (+). %^math_class
+\chardef \classrel = 3 % A relation (=). %^math_class
+\chardef \classopen = 4 % An opening fence ([). %^math_class
+\chardef \classclose = 5 % A closing fence (]). %^math_class
+\chardef \classpunc = 6 % A punctuation character (,). %^math_class
+\chardef \classvarfam = 7 % A character that varies with \fam (\Gamma). %^math_class
+\chardef \classactive = 8 % An active character ('). %^math_class
+
+
+\def \definemathaccent #1#2#3#4{% {name}{class}{family}{hex-code}
+ {\zcalcmathcode{#2}{#3}{#4}%
+ \xdef #1{\mathaccent \the\tcounta\relax}}%
+ \ignorespaces}
+
+\def \definemathchar #1#2#3#4{% {name}{class}{family}{hex-code}
+ {\zcalcmathcode{#2}{#3}{#4}%
+ \zdefmathch#1\zmark
+ \if \znext
+ \global\mathcode #1= \tcounta
+ \else
+ \global\mathchardef #1= \tcounta
+ \fi}%
+ \ignorespaces}
+
+\def \definemathdelimiter #1#2#3#4#5#6{% {name}{class}{fam1}{hex1}{fam2}{hex2}
+ {\zcalcmathcode{#2}{#3}{#4}%
+ \multiply \tcounta by 16
+ \advance \tcounta by #5
+ \multiply \tcounta by 256
+ \advance \tcounta by "#6\relax
+ \zdefmathch#1\zmark
+ \if \znext
+ \global\delcode #1= \tcounta
+ \else
+ \xdef #1{\delimiter\the\tcounta\relax}%
+ \fi}%
+ \ignorespaces}
+
+\def \definemathjoinedsymbol #1#2#3#4#5{% {name}{atom}{char1}{char2}{sep}
+ \gdef #1{#2{{#3}\mspace{#5mu}{#4}}}}
+
+\def \definemathlabeledarrow #1#2#3#4{% {name}{atom}{label}{arrow}
+ \gdef #1{#2{\mathop{#4}\limits^{#3}}}}
+
+\def \definemathstackedsymbol #1#2#3#4#5{% {name}{atom}{char1}{char2}{sep}
+ \gdef #1{#2{\mathpalette\zstksym{{#3}{#4}{#5}}}}}
+
+
+\def \zcalcmathcode #1#2#3{% {class}{family}{hex-code}
+ \tcounta = #1
+ \multiply \tcounta by 16
+ \advance \tcounta by #2
+ \multiply \tcounta by 256
+ \advance \tcounta by "#3\relax}
+
+\def \zdefmathch #1#2\zmark{%
+ \setflag\znext = {\if `\noexpand#1\true \else \false \fi}}
+
+\definedimen{\muwidth}{0pt}
+
+\def \zstksym #1#2{% {style}{{char1}{char2}{sep}}
+ \zstksymb #1#2}
+
+\def \zstksymb #1#2#3#4{% {style}{char1}{char2}{sep}
+ \vcenter{\baselineskip = 0pt
+ \lineskiplimit = -\maxdimen
+ \setbox \zboxa = \hbox{$#1\mkern 1mu$}%
+ \muwidth = \wd\zboxa
+ \ialign{\hfil ##\hfil\cr
+ \raise #4\muwidth \hbox{$#1#2$}\cr
+ $#1#3$\cr}}}
+
+% Character Styles
+% --------- ------
+
+
+\definecount{\zmstyfam}{0}
+
+
+\def \setmathdigitstyle #1{% {style}
+ {\tcounta = "\the\classvarfam0
+ \advance \tcounta by \name{#1fam}%
+ \multiply \tcounta by 256
+ \advance \tcounta by `\0%
+ \tcountb = `0
+ \loop
+ \global\mathcode \tcountb = \tcounta
+ \increment \tcounta
+ \increment \tcountb
+ \if \lssp{\tcountb}{`\:}\repeat}}
+
+\def \setmathletterstyle #1{% {\style}
+ {\tcounta = "\the\classvarfam0
+ \advance \tcounta by \name{#1fam}%
+ \multiply \tcounta by 256
+ \advance \tcounta by `\A%
+ \tcountb = `A
+ \loop
+ \global\mathcode \tcountb = \tcounta
+ \increment \tcounta
+ \increment \tcountb
+ \if \lssp{\tcountb}{`\[}\repeat
+ \advance \tcounta by 6
+ \tcountb = `\a
+ \loop
+ \global\mathcode \tcountb = \tcounta
+ \increment \tcounta
+ \increment \tcountb
+ \if \lssp{\tcountb}{`\{}\repeat}%
+ \if \zcommonencoding
+ \def \znext {#1}%
+ \def \zit {\it}%
+ \if \tokeqlp{\znext}{\zit}\setstyleskewchar{#1}{7}\fi
+ \fi}
+
+\def \setmathucgreekstyle #1{% {style}
+ {\zmstyfam = \name{#1fam}%
+\definemathchar \Alpha \classvarfam \rmfam {41}
+\definemathchar \Beta \classvarfam \rmfam {42}
+\definemathchar \Gamma \classvarfam \zmstyfam {00}
+\definemathchar \Delta \classvarfam \zmstyfam {01}
+\definemathchar \Epsilon \classvarfam \rmfam {45}
+\definemathchar \Zeta \classvarfam \rmfam {5A}
+\definemathchar \Eta \classvarfam \rmfam {48}
+\definemathchar \Theta \classvarfam \zmstyfam {02}
+\definemathchar \Iota \classvarfam \rmfam {49}
+\definemathchar \Kappa \classvarfam \rmfam {4B}
+\definemathchar \Lambda \classvarfam \zmstyfam {03}
+\definemathchar \Mu \classvarfam \rmfam {4D}
+\definemathchar \Nu \classvarfam \rmfam {4E}
+\definemathchar \Xi \classvarfam \zmstyfam {04}
+\definemathchar \Omicron \classvarfam \rmfam {4F}
+\definemathchar \Pi \classvarfam \zmstyfam {05}
+\definemathchar \Rho \classvarfam \rmfam {50}
+\definemathchar \Sigma \classvarfam \zmstyfam {06}
+\definemathchar \Tau \classvarfam \rmfam {54}
+\definemathchar \Upsilon \classvarfam \zmstyfam {07}
+\definemathchar \Phi \classvarfam \zmstyfam {08}
+\definemathchar \Chi \classvarfam \rmfam {58}
+\definemathchar \Psi \classvarfam \zmstyfam {09}
+\definemathchar \Omega \classvarfam \zmstyfam {0A}}}
+
+\def \zmtextstyle {\rm}
+\def \zmtextfam {\rmfam}
+
+\def \setmathtextstyle #1{% {style}
+ \gdef \zmtextstyle {#1}%
+ \xdef \zmtextfam {\name{#1fam}}}
+
+\def \zmfunstyle {\rm}
+
+\def \setmathfunctionstyle #1{% {style}
+ \gdef \zmfunstyle {#1}}
+
+\def \zmvarstyle {\it}
+
+\def \setmathmvarstyle #1{% {style}
+ \gdef \zmvarstyle {#1}}
+
+\def \setmathpunctuationstyle #1{% {style}
+ {\zmstyfam = \name{#1fam}%
+ \definemathchar {`.} \classord \zmstyfam {2E}
+ \definemathchar {`,} \classpunc \zmstyfam {2C}
+ \definemathchar {`;} \classpunc \zmstyfam {3B}}}
+
+% Characters
+% ----------
+
+
+\let \zmchar = \definemathchar
+
+
+% Letters:
+
+% INITEX does the following for each letter:
+%
+% \definemathchar{letter}{\classvarfam}{\mit}{xx}
+%
+% This can be changed using the \setmathletterstyle command above.
+
+
+% Figures (digits):
+
+% INITEX does the following for each digit:
+%
+% \definemathchar{digit}{\classvarfam}{\rm}{xx}
+%
+% This can be changed using the \setmathdigitstyle command above.
+
+
+% Uppercase Greek letters:
+
+% This can be changed using the \setmathucgreekstyle command above.
+
+\setmathucgreekstyle{\rm}
+
+
+% Lowercase Greek letters:
+
+\zmchar \alpha \classord \mitfam {0B}
+\zmchar \beta \classord \mitfam {0C}
+\zmchar \gamma \classord \mitfam {0D}
+\zmchar \delta \classord \mitfam {0E}
+\zmchar \epsilon \classord \mitfam {0F}
+\zmchar \zeta \classord \mitfam {10}
+\zmchar \eta \classord \mitfam {11}
+\zmchar \theta \classord \mitfam {12}
+\zmchar \iota \classord \mitfam {13}
+\zmchar \kappa \classord \mitfam {14}
+\zmchar \lambda \classord \mitfam {15}
+\zmchar \mu \classord \mitfam {16}
+\zmchar \nu \classord \mitfam {17}
+\zmchar \xi \classord \mitfam {18}
+\zmchar \omicron \classord \mitfam {6F}
+\zmchar \pi \classord \mitfam {19}
+\zmchar \rho \classord \mitfam {1A}
+\zmchar \sigma \classord \mitfam {1B}
+\zmchar \tau \classord \mitfam {1C}
+\zmchar \upsilon \classord \mitfam {1D}
+\zmchar \phi \classord \mitfam {1E}
+\zmchar \chi \classord \mitfam {1F}
+\zmchar \psi \classord \mitfam {20}
+\zmchar \omega \classord \mitfam {21}
+
+\zmchar \varepsilon \classord \mitfam {22}
+\zmchar \vartheta \classord \mitfam {23}
+\zmchar \varpi \classord \mitfam {24}
+\zmchar \varrho \classord \mitfam {25}
+\zmchar \varsigma \classord \mitfam {26}
+\zmchar \varphi \classord \mitfam {27}
+
+
+% Ordinary symbols:
+
+\zmchar {`.} \classord \rmfam {2E}
+\zmchar {`/} \classord \mitfam {3D}
+\zmchar \zmbackslash \classord \msyfam {6E}
+\zmchar {`|} \classord \msyfam {6A}
+\zmchar \aleph \classord \msyfam {40}
+\zmchar \bot \classord \msyfam {3F}
+\zmchar \clubsuit \classord \msyfam {7C}
+\zmchar \diamondsuit \classord \msyfam {7D}
+\zmchar \ell \classord \mitfam {60}
+\zmchar \emptyset \classord \msyfam {3B}
+\zmchar \exists \classord \msyfam {39}
+\zmchar \flat \classord \mitfam {5B}
+\zmchar \forall \classord \msyfam {38}
+\zmchar \heartsuit \classord \msyfam {7E}
+\zmchar \Im \classord \msyfam {3D}
+\zmchar \imath \classord \mitfam {7B}
+\zmchar \infinity \classord \msyfam {31}
+\let \infty = \infinity
+\zmchar \jmath \classord \mitfam {7C}
+\zmchar \nabla \classord \msyfam {72}
+\zmchar \natural \classord \mitfam {5C}
+\zmchar \neg \classord \msyfam {3A}
+\let \lnot = \neg
+\zmchar \partial \classord \mitfam {40}
+\zmchar \prime \classord \msyfam {30}
+\zmchar \Re \classord \msyfam {3C}
+\zmchar \sharp \classord \mitfam {5D}
+\zmchar \spadesuit \classord \msyfam {7F}
+\zmchar \surd \classord \msyfam {70}
+\zmchar \top \classord \msyfam {3E}
+\zmchar \triangle \classord \msyfam {34}
+\zmchar \wp \classord \mitfam {7D}
+
+
+% Large operations:
+
+\zmchar \bigcap \classlargeop \mexfam {54}
+\zmchar \bigcup \classlargeop \mexfam {53}
+\zmchar \bigodot \classlargeop \mexfam {4A}
+\zmchar \bigoplus \classlargeop \mexfam {4C}
+\zmchar \bigotimes \classlargeop \mexfam {4E}
+\zmchar \bigsqcup \classlargeop \mexfam {46}
+\zmchar \biguplus \classlargeop \mexfam {55}
+\zmchar \bigvee \classlargeop \mexfam {57}
+\zmchar \bigwedge \classlargeop \mexfam {56}
+\zmchar \coprod \classlargeop \mexfam {60}
+\zmchar \intop \classlargeop \mexfam {52}
+\zmchar \ointop \classlargeop \mexfam {48}
+\zmchar \prod \classlargeop \mexfam {51}
+\zmchar \smallint \classlargeop \msyfam {73}
+\zmchar \sum \classlargeop \mexfam {50}
+
+
+% Binary operations:
+
+\zmchar {`*} \classbinop \msyfam {03}
+\zmchar {`+} \classbinop \rmfam {2B}
+\zmchar {`-} \classbinop \msyfam {00}
+\zmchar \amalg \classbinop \msyfam {71}
+\zmchar \ast \classbinop \msyfam {03}
+\zmchar \bigcirc \classbinop \msyfam {0D}
+\zmchar \bigtriangledown \classbinop \msyfam {35}
+\zmchar \bigtriangleup \classbinop \msyfam {34}
+\zmchar \zmbullet \classbinop \msyfam {0F}
+\zmchar \cap \classbinop \msyfam {5C}
+\zmchar \cdot \classbinop \msyfam {01}
+\zmchar \circ \classbinop \msyfam {0E}
+\let \compose = \circ
+\zmchar \cup \classbinop \msyfam {5B}
+\zmchar \zmdagger \classbinop \msyfam {79}
+\zmchar \zmddagger \classbinop \msyfam {7A}
+\zmchar \diamond \classbinop \msyfam {05}
+\zmchar \div \classbinop \msyfam {04}
+\zmchar \mp \classbinop \msyfam {07}
+\zmchar \odot \classbinop \msyfam {0C}
+\zmchar \ominus \classbinop \msyfam {09}
+\zmchar \oplus \classbinop \msyfam {08}
+\zmchar \oslash \classbinop \msyfam {0B}
+\zmchar \otimes \classbinop \msyfam {0A}
+\zmchar \pm \classbinop \msyfam {06}
+\zmchar \setminus \classbinop \msyfam {6E}
+\zmchar \sqcap \classbinop \msyfam {75}
+\zmchar \sqcup \classbinop \msyfam {74}
+\zmchar \star \classbinop \mitfam {3F}
+\zmchar \times \classbinop \msyfam {02}
+\let \cross = \times
+\zmchar \triangleleft \classbinop \mitfam {2F}
+\zmchar \triangleright \classbinop \mitfam {2E}
+\zmchar \uplus \classbinop \msyfam {5D}
+\zmchar \vee \classbinop \msyfam {5F}
+\let \lor = \vee
+\zmchar \wedge \classbinop \msyfam {5E}
+\let \land = \wedge
+\zmchar \wr \classbinop \msyfam {6F}
+
+
+% Relations:
+
+\zmchar {`:} \classrel \rmfam {3A}
+\zmchar {`<} \classrel \mitfam {3C}
+\zmchar {`=} \classrel \rmfam {3D}
+\zmchar {`>} \classrel \mitfam {3E}
+\zmchar \approx \classrel \msyfam {19}
+\zmchar \asymp \classrel \msyfam {10}
+\zmchar \dashv \classrel \msyfam {61}
+\zmchar \equiv \classrel \msyfam {11}
+\zmchar \frown \classrel \mitfam {5F}
+\zmchar \geq \classrel \msyfam {15}
+\let \ge = \geq
+\let \gets = \leftarrow
+\zmchar \gg \classrel \msyfam {1D}
+\zmchar \in \classrel \msyfam {32}
+\zmchar \Leftarrow \classrel \msyfam {28}
+\zmchar \leftarrow \classrel \msyfam {20}
+\zmchar \leftharpoondown \classrel \mitfam {29}
+\zmchar \leftharpoonup \classrel \mitfam {28}
+\zmchar \Leftrightarrow \classrel \msyfam {2C}
+\zmchar \leftrightarrow \classrel \msyfam {24}
+\zmchar \leq \classrel \msyfam {14}
+\let \le = \leq
+\zmchar \lhook \classrel \mitfam {2C}
+\zmchar \ll \classrel \msyfam {1C}
+\zmchar \mapstochar \classrel \msyfam {37}
+\zmchar \mid \classrel \msyfam {6A}
+\let \given = \mid
+\zmchar \nearrow \classrel \msyfam {25}
+\zmchar \ni \classrel \msyfam {33}
+\zmchar \not \classrel \msyfam {36}
+\zmchar \nwarrow \classrel \msyfam {2D}
+\let \owns = \ni
+\zmchar \parallel \classrel \msyfam {6B}
+\zmchar \perp \classrel \msyfam {3F}
+\zmchar \prec \classrel \msyfam {1E}
+\zmchar \preceq \classrel \msyfam {16}
+\zmchar \propto \classrel \msyfam {2F}
+\zmchar \rhook \classrel \mitfam {2D}
+\zmchar \Rightarrow \classrel \msyfam {29}
+\zmchar \rightarrow \classrel \msyfam {21}
+\zmchar \rightharpoondown \classrel \mitfam {2B}
+\zmchar \rightharpoonup \classrel \mitfam {2A}
+\zmchar \searrow \classrel \msyfam {26}
+\zmchar \sim \classrel \msyfam {18}
+\zmchar \simeq \classrel \msyfam {27}
+\zmchar \smile \classrel \mitfam {5E}
+\zmchar \subset \classrel \msyfam {1A}
+\zmchar \subseteq \classrel \msyfam {12}
+\zmchar \succ \classrel \msyfam {1F}
+\zmchar \succeq \classrel \msyfam {17}
+\zmchar \supset \classrel \msyfam {1B}
+\zmchar \supseteq \classrel \msyfam {13}
+\zmchar \swarrow \classrel \msyfam {2E}
+\zmchar \sqsubseteq \classrel \msyfam {76}
+\zmchar \sqsupseteq \classrel \msyfam {77}
+\let \to = \rightarrow
+\zmchar \vdash \classrel \msyfam {60}
+
+
+% Openers:
+
+\zmchar {`(} \classopen \rmfam {28}
+\zmchar {`[} \classopen \rmfam {5B}
+\zmchar {`\{} \classopen \msyfam {66}
+
+
+% Closers:
+
+\zmchar {`!} \classclose \rmfam {21}
+\zmchar {`)} \classclose \rmfam {29}
+\zmchar {`?} \classclose \rmfam {3F}
+\zmchar {`]} \classclose \rmfam {5D}
+\zmchar {`\}} \classclose \msyfam {67}
+
+
+% Punctuation:
+
+\zmchar {`,} \classpunc \rmfam {2C}
+\zmchar {`;} \classpunc \rmfam {3B}
+\zmchar \cdotp \classpunc \msyfam {01}
+\zmchar \maps \classpunc \rmfam {3A}
+\let \colon = \maps
+\zmchar \ldotp \classpunc \mitfam {3A}
+
+
+% Active characters:
+
+\zmchar {` } \classactive \rmfam {00}
+\zmchar {`'} \classactive \rmfam {00}
+
+{\catcode`\' = \catactive
+\gdef '{^\bgroup \zmprima}
+} % \catcode
+
+\def \zmprima {\prime \futurelet\znext \zmprimb}
+\def \zmprimb {%
+ \if \tokeqlp{\znext}{'}%
+ \let \znext = \zmprimc
+ \else \if \tokeqlp{\znext}{^}%
+ \let \znext = \zmprimd
+ \else
+ \let \znext = \egroup
+ \fi\fi
+ \znext}
+\def \zmprimc #1{\zmprima}
+\def \zmprimd #1#2{#2\egroup}
+
+% Delimiters
+% ----------
+
+% IniTeX does the following for each character:
+%
+% \delcode`x = -1
+
+\definemathdelimiter{`(}{\classord}{\rmfam}{28}{\mexfam}{00}
+\definemathdelimiter{`)}{\classord}{\rmfam}{29}{\mexfam}{01}
+\definemathdelimiter{`/}{\classord}{\rmfam}{2F}{\mexfam}{0E}
+\definemathdelimiter{`<}{\classord}{\msyfam}{68}{\mexfam}{0A}
+\definemathdelimiter{`>}{\classord}{\msyfam}{69}{\mexfam}{0B}
+\definemathdelimiter{`[}{\classord}{\rmfam}{5B}{\mexfam}{02}
+\definemathdelimiter{`]}{\classord}{\rmfam}{5D}{\mexfam}{03}
+\definemathdelimiter{`|}{\classord}{\msyfam}{6A}{\mexfam}{0C}
+
+\definemathdelimiter{\Arrowvert}{\classord}{\mexfam}{3D}{\rmfam}{00}
+\definemathdelimiter{\arrowvert}{\classord}{\mexfam}{3C}{\rmfam}{00}
+\definemathdelimiter{\bracevert}{\classord}{\mexfam}{3E}{\rmfam}{00}
+\definemathdelimiter{\Downarrow}{\classrel}{\msyfam}{2B}{\mexfam}{7F}
+\definemathdelimiter{\downarrow}{\classrel}{\msyfam}{23}{\mexfam}{79}
+\definemathdelimiter{\langle}{\classopen}{\msyfam}{68}{\mexfam}{0A}
+\definemathdelimiter{\lceil}{\classopen}{\msyfam}{64}{\mexfam}{06}
+\definemathdelimiter{\lfloor}{\classopen}{\msyfam}{62}{\mexfam}{04}
+\definemathdelimiter{\lgroup}{\classopen}{\rmfam}{00}{\mexfam}{3A}
+\definemathdelimiter{\lmoustache}{\classopen}{\rmfam}{00}{\mexfam}{40}
+\definemathdelimiter{\rangle}{\classclose}{\msyfam}{69}{\mexfam}{0B}
+\definemathdelimiter{\rceil}{\classclose}{\msyfam}{65}{\mexfam}{07}
+\definemathdelimiter{\rfloor}{\classclose}{\msyfam}{63}{\mexfam}{05}
+\definemathdelimiter{\rgroup}{\classclose}{\rmfam}{00}{\mexfam}{3B}
+\definemathdelimiter{\rmoustache}{\classclose}{\rmfam}{00}{\mexfam}{41}
+\definemathdelimiter{\Uparrow}{\classrel}{\msyfam}{2A}{\mexfam}{7E}
+\definemathdelimiter{\uparrow}{\classrel}{\msyfam}{22}{\mexfam}{78}
+\definemathdelimiter{\Updownarrow}{\classrel}{\msyfam}{6D}{\mexfam}{77}
+\definemathdelimiter{\updownarrow}{\classrel}{\msyfam}{6C}{\mexfam}{3F}
+\definemathdelimiter{\Vert}{\classord}{\msyfam}{6B}{\mexfam}{0D}
+\definemathdelimiter{\vert}{\classord}{\msyfam}{6A}{\mexfam}{0C}
+\definemathdelimiter{\zmbackslash}{\classord}{\msyfam}{6E}{\mexfam}{0F}
+\definemathdelimiter{\zmlbrace}{\classopen}{\msyfam}{66}{\mexfam}{08}
+\definemathdelimiter{\zmrbrace}{\classclose}{\msyfam}{67}{\mexfam}{09}
+
+% Accents
+% -------
+
+
+\definemathaccent{\acute}{\classvarfam}{\rmfam}{13}
+\definemathaccent{\bar}{\classvarfam}{\rmfam}{16}
+\definemathaccent{\breve}{\classvarfam}{\rmfam}{15}
+\definemathaccent{\check}{\classvarfam}{\rmfam}{14}
+\definemathaccent{\ddot}{\classvarfam}{\rmfam}{7F}
+\definemathaccent{\dot}{\classvarfam}{\rmfam}{5F}
+\definemathaccent{\grave}{\classvarfam}{\rmfam}{12}
+\definemathaccent{\zmhat}{\classvarfam}{\rmfam}{5E}
+\definemathaccent{\zmtilde}{\classvarfam}{\rmfam}{7E}
+\definemathaccent{\ring}{\classvarfam}{\rmfam}{17}
+\definemathaccent{\widetilde}{\classord}{\mexfam}{65}
+\definemathaccent{\widehat}{\classord}{\mexfam}{62}
+\definemathaccent{\vec}{\classord}{\mitfam}{7E}
+
+\def \widebar #1{% {math} %~ Wide bar accent. %^math_accent
+ \mathpalette\zwidebar{#1}}
+
+\def \zwidebar #1#2{% {style}{math}
+ \rlap{\measuretextwidth{\tdimena}{$#1#2$}%
+ \kern .2\tdimena
+ $\overline{\vphantom{#1#2}\kern .6\tdimena}$}%
+ #2}
+
+% Defined Characters
+% ------- ----------
+
+
+\def \angle {%
+ {\vbox{\ialign{$\scriptstyle##$\cr
+ \not \mathrel{\mkern 14mu}\cr
+ \noalign{\nointerlineskip}%
+ \mkern 2.5mu \leaders \hrule height .34pt \hfill
+ \mkern 2.5mu\cr}}}}
+
+\definemathjoinedsymbol{\bowtie}{\mathrel}{\triangleright}{\triangleleft}{-3}
+
+\definemathstackedsymbol{\cong}{\mathrel}{\sim}{=}{6}
+
+\def \degree {^\circ}
+
+\let \degrees = \degree
+
+\def \defeq{%
+ \mathrel{\mathop{=}\limits^{\mathscriptscriptstyle{\roman{def}}}}}
+
+\definemathstackedsymbol{\Deltaeq}{\mathrel}{\mathscriptscriptstyle{\Delta}}{=}{9}
+
+\definemathstackedsymbol{\doteq}{\mathrel}{.}{=}{9}
+
+\definemathstackedsymbol{\gel}{\mathrel}{\zge}{<}{11}
+
+\definemathstackedsymbol{\zge}{\mathrel}{>}{=}{7.5}
+
+\definemathstackedsymbol{\gl}{\mathrel}{>}{<}{5.5}
+
+\def \hbar {\mathord{h \llap{$\mathchar"16 \mkern 3.5mu$}}}
+
+\definemathjoinedsymbol{\hookleftarrow}{\mathrel}{\leftarrow}{\rhook}{-3}
+
+\definemathjoinedsymbol{\hookrightarrow}{\mathrel}{\lhook}{\rightarrow}{-3}
+
+\def \int {\intop\nolimits}
+
+\def \iint {\zint2}
+
+\def \iiint {\zint3}
+
+\def \iiiint {\zint4}
+
+\def \idotsint {\zint0}
+
+\def \zint #1{%
+ \mkern -9mu \mathchoice{\mkern -5mu}{}{}{}%
+ \mathop{%
+ \mkern 9mu \mathchoice{\mkern 5mu}{}{}{}%
+ \intop
+ \ifcase #1%
+ \mkern -4mu \cdots \mkern -4mu
+ \or \relax \or
+ \zintkern
+ \or
+ \zintkern \intop \zintkern
+ \or
+ \zintkern \intop \zintkern \intop \zintkern
+ \fi}%
+ \intop\nolimits}
+
+\def \zintkern {\mkern -8mu \mathchoice{\mkern -3mu}{}{}{}}
+
+\let \join = \bowtie
+
+\definemathstackedsymbol{\leftrightarrows}{\mathrel}{\leftarrow}{\rightarrow}{6}
+
+\definemathstackedsymbol{\leftrightharpoons}{\mathrel}{\leftharpoonup}{\rightharpoondown}{4}
+
+\definemathstackedsymbol{\ltgt}{\mathrel}{<}{>}{5.5}
+
+\definemathjoinedsymbol{\Longleftarrow}{\mathrel}{\Leftarrow}{\Relbar}{-3}
+
+\definemathjoinedsymbol{\longleftarrow}{\mathrel}{\leftarrow}{\relbar}{-3}
+
+\definemathjoinedsymbol{\Longleftrightarrow}{\mathrel}{\Leftarrow}{\Rightarrow}{-3}
+\let \iff = \Longleftrightarrow
+
+\definemathjoinedsymbol{\longleftrightarrow}{\mathrel}{\leftarrow}{\rightarrow}{-3}
+
+\def \longmapsto {\mapstochar \longrightarrow}
+
+\definemathjoinedsymbol{\Longrightarrow}{\mathrel}{\Relbar}{\Rightarrow}{-3}
+
+\definemathjoinedsymbol{\longrightarrow}{\mathrel}{\relbar}{\rightarrow}{-3}
+
+\definemathjoinedsymbol{\longrightleftarrow}{\mathrel}{\rightarrow}{\leftarrow}{-3}
+
+\def \oint {\ointop\nolimits}
+
+\def \mapsto {\mapstochar \rightarrow}
+
+\definemathjoinedsymbol{\models}{\mathrel}{|}{=}{-3}
+
+\def \neq {\not=}
+\let \ne = \neq
+
+\def \nexists {\mathord{\raise .2ex \hbox{$\not\mkern 1.5mu$}\exists}}
+
+\def \notin {\not\in}
+\let \nin = \notin
+
+\def \nparallel {\mathrel{\not\mkern 2mu\parallel}}
+
+\definemathstackedsymbol{\rightleftarrows}{\mathrel}{\rightarrow}{\leftarrow}{6}
+
+\definemathstackedsymbol{\rightleftharpoons}{\mathrel}{\rightharpoonup}{\leftharpoondown}{4}
+
+\definemathjoinedsymbol{\semijoin}{\mathrel}{\triangleright}{<}{-4}
+
+% Functions
+% ---------
+
+
+\def \definemathfunction #1#2#3{% {\name}{text}{limits}
+ \def #1{\mathop{\zmfunstyle #2}#3}}
+
+\definemathfunction{\ad}{ad}{\nolimits} % adjoint
+\definemathfunction{\Ai}{Ai}{\nolimits} % Airy function
+\definemathfunction{\arccos}{arccos}{\nolimits} % arc cosine
+\definemathfunction{\arccosh}{arccosh}{\nolimits} % hyperbolic arc cosine
+\definemathfunction{\arccot}{arccot}{\nolimits} % arc cotangent
+\definemathfunction{\arcsec}{arcsec}{\nolimits} % arc secant
+\definemathfunction{\arcsin}{arcsin}{\nolimits} % arc sine
+\definemathfunction{\arctan}{arctan}{\nolimits} % arc tangent
+\definemathfunction{\arg}{arg}{\nolimits} % argument
+\definemathfunction{\argmax}{arg\,max}{\displaylimits} % argument maximum
+\definemathfunction{\argmin}{arg\,min}{\displaylimits} % argument maximum
+\definemathfunction{\Bd}{Bd}{\nolimits} % Bound
+\definemathfunction{\cl}{cl}{\nolimits} % closure
+\definemathfunction{\codim}{codim}{\nolimits} % co-dimension
+\definemathfunction{\coker}{coker}{\nolimits} % cokernel
+\definemathfunction{\conj}{conj}{\nolimits} % conjugate
+\definemathfunction{\cos}{cos}{\nolimits} % cosine
+\definemathfunction{\cosec}{cos}{\nolimits} % cosecant
+\definemathfunction{\cosh}{cosh}{\nolimits} % hyperbolic cosine
+\definemathfunction{\cot}{cot}{\nolimits} % cotangent
+\definemathfunction{\coth}{coth}{\nolimits} % hyperbolic cotangent
+\definemathfunction{\csc}{csc}{\nolimits} % cosecant
+\definemathfunction{\csch}{csch}{\nolimits} % hyperbolic cosecant
+\definemathfunction{\curl}{curl}{\nolimits} % curl
+\definemathfunction{\deg}{deg}{\nolimits} % degree
+\definemathfunction{\det}{det}{\displaylimits} % determinant
+\definemathfunction{\diag}{diag}{\nolimits} % diagonal
+\definemathfunction{\dim}{dim}{\nolimits} % dimension
+\definemathfunction{\dist}{dist}{\nolimits} % distance
+\definemathfunction{\erf}{erf}{\nolimits} % error function
+\definemathfunction{\erfc}{erfc}{\nolimits} % error function comp.
+\definemathfunction{\exp}{exp}{\nolimits} % exponential
+\definemathfunction{\gcd}{gcd}{\displaylimits} % greatest common div.
+\definemathfunction{\GL}{GL}{\nolimits} % General Linear
+\definemathfunction{\glb}{glb}{\nolimits} % greatest lower bound
+\definemathfunction{\gr}{gr}{\nolimits} % group
+\definemathfunction{\grad}{grad}{\nolimits} % gradient
+\definemathfunction{\hom}{hom}{\nolimits} % homology
+\definemathfunction{\id}{id}{\nolimits} % identity
+\definemathfunction{\inf}{inf}{\displaylimits} % infinum
+\definemathfunction{\injlim}{inj\,lim}{\displaylimits} % injected limit
+\definemathfunction{\ker}{ker}{\nolimits} % kernel
+\definemathfunction{\lcm}{lcm}{\displaylimits} % least common mult.
+\definemathfunction{\length}{length}{\nolimits} % length
+\definemathfunction{\lg}{lg}{\nolimits} % natural logarithm
+\definemathfunction{\lim}{lim}{\displaylimits} % limit
+\definemathfunction{\liminf}{lim\,inf}{\displaylimits} % limit infinum
+\definemathfunction{\limsup}{lim\,sup}{\displaylimits} % limit supremum
+\definemathfunction{\ln}{ln}{\nolimits} % natural logarithm
+\definemathfunction{\Log}{Log}{\nolimits} % principal logarithm
+\definemathfunction{\log}{log}{\nolimits} % logarithm
+\definemathfunction{\lub}{lub}{\nolimits} % least upper bound
+\definemathfunction{\max}{max}{\displaylimits} % maximum
+\definemathfunction{\min}{min}{\displaylimits} % minimum
+\definemathfunction{\mod}{mod}{\nolimits} % modulus
+\definemathfunction{\Pr}{Pr}{\displaylimits} % Probability
+\definemathfunction{\Prob}{Prob}{\displaylimits} % Probability
+\definemathfunction{\projlim}{proj\,lim}{\displaylimits}% projected limit
+\definemathfunction{\rank}{rank}{\nolimits} % rank
+\definemathfunction{\sec}{sec}{\nolimits} % secant
+\definemathfunction{\sech}{sech}{\nolimits} % hyperbolic secant
+\definemathfunction{\sgn}{sgn}{\nolimits} % sign
+\definemathfunction{\sign}{sign}{\nolimits} % sign
+\definemathfunction{\sin}{sin}{\nolimits} % sine
+\definemathfunction{\sinc}{sinc}{\nolimits} % cardinal sine
+\definemathfunction{\sinh}{sinh}{\nolimits} % hyperbolic sine
+\definemathfunction{\SL}{SL}{\nolimits} % Special Linear
+\definemathfunction{\sup}{sup}{\displaylimits} % supremum
+\definemathfunction{\Szg}{Sz(g)}{\nolimits} % Suzuki group
+\definemathfunction{\tan}{tan}{\nolimits} % tangent
+\definemathfunction{\tanh}{tanh}{\nolimits} % hyperbolic tangent
+\definemathfunction{\tr}{tr}{\nolimits} % trace
+\definemathfunction{\trace}{trace}{\nolimits} % trace
+\definemathfunction{\wstar}{w*}{\nolimits} % weak star
+
+
+% For the occasional one-timer:
+
+\def \mathfunction #1{\mathop{\rm #1}\nolimits}
+
+\let \mfun = \mathfunction
+
+% Display/Text/Script Styles
+% ------------------- ------
+
+
+\def \mathdisplaystyle #1{{\displaystyle #1}}% {subequation}
+\def \mathtextstyle #1{{\textstyle #1}}
+\def \mathscriptstyle #1{{\scriptstyle #1}}
+\def \mathscriptscriptstyle #1{{\scriptscriptstyle #1}}
+
+\def \mathpalette #1#2{% {\macro}{text}
+ \mathchoice{#1\displaystyle{#2}}%
+ {#1\textstyle{#2}}%
+ {#1\scriptstyle{#2}}%
+ {#1\scriptscriptstyle{#2}}}
+
+\def \mtext #1{%
+ {\mathchoice{\hbox{\zmtextstyle #1}}
+ {\hbox{\zmtextstyle #1}}
+ {\hbox{\the\scriptfont\zmtextfam #1}}
+ {\hbox{\the\scriptscriptfont\zmtextfam #1}}}}
+
+\everymath = {\let\text=\mtext}%
+
+% This is specifically designed to work in math or in text.
+
+\def \mvar #1{{\zmvarstyle #1\if \textmodep \/\fi}}% {text}
+
+% General Tools
+% ------- -----
+
+
+\def \aboverule #1{\above #1\relax}% {rule-height}
+
+\def \abs #1{\left|#1\right|}% {expression}
+
+\def \big #1{{\hbox{$\left#1\vbox to 8.5pt{}\right.\zmnosp$}}}
+\def \Big #1{{\hbox{$\left#1\vbox to 11.5pt{}\right.\zmnosp$}}}
+\def \bigg #1{{\hbox{$\left#1\vbox to 14.5pt{}\right.\zmnosp$}}}
+\def \Bigg #1{{\hbox{$\left#1\vbox to 17.5pt{}\right.\zmnosp$}}}
+\def \zmnosp {\nulldelimiterspace = 0pt}
+
+\def \bigl {\mathopen\big}
+\def \Bigl {\mathopen\Big}
+\def \bigm {\mathrel\big}
+\def \Bigm {\mathrel\Big}
+\def \bigr {\mathclose\big}
+\def \Bigr {\mathclose\Big}
+\def \biggl {\mathopen\bigg}
+\def \Biggl {\mathopen\Bigg}
+\def \biggm {\mathrel\bigg}
+\def \Biggm {\mathrel\Bigg}
+\def \biggr {\mathclose\bigg}
+\def \Biggr {\mathclose\Bigg}
+
+\def \binomial #1#2{{{#1} \atopwithdelims() {#2}}}
+
+\let \binom = \binomial
+
+\def \bmod {\mathbin{\rm mod}}
+
+\def \bordermatrix #1{%
+ {\setbox \zboxa = \hbox{\mex B}%
+ \tdimena = \wd\zboxa
+ \setbox \zboxa = \vbox{%
+ \def \cr {\crcr \noalign{\kern 0pt \global\let \cr = \completerow}}%
+ \ialign{$##$\hfil \kern 2pt \kern \tdimena&
+ \thinspace \hfil $##$\hfil&&
+ \quad \hfil $##$\hfil \crcr
+ \omit \strut \hfil \crcr
+ \noalign{\kern -\baselineskip}%
+ #1\crcr
+ \omit \strut \cr}}%
+ \setbox \zboxc = \vbox{%
+ \unvcopy \zboxa \global\setbox \zboxb = \lastbox}%
+ \setbox \zboxc = \hbox{%
+ \unhbox \zboxb \unskip \global\setbox \zboxb = \lastbox}%
+ \setbox \zboxc = \hbox{%
+ $\kern \wd\zboxb \kern -\tdimena \left(\kern -\wd\zboxb
+ \global\setbox \zboxb = \vbox{\box\zboxb \kern 8pt}%
+ \vcenter{\kern -\ht\zboxb \unvbox\zboxa \kern -\baselineskip}\,%
+ \right)$}%
+ \null\;\vbox{\kern \ht\zboxb \box\zboxc}}}
+
+\def \brace {\atopwithdelims\{\}}
+
+\def \bracematrix #1{% {row...}
+ \left\{ \matrix{#1} \right\}}
+
+\def \brack {\atopwithdelims[]}
+
+\def \bracketmatrix #1{% {row...}
+ \left[ \matrix{#1} \right]}
+
+\def \bracketmatrixfl #1{% {row...}
+ \left[ \matrixfl{#1} \right]}
+
+\def \bracketmatrixfr #1{% {row...}
+ \left[ \matrixfr{#1} \right]}
+
+\def \cases #1{% {row...}
+ \left\{ \,%
+ \vcenter{\matrixbaselines
+ \ialign{$##$\hfil&
+ \quad {\rm ##}\hfil \crcr
+ #1\crcr}}%
+ \right.}
+
+% This version of \cases has math in both columns.
+
+\def \mcases #1{% {row...}
+ \left\{ \,%
+ \vcenter{\matrixbaselines
+ \ialign{$##$\hfil&
+ \quad $##$\hfil \crcr
+ #1\crcr}}%
+ \right.}
+
+\def \cdots {\mathinner{\cdotp\cdotp\cdotp}}
+
+\def \ddots {%
+ \if \newdots
+ \vbox{\baselineskip = 4pt \lineskiplimit = 0pt
+ \hbox{.}
+ \hbox{\kern .4em .}
+ \hbox{\kern .8em .}}%
+ \else
+ \mathinner{\mkern 1mu \raise 7pt \vbox{\kern 7pt \hbox{.}}%
+ \mkern 2mu \raise 4pt \hbox{.}%
+ \mkern 2mu \raise 1pt \hbox{.}%
+ \mkern 1mu}%
+ \fi}
+
+\def \detmatrix #1{% {row...}
+ \left| \matrix{#1} \right|}
+
+\def \displayfrac #1#2{% {numerator}{denominator}
+ {\displaystyle \frac{#1}{#2}}}
+
+\def \displaylines #1{% {row...}
+ \openup \jot
+ \global\setflag \zdtop = \true
+ \everycr = {\noalign{\if \zdtop
+ \vskip -\lineskiplimit
+ \vskip \normallineskiplimit
+ \global\setflag \zdtop = \false
+ \else
+ \penalty \interdisplaylinepenalty
+ \fi}}%
+ \halign{\hbox to \displaywidth{$\tabskip = 0pt \everycr = {}%
+ \hfil \displaystyle ##\hfil$}\cr
+ #1\crcr}}
+
+\def \eqalign #1{% {row...}
+ \vcenter{%
+ \ialign{&\mathstrut \hfil $\displaystyle ##{}$&
+ $\displaystyle {}##$\hfil\cr
+ #1\crcr}}}
+
+\def \equalfill {%
+ $\mathord =\mkern -6mu
+ \cleaders \hbox{$\mkern -2mu \mathord =\mkern -2mu$}\hfill
+ \mkern -6mu \mathord =$}
+
+% All other fraction macros should use \frac.
+
+\def \frac #1#2{% {numerator}{denominator}
+ {{\mskip\fracbarhang #1\mskip\fracbarhang} \over
+ {\mskip\fracbarhang #2\mskip\fracbarhang}}}
+
+\def \fromunder #1{% {math}
+ \mathrel{\mathop{\longleftarrow}\limits^{#1}}}
+
+\def \hphantom {%
+ \setflag \zhphant = \true
+ \setflag \zvphant = \false
+ \zphanta}
+
+\def \joinrel {\mathrel{\mkern -3mu}}
+
+\def \largefrac #1#2{% {numerator}{denominator}
+ {\mathchoice{\mathdisplaystyle{\frac{#1}{#2}}}
+ {\mathdisplaystyle{\frac{#1}{#2}}}
+ {\mathtextstyle{\frac{#1}{#2}}}
+ {\mathscriptstyle{\frac{#1}{#2}}}}}
+
+\def \ldots {\mathinner{\ldotp\ldotp\ldotp}}
+
+\def \leftarrowfill {\zleftarrowfill{\textstyle}}
+\def \leftrightarrowfill {\zleftrightarrowfill{\textstyle}}
+\def \rightarrowfill {\zrightarrowfill{\textstyle}}
+\def \Rightarrowfill {\zRightarrowfill{\textstyle}}
+
+\def \zleftarrowfill #1{% {style}
+ \setbox\zboxa = \hbox{$#1-$}%
+ \ht\zboxa = 0pt
+ $#1\mathord\leftarrow \mkern -6mu
+ \cleaders \hbox{$#1\mkern -2mu \copy\zboxa \mkern -2mu$}\hfill
+ \mkern -6mu \box\zboxa$}
+
+\def \zleftrightarrowfill #1{% {style}
+ \setbox\zboxa = \hbox{$#1-$}%
+ \ht\zboxa = 0pt
+ $#1\mathord\leftarrow \mkern -6mu
+ \cleaders \hbox{$#1\mkern -2mu \box\zboxa \mkern -2mu$}\hfill
+ \mkern -6mu \mathord\rightarrow$}
+
+\def \zRightarrowfill #1{% {style}
+ \setbox\zboxa = \hbox{$#1=$}%
+ \ht\zboxa = 0pt
+ $#1\copy\zboxa \mkern -6mu
+ \cleaders \hbox{$#1\mkern -2mu \box\zboxa \mkern -2mu$}\hfill
+ \mkern -6mu \mathord\Rightarrow$}
+
+\def \zrightarrowfill #1{% {style}
+ \setbox\zboxa = \hbox{$#1-$}%
+ \ht\zboxa = 0pt
+ $#1\copy\zboxa \mkern -6mu
+ \cleaders \hbox{$#1\mkern -2mu \box\zboxa \mkern -2mu$}\hfill
+ \mkern -6mu \mathord\rightarrow$}
+
+\let \leqalignno = \eqalignno
+
+\def \mathstrut {\vphantom(}
+
+\def \matrix #1{% {row...}
+ \null\nonscript\,%
+ \vcenter{\matrixbaselines
+ \ialign{\hfil $##$\hfil&& \quad \hfil $##$\hfil \crcr
+ \mathstrut\crcr
+ \noalign{\kern -\baselineskip}%
+ #1\crcr
+ \mathstrut\crcr
+ \noalign{\kern -\baselineskip}}}%
+ \nonscript\,}
+
+\let \adjustmatrix = \noalign
+
+\def \matrixfl #1{% {row...}
+ \null\nonscript\,%
+ \vcenter{\matrixbaselines
+ \ialign{$##$\hfil && \quad $##$\hfil \crcr
+ \mathstrut\crcr
+ \noalign{\kern -\baselineskip}%
+ #1\crcr
+ \mathstrut\crcr
+ \noalign{\kern -\baselineskip}}}%
+ \nonscript\,}
+
+\def \matrixfr #1{% {row...}
+ \null\nonscript\,%
+ \vcenter{\matrixbaselines
+ \ialign{\hfil $##$&& \quad \hfil $##$\crcr
+ \mathstrut\crcr
+ \noalign{\kern -\baselineskip}%
+ #1\crcr
+ \mathstrut\crcr
+ \noalign{\kern -\baselineskip}}}%
+ \nonscript\,}
+
+\def \matrixbaselines {%
+ \baselineskip = \the\matrixspread\normalbaselineskip
+ \lineskiplimit = \normallineskiplimit
+ \lineskip = \normallineskip}
+
+\def \ontopof #1#2{{{#1} \atop {#2}}}% {numerator}{denominator}
+
+\def \openup {\afterassignment\zopenup \tdimena=}
+
+\def \zopenup {%
+ \advance \baselineskip by \tdimena
+ \advance \lineskiplimit by \tdimena
+ \advance \lineskip by \tdimena}
+
+\def \overbrace #1{%
+ \mathop{%
+ \vbox{\ialign{##\cr
+ \noalign{\kern 3pt}%
+ \downbracefill\cr
+ \noalign{\kern 3pt \nointerlineskip}%
+ $\hfil \displaystyle{#1}\hfil$\cr}}}\limits}
+
+\def \overleftarrow {\mathpalette\zoverleftarrow}
+\def \overleftrightarrow {\mathpalette\zoverleftrightarrow}
+\def \overRightarrow {\mathpalette\zoverRightarrow}
+\def \overrightarrow {\mathpalette\zoverrightarrow}
+
+\def \zoverleftarrow #1#2{% {style}{math}
+ \vbox{\ialign{##\cr
+ \zleftarrowfill{\scriptscriptstyle}\cr
+ \noalign{\nointerlineskip}%
+ $\hfil #1#2\hfil$\crcr}}}
+
+\def \zoverleftrightarrow #1#2{% {style}{math}
+ \vbox{\ialign{##\cr
+ \zleftrightarrowfill{\scriptscriptstyle}\cr
+ \noalign{\nointerlineskip}%
+ $\hfil #1#2\hfil$\crcr}}}
+
+\def \zoverRightarrow #1#2{% {style}{math}
+ \vbox{\ialign{##\cr
+ \zRightarrowfill{\scriptscriptstyle}\cr
+ \noalign{\nointerlineskip}%
+ $\hfil #1#2\hfil$\crcr}}}
+
+\def \zoverrightarrow #1#2{% {style}{math}
+ \vbox{\ialign{##\cr
+ \zrightarrowfill{\scriptscriptstyle}\cr
+ \noalign{\nointerlineskip}%
+ $\hfil #1#2\hfil$\crcr}}}
+
+\def \overset #1#2{
+ \mathbin{\mathop{#2}\limits^{#1}}}
+
+\def \parenmatrix #1{% {row...}
+ \left( \matrix{#1} \right)}
+
+\let \pmatrix = \parenmatrix
+
+\def \parenmatrixfl #1{% {row...}
+ \left( \matrixfl{#1} \right)}
+
+\def \parenmatrixfr #1{% {row...}
+ \left( \matrixfr{#1} \right)}
+
+\def \phantom {%
+ \setflag \zhphant = \true
+ \setflag \zvphant = \true
+ \zphanta}
+
+\def \zphanta {%
+ \if \mathmodep
+ \def \znext {\mathpalette\zphantb}%
+ \else
+ \let \znext = \zphantc
+ \fi
+ \znext}
+\def \zphantb #1#2{%
+ \setbox \zboxa = \hbox{$#1{#2}$}%
+ \zphantd}
+\def \zphantc #1{%
+ \setbox \zboxa = \hbox{#1}%
+ \zphantd}
+\def \zphantd {%
+ \setbox \zboxb = \hbox{}%
+ \if \zhphant \wd\zboxb = \wd\zboxa \fi
+ \if \zvphant \ht\zboxb = \ht\zboxa \dp\zboxb = \dp\zboxa \fi
+ \box \zboxb}
+
+\def \plainTeXmathdisplay {%
+ \global\everydisplay = {}}
+
+\def \pmod #1{\allowbreak \,({\rm mod}\,#1)}
+
+\def \Relbar {\mathrel =}
+\def \relbar {\mathrel{\smash -}}
+
+\definebox{\zrootbox}
+
+\def \nthroot #1{% {n}
+ \setbox\zrootbox = \hbox{$\scriptscriptstyle{#1}$}%
+ \mathpalette\zroot}
+
+\def \zroot #1#2{% {\style}{radicand}
+ \setbox\zboxa = \hbox{$#1\sqrt{#2}$}%
+ \tdimena = \ht\zboxa
+ \advance \tdimena by -\dp\zboxa
+ \mkern 5mu \raise .6\tdimena \copy\zrootbox \mkern -10mu \box\zboxa}
+
+\def \skew #1#2#3{% {amount}{accent}{char}
+ {\zmuskipa = #1mu
+ \divide \zmuskipa by 2
+ \mkern \zmuskipa
+ #2{\mkern -\zmuskipa{#3}\mkern \zmuskipa}%
+ \mkern -\zmuskipa}{}}
+
+\def \smallfrac #1#2{% {numerator}{denominator}
+ {\mathchoice{\mathtextstyle{\frac{#1}{#2}}}
+ {\mathscriptstyle{\frac{#1}{#2}}}
+ {\mathscriptscriptstyle{\frac{#1}{#2}}}
+ {\mathscriptscriptstyle{\frac{#1}{#2}}}}}
+
+\def \smash {%
+ \relax
+ \if \mathmodep
+ \def \znext {\mathpalette\zsmasha}%
+ \else
+ \let \znext = \zsmashb
+ \fi
+ \znext}
+
+\def \zsmasha #1#2{%
+ \setbox \zboxa = \hbox{$#1{#2}$}%
+ \zsmashc}
+\def \zsmashb #1{%
+ \setbox \zboxa = \hbox{#1}%
+ \zsmashc}
+\def \zsmashc {%
+ \ht\zboxa = 0pt
+ \dp\zboxa = 0pt
+ \box \zboxa}
+
+\def \sqrt {\radical"270370 }
+
+\let \sub = _
+\let \super = ^
+
+\def \Tounder #1{% {math}
+ \mathrel{\mathop{\Longrightarrow}\limits^{#1}}}
+
+\def \tounder #1{% {math}
+ \mathrel{\mathop{\longrightarrow}\limits^{#1}}}
+
+\def \underbrace #1{% {text}
+ \mathop{%
+ \vtop{\ialign{##\cr
+ $\hfil \displaystyle{#1}\hfil$\cr
+ \noalign{\kern 3pt \nointerlineskip}%
+ \upbracefill\cr
+ \noalign{\kern 3pt}}}}\limits}
+
+\def \underset #1#2{
+ \mathbin{\mathop{#2}\limits_{#1}}}
+
+\def \unit #1{% {text}
+ \if \mathmodep
+ {\nonscript\,\mtext{#1}}%
+ \else
+ \,#1%
+ \fi}
+
+\def \vdots {%
+ \if \newdots
+ \vbox{\baselineskip = 4pt \lineskiplimit = 0pt
+ \hbox{.}
+ \hbox{.}
+ \hbox{.}}%
+ \else
+ \vbox{\baselineskip = 4pt \lineskiplimit = 0pt
+ \kern 6pt
+ \hbox{.}
+ \hbox{.}
+ \hbox{.}}%
+ \fi}
+
+\def \vphantom {%
+ \setflag \zhphant = \false
+ \setflag \zvphant = \true
+ \zphanta}
+
+% Block Matrices
+% ----- --------
+
+
+\def \blockmatrix #1{% {rows}
+ \zblockmatrix{\false}{#1}}
+
+\def \blockmatrixvr #1{% {rows}
+ \zblockmatrix{\true}{#1}}
+
+\def \zblockmatrix #1#2{% {verticals?}{rows}
+ \left[
+ \vcenter{%
+ \defineatsigncommand @R{\colrule}%
+ \defineatsigncommand @N{\nocolrule}%
+ \offinterlineskip
+ \tdimena = \ht\strutbox \advance \tdimena by .2ex
+ \tdimenb = \dp\strutbox \advance \tdimenb by .4ex
+ \setbox \strutbox \hbox{\vrule width 0pt height \tdimena depth \tdimenb}%
+ \ialign{\hfil \strut \thirdspace $##$\thirdspace \hfil&&
+ \hspace{.35em}%
+ \vrule \if #1\colrule \else \nocolrule \fi
+ ##\relax
+ \hspace{.35em}&
+ \hfil \strut \thirdspace $##$\thirdspace \hfil\crcr
+ #2\crcr}}%
+ \right]}
+
+\def \rowrule {%
+ \noalign{%
+ \vskip .5ex
+ \hrule height .1ex\relax
+ \vskip .7ex}}
+
+\def \colrule {%
+ width .1ex }
+
+% Math Displays
+% ---- --------
+
+
+\defineblock{\mathdisplay}{\endmathdisplay}{\true}{}
+
+%~block mathdisplay
+% \abovepenalty = integer % Penalty above display.
+% \aboveskip = glue % Visual space above display.
+% \belowpenalty = integer % Penalty below display.
+% \belowskip = glue % Visual space below display.
+% \bodyfont = {...} % Font for display.
+% \def \comptextformat {...} % Composite number text formatter.
+% \diagramdiagarrowstyle = {...} % Style for diagonal arrows in diagrams.
+% \diagramgutter = dimen % Gutter between diagram columns.
+% \diagraminterrowskip = glue % Interrowskip for diagrams.
+% \diagramminarrow = dimen % Minimum length of arrow in diagram.
+% \hfuzz = dimen % Overhang allowed at end of line.
+% \interrowskip = glue % Extra visual space between equations.
+% \leftindent = dimen % Left indentation for \alignleft.
+% \matrixspread = {decimal} % Spread factor for matrices.
+% \def \numberformat {...} % Equation number formatter.
+% \position = {...} % Positioning options.
+% \rightindent = dimen % Right indentation for \alignright.
+% \textcolor = {...} % Color of text.
+%~end
+
+\definetoks{\diagramdiagarrowstyle}
+\definedimen{\diagramgutter}{0pt}
+\defineskip{\diagraminterrowskip}{0pt}
+\definedimen{\diagramminarrow}{0pt}
+
+% Positioning options are:
+% \alignleft Left aligned, with \leftindent.
+% \alignright Right aligned, with \rightindent.
+% \center Centered.
+% \numberleft Equation number on left.
+% \numberright Equation number on right.
+
+% These parameters are calculated:
+
+\definetoks{\mathdisplayeqno} % Text following \eqno marker.
+\definecount{\mathdisplayprevgraf}{-1} % Previous display's ending \prevgraf.
+\definecount{\mathdisplayprevpenalty}{0}% Previous display's \belowpenalty.
+\defineskip{\mathdisplayprevskip}{0pt} % Previous display's \belowskip.
+
+\declareeverypar{\global\mathdisplayprevgraf=-1}
+\zdeclareeveryvcontext{\zsavevcontext{\mathdisplayprevgraf=-1}}
+
+%~ This marker specifies that the following text is the equation number
+%~ for the math display.
+
+\definemarker{\eqno}
+
+
+\everydisplay = {\mathdisplay}
+
+\def \mathdisplay #1$${% equation $$
+ \advance \displayindent by \leftskip
+ \advance \displaywidth by -\leftskip
+ \advance \displaywidth by -\rightskip
+ % \beginblockscope is unnecessary.
+ \global\increment \mathdisplaydepth
+ \abovepenalty = 5000 %~default hard
+ \belowpenalty = \breakallowed %~default hard
+ \hfuzz = 1pt %~default hard
+ \leftindent = 0pt %~default soft
+ \matrixspread = {1.0} %~default soft
+ \rightindent = 0pt %~default soft
+ \textcolor = {}% %~default soft
+ \processdesign{\mathdisplay}{}%
+ % \mathdisplaynumber is incremented by \eqno, if appropriate.
+ \if \eqlp{\prevgraf}{\mathdisplayprevgraf}%
+ \aboveskip = -\belowskip
+ \advance \aboveskip by \interrowskip
+ \fi
+ \let \text = \mtext
+ \zmdparams
+ \settaginfo{}{}% % No tag info so far.
+ \if \notp{\emptytoksp{\textcolor}}\color{\the\textcolor}\fi
+ \mathdisplayformat{#1}%
+ \endmathdisplay}
+
+\def \endmathdisplay {%
+ \global\mathdisplayprevgraf = \prevgraf
+ \global\advance \mathdisplayprevgraf by 3
+ \global\mathdisplayprevpenalty = \belowpenalty
+ \global\mathdisplayprevskip = \belowskip
+ \global\decrement \mathdisplaydepth
+ \if \notp{\emptytoksp{\textcolor}}\endcolor \fi%
+ % \endblockscope is unnecessary.
+ $$}
+
+\definecount{\zmdhpos}{0}
+
+\def \zmdparams {%
+ \abovedisplayskip = \aboveskip
+ \abovedisplayshortskip = \aboveskip
+ \belowdisplayskip = \belowskip
+ \belowdisplayshortskip = \belowskip
+ \predisplaypenalty = \abovepenalty
+ \postdisplaypenalty = \belowpenalty
+ \zmdhpos = 0
+ \let \center = \relax
+ \def \alignleft {\zmdhpos = 1}%
+ \def \alignright {\zmdhpos = 2}%
+ \setflag \zmdnumleft = \false
+ \def \numberleft {\setflag \zmdnumleft = \true}%
+ \let \numberright = \relax
+ \the\position}
+
+\def \mathdisplayformat #1{% {display}
+ \the\bodyfont
+ \zmdparse#1\eqno\eqno\zmark
+ {\lineskiplimit = \maxdimen % Force \interrowskip between
+ \lineskip = \interrowskip % each row of multi-line display.
+ \ifcase \zmdhpos
+ \if \zmdnumleft % Centered display.
+ \hbox to \displaywidth {%
+ \rlap{\hspace{-1\leftskip}\zmdeqno}%
+ \hfil $\displaystyle \zmdeq$\hfil}%
+ \else
+ \hbox to \displaywidth {%
+ \hfil $\displaystyle \zmdeq$\hfil
+ \llap{\zmdeqno\hspace{-1\rightskip}}}%
+ \fi
+ \or
+ \if \zmdnumleft % Left-aligned display.
+ \hbox to \displaywidth {%
+ \hbox to \leftindent{\hspace{-1\leftskip}\zmdeqno\hss}%
+ $\displaystyle \zmdeq$\hfil}%
+ \else
+ \hbox to \displaywidth{%
+ \kern \leftindent $\displaystyle \zmdeq$\hfil
+ \llap{\zmdeqno\hspace{-1\rightskip}}}%
+ \fi
+ \or
+ \if \zmdnumleft % Right-aligned display.
+ \hbox to \displaywidth {%
+ \rlap{\hspace{-1\leftskip}\zmdeqno}%
+ \hfil $\displaystyle \zmdeq$\kern \rightindent}%
+ \else
+ \hbox to \displaywidth{%
+ \hfil $\displaystyle \zmdeq$%
+ \hbox to \rightindent{\hss\zmdeqno\hspace{-1\rightskip}}}%
+ \fi
+ \fi}}
+
+\def \zmdparse #1\eqno#2\eqno#3\zmark{% equation\eqno number\eqno ???\zmark
+ \def \zmdeq {#1}%
+ \if \andp{\emptyargp{#2}}{\emptyargp{#3}}%
+ \let \zmdeqno = \relax
+ \else
+ \def \zmdeqno {\zmdformeqno#2\tag\tag\zmark}%
+ \fi}
+
+% This macro is invoked to format equation numbers in both positions:
+% at the end of the display and at the end of \eqaligned rows.
+
+\def \zmdformeqno #1\tag#2\tag#3\zmark{% number\tag{xxx}\tag ???\zmark
+ \if \emptyargp{#1}%
+ \global\increment \mathdisplaynumber
+ \mathdisplayeqno = \expandafter{\number\mathdisplaynumber}%
+ \setcomptext{\mathdisplaycomptext}%
+ \else
+ \zmdexpliciteqno #1 \zmark
+ \fi
+ \settaginfo{\the\mathdisplaycomptext}{???}%
+ \hbox{\numberformat}%
+ \if \notp{\emptyargp{#3}}\zmdtageqno#2\zmark \fi}
+
+\def \zmdexpliciteqno #1#2 #3\zmark{%
+ \if \codeeqlp{#1}{!}%
+ \mathdisplayeqno = {#2}%
+ \mathdisplaycomptext = {#2}%
+ \else\if \codeeqlp{#1}{+}%
+ \global\increment \mathdisplaynumber
+ \mathdisplayeqno = \expandafter{\number\mathdisplaynumber #2}%
+ \setcomptext{\mathdisplaycomptext}%
+ \else\if \codeeqlp{#1}{,}%
+ \mathdisplayeqno = \expandafter{\number\mathdisplaynumber #2}%
+ \setcomptext{\mathdisplaycomptext}%
+ \else\if \codeeqlp{#1}{:}%
+ \global\increment \mathdisplaynumber
+ \mathdisplayeqno = {#2}%
+ \setcomptext{\mathdisplaycomptext}%
+ \else\if \codeeqlp{#1}{=}%
+ \zmdseteqno #2\zmark
+ \setcomptext{\mathdisplaycomptext}%
+ \else\if \codeeqlp{#1}{>}%
+ \zmdrefeqno #2;;\zmark
+%%% \mathdisplayeqno = {\ref{#2}}%
+%%% \mathdisplaycomptext = {\ref{#2}}%
+ \else
+ \mathdisplayeqno = {#1#2}%
+ \setcomptext{\mathdisplaycomptext}%
+ \fi\fi\fi\fi\fi\fi}
+
+\def \zmdseteqno #1;#2\zmark{%
+ \global\mathdisplaynumber = #1\relax
+ \mathdisplayeqno = \expandafter{\number\mathdisplaynumber #2}}
+
+\def \zmdrefeqno #1;#2;#3\zmark{%
+ \if \emptyargp{#2}%
+ \mathdisplayeqno = {\ref{#1}}%
+ \mathdisplaycomptext = {\ref{#1}}%
+ \else
+ \mathdisplayeqno = {\ref{#1}\,#2}%
+ \mathdisplaycomptext = {\ref{#1}\,#2}%
+ \fi}
+
+\def \zmdtageqno #1#2\zmark{%
+ \def \znext { }%
+ \if \znext#2\tag{#1}\else \tag{#1#2}\fi}
+
+\def \setmathdisplaynumber #1{%
+ \global\mathdisplaynumber = #1\relax
+ \global\decrement \mathdisplaynumber}
+
+%~ This modifier for |$$| is used when the display is the first thing
+%~ after a head, the first thing in a list item, the first thing in
+%~ a float, etc. It eliminates the vertical space above the display.
+
+\def \immediatemathdisplay {% %^modifier
+ \with{\abovepenalty = \breaknever
+ \aboveskip = 0pt}}
+
+% Aligned Equations
+% ------- ---------
+
+
+% This tool can only be used inside a math display.
+
+
+\defineskip{\zeqaltabskip}{0pt}
+\definedimen{\zeqnoshift}{0pt}
+
+\def \eqaligned #1{% {rows...}
+ \vcenter{%
+ \zeqalinit
+ \halign to \tdimena {%
+ \hfil $\displaystyle ##{}$\tabskip = 0pt&
+ $\displaystyle {}##$\hfil \tabskip = \zeqaltabskip&
+ \relax \zeqaleqno ##\zmark% \relax prevents expansion of \zeqaleqno.
+ \tabskip = \if \zmdnumleft \displaywidth \else 0pt \fi \cr
+ #1\crcr}}}
+
+\def \eqalignedpairs #1{% {rows...}
+ \vcenter{%
+ \zeqalinit
+ \halign to \tdimena {%
+ \hfil $\displaystyle ##{}$\tabskip = 0pt&
+ $\displaystyle {}##$\hfil&
+ \hfil $\displaystyle ##{}$&
+ $\displaystyle {}##$\hfil \tabskip = \zeqaltabskip&
+ \relax \zeqaleqno ##\zmark% \relax prevents expansion of \zeqaleqno.
+ \tabskip = \if \zmdnumleft \displaywidth \else 0pt \fi \cr
+ #1\crcr}}}
+
+\def \eqalignedtriples #1{% {rows...}
+ \vcenter{%
+ \zeqalinit
+ \halign to \tdimena {%
+ \hfil $\displaystyle ##{}$\tabskip = 0pt&
+ $\displaystyle {}##$\hfil&
+ \hfil $\displaystyle ##{}$&
+ $\displaystyle {}##$\hfil&
+ \hfil $\displaystyle ##{}$&
+ $\displaystyle {}##$\hfil \tabskip = \zeqaltabskip&
+ \relax \zeqaleqno ##\zmark% \relax prevents expansion of \zeqaleqno.
+ \tabskip = \if \zmdnumleft \displaywidth \else 0pt \fi \cr
+ #1\crcr}}}
+
+\def \eqalignedquadruples #1{% {rows...}
+ \vcenter{%
+ \zeqalinit
+ \halign to \tdimena {%
+ \hfil $\displaystyle ##{}$\tabskip = 0pt&
+ $\displaystyle {}##$\hfil&
+ \hfil $\displaystyle ##{}$&
+ $\displaystyle {}##$\hfil&
+ \hfil $\displaystyle ##{}$&
+ $\displaystyle {}##$\hfil&
+ \hfil $\displaystyle ##{}$&
+ $\displaystyle {}##$\hfil \tabskip = \zeqaltabskip&
+ \relax \zeqaleqno ##\zmark% \relax prevents expansion of \zeqaleqno.
+ \tabskip = \if \zmdnumleft \displaywidth \else 0pt \fi \cr
+ #1\crcr}}}
+
+\def \zeqalinit {%
+ \def \eqno {&\relax}% \relax prevents expansion of stuff after \eqno.
+ \tdimena = \displaywidth
+ \advance \tdimena by -\leftindent
+ \advance \tdimena by -\rightindent
+ \zeqaltabskip = \if \eqlp{\zmdhpos}{2}0pt \else \centerindent \fi
+ \if \zmdnumleft
+ \zeqnoshift = \leftskip \advance \zeqnoshift by \leftindent
+ \else
+ \zeqnoshift = \rightskip \advance \zeqnoshift by \rightindent
+ \fi
+ \tabskip = \if \eqlp{\zmdhpos}{1}0pt \else \centerindent \fi}
+
+\def \zeqaleqno \relax#1\zmark{% \relax [\eqno [text]][\tag]\zmark
+ \if \zmdnumleft
+ \kern -\displaywidth
+ \rlap{\zmdformeqno#1\tag\tag\zmark}%
+ \else
+ \llap{\zmdformeqno#1\tag\tag\zmark \hspace{-\zeqnoshift}}%
+ \fi}
+
+\let \adjustmathdisplay = \noalign
+
+% Diagrams
+% --------
+
+
+% This tool can only be used inside a math display.
+
+
+\def \diagram #1{% {rows...}
+ \zdiagcmds
+ \null\,%
+ \vcenter{%
+ \lineskip = \diagraminterrowskip
+ \lineskiplimit = \lineskip
+ \tabskip = -\diagramgutter
+ \halign{%
+ &\kern \diagramgutter \hfil $\displaystyle ##$\hfil \tabskip = 0pt \cr
+ #1\crcr}}%
+ \,}
+
+\def \zdiagcmds {%
+ \defineatsigncommand @>##1>##2>{\zdiagra{##1}{##2}}%
+ \defineatsigncommand @<##1<##2<{\zdiagla{##1}{##2}}%
+ \defineatsigncommand @X##1X##2X{\zdiaglra{##1}{##2}}%
+ \defineatsigncommand @=##1=##2={\zdiaghb{##1}{##2}}%
+ \defineatsigncommand @V##1V##2V{%
+ \zdiagva{c}{}{\hbox}{\big\downarrow}{##1}{##2}}%
+ \defineatsigncommand @A##1A##2A{%
+ \zdiagva{c}{}{\hbox}{\big\uparrow}{##1}{##2}}%
+ \defineatsigncommand @|##1|##2|{%
+ \zdiagva{c}{}{\hbox}{\big|}{##1}{##2}}%
+ \defineatsigncommand @H##1|##2|{%
+ \zdiagva{c}{}{\hbox}{\big\Vert}{##1}{##2}}%
+ \defineatsigncommand @1##11##21##31{%
+ \zdiagva{##1}{l}{r}{\the\diagramdiagarrowstyle \mathchar "7025}{##2}{##3}}%
+ \defineatsigncommand @3##13##23##33{%
+ \zdiagva{##1}{l}{r}{\the\diagramdiagarrowstyle \mathchar "7026}{##2}{##3}}%
+ \defineatsigncommand @5##15##25##35{%
+ \zdiagva{##1}{r}{l}{\the\diagramdiagarrowstyle \mathchar "702E}{##2}{##3}}%
+ \defineatsigncommand @7##17##27##37{%
+ \zdiagva{##1}{r}{l}{\the\diagramdiagarrowstyle \mathchar "702D}{##2}{##3}}%
+ \defineatsigncommand @"##1"##2"{\zdiagwd{##1}{##2}}}
+
+\def \zdiagra #1#2{%
+ {\setbox \zboxa = \hbox{$\scriptstyle \;{#1}\;\;\;$}%
+ \setbox \zboxb = \hbox{$\scriptstyle \;{#2}\;\;\;$}%
+ \setbox \zboxc = \hbox{$#2$}%
+ \tdimena = \diagramminarrow
+ \if \dimgtrp{\wd\zboxa}{\tdimena}\tdimena = \wd\zboxa \fi
+ \if \dimgtrp{\wd\zboxb}{\tdimena}\tdimena = \wd\zboxb \fi
+ \mathrel{\mathop{\hbox to \tdimena {\rightarrowfill}}%
+ \limits^{#1}\if \dimposp{\wd\zboxc}_{#2}\fi}}}
+
+\def \zdiagla #1#2{%
+ {\setbox \zboxa = \hbox{$\scriptstyle \;\;\;{#1}\;$}%
+ \setbox \zboxb = \hbox{$\scriptstyle \;\;\;{#2}\;$}%
+ \setbox \zboxc = \hbox{$#2$}%
+ \tdimena = \diagramminarrow
+ \if \dimgtrp{\wd\zboxa}{\tdimena}\tdimena = \wd\zboxa \fi
+ \if \dimgtrp{\wd\zboxb}{\tdimena}\tdimena = \wd\zboxb \fi
+ \mathrel{\mathop{\hbox to \tdimena {\leftarrowfill}}%
+ \limits^{#1}\if \dimposp{\wd\zboxc}_{#2}\fi}}}
+
+\def \zdiaglra #1#2{%
+ {\setbox \zboxa = \hbox{$\scriptstyle \;\;\;{#1}\;\;\;$}%
+ \setbox \zboxb = \hbox{$\scriptstyle \;\;\;{#2}\;\;\;$}%
+ \setbox \zboxc = \hbox{$#2$}%
+ \tdimena = \diagramminarrow
+ \if \dimgtrp{\wd\zboxa}{\tdimena}\tdimena = \wd\zboxa \fi
+ \if \dimgtrp{\wd\zboxb}{\tdimena}\tdimena = \wd\zboxb \fi
+ \mathrel{\mathop{\hbox to \tdimena {\leftrightarrowfill}}%
+ \limits^{#1}\if \dimposp{\wd\zboxc}_{#2}\fi}}}
+
+\def \zdiaghb #1#2{%
+ {\setbox \zboxa = \hbox{$\scriptstyle \;{#1}\;$}%
+ \setbox \zboxb = \hbox{$\scriptstyle \;{#2}\;$}%
+ \setbox \zboxc = \hbox{$#2$}%
+ \tdimena = \diagramminarrow
+ \if \dimgtrp{\wd\zboxa}{\tdimena}\tdimena = \wd\zboxa \fi
+ \if \dimgtrp{\wd\zboxb}{\tdimena}\tdimena = \wd\zboxb \fi
+ \mathrel{\mathop{\hbox to \tdimena {\equalfill}}%
+ \limits^{#1}\if \dimposp{\wd\zboxc}_{#2}\fi}}}
+
+\def \zdiagva #1#2#3#4#5#6{% {centering}{h-overlap}{t-overlap}
+ % {arrow}{left-label}{right-label}
+ \if \codeeqlp{#1}{h}%
+ \if \codeeqlp{#2}{l}%
+ \llap{$\scriptstyle{#5}\mkern 2mu{#4}$}%
+ \rlap{$\mkern 2mu \scriptstyle #6$}%
+ \else
+ \llap{$\scriptstyle{#5}\mkern 2mu$}%
+ \rlap{${#4}\mkern 2mu \scriptstyle{#6}$}%
+ \fi
+ \else\if \codeeqlp{#1}{t}%
+ \if \codeeqlp{#3}{l}%
+ \llap{$\scriptstyle{#5}\mkern 2mu{#4}$}
+ \rlap{$\mkern 2mu \scriptstyle #6$}%
+ \else
+ \llap{$\scriptstyle{#5}\mkern 2mu$}
+ \rlap{${#4}\mkern 2mu \scriptstyle #6$}%
+ \fi
+ \else
+ \llap{$\scriptstyle{#5}\mkern 2mu$}{#4}%
+ \rlap{$\mkern 2mu \scriptstyle #6$}%
+ \fi\fi}
+
+\def \zdiagwd #1#2{%
+ \setbox \zboxa = \hbox{$\scriptstyle #2$}%
+ \hbox to \wd\zboxa {\hfil $\scriptstyle #1$\hfil}}
+
+% Enunciation Definition
+% ----------- ----------
+
+
+\setlist \zenuntypelist = {}
+
+
+\def \defineenunciationtype #1#2{% {type}{association}
+ \if \emptyargp{#2}%
+ \if \withname\undefinedp{\enunciation#1number}%
+ \withname\definecount{\enunciation#1number}{0}%
+ \withname\declaresnapitem{\enunciation#1number}%
+ \fi
+ \else
+ \defineenunciationtype{#2}{}%
+ \edef \znext {%
+ \global\withname\let{\enunciation#1number}=\name{\enunciation#2number}}%
+ \znext
+ \fi
+ \append{#1}{\zenuntypelist}}
+
+%~ Use this command to define a new type of enunciation.
+
+\def \defineenunciation #1#2#3{% {type}{association}{design}
+ \defineenunciationtype{#1}{#2}%
+ \withname\def {\enunciation#1design}{#3}}
+
+
+% This is deprecated in favor of \defineenunciation.
+
+\def \defineenunciationtypedesign #1#2#3{% {type}{assocation}{design}
+ \defineenunciationtype{#1}{#2}%
+ \withname\def {\enunciation#1design}{#3}}
+
+\def \resetenunciationnumbers {%
+ \maplist{\global\name{\enunciation##1number}=0\relax}{\zenuntypelist}}
+
+% Enunciation Block
+% ----------- -----
+
+
+\defineblock{\enunciation}{\endenunciation}{\false}{}
+
+%~block enunciation Type
+% \abovepenalty = integer % Penalty above block
+% \aboveskip = glue % Space b/b above block.
+% \setflag \allowclubline = flag % True if club allowed below.
+% \setflag \allownesting = flag % True if blocks can be nested.
+% \attribution = {...} % Attribution text (no longer used).
+% \setflag \attributionarg = flag % True if \enunciation takes attribution argument.
+% \autoqed = {,,,} % Automatic QED at end.
+% \belowpenalty = integer % Penalty below block.
+% \belowskip = glue % Space b/b below block.
+% \bodyfont = {...} % Font for text.
+% \def \comptextformat {...} % Composite number text formatter.
+% \continue = integer % Continued or continuation.
+% \difficulty = integer % Level of difficulty.
+% \def \endformat {...} % End of enunciation formatter.
+% \def \labelformat ##1{...} % Enunciation label formatter.
+% \leftindent = glue % Left indentation.
+% \parindent = dimen % Paragraph indent.
+% \parrag = dimen % Paragraph raggedness.
+% \parskip = glue % Paragraph skip.
+% \rightindent = glue % Right indentation.
+% \width = dimen % Width of text.
+%~end
+
+\definetoks{\attribution}
+\definecount{\attributiontype}{0} % 0: none; 1: attribution; 2: new title
+\definetoks{\autoqed}
+
+\setflag \zautoqeddone = \false
+
+
+\def \enunciation #1{% {type}{optional-attribution}
+ \beginblockscope{enunciation}%
+ \global\increment \enunciationdepth
+ \abovepenalty = \breakgood %~default hard
+ \setflag \allowclubline = \false %~default soft
+ \setflag \allownesting = \false %~default soft
+ \attribution = {}% %~default with
+ \setflag \attributionarg = \false %~default soft
+ \autoqed = {}% %~default soft
+ \belowpenalty = \breakgood %~default hard
+ \continue = 0 %~default with
+ \setflag \continuation = \false % Deprecated
+ \difficulty = 0 %~default with
+ \def \endformat {}% %~default soft
+ \processdesign{\enunciation}{#1}%
+ \zsetcontinue % Handle old \continuation.
+ \if \andp{\notp{\allownesting}}{\gtrp{\enunciationdepth}{1}}%
+ \error{blkcantnest}
+ {An enunciation cannot be nested inside itself}%
+ \fi
+ \if \attributionarg
+ \let \znext = \enunciationarg
+ \else
+ \let \znext = \enunciationb
+ \fi
+ \znext{#1}}
+
+\def \enunciationarg #1#2{% {type}{attribution}
+ \if \notp{\emptyargp{#2}}\attribution = {#2}\fi
+ \enunciationb{#1}}
+
+\def \enunciationb #1{% {type}
+ \attributiontype = 0\relax
+ \global\setflag \zautoqeddone = \false
+ \if \notp{\emptytoksp{\attribution}}%
+ \expandafter\zparseenunattr \the\attribution \zmark
+ \fi
+ \if \notp{\continuationp}%
+ \global\withname\increment{\enunciation#1number}%
+ \fi
+ \global\withname\enunciationnumber{\enunciation#1number}%
+ \setcomptext{\enunciationcomptext}%
+ \enunciationformat
+ \settaginfo{\the\enunciationcomptext}{???}%
+ \ignorespaces}
+
+\def \endenunciation {%
+ \futurelet\nexttoken \zendenunciation}
+
+\def \zendenunciation {%
+ \endenunciationformat
+ \global\decrement \enunciationdepth
+ \endblockscope{enunciation}%
+ \parnext}
+
+\def \enunciationformat {%
+ \endgraf
+ \the\bodyfont
+ \bbskipabove{\abovepenalty}{\aboveskip}%
+ \alterindentation{\leftindent}{\rightindent}%
+ \settextwidth{\width}%
+ \setparrag{\parrag}%
+ \expandafter\labelformat\expandafter{\the\attribution}%
+ \if \notp{\allowclubline}\overrideclubpenalty{\breaknever}\fi}
+
+\def \endenunciationformat{%
+ \if \notp{\zautoqeddone}\the\autoqed \fi
+ \endgraf
+ \endformat
+ \bbskipbelowblockpar{\nexttoken}{\belowpenalty}{\belowskip}}
+
+%~ This marker indicates that the enunciation title completely
+%~ replaces the default title.
+
+\definemarker{\title}
+
+\def \zparseenunattr #1#2\zmark{%
+ \def \znext {#1}%
+ \def \ztitle {\title}%
+ \if \tokeqlp{\znext}{\ztitle}%
+ \attribution = {#2}%
+ \attributiontype = 2\relax
+ \else
+ \attributiontype = 1\relax
+ \fi}
+
+%~ This command is used in enunciation design macros to select the
+%~ title format based on the |\enunciation| *attribution* argument.
+
+\long\def \attributiontypecase #1#2#3{% {format1}{format2}{format3}
+ \ifcase \attributiontype
+ #1% no attribution
+ \or
+ #2% normal attribution
+ \or
+ #3% title override
+ \fi}%
+
+% QED Definition
+% --- ----------
+
+
+%~ This command defines an end-of-enunciation dingbat for use
+%~ with enunciations.
+
+\def \defineeoedingbat #1#2#3{% {name}{text}{space}
+ \withname\gdef {#1dingbat}{#2}%
+ \gdef #1{\zformateoe{#2}#3\zmark}%
+ \withname\gdef {\no\expandafter\discardtok\string#1}{%
+ \global\setflag \zautoqeddone = \true}}
+
+\def \zformateoe #1#2#3\zmark{%
+ {\def \znext {#2}%
+ \def \zfr {\flushright}%
+ \if \tokeqlp{\znext}{\zfr}%
+ \if \vmodep
+ \rightline{#1}%
+ \else\if \mathmodep
+ \hskip #3{#1}%
+ \else
+ \hskip #3\retain \nobreak \hfill {#1}%
+ \fi\fi
+ \else
+ \if \vmodep
+ \rightline{#1}%
+ \else\if \mathmodep
+ \hskip #2#3{#1}%
+ \else
+ \unskip \hskip #2#3\hskip 0pt plus -1fill \retain \nobreak \hfill {#1}%
+ \fi\fi
+ \fi
+ \global\setflag \zautoqeddone = \true}}
+
+
+%~ This command is deprecated in favor of |\defineeoedingbat|.
+
+\def \defineqed #1#2#3#4{% {\name}{text}{space}{min-space}
+ \withname\gdef {#1dingbat}{#2}%
+ \gdef #1{\zformatqed{#2}{#3}{#4}}%
+ \withname\gdef{\no\expandafter\discardtok\string#1}{%
+ \global\setflag \zautoqeddone = \true}}
+
+\def \zformatqed #1#2#3{% {text}{space}{min-space}
+ {\def \znext {#2}%
+ \def \zfr {\flushright}%
+ \if \tokeqlp{\znext}{\zfr}%
+ \hspace{#3}\retain \nobreak \hfill {#1}%
+ \else
+ \if \vmodep
+ \noindent #1\par
+ \else
+ \hspace{#2}{#1}%
+ \fi
+ \fi
+ \global\setflag \zautoqeddone = \true}}