]>
Commit | Line | Data |
---|---|---|
20552425 | 1 | %% |
2 | %% This is file `amsmath.sty', | |
3 | %% generated with the docstrip utility. | |
4 | %% | |
5 | %% The original source files were: | |
6 | %% | |
7 | %% amsmath.dtx | |
8 | %% | |
9 | %%% ==================================================================== | |
10 | %%% @LaTeX-file{ | |
11 | %%% filename = "amsmath.dtx", | |
12 | %%% version = "2.13", | |
13 | %%% date = "2000/07/18", | |
14 | %%% time = "08:16:41 EDT", | |
15 | %%% author = "American Mathematical Society", | |
16 | %%% copyright = "Copyright 1995, 2000 American Mathematical Society, | |
17 | %%% all rights reserved. Copying of this file is | |
18 | %%% authorized only if either: | |
19 | %%% (1) you make absolutely no changes to your copy, | |
20 | %%% including name; OR | |
21 | %%% (2) if you do make changes, you first rename it | |
22 | %%% to some other name.", | |
23 | %%% address = "American Mathematical Society, | |
24 | %%% Technical Support, | |
25 | %%% Publications Technical Group, | |
26 | %%% P. O. Box 6248, | |
27 | %%% Providence, RI 02940, | |
28 | %%% USA", | |
29 | %%% telephone = "401-455-4080 or (in the USA and Canada) | |
30 | %%% 800-321-4AMS (321-4267)", | |
31 | %%% FAX = "401-331-3842", | |
32 | %%% checksum = "38084 5829 21569 202795", | |
33 | %%% email = "tech-support@ams.org (Internet)", | |
34 | %%% codetable = "ISO/ASCII", | |
35 | %%% keywords = "latex, amslatex, math, amsmath", | |
36 | %%% supported = "yes", | |
37 | %%% abstract = "This is a \LaTeX{} package that provides a variety of | |
38 | %%% extra mathematical features, largely derived from | |
39 | %%% AMS-\TeX{}.", | |
40 | %%% docstring = "The checksum field above contains a CRC-16 checksum | |
41 | %%% as the first value, followed by the equivalent of | |
42 | %%% the standard UNIX wc (word count) utility output of | |
43 | %%% lines, words, and characters. This is produced by | |
44 | %%% Robert Solovay's checksum utility.", | |
45 | %%% } | |
46 | %%% ==================================================================== | |
47 | \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) | |
48 | [1994/12/01]% LaTeX date must be December 1994 or later | |
49 | \ProvidesPackage{amsmath}[2000/07/18 v2.13 AMS math features] | |
50 | \edef\@temp{\catcode 96=\number\catcode 96 } | |
51 | \catcode\string `\`=12 | |
52 | \def\do#1{\catcode\number`#1=\number\catcode`#1} | |
53 | \edef\@temp{% | |
54 | \noexpand\AtEndOfPackage{% | |
55 | \@temp | |
56 | \do\"\do\'\do\(\do\)\do\*\do\+\do\,\do\-\do\.% | |
57 | \do\/\do\<\do\=\do\>\do\[\do\]\do\^\do\_\relax | |
58 | }% | |
59 | } | |
60 | \@temp | |
61 | \def\do#1{\catcode\number`#1=12 } | |
62 | \do\"\do\'\do\(\do\)\do\*\do\+\do\,\do\-\do\. | |
63 | \do\/\do\<\do\=\do\>\do\[\do\] | |
64 | \catcode`\^=7 \catcode`\_=8 | |
65 | \DeclareOption{intlimits}{\let\ilimits@\displaylimits} | |
66 | \DeclareOption{nointlimits}{\let\ilimits@\nolimits} | |
67 | \DeclareOption{sumlimits}{\let\slimits@\displaylimits} | |
68 | \DeclareOption{nosumlimits}{\let\slimits@\nolimits} | |
69 | \DeclareOption{namelimits}{\PassOptionsToPackage{namelimits}{amsopn}} | |
70 | \DeclareOption{nonamelimits}{% | |
71 | \PassOptionsToPackage{nonamelimits}{amsopn}} | |
72 | \newif\ifctagsplit@ | |
73 | \newif\iftagsleft@ | |
74 | \DeclareOption{leqno}{\tagsleft@true} | |
75 | \DeclareOption{reqno}{\tagsleft@false} | |
76 | \DeclareOption{centertags}{\ctagsplit@true} | |
77 | \DeclareOption{tbtags}{\ctagsplit@false} | |
78 | \DeclareOption{cmex10}{% | |
79 | \ifnum\cmex@opt=\@ne \def\cmex@opt{0}% | |
80 | \else \def\cmex@opt{10}\fi | |
81 | } | |
82 | \@ifundefined{cmex@opt}{\def\cmex@opt{7}}{} | |
83 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
84 | \newif\if@fleqn | |
85 | \newskip\@mathmargin | |
86 | \@mathmargin\@centering | |
87 | \DeclareOption{fleqn}{% | |
88 | \@fleqntrue | |
89 | \@mathmargin = -1sp | |
90 | \let\mathindent=\@mathmargin | |
91 | \AtBeginDocument{% | |
92 | \ifdim\@mathmargin= -1sp | |
93 | \@mathmargin\leftmargini minus\leftmargini | |
94 | \fi | |
95 | }% | |
96 | } | |
97 | \DeclareOption{?}{} | |
98 | \ExecuteOptions{nointlimits,sumlimits,namelimits,centertags} | |
99 | \ProcessOptions\par | |
100 | \@ifpackagewith{amsmath}{?}{% | |
101 | \typeout{^^J% | |
102 | Documentation for the amsmath package is found in amsldoc.dvi^^J% | |
103 | (or .pdf or .tex).^^J% | |
104 | ^^J% | |
105 | See also http://www.ams.org/tex/amslatex.html.^^J% | |
106 | ^^J% | |
107 | Note: Using the first edition of The LaTeX Companion (1994) without^^J% | |
108 | errata as a guide for amsmath use is not recommended.^^J% | |
109 | }% | |
110 | }{% | |
111 | \typeout{% | |
112 | For additional information on amsmath, use the \lq ?\rq\space option.% | |
113 | }% | |
114 | } | |
115 | \ifnum\cmex@opt=7 \relax | |
116 | \DeclareFontShape{OMX}{cmex}{m}{n}{% | |
117 | <-8>cmex7<8>cmex8<9>cmex9% | |
118 | <10><10.95><12><14.4><17.28><20.74><24.88>cmex10% | |
119 | }{}% | |
120 | \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax | |
121 | \else | |
122 | \ifnum\cmex@opt=\z@ % need to override cmex7 fontdef from amsfonts | |
123 | \begingroup | |
124 | \fontencoding{OMX}\fontfamily{cmex}% | |
125 | \expandafter\let\csname OMX+cmex\endcsname\relax | |
126 | \try@load@fontshape | |
127 | \endgroup | |
128 | \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax | |
129 | \def\cmex@opt{10}% | |
130 | \fi | |
131 | \fi | |
132 | \RequirePackage{amstext}[1995/01/25] | |
133 | \RequirePackage{amsbsy}[1995/01/20] | |
134 | \RequirePackage{amsopn}[1995/01/20] | |
135 | \def\@amsmath@err{\PackageError{amsmath}} | |
136 | \providecommand{\AmS}{{\protect\AmSfont | |
137 | A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} | |
138 | \newcommand{\AmSfont}{% | |
139 | \usefont{OMS}{cmsy}{\if\@xp\@car\f@series\@nil bb\else m\fi}{n}} | |
140 | \def\@mathmeasure#1#2#3{\setbox#1\hbox{\frozen@everymath\@emptytoks | |
141 | \m@th$#2#3$}} | |
142 | \@ifundefined{inf@bad}{% | |
143 | \newcount\inf@bad \inf@bad=1000000 \relax | |
144 | }{} | |
145 | \DeclareRobustCommand{\tmspace}[3]{% | |
146 | \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} | |
147 | \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} | |
148 | \let\thinspace\, | |
149 | \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} | |
150 | \let\negthinspace\! | |
151 | \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} | |
152 | \let\medspace\: | |
153 | \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} | |
154 | \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} | |
155 | \let\thickspace\; | |
156 | \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} | |
157 | \newcommand{\mspace}[1]{\mskip#1\relax} | |
158 | \def\@tempa#1#2\@nil{% | |
159 | \ifx\delimiter#1\@tempcnta#2\relax\else\@tempcnta\z@\fi | |
160 | } | |
161 | \@xp\@tempa\vert\@empty\@nil | |
162 | \ifnum\@tempcnta>\z@ | |
163 | \advance\@tempcnta "4000000 | |
164 | \xdef\lvert{\delimiter\number\@tempcnta\space } | |
165 | \advance\@tempcnta "1000000 | |
166 | \xdef\rvert{\delimiter\number\@tempcnta\space } | |
167 | \else | |
168 | \ifx\@@undefined\lvert | |
169 | % Fall back to cmex encoding since we don't know what else to do. | |
170 | \DeclareMathDelimiter{\lvert} | |
171 | {\mathopen}{symbols}{"6A}{largesymbols}{"0C} | |
172 | \DeclareMathDelimiter{\rvert} | |
173 | {\mathclose}{symbols}{"6A}{largesymbols}{"0C} | |
174 | \fi | |
175 | \fi | |
176 | \@xp\@tempa\Vert\@empty\@nil | |
177 | \ifnum\@tempcnta>\z@ | |
178 | \advance\@tempcnta "4000000 | |
179 | \xdef\lVert{\delimiter\number\@tempcnta\space } | |
180 | \advance\@tempcnta "1000000 | |
181 | \xdef\rVert{\delimiter\number\@tempcnta\space } | |
182 | \else | |
183 | \ifx\@@undefined\lVert | |
184 | \DeclareMathDelimiter{\lVert} | |
185 | {\mathopen}{symbols}{"6B}{largesymbols}{"0D} | |
186 | \DeclareMathDelimiter{\rVert} | |
187 | {\mathclose}{symbols}{"6B}{largesymbols}{"0D} | |
188 | \fi | |
189 | \fi | |
190 | \@saveprimitive\over\@@over | |
191 | \@saveprimitive\atop\@@atop | |
192 | \@saveprimitive\above\@@above | |
193 | \@saveprimitive\overwithdelims\@@overwithdelims | |
194 | \@saveprimitive\atopwithdelims\@@atopwithdelims | |
195 | \@saveprimitive\abovewithdelims\@@abovewithdelims | |
196 | \DeclareRobustCommand{\primfrac}[1]{% | |
197 | \PackageWarning{amsmath}{% | |
198 | Foreign command \@backslashchar#1;\MessageBreak | |
199 | \protect\frac\space or \protect\genfrac\space should be used instead% | |
200 | \MessageBreak | |
201 | } | |
202 | \global\@xp\let\csname#1\@xp\endcsname\csname @@#1\endcsname | |
203 | \csname#1\endcsname | |
204 | } | |
205 | \renewcommand{\over}{\primfrac{over}} | |
206 | \renewcommand{\atop}{\primfrac{atop}} | |
207 | \renewcommand{\above}{\primfrac{above}} | |
208 | \renewcommand{\overwithdelims}{\primfrac{overwithdelims}} | |
209 | \renewcommand{\atopwithdelims}{\primfrac{atopwithdelims}} | |
210 | \renewcommand{\abovewithdelims}{\primfrac{abovewithdelims}} | |
211 | \DeclareRobustCommand{\frac}[2]{{\begingroup#1\endgroup\@@over#2}} | |
212 | \newcommand{\dfrac}{\genfrac{}{}{}0} | |
213 | \newcommand{\tfrac}{\genfrac{}{}{}1} | |
214 | \DeclareRobustCommand{\binom}{\genfrac()\z@{}} | |
215 | \newcommand{\dbinom}{\genfrac(){0pt}0} | |
216 | \newcommand{\tbinom}{\genfrac(){0pt}1} | |
217 | \DeclareRobustCommand{\genfrac}[4]{% | |
218 | \def\@tempa{#1#2}% | |
219 | \edef\@tempb{\@nx\@genfrac\@mathstyle{#4}% | |
220 | \csname @@\ifx @#3@over\else above\fi | |
221 | \ifx\@tempa\@empty \else withdelims\fi\endcsname} | |
222 | \@tempb{#1#2#3}} | |
223 | \def\@genfrac#1#2#3#4#5{{#1{\begingroup#4\endgroup#2#3\relax#5}}} | |
224 | \def\@mathstyle#1{% | |
225 | \ifx\@empty#1\@empty\relax | |
226 | \else\ifcase#1\displaystyle % case 0 | |
227 | \or\textstyle\or\scriptstyle\else\scriptscriptstyle\fi\fi} | |
228 | \begingroup | |
229 | \edef\@tempa{\string\mathchar"} | |
230 | \def\@tempb#1"#2\@nil{#1"} | |
231 | \edef\@tempc{\expandafter\@tempb\meaning\coprod "\@nil} | |
232 | \ifx\@tempa\@tempc | |
233 | \global\let\coprod@\coprod | |
234 | \gdef\coprod{\DOTSB\coprod@\slimits@} | |
235 | \global\let\bigvee@\bigvee | |
236 | \gdef\bigvee{\DOTSB\bigvee@\slimits@} | |
237 | \global\let\bigwedge@\bigwedge | |
238 | \gdef\bigwedge{\DOTSB\bigwedge@\slimits@} | |
239 | \global\let\biguplus@\biguplus | |
240 | \gdef\biguplus{\DOTSB\biguplus@\slimits@} | |
241 | \global\let\bigcap@\bigcap | |
242 | \gdef\bigcap{\DOTSB\bigcap@\slimits@} | |
243 | \global\let\bigcup@\bigcup | |
244 | \gdef\bigcup{\DOTSB\bigcup@\slimits@} | |
245 | \global\let\prod@\prod | |
246 | \gdef\prod{\DOTSB\prod@\slimits@} | |
247 | \global\let\sum@\sum | |
248 | \gdef\sum{\DOTSB\sum@\slimits@} | |
249 | \global\let\bigotimes@\bigotimes | |
250 | \gdef\bigotimes{\DOTSB\bigotimes@\slimits@} | |
251 | \global\let\bigoplus@\bigoplus | |
252 | \gdef\bigoplus{\DOTSB\bigoplus@\slimits@} | |
253 | \global\let\bigodot@\bigodot | |
254 | \gdef\bigodot{\DOTSB\bigodot@\slimits@} | |
255 | \global\let\bigsqcup@\bigsqcup | |
256 | \gdef\bigsqcup{\DOTSB\bigsqcup@\slimits@} | |
257 | \fi | |
258 | \endgroup | |
259 | \newcommand{\leftroot}{\@amsmath@err{\Invalid@@\leftroot}\@eha} | |
260 | \newcommand{\uproot}{\@amsmath@err{\Invalid@@\uproot}\@eha} | |
261 | \newcount\uproot@ | |
262 | \newcount\leftroot@ | |
263 | \renewcommand{\root}{\relaxnext@ | |
264 | \DN@{\ifx\@let@token\uproot\let\next@\nextii@\else | |
265 | \ifx\@let@token\leftroot\let\next@\nextiii@\else | |
266 | \let\next@\plainroot@\fi\fi\next@}% | |
267 | \def\nextii@\uproot##1{\uproot@##1\relax\FN@\nextiv@}% | |
268 | \def\nextiv@{\ifx\@let@token\@sptoken\DN@. {\FN@\nextv@}\else | |
269 | \DN@.{\FN@\nextv@}\fi\next@.}% | |
270 | \def\nextv@{\ifx\@let@token\leftroot\let\next@\nextvi@\else | |
271 | \let\next@\plainroot@\fi\next@}% | |
272 | \def\nextvi@\leftroot##1{\leftroot@##1\relax\plainroot@}% | |
273 | \def\nextiii@\leftroot##1{\leftroot@##1\relax\FN@\nextvii@}% | |
274 | \def\nextvii@{\ifx\@let@token\@sptoken | |
275 | \DN@. {\FN@\nextviii@}\else | |
276 | \DN@.{\FN@\nextviii@}\fi\next@.}% | |
277 | \def\nextviii@{\ifx\@let@token\uproot\let\next@\nextix@\else | |
278 | \let\next@\plainroot@\fi\next@}% | |
279 | \def\nextix@\uproot##1{\uproot@##1\relax\plainroot@}% | |
280 | \bgroup\uproot@\z@\leftroot@\z@\FN@\next@} | |
281 | \def\plainroot@#1\of#2{\setbox\rootbox\hbox{% | |
282 | $\m@th\scriptscriptstyle{#1}$}% | |
283 | \mathchoice{\r@@t\displaystyle{#2}}{\r@@t\textstyle{#2}} | |
284 | {\r@@t\scriptstyle{#2}}{\r@@t\scriptscriptstyle{#2}}\egroup} | |
285 | ||
286 | \@ifundefined{sqrtsign}{\let\sqrtsign\@@sqrt}{} | |
287 | \def\r@@t#1#2{\setboxz@h{$\m@th#1\sqrtsign{#2}$}% | |
288 | \dimen@\ht\z@\advance\dimen@-\dp\z@ | |
289 | \setbox\@ne\hbox{$\m@th#1\mskip\uproot@ mu$}% | |
290 | \advance\dimen@ by1.667\wd\@ne | |
291 | \mkern-\leftroot@ mu\mkern5mu\raise.6\dimen@\copy\rootbox | |
292 | \mkern-10mu\mkern\leftroot@ mu\boxz@} | |
293 | \@ifundefined{varGamma}{% | |
294 | \DeclareMathSymbol{\varGamma}{\mathord}{letters}{"00} | |
295 | \DeclareMathSymbol{\varDelta}{\mathord}{letters}{"01} | |
296 | \DeclareMathSymbol{\varTheta}{\mathord}{letters}{"02} | |
297 | \DeclareMathSymbol{\varLambda}{\mathord}{letters}{"03} | |
298 | \DeclareMathSymbol{\varXi}{\mathord}{letters}{"04} | |
299 | \DeclareMathSymbol{\varPi}{\mathord}{letters}{"05} | |
300 | \DeclareMathSymbol{\varSigma}{\mathord}{letters}{"06} | |
301 | \DeclareMathSymbol{\varUpsilon}{\mathord}{letters}{"07} | |
302 | \DeclareMathSymbol{\varPhi}{\mathord}{letters}{"08} | |
303 | \DeclareMathSymbol{\varPsi}{\mathord}{letters}{"09} | |
304 | \DeclareMathSymbol{\varOmega}{\mathord}{letters}{"0A} | |
305 | }{} | |
306 | \@saveprimitive\overline\@@overline | |
307 | \DeclareRobustCommand{\overline}[1]{\@@overline{#1}} | |
308 | \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} | |
309 | \newcommand{\implies}{\DOTSB\;\Longrightarrow\;} | |
310 | \newcommand{\impliedby}{\DOTSB\;\Longleftarrow\;} | |
311 | \def\And{\DOTSB\;\mathchar"3026 \;} | |
312 | \newcommand{\nobreakdash}{\leavevmode | |
313 | \toks@\@emptytoks \def\@tempa##1{\toks@\@xp{\the\toks@-}\FN@\next@}% | |
314 | \DN@{\ifx\@let@token-\@xp\@tempa | |
315 | \else\setboxz@h{\the\toks@\nobreak}\unhbox\z@\fi}% | |
316 | \FN@\next@ | |
317 | } | |
318 | \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript | |
319 | \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} | |
320 | \let\ifgtest@\iffalse % initial value | |
321 | \def\gtest@true{\global\let\ifgtest@\iftrue} | |
322 | \def\gtest@false{\global\let\ifgtest@\iffalse} | |
323 | \let\DOTSI\relax | |
324 | \let\DOTSB\relax | |
325 | \let\DOTSX\relax | |
326 | {\uccode`7=`\\ \uccode`8=`m \uccode`9=`a \uccode`0=`t \uccode`!=`h | |
327 | \uppercase{% | |
328 | \gdef\math@#1#2#3#4#5#6\math@{\gtest@false\ifx 7#1\ifx 8#2% | |
329 | \ifx 9#3\ifx 0#4\ifx !#5\xdef\meaning@{#6}\gtest@true | |
330 | \fi\fi\fi\fi\fi}}} | |
331 | {\uccode`7=`c \uccode`8=`h \uccode`9=`\" | |
332 | \uppercase{\gdef\mathch@#1#2#3#4#5#6\mathch@{\gtest@false | |
333 | \ifx 7#1\ifx 8#2\ifx 9#5\gtest@true\xdef\meaning@{9#6}\fi\fi\fi}}} | |
334 | \newcount\classnum@ | |
335 | \def\getmathch@#1.#2\getmathch@{\classnum@#1 \divide\classnum@4096 | |
336 | \ifcase\number\classnum@\or\or\gdef\thedots@{\dotsb@}\or | |
337 | \gdef\thedots@{\dotsb@}\fi} | |
338 | {\uccode`4=`b \uccode`5=`i \uccode`6=`n | |
339 | \uppercase{\gdef\mathbin@#1#2#3{\relaxnext@ | |
340 | \def\nextii@##1\mathbin@{\ifx\@sptoken\@let@token\gtest@true\fi}% | |
341 | \gtest@false\DN@##1\mathbin@{}% | |
342 | \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}} | |
343 | {\uccode`4=`r \uccode`5=`e \uccode`6=`l | |
344 | \uppercase{\gdef\mathrel@#1#2#3{\relaxnext@ | |
345 | \def\nextii@##1\mathrel@{\ifx\@sptoken\@let@token\gtest@true\fi}% | |
346 | \gtest@false\DN@##1\mathrel@{}% | |
347 | \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}} | |
348 | {\uccode`5=`m \uccode`6=`a \uccode`7=`c | |
349 | \uppercase{\gdef\macro@#1#2#3#4\macro@{\gtest@false | |
350 | \ifx 5#1\ifx 6#2\ifx 7#3\gtest@true | |
351 | \xdef\meaning@{\macro@@#4\macro@@}\fi\fi\fi}}} | |
352 | \def\macro@@#1->#2\macro@@{#2} | |
353 | \newcount\DOTSCASE@ | |
354 | {\uccode`6=`\\ \uccode`7=`D \uccode`8=`O \uccode`9=`T \uccode`0=`S | |
355 | \uppercase{\gdef\DOTS@#1#2#3#4#5{\gtest@false\DN@##1\DOTS@{}% | |
356 | \ifx 6#1\ifx 7#2\ifx 8#3\ifx 9#4\ifx 0#5\let\next@\DOTS@@ | |
357 | \fi\fi\fi\fi\fi | |
358 | \next@}}} | |
359 | {\uccode`3=`B \uccode`4=`I \uccode`5=`X | |
360 | \uppercase{\gdef\DOTS@@#1{\relaxnext@ | |
361 | \def\nextii@##1\DOTS@{\ifx\@sptoken\@let@token\gtest@true\fi}% | |
362 | \DN@{\FN@\nextii@}% | |
363 | \ifx 3#1\global\DOTSCASE@\z@\else | |
364 | \ifx 4#1\global\DOTSCASE@\@ne\else | |
365 | \ifx 5#1\global\DOTSCASE@\tw@\else\DN@##1\DOTS@{}% | |
366 | \fi\fi\fi\next@}}} | |
367 | {\uccode`5=`\\ \uccode`6=`n \uccode`7=`o \uccode`8=`t | |
368 | \uppercase{\gdef\not@#1#2#3#4{\relaxnext@ | |
369 | \def\nextii@##1\not@{\ifx\@sptoken\@let@token\gtest@true\fi}% | |
370 | \gtest@false\DN@##1\not@{}% | |
371 | \ifx 5#1\ifx 6#2\ifx 7#3\ifx 8#4\DN@{\FN@\nextii@}\fi\fi\fi | |
372 | \fi\next@}}} | |
373 | \def\keybin@{\gtest@true | |
374 | \ifx\@let@token+\else\ifx\@let@token=\else | |
375 | \ifx\@let@token<\else\ifx\@let@token>\else | |
376 | \ifx\@let@token-\else\ifx\@let@token*\else\ifx\@let@token:\else | |
377 | \gtest@false\fi\fi\fi\fi\fi\fi\fi} | |
378 | \@ifundefined{@ldots}{\def\@ldots{\mathellipsis}}{} | |
379 | \DeclareRobustCommand{\ldots}{% | |
380 | \ifmmode \mathellipsis \else \textellipsis \fi | |
381 | } | |
382 | \DeclareRobustCommand{\dots}{% | |
383 | \ifmmode \@xp\mdots@\else \@xp\textellipsis \fi | |
384 | } | |
385 | \def\tdots@{\leavevmode\unskip\relaxnext@ | |
386 | \DN@{$\m@th\@ldots\, | |
387 | \ifx\@let@token,\,$\else\ifx\@let@token.\,$\else | |
388 | \ifx\@let@token;\,$\else\ifx\@let@token:\,$\else | |
389 | \ifx\@let@token?\,$\else\ifx\@let@token!\,$\else | |
390 | $ \fi\fi\fi\fi\fi\fi}% | |
391 | \ \FN@\next@} | |
392 | \def\mdots@{\FN@\mdots@@} | |
393 | \def\mdots@@{\gdef\thedots@{\dotso@}% | |
394 | \ifx\@let@token\boldsymbol \gdef\thedots@\boldsymbol{\boldsymboldots@}% | |
395 | \else\ifx,\@let@token \gdef\thedots@{\dotsc}% | |
396 | \else\ifx\not\@let@token \gdef\thedots@{\dotsb@}% | |
397 | \else\keybin@ | |
398 | \ifgtest@\gdef\thedots@{\dotsb@}% | |
399 | \else\xdef\meaning@{\meaning\@let@token..........}% | |
400 | \xdef\meaning@@{\meaning@}% | |
401 | \@xp\math@\meaning@\math@ | |
402 | \ifgtest@ | |
403 | \@xp\mathch@\meaning@\mathch@ | |
404 | \ifgtest@\@xp\getmathch@\meaning@\getmathch@\fi | |
405 | \else\@xp\macro@\meaning@@\macro@ | |
406 | \ifgtest@ | |
407 | \@xp\not@\meaning@\not@\ifgtest@\gdef\thedots@{\dotsb@}% | |
408 | \else\@xp\DOTS@\meaning@\DOTS@ | |
409 | \ifgtest@ | |
410 | \ifcase\number\DOTSCASE@\gdef\thedots@{\dotsb@}% | |
411 | \or\gdef\thedots@{\dotsi}\else\fi | |
412 | \else\@xp\math@\meaning@\math@ | |
413 | \ifgtest@\@xp\mathbin@\meaning@\mathbin@ | |
414 | \ifgtest@\gdef\thedots@{\dotsb@}% | |
415 | \else\@xp\mathrel@\meaning@\mathrel@ | |
416 | \ifgtest@\gdef\thedots@{\dotsb@}% | |
417 | \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi | |
418 | \thedots@} | |
419 | \def\boldsymboldots@#1{% | |
420 | \bold@true\let\@let@token=#1\let\delayed@=#1\mdots@@ | |
421 | \boldsymbol#1\bold@false} | |
422 | \def\@cdots{\mathinner{\cdotp\cdotp\cdotp}} | |
423 | \newcommand{\dotsi}{\!\@cdots} | |
424 | \let\dotsb@\@cdots | |
425 | \def\rightdelim@{\gtest@true | |
426 | \ifx\@let@token)\else | |
427 | \ifx\@let@token]\else | |
428 | \ifx\@let@token\rbrack\else | |
429 | \ifx\@let@token\}\else | |
430 | \ifx\@let@token\rbrace\else | |
431 | \ifx\@let@token\rangle\else | |
432 | \ifx\@let@token\rceil\else | |
433 | \ifx\@let@token\rfloor\else | |
434 | \ifx\@let@token\rgroup\else | |
435 | \ifx\@let@token\rmoustache\else | |
436 | \ifx\@let@token\right\else | |
437 | \ifx\@let@token\bigr\else | |
438 | \ifx\@let@token\biggr\else | |
439 | \ifx\@let@token\Bigr\else | |
440 | \ifx\@let@token\Biggr\else\gtest@false | |
441 | \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} | |
442 | \def\extra@{% | |
443 | \rightdelim@\ifgtest@ | |
444 | \else\ifx\@let@token$\gtest@true | |
445 | \else\xdef\meaning@{\meaning\@let@token..........}% | |
446 | \@xp\macro@\meaning@\macro@\ifgtest@ | |
447 | \@xp\DOTS@\meaning@\DOTS@ | |
448 | \ifgtest@ | |
449 | \ifnum\DOTSCASE@=\tw@\gtest@true\else\gtest@false | |
450 | \fi\fi\fi\fi\fi} | |
451 | \newif\ifbold@ | |
452 | \def\dotso@{\relaxnext@ | |
453 | \ifbold@ | |
454 | \let\@let@token\delayed@ | |
455 | \def\nextii@{\extra@\@ldots\ifgtest@\,\fi}% | |
456 | \else | |
457 | \def\nextii@{\DN@{\extra@\@ldots\ifgtest@\,\fi}\FN@\next@}% | |
458 | \fi | |
459 | \nextii@} | |
460 | \def\extrap@#1{% | |
461 | \DN@{#1\,}% | |
462 | \ifx\@let@token,\else | |
463 | \ifx\@let@token;\else | |
464 | \ifx\@let@token.\else\extra@ | |
465 | \ifgtest@\else | |
466 | \let\next@#1\fi\fi\fi\fi\next@} | |
467 | \DeclareRobustCommand{\cdots}{\DN@{\extrap@\@cdots}\FN@\next@} | |
468 | \let\dotsb\cdots | |
469 | \let\dotsm\cdots | |
470 | \DeclareRobustCommand{\dotso}{\relax | |
471 | \ifmmode \DN@{\extrap@\@ldots}% | |
472 | \else \let\next@\tdots@\fi | |
473 | \FN@\next@} | |
474 | \DeclareRobustCommand{\dotsc}{% | |
475 | \DN@{\ifx\@let@token;\@ldots\,% | |
476 | \else \ifx\@let@token.\@ldots\,% | |
477 | \else \extra@\@ldots \ifgtest@\,\fi | |
478 | \fi\fi}% | |
479 | \FN@\next@} | |
480 | \renewcommand{\longrightarrow}{% | |
481 | \DOTSB\protect\relbar\protect\joinrel\rightarrow} | |
482 | \renewcommand{\Longrightarrow}{% | |
483 | \DOTSB\protect\Relbar\protect\joinrel\Rightarrow} | |
484 | \renewcommand{\longleftarrow}{% | |
485 | \DOTSB\leftarrow\protect\joinrel\protect\relbar} | |
486 | \renewcommand{\Longleftarrow}{% | |
487 | \DOTSB\Leftarrow\protect\joinrel\protect\Relbar} | |
488 | \renewcommand{\longleftrightarrow}{\DOTSB\leftarrow\joinrel\rightarrow} | |
489 | \renewcommand{\Longleftrightarrow}{\DOTSB\Leftarrow\joinrel\Rightarrow} | |
490 | \renewcommand{\mapsto}{\DOTSB\mapstochar\rightarrow} | |
491 | \renewcommand{\longmapsto}{\DOTSB\mapstochar\longrightarrow} | |
492 | \renewcommand{\hookrightarrow}{\DOTSB\lhook\joinrel\rightarrow} | |
493 | \renewcommand{\hookleftarrow}{\DOTSB\leftarrow\joinrel\rhook} | |
494 | \renewcommand{\iff}{\DOTSB\;\Longleftrightarrow\;} | |
495 | \renewcommand{\doteq}{% | |
496 | \DOTSB\mathrel{\mathop{\kern0pt =}\limits^{\textstyle.}}} | |
497 | \newif\if@display | |
498 | \everydisplay\@xp{\the\everydisplay \@displaytrue} | |
499 | \renewcommand{\int}{\DOTSI\intop\ilimits@} | |
500 | \renewcommand{\oint}{\DOTSI\ointop\ilimits@} | |
501 | \def\intkern@{\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}} | |
502 | \def\intdots@{\mathchoice{\@cdots}% | |
503 | {{\cdotp}\mkern1.5mu{\cdotp}\mkern1.5mu{\cdotp}}% | |
504 | {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}% | |
505 | {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}} | |
506 | \newcommand{\iint}{\DOTSI\protect\MultiIntegral{2}} | |
507 | \newcommand{\iiint}{\DOTSI\protect\MultiIntegral{3}} | |
508 | \newcommand{\iiiint}{\DOTSI\protect\MultiIntegral{4}} | |
509 | \newcommand{\idotsint}{\DOTSI\protect\MultiIntegral{0}} | |
510 | \newcommand{\MultiIntegral}[1]{% | |
511 | \edef\ints@c{\noexpand\intop | |
512 | \ifnum#1=\z@\noexpand\intdots@\else\noexpand\intkern@\fi | |
513 | \ifnum#1>\tw@\noexpand\intop\noexpand\intkern@\fi | |
514 | \ifnum#1>\thr@@\noexpand\intop\noexpand\intkern@\fi | |
515 | \noexpand\intop | |
516 | \noexpand\ilimits@ | |
517 | }% | |
518 | \futurelet\@let@token\ints@a | |
519 | } | |
520 | \def\ints@a{% | |
521 | \ifx\limits\@let@token \ints@b | |
522 | \else \ifx\displaylimits\@let@token \ints@b | |
523 | \else\ifx\ilimits@\displaylimits \ints@b | |
524 | \fi\fi\fi | |
525 | \ints@c | |
526 | } | |
527 | \def\ints@b{% | |
528 | \mkern-7mu\mathchoice{\mkern-2mu}{}{}{}% | |
529 | \mathop\bgroup | |
530 | \mkern7mu\mathchoice{\mkern2mu}{}{}{}% | |
531 | \let\ilimits@\egroup | |
532 | }% | |
533 | \newbox\Mathstrutbox@ | |
534 | \setbox\Mathstrutbox@=\hbox{} | |
535 | \def\Mathstrut@{\copy\Mathstrutbox@} | |
536 | \def\resetMathstrut@{% | |
537 | \setbox\z@\hbox{% | |
538 | \mathchardef\@tempa\mathcode`\(\relax | |
539 | \def\@tempb##1"##2##3{\the\textfont"##3\char"}% | |
540 | \expandafter\@tempb\meaning\@tempa \relax | |
541 | }% | |
542 | \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@ | |
543 | } | |
544 | \addto@hook\every@math@size{\resetMathstrut@} | |
545 | \newbox\strutbox@ | |
546 | \def\strut@{\copy\strutbox@} | |
547 | \def\reset@strutbox@{% | |
548 | \global\setbox\strutbox@\hbox{% | |
549 | \lower.5\normallineskiplimit | |
550 | \vbox{\kern-\normallineskiplimit\copy\strutbox}}} | |
551 | \addto@hook\every@math@size{\reset@strutbox@} | |
552 | \AtBeginDocument{\reset@strutbox@} | |
553 | \renewcommand{\big}{\bBigg@\@ne} | |
554 | \renewcommand{\Big}{\bBigg@{1.5}} | |
555 | \renewcommand{\bigg}{\bBigg@\tw@} | |
556 | \renewcommand{\Bigg}{\bBigg@{2.5}} | |
557 | \def\bBigg@#1#2{% | |
558 | {\@mathmeasure\z@{\nulldelimiterspace\z@}% | |
559 | {\left#2\vcenter to#1\big@size{}\right.}% | |
560 | \box\z@}} | |
561 | \addto@hook\every@math@size{% | |
562 | \global\big@size 1.2\ht\Mathstrutbox@ | |
563 | \global\advance\big@size 1.2\dp\Mathstrutbox@ } | |
564 | \newdimen\big@size | |
565 | \def\accentclass@{7} | |
566 | \def\noaccents@{\def\accentclass@{0}} | |
567 | \DeclareFontEncoding{OML}{}{\noaccents@} | |
568 | \DeclareFontEncoding{OMS}{}{\noaccents@} | |
569 | \newcommand{\dddot}[1]{% | |
570 | {\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@ | |
571 | \hbox{\normalfont ...}\vss}}}} | |
572 | \newcommand{\ddddot}[1]{% | |
573 | {\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@ | |
574 | \hbox{\normalfont....}\vss}}}} | |
575 | \def\set@mathaccent#1#2#3#4{% | |
576 | \xdef#2{\@nx\protect\@nx\mathaccentV | |
577 | {\@xp\@gobble\string#2}\hexnumber@#1#4}% | |
578 | } | |
579 | \def\@tempa#1{\@xp\@tempb\meaning#1\@nil#1} | |
580 | \def\@tempb#1>#2#3 #4\@nil#5{% | |
581 | \@xp\ifx\csname#3\endcsname\mathaccent | |
582 | \@tempc#4?"7777\@nil#5% | |
583 | \else | |
584 | \PackageWarningNoLine{amsmath}{% | |
585 | Unable to redefine math accent \string#5}% | |
586 | \fi | |
587 | } | |
588 | \def\@tempc#1"#2#3#4#5#6\@nil#7{% | |
589 | \chardef\@tempd="#3\relax\set@mathaccent\@tempd{#7}{#2}{#4#5}} | |
590 | \@tempa{\hat} | |
591 | \@tempa{\check} | |
592 | \@tempa{\tilde} | |
593 | \@tempa{\acute} | |
594 | \@tempa{\grave} | |
595 | \@tempa{\dot} | |
596 | \@tempa{\ddot} | |
597 | \@tempa{\breve} | |
598 | \@tempa{\bar} | |
599 | \@tempa{\vec} | |
600 | \@ifundefined{mathring}{% | |
601 | \DeclareMathAccent{\mathring}{\mathalpha}{operators}{"17} | |
602 | }{% | |
603 | \@tempa{\mathring} | |
604 | } | |
605 | %%\@tempa\widetilde | |
606 | %%\@tempa\widehat | |
607 | \newcommand{\acc@check}{} | |
608 | \newcommand{\acc@error}{} | |
609 | \def\acc@check{\@ifnextchar\@empty\relax\acc@error} | |
610 | \def\acc@error{% | |
611 | \@amsmath@err{% | |
612 | Improper argument for math accent:\MessageBreak | |
613 | Extra braces must be added to prevent wrong output% | |
614 | }\@ehc | |
615 | } | |
616 | \newcount\macc@depth | |
617 | \long\def\@gobblethree#1#2#3{} | |
618 | \def\mathaccentV#1#2#3#4#5{% | |
619 | \ifmmode | |
620 | \gdef\macc@tmp{\macc@depth\@ne}% | |
621 | \setbox\z@\hbox{% | |
622 | \let\mathaccentV\macc@test | |
623 | \let\use@mathgroup\@gobbletwo \let\select@group\@gobblethree | |
624 | \frozen@everymath{}$#5$% | |
625 | }% | |
626 | \macc@tmp | |
627 | \ifnum\macc@depth=\@ne | |
628 | \global\let\macc@nucleus\@empty | |
629 | \mathaccent"\accentclass@ | |
630 | \else | |
631 | \@xp\macc@nested | |
632 | \fi | |
633 | #2#3#4{#5}% | |
634 | \macc@nucleus | |
635 | \else | |
636 | \@xp\nonmatherr@\csname#1\endcsname | |
637 | \fi | |
638 | } | |
639 | \def\macc@test#1#2#3#4{\xdef\macc@tmp{\macc@tmp\advance\macc@depth\@ne}} | |
640 | \def\macc@group{-1} | |
641 | \def\macc@nested#1#2#3#4{% | |
642 | \begingroup | |
643 | \let\math@bgroup\@empty \let\math@egroup\macc@set@skewchar | |
644 | \mathsurround\z@ \frozen@everymath{\mathgroup\macc@group\relax}% | |
645 | \macc@set@skewchar\relax | |
646 | \let\mathaccentV\macc@nested@a | |
647 | \macc@nested@a\relax#1#2#3{#4}% | |
648 | \endgroup | |
649 | } | |
650 | \let\macc@palette\mathpalette | |
651 | \def\macc@nested@a#1#2#3#4#5{% | |
652 | \ifnum\macc@group=\mathgroup | |
653 | \else \macc@set@skewchar\relax \edef\macc@group{\the\mathgroup}% | |
654 | \fi | |
655 | \mathchardef\macc@code "\accentclass@ #2#3#4\relax | |
656 | \macc@palette\macc@a{#5}% | |
657 | } | |
658 | \def\macc@set@skewchar#1{% | |
659 | \begingroup | |
660 | \ifnum\mathgroup=\m@ne \let\@tempa\@ne | |
661 | \else | |
662 | \ifnum\skewchar\textfont\mathgroup=\m@ne \let\@tempa\@ne | |
663 | \else \let\@tempa\mathgroup | |
664 | \fi | |
665 | \fi | |
666 | \count@=\skewchar\textfont\@tempa | |
667 | \advance\count@"7100 | |
668 | \edef\@tempa{\endgroup | |
669 | \mathchardef\noexpand\macc@skewchar=\number\count@\relax}% | |
670 | \@tempa | |
671 | #1% | |
672 | } | |
673 | \def\macc@a#1#2{% | |
674 | \begingroup | |
675 | \let\macc@style#1\relax | |
676 | \def\macc@palette##1{##1\macc@style}% | |
677 | \advance\macc@depth\m@ne | |
678 | \ifnum\macc@depth=\z@ | |
679 | \gdef\macc@nucleus{#2}% | |
680 | \setbox\z@\hbox{$#1#2\@empty{}\macc@skewchar$}% | |
681 | \setbox\tw@\hbox{$#1#2\@empty\macc@skewchar$}% | |
682 | \dimen@\tw@\wd\tw@ \advance\dimen@-\tw@\wd\z@ | |
683 | \xdef\macc@kerna{\the\dimen@\relax}% | |
684 | \setbox4\hbox{$#1#2\acc@check\@empty$}% | |
685 | \global\setbox\@ne\hbox to\wd4{}% | |
686 | \ht\@ne\ht4 \dp\@ne\dp4 | |
687 | \xdef\macc@kernb{\the\wd4\relax}% | |
688 | \mathaccent\macc@code{\box\@ne\kern\macc@kerna}% | |
689 | \else | |
690 | \mathaccent\macc@code{\let\macc@adjust\@empty #1#2\@empty}% | |
691 | \macc@adjust | |
692 | \fi | |
693 | \endgroup | |
694 | } | |
695 | \def\macc@adjust{% | |
696 | \dimen@\macc@kerna\advance\dimen@\macc@kernb | |
697 | \kern-\dimen@ | |
698 | } | |
699 | \def\Hat{\hat} | |
700 | \def\Check{\check} | |
701 | \def\Tilde{\tilde} | |
702 | \def\Acute{\acute} | |
703 | \def\Grave{\grave} | |
704 | \def\Dot{\dot} | |
705 | \def\Ddot{\ddot} | |
706 | \def\Breve{\breve} | |
707 | \def\Bar{\bar} | |
708 | \def\Vec{\vec} | |
709 | \def\nonmatherr@#1{\@amsmath@err{\protect | |
710 | #1 allowed only in math mode}\@ehd} | |
711 | \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin | |
712 | {\operator@font mod}\penalty900 | |
713 | \mkern5mu\nonscript\mskip-\medmuskip} | |
714 | \newcommand{\pod}[1]{\allowbreak | |
715 | \if@display\mkern18mu\else\mkern8mu\fi(#1)} | |
716 | \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} | |
717 | \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu | |
718 | \else\mkern12mu\fi{\operator@font mod}\,\,#1} | |
719 | \newcommand{\cfrac}[3][c]{{\displaystyle\frac{% | |
720 | \strut\ifx r#1\hfill\fi#2\ifx l#1\hfill\fi}{#3}}% | |
721 | \kern-\nulldelimiterspace} | |
722 | \newcommand{\overset}[2]{\binrel@{#2}% | |
723 | \binrel@@{\mathop{\kern\z@#2}\limits^{#1}}} | |
724 | \newcommand{\underset}[2]{\binrel@{#2}% | |
725 | \binrel@@{\mathop{\kern\z@#2}\limits_{#1}}} | |
726 | \newcommand{\sideset}[3]{% | |
727 | \@mathmeasure\z@\displaystyle{#3}% | |
728 | \global\setbox\@ne\vbox to\ht\z@{}\dp\@ne\dp\z@ | |
729 | \setbox\tw@\box\@ne | |
730 | \@mathmeasure4\displaystyle{\copy\tw@#1}% | |
731 | \@mathmeasure6\displaystyle{#3\nolimits#2}% | |
732 | \dimen@-\wd6 \advance\dimen@\wd4 \advance\dimen@\wd\z@ | |
733 | \hbox to\dimen@{}\mathop{\kern-\dimen@\box4\box6}% | |
734 | } | |
735 | \renewcommand{\smash}[1][tb]{% | |
736 | \def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% | |
737 | \edef\finsm@sh{\csname mb@#1\endcsname\z@\z@ \box\z@}% | |
738 | \ifmmode \@xp\mathpalette\@xp\mathsm@sh | |
739 | \else \@xp\makesm@sh | |
740 | \fi | |
741 | } | |
742 | \mathchardef\std@minus\mathcode`\-\relax | |
743 | \mathchardef\std@equal\mathcode`\=\relax | |
744 | \AtBeginDocument{% | |
745 | \mathchardef\std@minus\mathcode`\-\relax | |
746 | \mathchardef\std@equal\mathcode`\=\relax | |
747 | } | |
748 | \def\relbar{\mathrel{\mathpalette\mathsm@sh\std@minus}} | |
749 | \def\Relbar{\mathrel\std@equal} | |
750 | \def\arrowfill@#1#2#3#4{% | |
751 | $\m@th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip | |
752 | \relax#4#1\mkern-7mu% | |
753 | \cleaders\hbox{$#4\mkern-2mu#2\mkern-2mu$}\hfill | |
754 | \mkern-7mu#3$% | |
755 | } | |
756 | \def\leftarrowfill@{\arrowfill@\leftarrow\relbar\relbar} | |
757 | \def\rightarrowfill@{\arrowfill@\relbar\relbar\rightarrow} | |
758 | \def\leftrightarrowfill@{\arrowfill@\leftarrow\relbar\rightarrow} | |
759 | \def\Leftarrowfill@{\arrowfill@\Leftarrow\Relbar\Relbar} | |
760 | \def\Rightarrowfill@{\arrowfill@\Relbar\Relbar\Rightarrow} | |
761 | \def\Leftrightarrowfill@{\arrowfill@\Leftarrow\Relbar\Rightarrow} | |
762 | \def\overarrow@#1#2#3{\vbox{\ialign{##\crcr#1#2\crcr | |
763 | \noalign{\nointerlineskip}$\m@th\hfil#2#3\hfil$\crcr}}} | |
764 | \renewcommand{\overrightarrow}{% | |
765 | \mathpalette{\overarrow@\rightarrowfill@}} | |
766 | \renewcommand{\overleftarrow}{% | |
767 | \mathpalette{\overarrow@\leftarrowfill@}} | |
768 | \newcommand{\overleftrightarrow}{% | |
769 | \mathpalette{\overarrow@\leftrightarrowfill@}} | |
770 | \def\underarrow@#1#2#3{% | |
771 | \vtop{\ialign{##\crcr$\m@th\hfil#2#3\hfil$\crcr | |
772 | \noalign{\nointerlineskip\kern1.3\ex@}#1#2\crcr}}} | |
773 | \newcommand{\underrightarrow}{% | |
774 | \mathpalette{\underarrow@\rightarrowfill@}} | |
775 | \newcommand{\underleftarrow}{% | |
776 | \mathpalette{\underarrow@\leftarrowfill@}} | |
777 | \newcommand{\underleftrightarrow}{% | |
778 | \mathpalette{\underarrow@\leftrightarrowfill@}} | |
779 | \def\ext@arrow#1#2#3#4#5#6#7{% | |
780 | \mathrel{\mathop{% | |
781 | \setbox\z@\hbox{#5\displaystyle}% | |
782 | \setbox\tw@\vbox{\m@th | |
783 | \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% | |
784 | \hbox{$\scriptstyle\mkern#3mu{#7}\mkern#4mu$}% | |
785 | \copy\z@ | |
786 | }% | |
787 | \hbox to\wd\tw@{\unhbox\z@}}% | |
788 | \limits | |
789 | \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi | |
790 | #7\if0#2\else\mkern#2mu\fi}}% | |
791 | \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi | |
792 | #6\if0#2\else\mkern#2mu\fi}}}% | |
793 | } | |
794 | \newcommand{\xrightarrow}[2][]{\ext@arrow 0359\rightarrowfill@{#1}{#2}} | |
795 | \newcommand{\xleftarrow}[2][]{\ext@arrow 3095\leftarrowfill@{#1}{#2}} | |
796 | \newenvironment{subarray}[1]{% | |
797 | \vcenter\bgroup | |
798 | \Let@ \restore@math@cr \default@tag | |
799 | \baselineskip\fontdimen10 \scriptfont\tw@ | |
800 | \advance\baselineskip\fontdimen12 \scriptfont\tw@ | |
801 | \lineskip\thr@@\fontdimen8 \scriptfont\thr@@ | |
802 | \lineskiplimit\lineskip | |
803 | \ialign\bgroup\ifx c#1\hfil\fi | |
804 | $\m@th\scriptstyle##$\hfil\crcr | |
805 | }{% | |
806 | \crcr\egroup\egroup | |
807 | } | |
808 | \newcommand{\substack}[1]{\subarray{c}#1\endsubarray} | |
809 | \newenvironment{smallmatrix}{\null\,\vcenter\bgroup | |
810 | \Let@\restore@math@cr\default@tag | |
811 | \baselineskip6\ex@ \lineskip1.5\ex@ \lineskiplimit\lineskip | |
812 | \ialign\bgroup\hfil$\m@th\scriptstyle##$\hfil&&\thickspace\hfil | |
813 | $\m@th\scriptstyle##$\hfil\crcr | |
814 | }{% | |
815 | \crcr\egroup\egroup\,% | |
816 | } | |
817 | \renewenvironment{matrix}{% | |
818 | \matrix@check\matrix\env@matrix | |
819 | }{% | |
820 | \endarray \hskip -\arraycolsep | |
821 | } | |
822 | \def\env@matrix{\hskip -\arraycolsep | |
823 | \let\@ifnextchar\new@ifnextchar | |
824 | \array{*\c@MaxMatrixCols c}} | |
825 | \newcount\c@MaxMatrixCols \c@MaxMatrixCols=10 | |
826 | \def\matrix@check#1{% | |
827 | \@xp\ifx\csname\@currenvir\endcsname#1% | |
828 | \else\matrix@error#1% | |
829 | \@xp\@gobble | |
830 | \fi | |
831 | } | |
832 | \def\matrix@error#1{% | |
833 | \@amsmath@err{% | |
834 | Old form `\string#1' should be \string\begin{\@xp\@gobble\string#1}% | |
835 | }{% | |
836 | `\string#1{...}' is old Plain-TeX syntax whose use is | |
837 | ill-advised in LaTeX.% | |
838 | }% | |
839 | } | |
840 | \renewenvironment{pmatrix}{% | |
841 | \left(% | |
842 | \matrix@check\pmatrix\env@matrix | |
843 | }{ | |
844 | \endmatrix\right)% | |
845 | } | |
846 | \newenvironment{bmatrix}{\left[\env@matrix}{\endmatrix\right]} | |
847 | \newenvironment{Bmatrix}{% | |
848 | \left\lbrace\env@matrix | |
849 | }{% | |
850 | \endmatrix\right\rbrace | |
851 | } | |
852 | \newenvironment{vmatrix}{\left\lvert\env@matrix}{\endmatrix\right\rvert} | |
853 | \newenvironment{Vmatrix}{\left\lVert\env@matrix}{\endmatrix\right\rVert} | |
854 | \let\hdots\@ldots | |
855 | \newcommand{\hdotsfor}[1]{% | |
856 | \ifx[#1\@xp\shdots@for\else\hdots@for\@ne{#1}\fi} | |
857 | \newmuskip\dotsspace@ | |
858 | \def\shdots@for#1]{\hdots@for{#1}} | |
859 | \def\hdots@for#1#2{\multicolumn{#2}c% | |
860 | {\m@th\dotsspace@1.5mu\mkern-#1\dotsspace@ | |
861 | \xleaders\hbox{$\m@th\mkern#1\dotsspace@.\mkern#1\dotsspace@$}% | |
862 | \hfill | |
863 | \mkern-#1\dotsspace@}% | |
864 | } | |
865 | \renewenvironment{cases}{% | |
866 | \matrix@check\cases\env@cases | |
867 | }{% | |
868 | \endarray\right.% | |
869 | } | |
870 | \def\env@cases{% | |
871 | \let\@ifnextchar\new@ifnextchar | |
872 | \left\lbrace | |
873 | \def\arraystretch{1.2}% | |
874 | \array{@{}l@{\quad}l@{}}% | |
875 | } | |
876 | \newcounter{parentequation}% Counter for ``parent equation''. | |
877 | \@ifundefined{ignorespacesafterend}{% | |
878 | \def\ignorespacesafterend{\global\@ignoretrue}% | |
879 | }{} | |
880 | \newenvironment{subequations}{% | |
881 | \refstepcounter{equation}% | |
882 | \protected@edef\theparentequation{\theequation}% | |
883 | \setcounter{parentequation}{\value{equation}}% | |
884 | \setcounter{equation}{0}% | |
885 | \def\theequation{\theparentequation\alph{equation}}% | |
886 | \ignorespaces | |
887 | }{% | |
888 | \setcounter{equation}{\value{parentequation}}% | |
889 | \ignorespacesafterend | |
890 | } | |
891 | \newcommand{\numberwithin}[3][\arabic]{% | |
892 | \@ifundefined{c@#2}{\@nocounterr{#2}}{% | |
893 | \@ifundefined{c@#3}{\@nocnterr{#3}}{% | |
894 | \@addtoreset{#2}{#3}% | |
895 | \@xp\xdef\csname the#2\endcsname{% | |
896 | \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}}}}% | |
897 | } | |
898 | \newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}} | |
899 | \newcount\dspbrk@lvl | |
900 | \dspbrk@lvl=-1 | |
901 | \interdisplaylinepenalty\@M | |
902 | \newcommand{\allowdisplaybreaks}[1][4]{% | |
903 | \interdisplaylinepenalty\getdsp@pen{#1}\relax | |
904 | } | |
905 | \def\getdsp@pen#1{% | |
906 | \ifcase #1\@M \or 9999 \or 6999 \or 2999 \or \z@\fi | |
907 | } | |
908 | \newcommand{\displaybreak}{\new@ifnextchar[\dspbrk@{\dspbrk@[4]}} | |
909 | \chardef\dspbrk@context=\sixt@@n | |
910 | \def\dspbrk@[#1]{% | |
911 | \ifmeasuring@ | |
912 | \else | |
913 | \ifcase\dspbrk@context % case 0 --- OK | |
914 | \global\dspbrk@lvl #1\relax | |
915 | \or % case 1 --- inside a box | |
916 | \nogood@displaybreak | |
917 | \else % other cases --- outside of a display | |
918 | \@amsmath@err{\Invalid@@\displaybreak}\@eha | |
919 | \fi | |
920 | \fi | |
921 | } | |
922 | \def\nogood@displaybreak{% | |
923 | \@amsmath@err{\protect | |
924 | \displaybreak\space cannot be applied here}% | |
925 | {One of the enclosing environments creates an | |
926 | unbreakable box\MessageBreak | |
927 | (e.g., split, aligned, gathered, ...).}% | |
928 | } | |
929 | \def\math@cr{\relax\iffalse{\fi\ifnum0=`}\fi | |
930 | \@ifstar{\global\@eqpen\@M\math@cr@}% | |
931 | {\global\@eqpen | |
932 | \ifnum\dspbrk@lvl <\z@ \interdisplaylinepenalty | |
933 | \else -\@getpen\dspbrk@lvl \fi | |
934 | \math@cr@}} | |
935 | \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} | |
936 | \def\math@cr@@[#1]{\ifnum0=`{\fi \iffalse}\fi\math@cr@@@ | |
937 | \noalign{\vskip#1\relax}} | |
938 | \def\Let@{\let\\\math@cr} | |
939 | \def\restore@math@cr{\def\math@cr@@@{\cr}} | |
940 | \restore@math@cr | |
941 | \newcommand{\intertext}{\@amsmath@err{\Invalid@@\intertext}\@eha} | |
942 | \def\intertext@{% | |
943 | \def\intertext##1{% | |
944 | \ifvmode\else\\\@empty\fi | |
945 | \noalign{% | |
946 | \penalty\postdisplaypenalty\vskip\belowdisplayskip | |
947 | \vbox{\normalbaselines | |
948 | \ifdim\linewidth=\columnwidth | |
949 | \else \parshape\@ne \@totalleftmargin \linewidth | |
950 | \fi | |
951 | \noindent##1\par}% | |
952 | \penalty\predisplaypenalty\vskip\abovedisplayskip% | |
953 | }% | |
954 | }} | |
955 | \newhelp\tag@help | |
956 | {tag cannot be used at this point.\space | |
957 | If you don't understand why^^Jyou should consult | |
958 | the documentation.^^JBut don't worry: just continue, and I'll | |
959 | forget what happened.} | |
960 | \def\gobble@tag{\@ifstar\@gobble\@gobble} | |
961 | \def\invalid@tag#1{\@amsmath@err{#1}{\the\tag@help}\gobble@tag} | |
962 | \def\dft@tag{\invalid@tag{\string\tag\space not allowed here}} | |
963 | \def\default@tag{\let\tag\dft@tag} | |
964 | \default@tag | |
965 | \def\maketag@@{\@ifstar\maketag@@@\tagform@} | |
966 | \def\maketag@@@#1{\hbox{\m@th\normalfont#1}} | |
967 | \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}} | |
968 | \iftagsleft@ | |
969 | \def\@eqnnum{\hbox to1sp{}\rlap{\normalfont\normalcolor | |
970 | \hskip -\displaywidth\tagform@\theequation}} | |
971 | \else | |
972 | \def\@eqnnum{{\normalfont\normalcolor \tagform@\theequation}} | |
973 | \fi | |
974 | \newcommand{\thetag}{\leavevmode\tagform@} | |
975 | \let\df@tag\@empty | |
976 | \def\make@df@tag{\@ifstar\make@df@tag@@\make@df@tag@@@} | |
977 | \def\make@df@tag@@#1{% | |
978 | \gdef\df@tag{\maketag@@@{#1}\def\@currentlabel{#1}}} | |
979 | \def\make@df@tag@@@#1{\gdef\df@tag{\tagform@{#1}% | |
980 | \toks@\@xp{\p@equation{#1}}\edef\@currentlabel{\the\toks@}}} | |
981 | \let\ltx@label\label | |
982 | \def\label@in@display{% | |
983 | \ifx\df@label\@empty\else | |
984 | \@amsmath@err{Multiple \string\label's: | |
985 | label '\df@label' will be lost}\@eha | |
986 | \fi | |
987 | \gdef\df@label | |
988 | } | |
989 | \toks@\@xp{\@arrayparboxrestore \let\label\ltx@label}% | |
990 | \edef\@arrayboxrestore{\the\toks@} | |
991 | \let\df@label\@empty | |
992 | \def\make@display@tag{% | |
993 | \if@eqnsw \incr@eqnum \print@eqnum | |
994 | \else \iftag@ \df@tag \global\let\df@tag\@empty \fi | |
995 | \fi | |
996 | \ifmeasuring@ | |
997 | \else | |
998 | \ifx\df@label\@empty | |
999 | \else | |
1000 | \@xp\ltx@label\@xp{\df@label}% | |
1001 | \global\let\df@label\@empty | |
1002 | \fi | |
1003 | \fi | |
1004 | } | |
1005 | \def\tag@in@align{% | |
1006 | \relax | |
1007 | \iftag@ | |
1008 | \DN@{\invalid@tag{Multiple \string\tag}}% | |
1009 | \else | |
1010 | \global\tag@true | |
1011 | \nonumber | |
1012 | \let\next@\make@df@tag | |
1013 | \fi | |
1014 | \next@ | |
1015 | } | |
1016 | \newcommand{\raisetag}[1]{\skip@#1\relax | |
1017 | \xdef\raise@tag{\vskip\iftagsleft@\else-\fi\the\skip@\relax}% | |
1018 | } | |
1019 | \let\raise@tag\@empty | |
1020 | \newcommand{\notag}{\nonumber} | |
1021 | \renewcommand{\nonumber}{% | |
1022 | \if@eqnsw | |
1023 | \ifx\incr@eqnum\@empty \addtocounter{equation}\m@ne \fi | |
1024 | \fi | |
1025 | \let\print@eqnum\@empty \let\incr@eqnum\@empty | |
1026 | \global\@eqnswfalse | |
1027 | } | |
1028 | \def\print@eqnum{\tagform@\theequation} | |
1029 | \def\incr@eqnum{\refstepcounter{equation}\let\incr@eqnum\@empty} | |
1030 | \newif\ifinalign@ | |
1031 | \newif\ifingather@ | |
1032 | \@xp\def\@xp\@arrayparboxrestore\@xp{\@arrayparboxrestore | |
1033 | \ingather@false\inalign@false \default@tag | |
1034 | \let\spread@equation\@spread@equation | |
1035 | \let\reset@equation\@empty | |
1036 | \def\print@eqnum{\tagform@\theequation}% | |
1037 | \def\incr@eqnum{\refstepcounter{equation}\let\incr@eqnum\@empty}% | |
1038 | } | |
1039 | \newif\iftag@ | |
1040 | \newif\ifst@rred | |
1041 | \newif\ifmeasuring@ | |
1042 | \newif\ifshifttag@ | |
1043 | \newcount\row@ | |
1044 | \newcount\column@ | |
1045 | \def\column@plus{% | |
1046 | \global\advance\column@\@ne | |
1047 | } | |
1048 | \newcount\maxfields@ | |
1049 | \def\add@amp#1{\if m#1&\@xp\add@amp\fi} | |
1050 | \def\add@amps#1{% | |
1051 | \begingroup | |
1052 | \count@#1\advance\count@-\column@ | |
1053 | \edef\@tempa{\endgroup | |
1054 | \@xp\add@amp\romannumeral\number\count@ 000q}% | |
1055 | \@tempa | |
1056 | } | |
1057 | \newhelp\andhelp@ | |
1058 | {An extra & here is so disastrous that you should probably exit^^J | |
1059 | and fix things up.} | |
1060 | \newdimen\eqnshift@ | |
1061 | \newdimen\alignsep@ | |
1062 | \newdimen\tagshift@ | |
1063 | \newcommand{\mintagsep}{.5\fontdimen6\textfont\tw@} | |
1064 | \newcommand{\minalignsep}{10pt} | |
1065 | \newdimen\tagwidth@ | |
1066 | \newdimen\totwidth@ | |
1067 | \newdimen\lineht@ | |
1068 | \def\tag@width#1{% | |
1069 | \ifcase\@xp#1\tag@lengths\fi | |
1070 | } | |
1071 | ||
1072 | \def\savetaglength@{% | |
1073 | \begingroup | |
1074 | \let\or\relax | |
1075 | \xdef\tag@lengths{\tag@lengths\or \the\wdz@}% | |
1076 | \endgroup | |
1077 | } | |
1078 | ||
1079 | \def\shift@tag#1{% | |
1080 | \ifcase\@xp#1\tag@shifts\fi\relax | |
1081 | } | |
1082 | ||
1083 | \let\tag@shifts\@empty | |
1084 | \def\saveshift@#1{% | |
1085 | \begingroup | |
1086 | \let\or\relax | |
1087 | \xdef\tag@shifts{\or#1\tag@shifts}% | |
1088 | \endgroup | |
1089 | } | |
1090 | \def\spread@equation{\reset@strutbox@ | |
1091 | \openup\jot \let\spread@equation\@empty} | |
1092 | \let\@spread@equation\spread@equation | |
1093 | \def\displ@y{\@display@init{}} | |
1094 | \def\@display@init#1{% | |
1095 | \global\dt@ptrue \spread@equation | |
1096 | \everycr{% | |
1097 | \noalign{% | |
1098 | #1% | |
1099 | \ifdt@p | |
1100 | \global\dt@pfalse | |
1101 | \vskip-\lineskiplimit | |
1102 | \vskip\normallineskiplimit | |
1103 | \else | |
1104 | \penalty\@eqpen \global\dspbrk@lvl\m@ne | |
1105 | \fi | |
1106 | }% | |
1107 | }% | |
1108 | } | |
1109 | \def\displ@y@{\@display@init{% | |
1110 | \global\column@\z@ \global\dspbrk@lvl\m@ne | |
1111 | \global\tag@false \global\let\raise@tag\@empty | |
1112 | }} | |
1113 | \def\black@#1{% | |
1114 | \noalign{% | |
1115 | \ifdim#1>\displaywidth | |
1116 | \dimen@\prevdepth | |
1117 | \nointerlineskip | |
1118 | \vskip-\ht\strutbox@ | |
1119 | \vskip-\dp\strutbox@ | |
1120 | \vbox{\noindent\hbox to#1{\strut@\hfill}}% | |
1121 | \prevdepth\dimen@ | |
1122 | \fi | |
1123 | }% | |
1124 | } | |
1125 | \def\savecounters@{% | |
1126 | \begingroup | |
1127 | \def\@elt##1{% | |
1128 | \global\csname c@##1\endcsname\the\csname c@##1\endcsname}% | |
1129 | \xdef\@gtempa{% | |
1130 | \cl@@ckpt | |
1131 | \let\@nx\restorecounters@\@nx\@empty | |
1132 | }% | |
1133 | \endgroup | |
1134 | \let\restorecounters@\@gtempa | |
1135 | } | |
1136 | \let\restorecounters@\@empty | |
1137 | \def\savealignstate@{% | |
1138 | \begingroup | |
1139 | \let\or\relax | |
1140 | \xdef\@gtempa{% | |
1141 | \global\totwidth@\the\totwidth@ | |
1142 | \global\row@\the\row@ | |
1143 | \gdef\@nx\tag@lengths{\tag@lengths}% | |
1144 | \let\@nx\restorealignstate@\@nx\@empty | |
1145 | }% | |
1146 | \endgroup | |
1147 | \let\restorealignstate@\@gtempa | |
1148 | } | |
1149 | ||
1150 | \let\restorealignstate@\@empty | |
1151 | \def\savecolumn@{% | |
1152 | \edef\restorecolumn@{% | |
1153 | \global\column@\number\column@ | |
1154 | \let\@nx\restorecolumn@\@nx\@empty | |
1155 | }% | |
1156 | } | |
1157 | \let\restorecolumn@\@empty | |
1158 | \newtoks\@envbody | |
1159 | \def\addto@envbody#1{\global\@envbody\@xp{\the\@envbody#1}} | |
1160 | \def\collect@body#1{% | |
1161 | \@envbody{\@xp#1\@xp{\the\@envbody}}% | |
1162 | \edef\process@envbody{\the\@envbody\@nx\end{\@currenvir}}% | |
1163 | \@envbody\@emptytoks \def\begin@stack{b}% | |
1164 | \begingroup | |
1165 | \@xp\let\csname\@currenvir\endcsname\collect@@body | |
1166 | \edef\process@envbody{\@xp\@nx\csname\@currenvir\endcsname}% | |
1167 | \process@envbody | |
1168 | } | |
1169 | \def\push@begins#1\begin#2{% | |
1170 | \ifx\end#2\else b\@xp\push@begins\fi | |
1171 | } | |
1172 | \def\collect@@body#1\end#2{% | |
1173 | \edef\begin@stack{\push@begins#1\begin\end \@xp\@gobble\begin@stack}% | |
1174 | \ifx\@empty\begin@stack | |
1175 | \endgroup | |
1176 | \@checkend{#2}% | |
1177 | \addto@envbody{#1}% | |
1178 | \else | |
1179 | \addto@envbody{#1\end{#2}}% | |
1180 | \fi | |
1181 | \process@envbody % A little tricky! Note the grouping | |
1182 | } | |
1183 | \def\math@cr@@@aligned{% | |
1184 | \ifodd\column@ \let\next@\@empty | |
1185 | \else \def\next@{&\kern-\alignsep@}% | |
1186 | \fi | |
1187 | \next@ \cr | |
1188 | } | |
1189 | \newcommand{\start@aligned}[2]{% | |
1190 | \RIfM@\else | |
1191 | \nonmatherr@{\begin{\@currenvir}}% | |
1192 | \fi | |
1193 | \savecolumn@ % Assumption: called inside a group | |
1194 | \null\,% | |
1195 | \if #1t\vtop \else \if#1b \vbox \else \vcenter \fi \fi \bgroup | |
1196 | \maxfields@#2\relax | |
1197 | \ifnum\maxfields@>\m@ne | |
1198 | \multiply\maxfields@\tw@ | |
1199 | \let\math@cr@@@\math@cr@@@alignedat | |
1200 | \alignsep@\z@skip | |
1201 | \else | |
1202 | \let\math@cr@@@\math@cr@@@aligned | |
1203 | \alignsep@\minalignsep | |
1204 | \fi | |
1205 | \Let@ \chardef\dspbrk@context\@ne | |
1206 | \default@tag | |
1207 | \spread@equation % no-op if already called | |
1208 | \global\column@\z@ | |
1209 | \ialign\bgroup | |
1210 | &\column@plus | |
1211 | \hfil | |
1212 | \strut@ | |
1213 | $\m@th\displaystyle{##}$% | |
1214 | \tabskip\z@skip | |
1215 | &\column@plus | |
1216 | $\m@th\displaystyle{{}##}$% | |
1217 | \hfil | |
1218 | \tabskip\alignsep@ | |
1219 | \crcr | |
1220 | } | |
1221 | \def\math@cr@@@alignedat{% | |
1222 | \ifnum\column@>\maxfields@ | |
1223 | \begingroup | |
1224 | \measuring@false | |
1225 | \@amsmath@err{Extra & on this line}% | |
1226 | {\the\andhelp@}% "An extra & here is disastrous" | |
1227 | \endgroup | |
1228 | \fi | |
1229 | \global\column@\z@ | |
1230 | \cr | |
1231 | } | |
1232 | \def\alignsafe@testopt#1#2{% | |
1233 | \relax\iffalse{\fi\ifnum`}=0\fi | |
1234 | \@ifnextchar[% | |
1235 | {\let\@let@token\relax \ifnum`{=\z@\fi\iffalse}\fi#1}% | |
1236 | {\let\@let@token\relax \ifnum`{=\z@\fi\iffalse}\fi#1[#2]}% | |
1237 | } | |
1238 | \newenvironment{aligned}{% | |
1239 | \let\@testopt\alignsafe@testopt | |
1240 | \aligned@a | |
1241 | }{% | |
1242 | \crcr\egroup | |
1243 | \restorecolumn@ | |
1244 | \egroup | |
1245 | } | |
1246 | \newcommand{\aligned@a}[1][c]{\start@aligned{#1}\m@ne} | |
1247 | \newenvironment{alignedat}{% | |
1248 | \let\@testopt\alignsafe@testopt | |
1249 | \alignedat@a | |
1250 | }{% | |
1251 | \endaligned | |
1252 | } | |
1253 | \newcommand{\alignedat@a}[1][c]{\start@aligned{#1}} | |
1254 | \newenvironment{gathered}[1][c]{% | |
1255 | \RIfM@\else | |
1256 | \nonmatherr@{\begin{gathered}}% | |
1257 | \fi | |
1258 | \null\,% | |
1259 | \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi \bgroup | |
1260 | \Let@ \chardef\dspbrk@context\@ne \restore@math@cr | |
1261 | \spread@equation | |
1262 | \ialign\bgroup | |
1263 | \hfil\strut@$\m@th\displaystyle##$\hfil | |
1264 | \crcr | |
1265 | }{% | |
1266 | \endaligned | |
1267 | } | |
1268 | \def\start@gather#1{% | |
1269 | \RIfM@ | |
1270 | \nomath@env | |
1271 | \DN@{\@namedef{end\@currenvir}{}\@gobble}% | |
1272 | \else | |
1273 | $$% | |
1274 | #1% | |
1275 | \ifst@rred \else \global\@eqnswtrue \fi | |
1276 | \let\next@\gather@ | |
1277 | \fi | |
1278 | \collect@body\next@ | |
1279 | } | |
1280 | \newenvironment{gather}{% | |
1281 | \start@gather\st@rredfalse | |
1282 | }{% | |
1283 | \math@cr \black@\totwidth@ \egroup | |
1284 | $$\ignorespacesafterend | |
1285 | } | |
1286 | ||
1287 | \newenvironment{gather*}{% | |
1288 | \start@gather\st@rredtrue | |
1289 | }{% | |
1290 | \endgather | |
1291 | } | |
1292 | \def\gather@#1{% | |
1293 | \ingather@true \let\split\insplit@ | |
1294 | \let\tag\tag@in@align \let\label\label@in@display | |
1295 | \chardef\dspbrk@context\z@ | |
1296 | \intertext@ \displ@y@ \Let@ | |
1297 | \let\math@cr@@@\math@cr@@@gather | |
1298 | \gmeasure@{#1}% | |
1299 | \global\shifttag@false | |
1300 | \tabskip\z@skip | |
1301 | \global\row@\@ne | |
1302 | \halign to\displaywidth\bgroup | |
1303 | \strut@ | |
1304 | \setboxz@h{$\m@th\displaystyle{##}$}% | |
1305 | \calc@shift@gather | |
1306 | \set@gather@field | |
1307 | \tabskip\@centering | |
1308 | &\setboxz@h{\strut@{##}}% | |
1309 | \place@tag@gather | |
1310 | \tabskip \iftagsleft@ \gdisplaywidth@ \else \z@skip \span\fi | |
1311 | \crcr | |
1312 | #1% | |
1313 | } | |
1314 | \def\gmeasure@#1{% | |
1315 | \begingroup | |
1316 | \measuring@true | |
1317 | \totwidth@\z@ | |
1318 | \global\let\tag@lengths\@empty | |
1319 | \savecounters@ | |
1320 | \setbox\@ne\vbox{% | |
1321 | \everycr{\noalign{\global\tag@false | |
1322 | \global\let\raise@tag\@empty \global\column@\z@}}% | |
1323 | \let\label\@gobble | |
1324 | \halign{% | |
1325 | \setboxz@h{$\m@th\displaystyle{##}$}% | |
1326 | \ifdim\wdz@>\totwidth@ | |
1327 | \global\totwidth@\wdz@ | |
1328 | \fi | |
1329 | &\setboxz@h{\strut@{##}}% | |
1330 | \savetaglength@ | |
1331 | \crcr | |
1332 | #1% | |
1333 | \math@cr@@@ | |
1334 | }% | |
1335 | }% | |
1336 | \restorecounters@ | |
1337 | \if@fleqn | |
1338 | \global\advance\totwidth@\@mathmargin | |
1339 | \fi | |
1340 | \iftagsleft@ | |
1341 | \ifdim\totwidth@>\displaywidth | |
1342 | \global\let\gdisplaywidth@\totwidth@ | |
1343 | \else | |
1344 | \global\let\gdisplaywidth@\displaywidth | |
1345 | \fi | |
1346 | \fi | |
1347 | \endgroup | |
1348 | } | |
1349 | \def\math@cr@@@gather{% | |
1350 | \ifst@rred\nonumber\fi | |
1351 | &\relax | |
1352 | \make@display@tag | |
1353 | \ifst@rred\else\global\@eqnswtrue\fi | |
1354 | \global\advance\row@\@ne | |
1355 | \cr | |
1356 | } | |
1357 | \def\calc@shift@gather{% | |
1358 | \dimen@\mintagsep\relax | |
1359 | \tagwidth@\tag@width\row@\relax | |
1360 | \if@fleqn | |
1361 | \global\eqnshift@\@mathmargin | |
1362 | \ifdim\tagwidth@>\z@ | |
1363 | \advance\dimen@\tagwidth@ | |
1364 | \iftagsleft@ | |
1365 | \ifdim\dimen@>\@mathmargin | |
1366 | \global\shifttag@true | |
1367 | \fi | |
1368 | \else | |
1369 | \advance\dimen@\@mathmargin | |
1370 | \advance\dimen@\wdz@ | |
1371 | \ifdim\dimen@>\displaywidth | |
1372 | \global\shifttag@true | |
1373 | \fi | |
1374 | \fi | |
1375 | \fi | |
1376 | \else | |
1377 | \global\eqnshift@\displaywidth | |
1378 | \global\advance\eqnshift@-\wdz@ | |
1379 | \ifdim\tagwidth@>\z@ | |
1380 | \multiply\dimen@\tw@ | |
1381 | \advance\dimen@\wdz@ | |
1382 | \advance\dimen@\tagwidth@ | |
1383 | \ifdim\dimen@>\displaywidth | |
1384 | \global\shifttag@true | |
1385 | \else | |
1386 | \ifdim\eqnshift@<4\tagwidth@ | |
1387 | \global\advance\eqnshift@-\tagwidth@ | |
1388 | \fi | |
1389 | \fi | |
1390 | \fi | |
1391 | \global\divide\eqnshift@\tw@ | |
1392 | \iftagsleft@ | |
1393 | \global\eqnshift@-\eqnshift@ | |
1394 | \global\advance\eqnshift@\displaywidth | |
1395 | \global\advance\eqnshift@-\wdz@ | |
1396 | \fi | |
1397 | \ifdim\eqnshift@<\z@ | |
1398 | \global\eqnshift@\z@ | |
1399 | \fi | |
1400 | \fi | |
1401 | } | |
1402 | \def\place@tag@gather{% | |
1403 | \iftagsleft@ | |
1404 | \kern-\gdisplaywidth@ | |
1405 | \ifshifttag@ | |
1406 | \rlap{\vbox{% | |
1407 | \normalbaselines | |
1408 | \boxz@ | |
1409 | \vbox to\lineht@{}% | |
1410 | \raise@tag | |
1411 | }}% | |
1412 | \global\shifttag@false | |
1413 | \else | |
1414 | \rlap{\boxz@}% | |
1415 | \fi | |
1416 | \else | |
1417 | \ifdim\totwidth@>\displaywidth | |
1418 | \dimen@\totwidth@ | |
1419 | \advance\dimen@-\displaywidth | |
1420 | \kern-\dimen@ | |
1421 | \fi | |
1422 | \ifshifttag@ | |
1423 | \llap{\vtop{% | |
1424 | \raise@tag | |
1425 | \normalbaselines | |
1426 | \setbox\@ne\null | |
1427 | \dp\@ne\lineht@ | |
1428 | \box\@ne | |
1429 | \boxz@ | |
1430 | }}% | |
1431 | \global\shifttag@false | |
1432 | \else | |
1433 | \llap{\boxz@}% | |
1434 | \fi | |
1435 | \fi | |
1436 | } | |
1437 | \def\set@gather@field{% | |
1438 | \iftagsleft@ | |
1439 | \global\lineht@\ht\z@ | |
1440 | \else | |
1441 | \global\lineht@\dp\z@ | |
1442 | \fi | |
1443 | \kern\eqnshift@ | |
1444 | \boxz@ | |
1445 | \hfil | |
1446 | } | |
1447 | \newif\ifxxat@ | |
1448 | ||
1449 | \newif\ifcheckat@ | |
1450 | ||
1451 | \let\xatlevel@\@empty | |
1452 | \def\start@align#1#2#3{% | |
1453 | \let\xatlevel@#1% always \z@, \@ne, or \tw@ | |
1454 | \maxfields@#3\relax | |
1455 | \ifnum\maxfields@>\m@ne | |
1456 | \checkat@true | |
1457 | \ifnum\xatlevel@=\tw@ | |
1458 | \xxat@true | |
1459 | \fi | |
1460 | \multiply\maxfields@\tw@ | |
1461 | \else | |
1462 | \checkat@false | |
1463 | \fi | |
1464 | \ifingather@ | |
1465 | \iffalse{\fi\ifnum0=`}\fi | |
1466 | \DN@{\vcenter\bgroup\savealignstate@\align@#2}% | |
1467 | \else | |
1468 | \ifmmode | |
1469 | \if@display | |
1470 | \DN@{\align@recover}% | |
1471 | \else | |
1472 | \nomath@env | |
1473 | \DN@{\@namedef{end\@currenvir}{}\@gobble}% | |
1474 | \fi | |
1475 | \else | |
1476 | $$% | |
1477 | \let\split\insplit@ | |
1478 | \DN@{\align@#2}% | |
1479 | \fi | |
1480 | \fi | |
1481 | \collect@body\next@ | |
1482 | } | |
1483 | \def\align@recover#1#2#3{% | |
1484 | \endgroup | |
1485 | \@amsmath@err{% | |
1486 | Erroneous nesting of equation structures;\MessageBreak | |
1487 | trying to recover with `aligned'% | |
1488 | }\@ehc | |
1489 | \begin{aligned}\relax#1\end{aligned}% | |
1490 | } | |
1491 | \newenvironment{alignat}{% | |
1492 | \start@align\z@\st@rredfalse | |
1493 | }{% | |
1494 | \endalign | |
1495 | } | |
1496 | \newenvironment{alignat*}{% | |
1497 | \start@align\z@\st@rredtrue | |
1498 | }{% | |
1499 | \endalign | |
1500 | } | |
1501 | \newenvironment{xalignat}{% | |
1502 | \start@align\@ne\st@rredfalse | |
1503 | }{% | |
1504 | \endalign | |
1505 | } | |
1506 | \newenvironment{xalignat*}{% | |
1507 | \start@align\@ne\st@rredtrue | |
1508 | }{% | |
1509 | \endalign | |
1510 | } | |
1511 | \newenvironment{xxalignat}{% | |
1512 | \start@align\tw@\st@rredtrue | |
1513 | }{% | |
1514 | \endalign | |
1515 | } | |
1516 | \newenvironment{align}{% | |
1517 | \start@align\@ne\st@rredfalse\m@ne | |
1518 | }{% | |
1519 | \math@cr \black@\totwidth@ | |
1520 | \egroup | |
1521 | \ifingather@ | |
1522 | \restorealignstate@ | |
1523 | \egroup | |
1524 | \nonumber | |
1525 | \ifnum0=`{\fi\iffalse}\fi | |
1526 | \else | |
1527 | $$% | |
1528 | \fi | |
1529 | \ignorespacesafterend | |
1530 | } | |
1531 | \newenvironment{align*}{% | |
1532 | \start@align\@ne\st@rredtrue\m@ne | |
1533 | }{% | |
1534 | \endalign | |
1535 | } | |
1536 | \newenvironment{flalign}{% | |
1537 | \start@align\tw@\st@rredfalse\m@ne | |
1538 | }{% | |
1539 | \endalign | |
1540 | } | |
1541 | \newenvironment{flalign*}{% | |
1542 | \start@align\tw@\st@rredtrue\m@ne | |
1543 | }{% | |
1544 | \endalign | |
1545 | } | |
1546 | \def\align@#1#2{% | |
1547 | \inalign@true \intertext@ \Let@ \chardef\dspbrk@context\z@ | |
1548 | \ifingather@\else\displ@y@\fi | |
1549 | \let\math@cr@@@\math@cr@@@align | |
1550 | \ifxxat@\else \let\tag\tag@in@align \fi | |
1551 | \let\label\label@in@display | |
1552 | #1% set st@r | |
1553 | \ifst@rred\else \global\@eqnswtrue \fi | |
1554 | \measure@{#2}% | |
1555 | \global\row@\z@ | |
1556 | \tabskip\eqnshift@ | |
1557 | \halign\bgroup | |
1558 | \span\align@preamble\crcr | |
1559 | #2% | |
1560 | } | |
1561 | \def\math@cr@@@align{% | |
1562 | \ifst@rred\nonumber\fi | |
1563 | \if@eqnsw \global\tag@true \fi | |
1564 | \global\advance\row@\@ne | |
1565 | \add@amps\maxfields@ | |
1566 | \omit | |
1567 | \kern-\alignsep@ | |
1568 | \iftag@ | |
1569 | \setboxz@h{\@lign\strut@{\make@display@tag}}% | |
1570 | \place@tag | |
1571 | \fi | |
1572 | \ifst@rred\else\global\@eqnswtrue\fi | |
1573 | \global\lineht@\z@ | |
1574 | \cr | |
1575 | } | |
1576 | \def\math@cr@@@align@measure{% | |
1577 | &\omit | |
1578 | \global\advance\row@\@ne | |
1579 | \ifst@rred\nonumber\fi | |
1580 | \if@eqnsw \global\tag@true \fi | |
1581 | \ifnum\column@>\maxfields@ | |
1582 | \ifcheckat@ | |
1583 | \begingroup | |
1584 | \measuring@false | |
1585 | \@amsmath@err{Extra & on this line}% | |
1586 | {\the\andhelp@}% "An extra & here is disastrous" | |
1587 | \endgroup | |
1588 | \else | |
1589 | \global\maxfields@\column@ | |
1590 | \fi | |
1591 | \fi | |
1592 | \setboxz@h{\@lign\strut@{% | |
1593 | \if@eqnsw | |
1594 | \stepcounter{equation}% | |
1595 | \tagform@\theequation | |
1596 | \else | |
1597 | \iftag@\df@tag\fi | |
1598 | \fi | |
1599 | }}% | |
1600 | \savetaglength@ | |
1601 | \ifst@rred\else\global\@eqnswtrue\fi | |
1602 | \cr | |
1603 | } | |
1604 | \let\field@lengths\@empty | |
1605 | ||
1606 | \def\savefieldlength@{% | |
1607 | \begingroup | |
1608 | \let\or\relax | |
1609 | \xdef\field@lengths{% | |
1610 | \field@lengths | |
1611 | \ifnum\column@=0 | |
1612 | \or | |
1613 | \else | |
1614 | ,% | |
1615 | \fi | |
1616 | \the\wdz@ | |
1617 | }% | |
1618 | \endgroup | |
1619 | } | |
1620 | ||
1621 | \def\fieldlengths@#1{% | |
1622 | \ifcase\@xp#1\field@lengths\fi | |
1623 | } | |
1624 | \let\maxcolumn@widths\@empty | |
1625 | \def\maxcol@width#1{% | |
1626 | \ifcase\@xp#1\maxcolumn@widths\fi\relax | |
1627 | } | |
1628 | \def\measure@#1{% | |
1629 | \begingroup | |
1630 | \measuring@true | |
1631 | \global\eqnshift@\z@ | |
1632 | \global\alignsep@\z@ | |
1633 | \global\let\tag@lengths\@empty | |
1634 | \global\let\field@lengths\@empty | |
1635 | \savecounters@ | |
1636 | \global\setbox0\vbox{% | |
1637 | \let\math@cr@@@\math@cr@@@align@measure | |
1638 | \everycr{\noalign{\global\tag@false | |
1639 | \global\let\raise@tag\@empty \global\column@\z@}}% | |
1640 | \let\label\@gobble | |
1641 | \global\row@\z@ | |
1642 | \tabskip\z@ | |
1643 | \halign{\span\align@preamble\crcr | |
1644 | #1% | |
1645 | \math@cr@@@ | |
1646 | \global\column@\z@ | |
1647 | \add@amps\maxfields@\cr | |
1648 | }% | |
1649 | }% | |
1650 | \restorecounters@ | |
1651 | \ifodd\maxfields@ | |
1652 | \global\advance\maxfields@\@ne | |
1653 | \fi | |
1654 | \ifnum\xatlevel@=\tw@ | |
1655 | \ifnum\maxfields@<\thr@@ | |
1656 | \let\xatlevel@\z@ | |
1657 | \fi | |
1658 | \fi | |
1659 | \setbox\z@\vbox{% | |
1660 | \unvbox\z@ \unpenalty \global\setbox\@ne\lastbox | |
1661 | }% | |
1662 | \global\totwidth@\wd\@ne | |
1663 | \if@fleqn \global\advance\totwidth@\@mathmargin \fi | |
1664 | \global\let\maxcolumn@widths\@empty | |
1665 | \begingroup | |
1666 | \let\or\relax | |
1667 | \loop | |
1668 | \global\setbox\@ne\hbox{% | |
1669 | \unhbox\@ne \unskip \global\setbox\thr@@\lastbox | |
1670 | }% | |
1671 | \ifhbox\thr@@ | |
1672 | \xdef\maxcolumn@widths{ \or \the\wd\thr@@ \maxcolumn@widths}% | |
1673 | \repeat | |
1674 | \endgroup | |
1675 | \dimen@\displaywidth | |
1676 | \advance\dimen@-\totwidth@ | |
1677 | \ifcase\xatlevel@ | |
1678 | \global\alignsep@\z@ | |
1679 | \let\minalignsep\z@ | |
1680 | \@tempcntb\z@ | |
1681 | \if@fleqn | |
1682 | \@tempcnta\@ne | |
1683 | \global\eqnshift@\@mathmargin | |
1684 | \else | |
1685 | \@tempcnta\tw@ | |
1686 | \global\eqnshift@\dimen@ | |
1687 | \global\divide\eqnshift@\@tempcnta | |
1688 | \fi | |
1689 | \or | |
1690 | \@tempcntb\maxfields@ | |
1691 | \divide\@tempcntb\tw@ | |
1692 | \@tempcnta\@tempcntb | |
1693 | \advance\@tempcntb\m@ne | |
1694 | \if@fleqn | |
1695 | \global\eqnshift@\@mathmargin | |
1696 | \global\alignsep@\dimen@ | |
1697 | \global\divide\alignsep@\@tempcnta | |
1698 | \else | |
1699 | \global\advance\@tempcnta\@ne | |
1700 | \global\eqnshift@\dimen@ | |
1701 | \global\divide\eqnshift@\@tempcnta | |
1702 | \global\alignsep@\eqnshift@ | |
1703 | \fi | |
1704 | \or | |
1705 | \@tempcntb\maxfields@ | |
1706 | \divide\@tempcntb\tw@ | |
1707 | \global\advance\@tempcntb\m@ne | |
1708 | \global\@tempcnta\@tempcntb | |
1709 | \global\eqnshift@\z@ | |
1710 | \global\alignsep@\dimen@ | |
1711 | \if@fleqn | |
1712 | \global\advance\alignsep@\@mathmargin\relax | |
1713 | \fi | |
1714 | \global\divide\alignsep@\@tempcntb | |
1715 | \fi | |
1716 | \ifdim\alignsep@<\minalignsep\relax | |
1717 | \global\alignsep@\minalignsep\relax | |
1718 | \ifdim\eqnshift@>\z@ | |
1719 | \if@fleqn\else | |
1720 | \global\eqnshift@\displaywidth | |
1721 | \global\advance\eqnshift@-\totwidth@ | |
1722 | \global\advance\eqnshift@-\@tempcntb\alignsep@ | |
1723 | \global\divide\eqnshift@\tw@ | |
1724 | \fi | |
1725 | \fi | |
1726 | \fi | |
1727 | \ifdim\eqnshift@<\z@ | |
1728 | \global\eqnshift@\z@ | |
1729 | \fi | |
1730 | \calc@shift@align | |
1731 | \global\tagshift@\totwidth@ | |
1732 | \global\advance\tagshift@\@tempcntb\alignsep@ | |
1733 | \if@fleqn | |
1734 | \ifnum\xatlevel@=\tw@ | |
1735 | \global\advance\tagshift@-\@mathmargin\relax | |
1736 | \fi | |
1737 | \else | |
1738 | \global\advance\tagshift@\eqnshift@ | |
1739 | \fi | |
1740 | \iftagsleft@ \else | |
1741 | \global\advance\tagshift@-\displaywidth | |
1742 | \fi | |
1743 | \dimen@\minalignsep\relax | |
1744 | \global\advance\totwidth@\@tempcntb\dimen@ | |
1745 | \ifdim\totwidth@>\displaywidth | |
1746 | \global\let\displaywidth@\totwidth@ | |
1747 | \else | |
1748 | \global\let\displaywidth@\displaywidth | |
1749 | \fi | |
1750 | \endgroup | |
1751 | } | |
1752 | \iftagsleft@\if@fleqn | |
1753 | \def\calc@shift@align{% | |
1754 | \global\let\tag@shifts\@empty | |
1755 | \begingroup | |
1756 | \@tempdima\@mathmargin\relax | |
1757 | \advance\@tempdima-\mintagsep\relax | |
1758 | \loop | |
1759 | \ifnum\row@>0 | |
1760 | \ifdim\tag@width\row@>\z@ | |
1761 | \x@calc@shift@lf | |
1762 | \else | |
1763 | \saveshift@0% | |
1764 | \fi | |
1765 | \advance\row@\m@ne | |
1766 | \repeat | |
1767 | \endgroup | |
1768 | } | |
1769 | \def\x@calc@shift@lf{% | |
1770 | \ifdim\eqnshift@=\z@ | |
1771 | \global\eqnshift@\@mathmargin\relax | |
1772 | \alignsep@\displaywidth | |
1773 | \advance\alignsep@-\totwidth@ | |
1774 | \global\divide\alignsep@\@tempcntb | |
1775 | \ifdim\alignsep@<\minalignsep\relax | |
1776 | \global\alignsep@\minalignsep\relax | |
1777 | \fi | |
1778 | \fi | |
1779 | \ifdim\tag@width\row@>\@tempdima | |
1780 | \saveshift@1% | |
1781 | \else | |
1782 | \saveshift@0% | |
1783 | \fi | |
1784 | } | |
1785 | \fi\fi | |
1786 | \iftagsleft@\else\if@fleqn | |
1787 | \def\calc@shift@align{% | |
1788 | \global\let\tag@shifts\@empty | |
1789 | \begingroup | |
1790 | \loop | |
1791 | \ifnum\row@>0 | |
1792 | \ifdim\tag@width\row@>\z@ | |
1793 | \x@calc@shift@rf | |
1794 | \else | |
1795 | \saveshift@0% | |
1796 | \fi | |
1797 | \advance\row@\m@ne | |
1798 | \repeat | |
1799 | \endgroup | |
1800 | } | |
1801 | \def\x@calc@shift@rf{% | |
1802 | \column@\z@ | |
1803 | \@tempdimb\z@ | |
1804 | \@tempdimc\z@ | |
1805 | \edef\@tempb{\fieldlengths@\row@}% | |
1806 | \@for\@tempa:=\@tempb\do{% | |
1807 | \advance\column@\@ne | |
1808 | \x@rcalc@width | |
1809 | }% | |
1810 | \begingroup | |
1811 | \advance\column@\m@ne | |
1812 | \divide\column@\tw@ | |
1813 | \ifnum\@tempcntb>\column@ | |
1814 | \advance\@tempcnta-\@tempcntb | |
1815 | \advance\@tempcnta\column@ | |
1816 | \@tempcntb\column@ | |
1817 | \fi | |
1818 | \tagwidth@\tag@width\row@\relax | |
1819 | \@tempdima\eqnshift@ | |
1820 | \advance\@tempdima\@tempdimc\relax | |
1821 | \advance\@tempdima\tagwidth@ | |
1822 | \dimen@\minalignsep\relax | |
1823 | \multiply\dimen@\@tempcntb | |
1824 | \advance\dimen@\mintagsep\relax | |
1825 | \advance\dimen@\@tempdima | |
1826 | \ifdim\dimen@>\displaywidth | |
1827 | \saveshift@1% | |
1828 | \else | |
1829 | \saveshift@0% | |
1830 | \dimen@\alignsep@\relax | |
1831 | \multiply\dimen@\@tempcntb | |
1832 | \advance\dimen@\@tempdima | |
1833 | \advance\dimen@\tagwidth@ | |
1834 | \ifdim\dimen@>\displaywidth | |
1835 | \dimen@\displaywidth | |
1836 | \advance\dimen@-\@tempdima | |
1837 | \ifnum\xatlevel@=\tw@ | |
1838 | \advance\dimen@-\mintagsep\relax | |
1839 | \fi | |
1840 | \divide\dimen@\@tempcnta | |
1841 | \ifdim\dimen@<\minalignsep\relax | |
1842 | \global\alignsep@\minalignsep\relax | |
1843 | \else | |
1844 | \global\alignsep@\dimen@ | |
1845 | \fi | |
1846 | \fi | |
1847 | \fi | |
1848 | \endgroup | |
1849 | } | |
1850 | \fi\fi | |
1851 | \iftagsleft@\else\if@fleqn\else | |
1852 | \def\calc@shift@align{% | |
1853 | \global\let\tag@shifts\@empty | |
1854 | \begingroup | |
1855 | \loop | |
1856 | \ifnum\row@>0 | |
1857 | \ifdim\tag@width\row@>\z@ | |
1858 | \x@calc@shift@rc | |
1859 | \else | |
1860 | \saveshift@0% | |
1861 | \fi | |
1862 | \advance\row@\m@ne | |
1863 | \repeat | |
1864 | \endgroup | |
1865 | } | |
1866 | \def\x@calc@shift@rc{% | |
1867 | \column@\z@ | |
1868 | \@tempdimb\z@ | |
1869 | \@tempdimc\z@ | |
1870 | \edef\@tempb{\fieldlengths@\row@}% | |
1871 | \@for\@tempa:=\@tempb\do{% | |
1872 | \advance\column@\@ne | |
1873 | \x@rcalc@width | |
1874 | }% | |
1875 | \begingroup | |
1876 | \advance\column@\m@ne | |
1877 | \divide\column@\tw@ | |
1878 | \ifnum\@tempcntb>\column@ | |
1879 | \advance\@tempcnta-\@tempcntb | |
1880 | \advance\@tempcnta\column@ | |
1881 | \@tempcntb\column@ | |
1882 | \fi | |
1883 | \tagwidth@\tag@width\row@\relax | |
1884 | \@tempdima\@tempdimc | |
1885 | \advance\@tempdima\tagwidth@ | |
1886 | \dimen@\minalignsep\relax | |
1887 | \multiply\dimen@\@tempcntb | |
1888 | \advance\dimen@\mintagsep\relax | |
1889 | \ifnum\xatlevel@=\tw@ \else | |
1890 | \advance\dimen@\mintagsep\relax | |
1891 | \fi | |
1892 | \advance\dimen@\@tempdima | |
1893 | \ifdim\dimen@>\displaywidth | |
1894 | \saveshift@1% | |
1895 | \else | |
1896 | \saveshift@0% | |
1897 | \dimen@\eqnshift@ | |
1898 | \advance\dimen@\@tempdima | |
1899 | \advance\dimen@\@tempcntb\alignsep@ | |
1900 | \advance\dimen@\tagwidth@ | |
1901 | \ifdim\dimen@>\displaywidth | |
1902 | \dimen@\displaywidth | |
1903 | \advance\dimen@-\@tempdima | |
1904 | \ifnum\xatlevel@=\tw@ | |
1905 | \advance\dimen@-\mintagsep\relax | |
1906 | \fi | |
1907 | \divide\dimen@\@tempcnta | |
1908 | \ifdim\dimen@<\minalignsep\relax | |
1909 | \global\alignsep@\minalignsep\relax | |
1910 | \eqnshift@\displaywidth | |
1911 | \advance\eqnshift@-\@tempdima | |
1912 | \advance\eqnshift@-\@tempcntb\alignsep@ | |
1913 | \global\divide\eqnshift@\tw@ | |
1914 | \else | |
1915 | \ifdim\dimen@<\eqnshift@ | |
1916 | \ifdim\dimen@<\z@ | |
1917 | \global\eqnshift@\z@ | |
1918 | \else | |
1919 | \global\eqnshift@\dimen@ | |
1920 | \fi | |
1921 | \fi | |
1922 | \ifdim\dimen@<\alignsep@ | |
1923 | \global\alignsep@\dimen@ | |
1924 | \fi | |
1925 | \fi | |
1926 | \fi | |
1927 | \fi | |
1928 | \endgroup | |
1929 | } | |
1930 | \fi\fi | |
1931 | \iftagsleft@\else | |
1932 | \def\x@rcalc@width{% | |
1933 | \ifdim\@tempa > \z@ | |
1934 | \advance\@tempdimc\@tempdimb | |
1935 | \ifodd\column@ | |
1936 | \advance\@tempdimc\maxcol@width\column@ | |
1937 | \@tempdimb\z@ | |
1938 | \else | |
1939 | \advance\@tempdimc\@tempa\relax | |
1940 | \@tempdimb\maxcol@width\column@ | |
1941 | \advance\@tempdimb-\@tempa\relax | |
1942 | \fi | |
1943 | \else | |
1944 | \advance\@tempdimb\maxcol@width\column@\relax | |
1945 | \fi | |
1946 | } | |
1947 | \fi | |
1948 | \iftagsleft@\if@fleqn\else | |
1949 | \def\calc@shift@align{% | |
1950 | \global\let\tag@shifts\@empty | |
1951 | \begingroup | |
1952 | \loop | |
1953 | \ifnum\row@>\z@ | |
1954 | \ifdim\tag@width\row@>\z@ | |
1955 | \x@calc@shift@lc | |
1956 | \else | |
1957 | \saveshift@0% | |
1958 | \fi | |
1959 | \advance\row@\m@ne | |
1960 | \repeat | |
1961 | \endgroup | |
1962 | } | |
1963 | \def\x@calc@shift@lc{% | |
1964 | \column@\z@ | |
1965 | \@tempdima\z@ % ``width of equation'' | |
1966 | \@tempdimb\z@ % ``indent of equation'' | |
1967 | \edef\@tempb{\fieldlengths@\row@}% | |
1968 | \@for\@tempa:=\@tempb\do{% | |
1969 | \advance\column@\@ne | |
1970 | \x@lcalc@width | |
1971 | }% | |
1972 | \begingroup | |
1973 | \tagwidth@\tag@width\row@\relax | |
1974 | \@tempdima\totwidth@ | |
1975 | \advance\@tempdima-\@tempdimb | |
1976 | \advance\@tempdima\tagwidth@ | |
1977 | \dimen@\minalignsep\relax | |
1978 | \multiply\dimen@\@tempcntb | |
1979 | \advance\dimen@\mintagsep\relax | |
1980 | \ifnum\xatlevel@=\tw@ \else | |
1981 | \advance\dimen@\mintagsep\relax | |
1982 | \fi | |
1983 | \advance\dimen@\@tempdima | |
1984 | \ifdim\dimen@>\displaywidth | |
1985 | \saveshift@1% | |
1986 | \else | |
1987 | \saveshift@0% | |
1988 | \dimen@\alignsep@ | |
1989 | \multiply\dimen@\count@ | |
1990 | \advance\dimen@\eqnshift@ | |
1991 | \advance\dimen@\@tempdimb | |
1992 | \ifdim\dimen@<2\tagwidth@ | |
1993 | \dimen@\displaywidth | |
1994 | \advance\dimen@-\@tempdima | |
1995 | \ifnum\xatlevel@=\tw@ | |
1996 | \advance\dimen@-\mintagsep\relax | |
1997 | \fi | |
1998 | \ifnum\@tempcnta>\z@ | |
1999 | \divide\dimen@\@tempcnta | |
2000 | \else \dimen@\z@ | |
2001 | \fi | |
2002 | \ifdim\dimen@<\minalignsep\relax | |
2003 | \global\alignsep@\minalignsep\relax | |
2004 | \dimen@\displaywidth | |
2005 | \advance\dimen@-\@tempdima | |
2006 | \advance\dimen@-\@tempcntb\alignsep@ | |
2007 | \global\divide\dimen@\tw@ | |
2008 | \else | |
2009 | \ifdim\dimen@<\alignsep@ | |
2010 | \global\alignsep@\dimen@ | |
2011 | \fi | |
2012 | \fi | |
2013 | \ifnum\xatlevel@=\tw@ | |
2014 | \dimen@\mintagsep\relax | |
2015 | \fi | |
2016 | \advance\dimen@\tagwidth@ | |
2017 | \advance\dimen@-\@tempdimb | |
2018 | \advance\dimen@-\count@\alignsep@ | |
2019 | \ifdim\dimen@>\eqnshift@ | |
2020 | \global\eqnshift@\dimen@ | |
2021 | \fi | |
2022 | \fi | |
2023 | \fi | |
2024 | \endgroup | |
2025 | } | |
2026 | \def\x@lcalc@width{% | |
2027 | \ifdim\@tempdima = \z@ | |
2028 | \ifdim\@tempa > \z@ | |
2029 | \@tempdima\p@ | |
2030 | \ifodd\column@ | |
2031 | \advance\@tempdimb \maxcol@width\column@ | |
2032 | \advance\@tempdimb-\@tempa | |
2033 | \fi | |
2034 | \count@\column@ | |
2035 | \advance\count@\m@ne | |
2036 | \divide\count@\tw@ | |
2037 | \advance\@tempcnta-\count@ | |
2038 | \advance\@tempcntb-\count@ | |
2039 | \else | |
2040 | \advance\@tempdimb \maxcol@width\column@\relax | |
2041 | \fi | |
2042 | \fi | |
2043 | } | |
2044 | \fi\fi | |
2045 | \def\place@tag{% | |
2046 | \iftagsleft@ | |
2047 | \kern-\tagshift@ | |
2048 | \if1\shift@tag\row@\relax | |
2049 | \rlap{\vbox{% | |
2050 | \normalbaselines | |
2051 | \boxz@ | |
2052 | \vbox to\lineht@{}% | |
2053 | \raise@tag | |
2054 | }}% | |
2055 | \else | |
2056 | \rlap{\boxz@}% | |
2057 | \fi | |
2058 | \kern\displaywidth@ | |
2059 | \else | |
2060 | \kern-\tagshift@ | |
2061 | \if1\shift@tag\row@\relax | |
2062 | \llap{\vtop{% | |
2063 | \raise@tag | |
2064 | \normalbaselines | |
2065 | \setbox\@ne\null | |
2066 | \dp\@ne\lineht@ | |
2067 | \box\@ne | |
2068 | \boxz@ | |
2069 | }}% | |
2070 | \else | |
2071 | \llap{\boxz@}% | |
2072 | \fi | |
2073 | \fi | |
2074 | } | |
2075 | \def\align@preamble{% | |
2076 | &\hfil | |
2077 | \strut@ | |
2078 | \setboxz@h{\@lign$\m@th\displaystyle{##}$}% | |
2079 | \ifmeasuring@\savefieldlength@\fi | |
2080 | \set@field | |
2081 | \tabskip\z@skip | |
2082 | &\setboxz@h{\@lign$\m@th\displaystyle{{}##}$}% | |
2083 | \ifmeasuring@\savefieldlength@\fi | |
2084 | \set@field | |
2085 | \hfil | |
2086 | \tabskip\alignsep@ | |
2087 | } | |
2088 | \def\set@field{% | |
2089 | \column@plus | |
2090 | \iftagsleft@ | |
2091 | \ifdim\ht\z@>\lineht@ | |
2092 | \global\lineht@\ht\z@ | |
2093 | \fi | |
2094 | \else | |
2095 | \ifdim\dp\z@>\lineht@ | |
2096 | \global\lineht@\dp\z@ | |
2097 | \fi | |
2098 | \fi | |
2099 | \boxz@ | |
2100 | } | |
2101 | \edef\split@err#1{% | |
2102 | \@nx\@amsmath@err{% | |
2103 | \string\begin{split} won't work here% | |
2104 | }{% | |
2105 | \@xp\@nx\csname | |
2106 | Did you forget a preceding \string\begin{equation}?^^J% | |
2107 | If not, perhaps the `aligned' environment is what | |
2108 | you want.\endcsname}% | |
2109 | } | |
2110 | \newenvironment{split}{% | |
2111 | \if@display | |
2112 | \ifinner | |
2113 | \@xp\@xp\@xp\split@aligned | |
2114 | \else | |
2115 | \ifst@rred \else \global\@eqnswtrue \fi | |
2116 | \fi | |
2117 | \else \let\endsplit\@empty \@xp\collect@body\@xp\split@err | |
2118 | \fi | |
2119 | \collect@body\gather@split | |
2120 | }{% | |
2121 | \crcr | |
2122 | \egroup | |
2123 | \egroup | |
2124 | \iftagsleft@ \@xp\lendsplit@ \else \@xp\rendsplit@ \fi | |
2125 | } | |
2126 | \let\split@tag\relax % init | |
2127 | \def\gather@split#1#2#3{% | |
2128 | \@xp\endgroup \reset@equation % math@cr will handle equation numbering | |
2129 | \iftag@ | |
2130 | \toks@\@xp{\df@tag}% | |
2131 | \edef\split@tag{% | |
2132 | \gdef\@nx\df@tag{\the\toks@}% | |
2133 | \global\@nx\tag@true \@nx\nonumber | |
2134 | }% | |
2135 | \else \let\split@tag\@empty | |
2136 | \fi | |
2137 | \spread@equation | |
2138 | \vcenter\bgroup | |
2139 | \gather@{\split@tag \begin{split}#1\end{split}}% | |
2140 | \def\endmathdisplay@a{% | |
2141 | \math@cr \black@ \totwidth@ \egroup | |
2142 | \egroup | |
2143 | }% | |
2144 | } | |
2145 | \def\insplit@{% | |
2146 | \global\setbox\z@\vbox\bgroup | |
2147 | \Let@ \chardef\dspbrk@context\@ne \restore@math@cr | |
2148 | \default@tag % disallow use of \tag here | |
2149 | \ialign\bgroup | |
2150 | \hfil | |
2151 | \strut@ | |
2152 | $\m@th\displaystyle{##}$% | |
2153 | &$\m@th\displaystyle{{}##}$% | |
2154 | \hfill % Why not \hfil?---dmj, 1994/12/28 | |
2155 | \crcr | |
2156 | } | |
2157 | \def\rendsplit@{% | |
2158 | \ifinalign@ | |
2159 | \global\setbox9 \vtop{% | |
2160 | \unvcopy\z@ | |
2161 | \global\setbox8 \lastbox | |
2162 | \unskip | |
2163 | }% | |
2164 | \setbox\@ne\hbox{% | |
2165 | \unhcopy8 | |
2166 | \unskip | |
2167 | \global\setbox\tw@\lastbox | |
2168 | \unskip | |
2169 | \global\setbox\thr@@\lastbox | |
2170 | }% | |
2171 | \ifctagsplit@ | |
2172 | \gdef\split@{% | |
2173 | \hbox to\wd\thr@@{}% | |
2174 | &\vcenter{\vbox{\moveleft\wd\thr@@\boxz@}}% | |
2175 | }% | |
2176 | \else | |
2177 | \global\setbox7 \hbox{\unhbox\tw@\unskip}% | |
2178 | \gdef\split@{% | |
2179 | \global\@tempcnta\column@ | |
2180 | &\setboxz@h{}% | |
2181 | \savetaglength@ | |
2182 | \global\advance\row@\@ne | |
2183 | \vbox{\moveleft\wd\thr@@\box9}% | |
2184 | \crcr | |
2185 | \noalign{\global\lineht@\z@}% | |
2186 | \add@amps\@tempcnta | |
2187 | \box\thr@@ | |
2188 | &\box7 | |
2189 | }% | |
2190 | \fi | |
2191 | \else | |
2192 | \ifctagsplit@ | |
2193 | \gdef\split@{\vcenter{\boxz@}}% | |
2194 | \else | |
2195 | \gdef\split@{% | |
2196 | \boxz@ | |
2197 | }% | |
2198 | \fi | |
2199 | \fi | |
2200 | \aftergroup\split@ | |
2201 | } | |
2202 | \def\lendsplit@{% | |
2203 | \global\setbox9\vtop{\unvcopy\z@}% | |
2204 | \ifinalign@ | |
2205 | \setbox\@ne\vbox{% | |
2206 | \unvcopy\z@ | |
2207 | \global\setbox8\lastbox | |
2208 | }% | |
2209 | \setbox\@ne\hbox{% | |
2210 | \unhcopy8% | |
2211 | \unskip | |
2212 | \setbox\tw@\lastbox | |
2213 | \unskip | |
2214 | \global\setbox\thr@@\lastbox | |
2215 | }% | |
2216 | \ifctagsplit@ | |
2217 | \gdef\split@{% | |
2218 | \hbox to\wd\thr@@{}% | |
2219 | &\vcenter{\vbox{\moveleft\wd\thr@@\box9}}% | |
2220 | }% | |
2221 | \else | |
2222 | \gdef\split@{% | |
2223 | \hbox to\wd\thr@@{}% | |
2224 | &\vbox{\moveleft\wd\thr@@\box9}% | |
2225 | }% | |
2226 | \fi | |
2227 | \else | |
2228 | \ifctagsplit@ | |
2229 | \gdef\split@{\vcenter{\box9}}% | |
2230 | \else | |
2231 | \gdef\split@{\box9}% | |
2232 | \fi | |
2233 | \fi | |
2234 | \aftergroup\split@ | |
2235 | } | |
2236 | \def\split@aligned#1#2{% | |
2237 | \iffalse{\fi\ifnum0=`}\fi | |
2238 | \collect@body\split@al@a} | |
2239 | \def\split@al@a#1#2#3{% | |
2240 | \split@warning | |
2241 | \endgroup | |
2242 | \toks@{\begin{aligned}}% | |
2243 | \if@fleqn \split@al@tagcheck \fi | |
2244 | \the\toks@\relax#1\end{aligned}% | |
2245 | \ifnum0=`{\fi\iffalse}\fi | |
2246 | } | |
2247 | \def\split@al@tagcheck{% | |
2248 | \ifctagsplit@ | |
2249 | \else | |
2250 | \iftagsleft@ \toks@\@xp{\the\toks@ [t]}% | |
2251 | \else \toks@\@xp{\the\toks@ [b]}% | |
2252 | \fi | |
2253 | \fi | |
2254 | } | |
2255 | \def\split@warning{% | |
2256 | \PackageWarning{amsmath}{% | |
2257 | Cannot use `split' here;\MessageBreak trying to recover with `aligned'}% | |
2258 | } | |
2259 | \newskip\multlinegap | |
2260 | \multlinegap10pt | |
2261 | \newskip\multlinetaggap | |
2262 | \multlinetaggap10pt | |
2263 | \def\start@multline#1{% | |
2264 | \RIfM@ | |
2265 | \nomath@env | |
2266 | \DN@{\@namedef{end\@currenvir}{}\@gobble}% | |
2267 | \else | |
2268 | $$% | |
2269 | #1% | |
2270 | \ifst@rred | |
2271 | \nonumber | |
2272 | \else | |
2273 | \global\@eqnswtrue | |
2274 | \fi | |
2275 | \let\next@\multline@ | |
2276 | \fi | |
2277 | \collect@body\next@ | |
2278 | } | |
2279 | \newenvironment{multline}{% | |
2280 | \start@multline\st@rredfalse | |
2281 | }{% | |
2282 | \iftagsleft@ \@xp\lendmultline@ \else \@xp\rendmultline@ \fi | |
2283 | \ignorespacesafterend | |
2284 | } | |
2285 | \newenvironment{multline*}{\start@multline\st@rredtrue}{\endmultline} | |
2286 | \def\multline@#1{% | |
2287 | \Let@ | |
2288 | \@display@init{\global\advance\row@\@ne \global\dspbrk@lvl\m@ne}% | |
2289 | \chardef\dspbrk@context\z@ | |
2290 | \restore@math@cr | |
2291 | \let\tag\tag@in@align | |
2292 | \global\tag@false \global\let\raise@tag\@empty | |
2293 | \mmeasure@{#1}% | |
2294 | \let\tag\gobble@tag \let\label\@gobble | |
2295 | \tabskip \if@fleqn \@mathmargin \else \z@skip \fi | |
2296 | \totwidth@\displaywidth | |
2297 | \if@fleqn | |
2298 | \advance\totwidth@-\@mathmargin | |
2299 | \fi | |
2300 | \halign\bgroup | |
2301 | \hbox to\totwidth@{% | |
2302 | \if@fleqn | |
2303 | \hskip \@centering \relax | |
2304 | \else | |
2305 | \hfil | |
2306 | \fi | |
2307 | \strut@ | |
2308 | $\m@th\displaystyle{}##\endmultline@math | |
2309 | \hfil | |
2310 | }% | |
2311 | \crcr | |
2312 | \if@fleqn | |
2313 | \hskip-\@mathmargin | |
2314 | \def\multline@indent{\hskip\@mathmargin}% put it back | |
2315 | \else | |
2316 | \hfilneg | |
2317 | \def\multline@indent{\hskip\multlinegap}% | |
2318 | \fi | |
2319 | \iftagsleft@ | |
2320 | \iftag@ | |
2321 | \begingroup | |
2322 | \ifshifttag@ | |
2323 | \rlap{\vbox{% | |
2324 | \normalbaselines | |
2325 | \hbox{% | |
2326 | \strut@ | |
2327 | \make@display@tag | |
2328 | }% | |
2329 | \vbox to\lineht@{}% | |
2330 | \raise@tag | |
2331 | }}% | |
2332 | \multline@indent | |
2333 | \else | |
2334 | \setbox\z@\hbox{\make@display@tag}% | |
2335 | \dimen@\@mathmargin \advance\dimen@-\wd\z@ | |
2336 | \ifdim\dimen@<\multlinetaggap | |
2337 | \dimen@\multlinetaggap | |
2338 | \fi | |
2339 | \box\z@ \hskip\dimen@\relax | |
2340 | \fi | |
2341 | \endgroup | |
2342 | \else | |
2343 | \multline@indent | |
2344 | \fi | |
2345 | \else | |
2346 | \multline@indent | |
2347 | \fi | |
2348 | #1% | |
2349 | } | |
2350 | \def\endmultline@math{$} | |
2351 | \def\lendmultline@{% | |
2352 | \hfilneg | |
2353 | \hskip\multlinegap | |
2354 | \math@cr | |
2355 | \egroup | |
2356 | $$% | |
2357 | } | |
2358 | \def\rendmultline@{% | |
2359 | \iftag@ | |
2360 | $\let\endmultline@math\relax | |
2361 | \ifshifttag@ | |
2362 | \hskip\multlinegap | |
2363 | \llap{\vtop{% | |
2364 | \raise@tag | |
2365 | \normalbaselines | |
2366 | \setbox\@ne\null | |
2367 | \dp\@ne\lineht@ | |
2368 | \box\@ne | |
2369 | \hbox{\strut@\make@display@tag}% | |
2370 | }}% | |
2371 | \else | |
2372 | \hskip\multlinetaggap | |
2373 | \make@display@tag | |
2374 | \fi | |
2375 | \else | |
2376 | \hskip\multlinegap | |
2377 | \fi | |
2378 | \hfilneg | |
2379 | \math@cr | |
2380 | \egroup$$% | |
2381 | } | |
2382 | \def\mmeasure@#1{% | |
2383 | \begingroup | |
2384 | \measuring@true | |
2385 | \def\label##1{% | |
2386 | \begingroup\measuring@false\label@in@display{##1}\endgroup}% | |
2387 | \def\math@cr@@@{\cr}% | |
2388 | \let\shoveleft\@iden \let\shoveright\@iden | |
2389 | \savecounters@ | |
2390 | \global\row@\z@ | |
2391 | \setbox\@ne\vbox{% | |
2392 | \global\let\df@tag\@empty | |
2393 | \halign{% | |
2394 | \setboxz@h{\@lign$\m@th\displaystyle{}##$}% | |
2395 | \iftagsleft@ | |
2396 | \ifnum\row@=\@ne | |
2397 | \global\totwidth@\wdz@ | |
2398 | \global\lineht@\ht\z@ | |
2399 | \fi | |
2400 | \else | |
2401 | \global\totwidth@\wdz@ | |
2402 | \global\lineht@\dp\z@ | |
2403 | \fi | |
2404 | \crcr | |
2405 | #1% | |
2406 | \crcr | |
2407 | }% | |
2408 | }% | |
2409 | \ifx\df@tag\@empty\else\global\tag@true\fi | |
2410 | \if@eqnsw\global\tag@true\fi | |
2411 | \iftag@ | |
2412 | \setboxz@h{% | |
2413 | \if@eqnsw | |
2414 | \stepcounter{equation}% | |
2415 | \tagform@\theequation | |
2416 | \else | |
2417 | \df@tag | |
2418 | \fi | |
2419 | }% | |
2420 | \global\tagwidth@\wdz@ | |
2421 | \dimen@\totwidth@ | |
2422 | \advance\dimen@\tagwidth@ | |
2423 | \advance\dimen@\multlinetaggap | |
2424 | \iftagsleft@\else | |
2425 | \if@fleqn | |
2426 | \advance\dimen@\@mathmargin | |
2427 | \fi | |
2428 | \fi | |
2429 | \ifdim\dimen@>\displaywidth | |
2430 | \global\shifttag@true | |
2431 | \else | |
2432 | \global\shifttag@false | |
2433 | \fi | |
2434 | \fi | |
2435 | \restorecounters@ | |
2436 | \endgroup | |
2437 | } | |
2438 | \iftagsleft@ | |
2439 | \def\shoveright#1{% | |
2440 | #1% | |
2441 | \hfilneg | |
2442 | \hskip\multlinegap | |
2443 | } | |
2444 | \else | |
2445 | \def\shoveright#1{% | |
2446 | #1% | |
2447 | \hfilneg | |
2448 | \iftag@ | |
2449 | \ifshifttag@ | |
2450 | \hskip\multlinegap | |
2451 | \else | |
2452 | \hskip\tagwidth@ | |
2453 | \hskip\multlinetaggap | |
2454 | \fi | |
2455 | \else | |
2456 | \hskip\multlinegap | |
2457 | \fi | |
2458 | } | |
2459 | \fi | |
2460 | ||
2461 | \if@fleqn | |
2462 | \def\shoveleft#1{#1}% | |
2463 | \else | |
2464 | \iftagsleft@ | |
2465 | \def\shoveleft#1{% | |
2466 | \setboxz@h{$\m@th\displaystyle{}#1$}% | |
2467 | \setbox\@ne\hbox{$\m@th\displaystyle#1$}% | |
2468 | \hfilneg | |
2469 | \iftag@ | |
2470 | \ifshifttag@ | |
2471 | \hskip\multlinegap | |
2472 | \else | |
2473 | \hskip\tagwidth@ | |
2474 | \hskip\multlinetaggap | |
2475 | \fi | |
2476 | \else | |
2477 | \hskip\multlinegap | |
2478 | \fi | |
2479 | \hskip.5\wd\@ne | |
2480 | \hskip-.5\wdz@ | |
2481 | #1% | |
2482 | } | |
2483 | \else | |
2484 | \def\shoveleft#1{% | |
2485 | \setboxz@h{$\m@th\displaystyle{}#1$}% | |
2486 | \setbox\@ne\hbox{$\m@th\displaystyle#1$}% | |
2487 | \hfilneg | |
2488 | \hskip\multlinegap | |
2489 | \hskip.5\wd\@ne | |
2490 | \hskip-.5\wdz@ | |
2491 | #1% | |
2492 | } | |
2493 | \fi | |
2494 | \fi | |
2495 | \@saveprimitive\leqno\@@leqno | |
2496 | \@saveprimitive\eqno\@@eqno | |
2497 | \def\eqno{\@@eqno\let\eqno\relax\let\leqno\relax} | |
2498 | \def\leqno{\@@leqno\let\leqno\relax\let\eqno\relax} | |
2499 | \let\veqno=\@@eqno | |
2500 | \iftagsleft@ \let\veqno=\@@leqno \fi | |
2501 | \@ifundefined{SK@@label}{% | |
2502 | \let\SK@@label\relax \let\SK@equationtrue\relax | |
2503 | }{} | |
2504 | \let\reset@equation\@empty | |
2505 | \let\alt@tag\@empty | |
2506 | \def\tag@in@display#1#{\relax\tag@in@display@a{#1}} | |
2507 | \def\tag@in@display@a#1#2{% | |
2508 | \iftag@ | |
2509 | \invalid@tag{Multiple \string\tag}\relax | |
2510 | \else | |
2511 | \global\tag@true \nonumber \reset@equation \st@rredtrue | |
2512 | \if *\string#1% | |
2513 | \gdef\alt@tag{\def\SK@tagform@{#2\@gobble}% | |
2514 | \ifx\SK@@label\relax \let\tagform@\SK@tagform@ \fi | |
2515 | }% | |
2516 | \make@df@tag@@{#2}% | |
2517 | \else | |
2518 | \make@df@tag@@@{#2}% | |
2519 | \fi | |
2520 | \fi | |
2521 | } | |
2522 | \let\restore@hfuzz\@empty | |
2523 | \def\mathdisplay#1{% | |
2524 | \ifmmode \@badmath | |
2525 | \else | |
2526 | $$\def\@currenvir{#1}% | |
2527 | \let\dspbrk@context\z@ | |
2528 | \let\tag\tag@in@display \let\label\label@in@display \SK@equationtrue | |
2529 | \global\let\df@label\@empty \global\let\df@tag\@empty | |
2530 | \global\tag@false | |
2531 | \let\mathdisplay@push\mathdisplay@@push | |
2532 | \let\mathdisplay@pop\mathdisplay@@pop | |
2533 | \if@fleqn | |
2534 | \edef\restore@hfuzz{\hfuzz\the\hfuzz\relax}% | |
2535 | \hfuzz\maxdimen | |
2536 | \setbox\z@\hbox to\displaywidth\bgroup | |
2537 | \let\split@warning\relax \restore@hfuzz | |
2538 | \everymath\@emptytoks \m@th $\displaystyle | |
2539 | \fi | |
2540 | \fi | |
2541 | } | |
2542 | \def\endmathdisplay#1{% | |
2543 | \ifmmode \else \@badmath \fi | |
2544 | \endmathdisplay@a | |
2545 | $$% | |
2546 | \global\let\df@label\@empty \global\let\df@tag\@empty | |
2547 | \global\tag@false \global\let\alt@tag\@empty | |
2548 | \global\@eqnswfalse | |
2549 | } | |
2550 | \def\endmathdisplay@a{% | |
2551 | \if@eqnsw \gdef\df@tag{\tagform@\theequation}\fi | |
2552 | \if@fleqn \@xp\endmathdisplay@fleqn | |
2553 | \else \ifx\df@tag\@empty \else \veqno \alt@tag \df@tag \fi | |
2554 | \ifx\df@label\@empty \else \@xp\ltx@label\@xp{\df@label}\fi | |
2555 | \fi | |
2556 | \ifnum\dspbrk@lvl>\m@ne | |
2557 | \postdisplaypenalty -\@getpen\dspbrk@lvl | |
2558 | \global\dspbrk@lvl\m@ne | |
2559 | \fi | |
2560 | } | |
2561 | \let\too@wide\@ne | |
2562 | \def\endmathdisplay@fleqn{% | |
2563 | $\hfil\hskip\@mathmargin\egroup | |
2564 | \ifnum\badness<\inf@bad \let\too@wide\@ne \else \let\too@wide\z@ \fi | |
2565 | \ifx\@empty\df@tag | |
2566 | \else | |
2567 | \setbox4\hbox{\df@tag | |
2568 | \ifx\df@label\@empty \else \@xp\ltx@label\@xp{\df@label}\fi | |
2569 | }% | |
2570 | \fi | |
2571 | \csname emdf@% | |
2572 | \ifx\df@tag\@empty U\else \iftagsleft@ L\else R\fi\fi | |
2573 | \endcsname | |
2574 | } | |
2575 | \def\emdf@U{% | |
2576 | \restore@hfuzz | |
2577 | \ifodd\too@wide % not too wide: just need to swap the glue around | |
2578 | \hbox to\displaywidth{\hskip\@mathmargin\unhbox\z@\unskip}% | |
2579 | \else % M+B > displaywidth | |
2580 | \emdf@Ua | |
2581 | \fi | |
2582 | } | |
2583 | \def\emdf@Ua{% | |
2584 | \hbox to\columnwidth{% | |
2585 | \ifdim\displayindent>\z@ | |
2586 | \hskip\displayindent minus\displayindent | |
2587 | \fi | |
2588 | \hskip\@mathmargin \unhbox\z@ \unskip | |
2589 | }% | |
2590 | \displayindent\z@ \displaywidth\columnwidth | |
2591 | } | |
2592 | \def\emdf@R{% | |
2593 | \setbox\tw@\hbox to\displaywidth{% | |
2594 | \hskip\@mathmargin \unhcopy\z@\unskip\hfil\hskip\mintagsep\copy4 | |
2595 | }% | |
2596 | \restore@hfuzz | |
2597 | \ifnum\badness<\inf@bad \box\tw@ \else \emdf@Ra \fi | |
2598 | } | |
2599 | \def\emdf@Ra{% | |
2600 | \skip@\displayindent minus\displayindent | |
2601 | \displayindent\z@ \displaywidth\columnwidth | |
2602 | \spread@equation \everycr{}\tabskip\z@skip | |
2603 | \halign{\hbox to\displaywidth{##}\cr | |
2604 | \relax | |
2605 | \ifdim\skip@>\z@ \hskip\skip@ \fi | |
2606 | \hskip\@mathmargin\unhbox\z@\unskip\hfil\cr | |
2607 | \noalign{\raise@tag}% | |
2608 | \hfil\box4 \cr}% | |
2609 | } | |
2610 | \def\emdf@L{% | |
2611 | \@tempdima\@mathmargin | |
2612 | \advance\@tempdima-\wd4 \advance\@tempdima-\mintagsep | |
2613 | \skip@\@tempdima minus\@tempdima | |
2614 | \setbox\tw@\hbox to\displaywidth{% | |
2615 | \copy4\hskip\mintagsep | |
2616 | \ifdim\skip@>\z@ \hskip\skip@\fi | |
2617 | \unhcopy\z@\unskip | |
2618 | }% | |
2619 | \restore@hfuzz | |
2620 | \ifnum\badness<\inf@bad \box\tw@ \else \emdf@La \fi | |
2621 | } | |
2622 | \def\emdf@La{% | |
2623 | \spread@equation \everycr{}\tabskip\z@skip | |
2624 | \halign{\hbox to\displaywidth{##}\cr | |
2625 | \box4 \hfil \cr | |
2626 | \noalign{\raise@tag}% | |
2627 | \hskip\@mathmargin\unhbox\z@\unskip\hfil\cr}% | |
2628 | } | |
2629 | \newtoks\mathdisplay@stack | |
2630 | \let\mathdisplay@push\@empty | |
2631 | \def\mathdisplay@@push{% | |
2632 | \begingroup | |
2633 | \toks@\@xp{\df@label}\@temptokena\@xp{\df@tag}% | |
2634 | \toks8\@xp{\alt@tag}% | |
2635 | \edef\@tempa{% | |
2636 | \global\if@eqnsw\@nx\@eqnswtrue\else\@nx\@eqnswfalse\fi | |
2637 | \global\iftag@\@nx\tag@false\else\@nx\tag@true\fi | |
2638 | \gdef\@nx\df@label{\the\toks@}\gdef\@nx\df@tag{\the\@temptokena}% | |
2639 | \gdef\@nx\alt@tag{\the\toks8}% | |
2640 | \global\mathdisplay@stack{\the\mathdisplay@stack}% | |
2641 | }% | |
2642 | \global\mathdisplay@stack\@xp{\@tempa} | |
2643 | \endgroup | |
2644 | } | |
2645 | \let\mathdisplay@pop\@empty | |
2646 | \def\mathdisplay@@pop{\the\mathdisplay@stack} | |
2647 | \renewenvironment{equation}{% | |
2648 | \incr@eqnum | |
2649 | \mathdisplay@push | |
2650 | \st@rredfalse \global\@eqnswtrue | |
2651 | \mathdisplay{equation}% | |
2652 | }{% | |
2653 | \endmathdisplay{equation}% | |
2654 | \mathdisplay@pop | |
2655 | \ignorespacesafterend | |
2656 | } | |
2657 | \newenvironment{equation*}{% | |
2658 | \mathdisplay@push | |
2659 | \st@rredtrue \global\@eqnswfalse | |
2660 | \mathdisplay{equation*}% | |
2661 | }{% | |
2662 | \endmathdisplay{equation*}% | |
2663 | \mathdisplay@pop | |
2664 | \ignorespacesafterend | |
2665 | } | |
2666 | \DeclareRobustCommand{\[}{\begin{equation*}} | |
2667 | \DeclareRobustCommand{\]}{\end{equation*}} | |
2668 | \endinput | |
2669 | %% | |
2670 | %% End of file `amsmath.sty'. |