supp-mat.mkiv /size: 9755 b    last modification: 2020-07-01 14:35
1
%D \module
2
%D [ file=supp-mat,
3
%D version=1998.09.10,
4
%D title=\CONTEXT\ Support Macros,
5
%D subtitle=Math,
6
%D author=Hans Hagen,
7
%D date=\currentdate,
8
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9
%C
10
%C This module is part of the \CONTEXT\ macro||package and is
11
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12
%C details.
13 14
%D For practical reasons, I decided to move some math things to
15
%D a support module. There is nothing spectacular here. It may move
16
%D back to math-ini.
17 18
\writestatus
{
loading
}{
ConTeXt
Support
Macros
/
Math
}
19 20
\unprotect
21 22
%D \macros
23
%D {mathematics, math, nomathematics, startmathmode}
24
%D
25
%D The \type{$} can be both an begin and end math character.
26
%D This can lead to confusing and errorprone situations when
27
%D macros insert \type{$}. When for instance we have defined:
28
%D
29
%D \starttyping
30
%D \def\MyPlus{$\,+\,$}
31
%D \stoptyping
32
%D
33
%D the sequence \type{$x^2 \MyPlus y^2 = r^2$} will expand to:
34
%D
35
%D \starttyping
36
%D $x^2 $\,+\,$ y^2 = r^2$
37
%D \stoptyping
38
%D
39
%D Here the \type{\,} are given outside math mode and \TEX\ will
40
%D definitely complain about this. A more save definition would
41
%D have been:
42
%D
43
%D \starttyping
44
%D \def\MyPlus{\mathematics{\,+\,}}
45
%D \stoptyping
46
%D
47
%D Which is implemented (in \type{syst-ini.mkiv}) as:
48 49
% \let\normalsuperscript\Usuperscript
50
% \let\normalsubscript \Usubscript
51
% \let\normalstartimath \Ustartmath
52
% \let\normalstopimath \Ustopmath
53
% \let\normalstartdmath \Ustartdisplaymath
54
% \let\normalstopdmath \Ustopdisplaymath
55 56
% \unexpanded\def\Ustartdisplaymath
57
% {\ifinner
58
% \ifhmode
59
% \normalUstartmath
60
% \let\Ustopdisplaymath\normalUstopmath
61
% \else
62
% \normalUstartdisplaymath
63
% \let\Ustopdisplaymath\normalUstopdisplaymath
64
% \fi
65
% \else
66
% \normalUstartdisplaymath
67
% \let\Ustopdisplaymath\normalUstopdisplaymath
68
% \fi}
69 70
\unexpanded
\def
\Ucheckedstartdisplaymath
71
{
\ifinner
72
\ifhmode
73
\normalUstartmath
74
\let
\Ucheckedstopdisplaymath
\normalUstopmath
75
\else
76
\normalUstartdisplaymath
77
\let
\Ucheckedstopdisplaymath
\normalUstopdisplaymath
78
\fi
79
\else
80
\normalUstartdisplaymath
81
\let
\Ucheckedstopdisplaymath
\normalUstopdisplaymath
82
\fi
}
83 84
\let
\Ucheckedstopdisplaymath
\relax
85 86
\def
\normalmathaligntab
{
&
}
% \let\normalmathaligntab\aligntab does to work well in a let to & (a def works ok)
87 88
\let
\normalsuper
\Usuperscript
% obsolete
89
\let
\normalsuber
\Usubscript
% obsolete
90 91
\let
\startimath
\Ustartmath
92
\let
\stopimath
\Ustopmath
93
\let
\startdmath
\Ustartdisplaymath
% \Ucheckedstartdisplaymath
94
\let
\stopdmath
\Ustopdisplaymath
% \Ucheckedstopdisplaymath
95 96
\unexpanded
\def
\mathematics
#
1
{
\relax
\ifmmode
#
1
\else
\normalstartimath
#
1
\normalstopimath
\fi
}
97
\unexpanded
\def
\displaymath
#
1
{
\noindent
\ifmmode
#
1
\else
\normalstartdmath
#
1
\normalstopdmath
\fi
}
98
\unexpanded
\def
\inlinemath
#
1
{
\dontleavehmode
\ifmmode
#
1
\else
\normalstartimath
#
1
\normalstopimath
\fi
}
99
\unexpanded
\def
\textmath
#
1
{
\dontleavehmode
\ifmmode
#
1
\else\begingroup\everymath
\emptytoks
\normalstartimath
#
1
\normalstopimath
\endgroup\fi
}
% \mathsurround\zeropoint
100 101
\let
\m\mathematics
102 103
\let
\stopmathmode
\relax
104 105
\unexpanded
\def
\startmathmode
% nested variant
106
{
\relax\ifmmode
107
\begingroup
108
\let
\stopmathmode
\endgroup
109
\else
110
\normalstartimath
111
\let
\stopmathmode
\normalstopimath
112
\fi
}
113 114
\unexpanded
\def
\nomathematics
#
1
%
115
{
\relax\ifmmode\hbox
{
#
1
}
\else
#
1
\fi
}
116 117
\let
\math\mathematics
118 119
%D \macros
120
%D {displaymathematics,inlinemathematics,automathematics}
121
%D
122
%D An example of usage of the following can be found in the MathML module:
123 124
\ifdefined
\strc_formulas_start_formula
\else
125
\def
\strc_formulas_start_formula
{
\normalstartdmath
}
126
\def
\strc_formulas_stop_formula
{
\normalstopdmath
}
127
\fi
128 129
\unexpanded
\def
\displaymathematics
#
1
{
\relax\ifmmode
#
1
\else
\strc_formulas_start_formula
{}
#
1
\strc_formulas_stop_formula
\fi
}
130
\unexpanded
\def
\inlinemathematics
{
\dontleavehmode
\mathematics
}
131
\unexpanded
\def
\automathematics
{
\relax\ifhmode\expandafter
\inlinemathematics
\else\expandafter
\displaymathematics
\fi
}
132 133
% better, esp when used in bTABLE ... eTABLE
134 135
\unexpanded
\def
\automathematics
136
{
\relax
137
\ifhmode
138
\expandafter
\inlinemathematics
139
\else
\ifintable
140
\doubleexpandafter
\inlinemathematics
141
\else
142
\doubleexpandafter
\displaymathematics
143
\fi\fi
}
144 145
%D \macros
146
%D {dimension, nodimension}
147
%D
148
%D The next few macros are used for typesetting dimensions in
149
%D such a way that spacing is acceptable. I won't spend much
150
%D words on these macros, because they will be overloaded in
151
%D the units module.
152
%D
153
%D REPLACED (keep commented):
154 155
\newsignal
\dimensionsignal
156 157
\def
\dimensiontypeface
{
\tf
}
158
\def
\dimensionhalfspace
{
\,
}
159 160
\unexpanded
\def
\dimension
#
1
%
161
{
\pushmacro
\dodimensionsignal
162
\gdef
\dodimensionsignal
{
\kern
\dimensionsignal
}
%
163
\ifzeropt
\lastskip
164
\ifzeropt
\lastkern
165
\ifmmode
166
\mathematics
{
\dimensionhalfspace
\dimensionhalfspace
\dimensiontypeface
#
1
}
%
167
\else
168
\mathematics
{
\dimensiontypeface
#
1
}
%
169
\fi
170
\else\ifdim\lastkern
=
\dimensionsignal
171
\mathematics
{
\dimensionhalfspace
\dimensiontypeface
#
1
}
%
172
\else
173
\unkern
\mathematics
{
\dimensionhalfspace
\dimensionhalfspace
\dimensiontypeface
#
1
}
%
174
\fi\fi
175
\else
176
\unskip
\mathematics
{
\dimensionhalfspace
\dimensionhalfspace
\dimensiontypeface
#
1
}
%
177
\fi
178
\dodimensionsignal
179
\popmacro
\dodimensionsignal
}
180 181
\unexpanded
\def
\nodimension
#
1
%
182
{
\unskip
#
1
\glet
\dodimensionsignal
\relax
}
183 184
%D \macros
185
%D {cramped}
186
%D
187
%D Cramped math:
188
%D
189
%D \startbuffer
190
%D \ruledhbox{$\left\{{x^2\over y^2}\right\}$}
191
%D \ruledhbox{$\cramped{\left\{ {x^2\over y^2}\right\}}$}
192
%D \stopbuffer
193
%D
194
%D \typebuffer \getbuffer
195 196
\unexpanded
\def
\cramped
197
{
\mathpalette
\math_cramped
}
198 199
%D We force a cramped style by issuing a non||existing radical (box).
200
%D After that we make sure the height is correct. (Comment taken from
201
%D Morten H√łgholm's mathtools package.) Macro suggested by AM and
202
%D cleaned up a bit by HH.
203 204
% original
205
%
206
% \def\docramped#1#2%
207
% {\setbox\scratchbox\hbox
208
% {\nulldelimiterspace\zeropoint
209
% $\mathsurround\zeropoint#1\radical\zerocount{#2}$}%
210
% \ifx#1\displaystyle
211
% \scratchdimen\fontdimen8\textfont3
212
% \advance\scratchdimen .25\fontdimen5\textfont2
213
% \else
214
% \scratchdimen1.25\fontdimen8
215
% \ifx#1\textstyle\textfont
216
% \else
217
% \ifx#1\scriptstyle\scriptfont\else\scriptscriptfont\fi
218
% \fi
219
% 3
220
% \fi
221
% \advance\scratchdimen-\ht\scratchbox
222
% \ht\scratchbox-\scratchdimen
223
% \box\scratchbox}
224 225
% mkii:
226
%
227
% \def\math_cramped#1#2%
228
% {\begingroup % added HH, made even more cramped
229
% \setbox\scratchbox\hbox
230
% {\nulldelimiterspace\zeropoint
231
% \normalstartimath\mathsurround\zeropoint#1\radical\zerocount{#2}\normalstopimath}%
232
% \ht\scratchbox-\dimexpr
233
% \ifx#1\displaystyle
234
% \fontdimen\pluseight\textfont\plusthree
235
% +.25\fontdimen\plusfive\textfont\plustwo
236
% \else
237
% 1.25\fontdimen\pluseight
238
% \ifx#1\textstyle
239
% \textfont
240
% \else\ifx#1\scriptstyle
241
% \scriptfont
242
% \else
243
% \scriptscriptfont
244
% \fi \fi
245
% \plusthree
246
% \fi
247
% -\ht\scratchbox
248
% \relax
249
% \box\scratchbox
250
% \endgroup}
251 252
\def
\math_cramped
#
1
#
2
% we have all in one family
253
{
\begingroup
% added HH, made even more cramped
254
\setbox
\scratchbox
\hbox
255
{
\nulldelimiterspace
\zeropoint
256
\normalstartimath
\mathsurround
\zeropoint
#
1
\radical
\zerocount
{
#
2
}
\normalstopimath
}
%
257
\ht
\scratchbox
-
\dimexpr
258
\ifx
#
1
\displaystyle
259
\fontdimen
\pluseight
\textfont
\plusone
260
+
.
2
5
\fontdimen
\plusfive
\textfont
\plusone
261
\else
262
1
.
2
5
\fontdimen
\pluseight
263
\ifx
#
1
\textstyle
\textfont
\else
264
\ifx
#
1
\scriptstyle\scriptfont
\else
265
\scriptscriptfont\fi\fi
\plusone
266
\fi
267
-
\ht
\scratchbox
268
\relax
269
\box
\scratchbox
270
\endgroup
}
271 272
%D \macros
273
%D {cramedllap, crampedrlap, crampedclap}
274
%D
275
%D In many cases, one wants to use the \tex {clap} macro in
276
%D math mode while using subscripts. Normally, subscripts are
277
%D in cramped mode, and these macros allow you to go to
278
%D cramped mode. For example:
279
%D
280
%D \startbuffer
281
%D \startformula
282
%D \sum_{a^2 < b^2 < c^2} \quad
283
%D \sum_{\clap{a^2 < b^2 < c^2}} \quad
284
%D \sum_{\crampedclap{a^2 < b^2 < c^2}}
285
%D \stopformula
286
%D \stopbuffer
287
%D
288
%D \start
289
%D \typebuffer
290
%D \switchtobodyfont[24pt]
291
%D \getbuffer
292
%D \stop
293
%D
294
%D Notice that \type {\clap{\cramped ... }} would also work,
295
%D but it requires \TEX\ to typeset it arguments 16 times.
296 297
\unexpanded
\def
\crampedllap
{
\mathpalette
\math_cramped_llap
}
298
\unexpanded
\def
\crampedrlap
{
\mathpalette
\math_cramped_rlap
}
299
\unexpanded
\def
\crampedclap
{
\mathpalette
\math_cramped_clap
}
300 301
\def
\math_cramped_llap
#
1
#
2
{{}
\dollap
{
\math_cramped
#
1
{
#
2
}}}
302
\def
\math_cramped_rlap
#
1
#
2
{{}
\dorlap
{
\math_cramped
#
1
{
#
2
}}}
303
\def
\math_cramped_clap
#
1
#
2
{{}
\doclap
{
\math_cramped
#
1
{
#
2
}}}
304 305
% experiment, not yet to be used
306 307
% \unexpanded\def\displaybreak
308
% {\ifhmode
309
% \removeunwantedspaces
310
% \ifcase\raggedstatus\hfill\fi
311
% \strut\penalty-9999 % \break fails on case (3)
312
% \fi}
313
%
314
% \def\startdisplay{\displaybreak\ignorespaces\startpacked}
315
% \def\stopdisplay {\stoppacked\displaybreak\ignorespaces}
316 317
\let
\superscript
\Usuperscript
318
\let
\subscript
\Usubscript
319
\let
\nosuperscript
\Unosuperscript
320
\let
\nosubscript
\Unosubscript
321 322
% only in luametatex:
323 324
\let
\superprescript
\Usuperprescript
325
\let
\subprescript
\Usubprescript
326
\let
\nosuperprescript
\Unosuperprescript
327
\let
\nosubsprecript
\Unosubprescript
328 329
\protect
\endinput
330