1
2
3
4
5
6
7
8
9
10
11
12
13
14
15\writestatus{loading}{ConTeXt Math Macros Stackers}
16
17\unprotect
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94\def\math_stackers_fallback
95 {\mathstylehbox to \scratchwidth{\usemathstackerscolorparameter\c!color
96 \hss
97 \hskip\mathstackersparameter\c!topoffset\relax
98
99
100
101 \Umathchar\zerocount\zerocount\scratchunicode
102
103 \hss}}
104
105\def\math_stackers_regular
106 {\mathstylehbox{\usemathstackerscolorparameter\c!color
107 \hskip\d_math_stackers_offset_l
108 \Uhextensible
109 middle
110 \ifcstok{\mathstackersparameter\c!stretch}\v!yes
111 stretch
112 \fi
113 \ifcstok{\mathstackersparameter\c!shrink}\v!yes
114 shrink
115 \fi
116 width \dimexpr\scratchwidth\d_math_stackers_offset_l\d_math_stackers_offset_r\relax
117 \zerocount\scratchunicode
118 \relax
119 \hskip\d_math_stackers_offset_r
120 }}
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137\let\math_stackers_top \relax
138\let\math_stackers_middle\relax
139\let\math_stackers_bottom\relax
140\let\math_stackers_skip \hskip
141
142\installtextracker
143 {math.stackers.texts}
144 {\let\math_stackers_top \filledhboxb
145 \let\math_stackers_middle\filledhboxr
146 \let\math_stackers_bottom\filledhboxg
147 \let\math_stackers_skip \math_stackers_skip_indeed}
148 {\let\math_stackers_top \relax
149 \let\math_stackers_middle\relax
150 \let\math_stackers_bottom\relax
151 \let\math_stackers_skip \hskip}
152
153\def\math_stackers_skip_indeed#amount
154 {\filledhboxk{\strut\hskip#amount}}
155
156\lettonothing\math_stackers_start_tagged_mid
157\lettonothing\math_stackers_start_tagged_top
158\lettonothing\math_stackers_start_tagged_bot
159\lettonothing\math_stackers_stop_tagged
160
161\def\math_stackers_unicode{\ifcase\scratchunicode\else\the\scratchunicode\fi}
162
163\def\math_stackers_reset_variables
164 {\scratchunicode\zerocount
165 \edef\p_offset {\mathstackersparameter\c!offset}
166 \edef\p_location {\mathstackersparameter\c!location}
167 \edef\p_strut {\mathstackersparameter\c!strut}
168 \edef\p_alternative{\mathstackersparameter\c!alternative}
169 \scratchleftoffset \zeropoint
170 \scratchrightoffset\zeropoint}
171
172\appendtoks
173 \def\math_stackers_start_tagged_mid{\dostarttagged\t!mstackermid{\math_stackers_unicode}\hbox\bgroup}
174 \def\math_stackers_start_tagged_top{\dostarttagged\t!mstackertop{\math_stackers_unicode}\hbox\bgroup}
175 \def\math_stackers_start_tagged_bot{\dostarttagged\t!mstackerbot{\math_stackers_unicode}\hbox\bgroup}
176 \def\math_stackers_stop_tagged {\egroup\dostoptagged}
177\to \everysetuptagging
178
179
180
181\installcorenamespace {mathstackers}
182
183\installcommandhandler \??mathstackers {mathstackers} \??mathstackers
184
185\setupmathstackers
186 [
187 \c!left=,
188 \c!right=,
189 \c!mathclass=\s!relation,
190 \c!alternative=\v!normal,
191 \c!voffset=.25\mathexheight,
192 \c!hoffset=\zeropoint,
193 \c!topoffset=\zeropoint,
194 \c!distance=\mathstackersparameter\c!voffset,
195 \c!minheight=\mathexheight,
196 \c!mindepth=\zeropoint,
197
198 \c!minwidth=.25\mathemwidth,
199 \c!order=\v!normal,
200 \c!strut=,
201 \c!color=,
202 \c!topcommand=,
203 \c!middlecommand=,
204 \c!bottomcommand=,
205 \c!offset=\v!normal,
206 \c!location=\v!top]
207
208
209
210
211\installcorenamespace {mathstackerslocation}
212\installcorenamespace {mathstackersalternative}
213
214\letcsname\??mathstackerslocation\v!top \endcsname\plusone
215\letcsname\??mathstackerslocation\v!high \endcsname\plustwo
216\letcsname\??mathstackerslocation\v!middle \endcsname\plusthree
217\letcsname\??mathstackerslocation\v!low \endcsname\plusfour
218\letcsname\??mathstackerslocation\v!bottom \endcsname\plusfive
219\letcsname\??mathstackerslocation \endcsname\zerocount
220
221
222
223
224\lettonothing\m_math_stackers_text_top
225\lettonothing\m_math_stackers_text_bottom
226\lettonothing\m_math_stackers_text_middle
227
228\def\math_stackers_flushtext#command#style#color#text
229 {\ifdim\scratchleftoffset>\zeropoint
230 \math_stackers_skip\scratchleftoffset
231 \fi
232 \ifx\p_strut\v!no \else
233 \strut
234 \fi
235 \usemathstackersstyleandcolor#style#color
236 \mathstackersparameter#command#text
237 \ifdim\scratchrightoffset>\zeropoint
238 \math_stackers_skip\scratchrightoffset
239 \fi}
240
241\def\math_stackers_toptext {\math_stackers_flushtext\c!topcommand \c!topstyle \c!topcolor \m_math_stackers_text_top }
242\def\math_stackers_bottomtext{\math_stackers_flushtext\c!bottomcommand\c!bottomstyle\c!bottomcolor\m_math_stackers_text_bottom}
243\def\math_stackers_middletext{\math_stackers_flushtext\c!middlecommand\c!middlestyle\c!middlecolor\m_math_stackers_text_middle}
244
245\def\math_stackers_content
246 {\ifcase\scratchcounter
247 \math_stackers_fallback
248 \or
249 \math_stackers_regular
250 \or
251 \math_stackers_regular
252 \or
253 \math_stackers_regular
254 \else
255 \math_stackers_fallback
256 \fi}
257
258
259
260\letcsname\??mathstackersalternative\v!normal \endcsname\math_stackers_content
261\letcsname\??mathstackersalternative\v!default\endcsname\math_stackers_content
262
263\setupmathstackers
264 [\c!mp=math:stacker:\the\scratchunicode,
265 \c!mpheight=\mathcharht\scratchunicode,
266 \c!mpdepth=\mathchardp\scratchunicode,
267 \c!mpoffset=.25\mathexheight]
268
269\defcsname\??mathstackersalternative\v!mp\endcsname
270 {\normalexpanded{\math_stackers_mp_box
271 {\the\dimexpr\mathstackersparameter\c!mpheight}
272 {\the\dimexpr\mathstackersparameter\c!mpdepth}
273 {\the\dimexpr\mathstackersparameter\c!mpoffset}
274 {\the\dimexpr\triggeredmathstyleparameter\Umathfractionrule}
275 {\the\dimexpr\triggeredmathstyleparameter\Umathaxis}
276 {\the\mathexheight}
277 {\the\mathemwidth}
278 }}
279
280\protected\def\math_stackers_mp_box#1#2#3#4#5#6#7
281 {\hpack\bgroup
282
283 \d_overlay_width \scratchwidth
284 \d_overlay_height #1\relax
285 \d_overlay_depth #2\relax
286 \d_overlay_offset #3\relax
287 \d_overlay_linewidth#4\relax
288 \edef\overlaylinecolor{\mathstackersparameter\c!color}
289 \edef\p_mp{\mathstackersparameter\c!mp}
290 \uniqueMPgraphic{\p_mp}{axis=#5,ex=#6,em=#7}
291 \egroup}
292
293\def\math_stackers_check_unicode#codepoint
294 {\scratchunicode#codepoint\relax
295 \scratchhoffset\mathstackersparameter\c!hoffset\relax
296 \scratchvoffset\mathstackersparameter\c!voffset\relax
297 \scratchcounter\mathhorizontalcode\fam\scratchunicode\relax
298 \ifx\p_offset\v!max
299
300 \orelse\ifx\p_offset\v!min
301
302 \advanceby\scratchleftoffset \scratchhoffset
303 \advanceby\scratchrightoffset\scratchhoffset
304 \else
305
306 \scratchleftoffset\zeropoint
307 \scratchrightoffset\zeropoint
308 \fi
309 \ifdim\scratchleftoffset<\zeropoint
310 \scratchleftoffset\zeropoint
311 \fi
312 \ifdim\scratchrightoffset<\zeropoint
313 \scratchrightoffset\zeropoint
314 \fi}
315
316\def\math_stackers_normalize_three
317 {\scratchheight\ht\scratchboxthree
318 \scratchdepth \dp\scratchboxthree
319 \scratchtopoffset \scratchheight
320 \scratchbottomoffset\scratchdepth
321 \scratchdimen\mathstackersparameter\c!minheight\relax
322 \ifdim\scratchheight<\scratchdimen
323 \scratchheight\scratchdimen
324 \ht\scratchboxthree\scratchheight
325 \fi
326 \scratchdimen\mathstackersparameter\c!mindepth\relax
327 \ifdim\scratchdepth<\scratchdimen
328 \scratchdepth\scratchdimen
329 \dp\scratchboxthree\scratchdepth
330 \fi
331 \advanceby\scratchtopoffset \scratchheight
332 \advanceby\scratchbottomoffset\scratchdepth
333 \ifdim\scratchtopoffset<\zeropoint
334 \scratchtopoffset\zeropoint
335 \fi
336 \ifdim\scratchbottomoffset<\zeropoint
337 \scratchbottomoffset\zeropoint
338 \fi}
339
340\def\math_stackers_get_max_width
341 {\ifdim\wd\scratchboxone>\scratchwidth
342 \scratchwidth\wd\scratchboxone
343 \fi
344 \ifdim\wd\scratchboxtwo>\scratchwidth
345 \scratchwidth\wd\scratchboxtwo
346 \fi
347 \ifdim\wd\scratchboxthree>\scratchwidth
348 \scratchwidth\wd\scratchboxthree
349 \fi}
350
351\def\math_stackers_set_max_width
352 {\ifdim\wd\scratchboxone<\scratchwidth
353 \setbox\scratchboxone\hpack to \scratchwidth{\hss\unhbox\scratchboxone\hss}
354 \fi
355 \ifdim\wd\scratchboxtwo<\scratchwidth
356 \setbox\scratchboxtwo\hpack to \scratchwidth{\hss\unhbox\scratchboxtwo\hss}
357 \fi
358 \ifdim\wd\scratchboxthree<\scratchwidth
359 \setbox\scratchboxthree\hpack to \scratchwidth{\hss\unhbox\scratchboxthree\hss}
360 \fi}
361
362\protected\def\math_stackers_triplet#method#category#codepoint#toptext#bottomtext
363 {\begingroup
364 \cdef\currentmathstackers{#category}
365 \mathstackersparameter\c!left\relax
366 \dostarttagged\t!mstacker\currentmathstackers
367 \ifmmode\math_atom_by_parameter\mathstackersparameter\else\dontleavehmode\fi
368 {\math_stackers_reset_variables
369 \edef\m_math_stackers_text_top {#toptext}
370 \edef\m_math_stackers_text_bottom{#bottomtext}
371 \ifparameter#bottomtext\or
372 \ifcstok{\mathstackersparameter\c!order}\v!reverse
373 \swapmacros\m_math_stackers_text_top\m_math_stackers_text_bottom
374 \fi
375 \fi
376 \ifcase#method\relax
377 \math_stackers_check_unicode{#codepoint}
378 \else
379
380 \edef\m_math_stackers_text_middle{#codepoint}
381 \fi
382 \ifempty\m_math_stackers_text_top
383 \setbox\scratchboxone\emptyhbox
384 \else
385 \setmathsmalltextbox\scratchboxone\hbox{\math_stackers_toptext}
386 \fi
387 \ifempty\m_math_stackers_text_bottom
388 \setbox\scratchboxtwo\emptyhbox
389 \else
390 \setmathsmalltextbox\scratchboxtwo\hbox{\math_stackers_bottomtext}
391 \fi
392
393 \ifcase#method\relax
394
395
396
397
398
399
400
401
402 \scratchwidth\mathcharwd\scratchunicode
403 \ifdim\wd\scratchboxone>\scratchwidth
404 \scratchwidth\wd\scratchboxone
405 \fi
406 \ifdim\wd\scratchboxtwo>\scratchwidth
407 \scratchwidth\wd\scratchboxtwo
408 \fi
409 \else
410 \ifempty\m_math_stackers_text_middle
411 \setbox\scratchboxthree\emptyhbox
412 \else
413 \setmathtextbox\scratchboxthree\hbox{\math_stackers_middletext}
414 \fi
415 \math_stackers_get_max_width
416 \fi
417
418 \scratchdimen\mathstackersparameter\c!minwidth\relax
419 \ifdim\scratchwidth<\scratchdimen
420 \scratchwidth\scratchdimen
421 \fi
422 \advanceby\scratchwidth2\scratchhoffset
423
424 \ifcase#method\relax
425 \dostarttaggednodetail\t!mstackermid
426 \setbox\scratchboxthree\csname\??mathstackersalternative\p_alternative\endcsname
427 \dostoptagged
428 \fi
429
430
431
432
433 \math_stackers_set_max_width
434
435 \ifcsname\??mathstackerslocation\p_location\endcsname
436 \ifcase\csname\??mathstackerslocation\p_location\endcsname\relax
437 \scratchdistance\zeropoint
438 \or
439 \scratchdistance\zeropoint
440 \or
441 \scratchdistance.25\htdp\scratchboxthree
442 \or
443 \scratchdistance.5\htdp\scratchboxthree
444 \or
445 \scratchdistance.75\htdp\scratchboxthree
446 \or
447 \scratchdistance\htdp\scratchboxthree
448 \else
449 \scratchdistance\zeropoint
450 \fi
451 \else
452 \scratchdistance\p_location\htdp\scratchboxthree
453 \fi
454
455 \ifzeropt\scratchdistance\else
456 \setbox\scratchboxthree\hpack{\lower\scratchdistance\box\scratchboxthree}
457 \fi
458 \math_stackers_normalize_three
459
460 \ifdim\htdp\scratchboxtwo>\zeropoint
461 \ifdim\htdp\scratchboxone>\zeropoint
462 \dosettagproperty\s!subtype\t!munderover
463 \else
464 \dosettagproperty\s!subtype\t!munder
465 \fi
466 \else
467 \ifdim\htdp\scratchboxone>\zeropoint
468 \dosettagproperty\s!subtype\t!mover
469 \else
470
471 \fi
472 \fi
473
474 \math_stackers_start_tagged_mid
475 \math_stackers_middle\bgroup
476 \box\scratchboxthree
477 \egroup
478 \math_stackers_stop_tagged
479
480 \ifdim\htdp\scratchboxtwo>\zeropoint
481 \math_stackers_start_tagged_bot
482 \scratchoffset\scratchvoffset
483 \kern\scratchwidth
484 \math_stackers_bottom\bgroup
485 \lower\dimexpr\ht\scratchboxtwo\scratchdepth\scratchoffset\scratchbottomoffset\relax
486 \box\scratchboxtwo
487 \egroup
488 \math_stackers_stop_tagged
489 \fi
490
491 \ifdim\htdp\scratchboxone>\zeropoint
492 \math_stackers_start_tagged_top
493 \scratchoffset\scratchvoffset
494 \kern\scratchwidth
495 \math_stackers_top\bgroup
496 \raise\dimexpr\dp\scratchboxone\scratchheight\scratchoffset\scratchtopoffset\relax
497 \box\scratchboxone
498 \egroup
499 \math_stackers_stop_tagged
500 \fi
501
502 }
503 \dostoptagged
504 \mathstackersparameter\c!right\relax
505 \endgroup}
506
507
508\permanent\tolerant\protected\def\definemathextensible[#1]#*[#2]#*[#3]
509 {\ifarguments\or\or
510 \frozen\protected\edefcsname#1\endcsname{\math_stackers_auto_normal\noexpand\currentmathstackers{\number#2}}
511 \or
512 \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_normal{#1}{\number#3}}
513 \fi}
514
515
516
517
518
519
520
521
522\tolerant\protected\def\math_stackers_auto_normal#1#2#*[#3]#:#*#=#*#=
523 {\begingroup
524 \scratchcounter#2\relax
525 \cdef\currentmathstackers{#1}
526 \ifhastok={#3}
527 \setupcurrentmathstackers[#3]
528 \orelse\ifparameter#3\or
529 \cdef\currentmathstackers{#3}
530 \fi
531 \math_stackers_triplet\zerocount\currentmathstackers\scratchcounter{#4}{#5}
532 \endgroup}
533
534
535
536
537\permanent\tolerant\protected\def\directmathextensible[#category]
538 {\begingroup
539 \math_stackers_handle_extensible{\ifparameter#category\or#category\else\v!mathematics\fi}}
540
541\permanent\tolerant\protected\def\directtextextensible[#category]
542 {\begingroup
543 \math_stackers_handle_extensible{\ifparameter#category\or#category\else\v!text\fi}}
544
545\aliased\let\mathstacker\directmathextensible
546\aliased\let\textstacker\directtextextensible
547
548\def\math_stackers_handle_extensible#category#codepoint#toptext#bottomtext
549 {\math_stackers_triplet\zerocount{#category}{#codepoint}{#toptext}{#bottomtext}
550 \endgroup}
551
552
553
554\let\math_stackers_stop_group\endgroup
555
556\protected\def\math_stackers_start_group#category
557 {\begingroup
558 \cdef\currentmathstackers{#category}
559 \ifcstok{\mathstackersparameter\c!mathlimits}\v!yes
560 \def\math_stackers_stop_group{\egroup\endgroup\ordlimits}
561
562 \mathaccent\bgroup
563 \else
564 \let\math_stackers_stop_group\endgroup
565 \fi}
566
567\newconstant \c_math_stackers_top
568\newconstant \c_math_stackers_bottom
569\newconstant \c_math_stackers_codepoint
570\newconstant \c_math_stackers_extracode
571\newdimension\d_math_stackers_offset_l
572\newdimension\d_math_stackers_offset_r
573
574\setupmathstackers[lt=\zeropoint,rt=\zeropoint,lb=\zeropoint,rb=\zeropoint]
575
576\tolerant\protected\def\math_stackers_make_double#top#bottom#category#codepoint#codeextra#spacer[#S#settings]#:#*#text
577 {\math_stackers_start_group{#category}
578 \c_math_stackers_top #top\relax
579 \c_math_stackers_bottom #bottom\relax
580 \c_math_stackers_codepoint#codepoint\relax
581 \c_math_stackers_extracode#codeextra\relax
582 \ifparameter#settings\or
583 \setupcurrentmathstackers[#settings]
584 \fi
585 \mathstackersparameter\c!left\relax
586 \dostarttagged\t!mstacker\currentmathstackers
587 \ifmmode\math_atom_by_parameter\mathstackersparameter\else\dontleavehmode\fi
588 {\math_stackers_reset_variables
589 \edef\m_math_stackers_text_middle{#text}
590 \math_stackers_check_unicode\c_math_stackers_codepoint
591 \ifempty\math_stackers_middle
592 \setbox\scratchboxthree\emptyhbox
593 \else
594 \setmathtextbox\scratchboxthree\hbox{\math_stackers_middletext}
595 \fi
596 \scratchwidth\wd\scratchboxthree
597
598 \scratchdimen\mathstackersparameter\c!minwidth\relax
599 \ifdim\scratchwidth<\scratchdimen
600 \scratchwidth\scratchdimen
601 \fi
602 \advanceby\scratchwidth2\scratchhoffset
603
604
605 \ifcase\c_math_stackers_bottom
606 \d_math_stackers_offset_l\mathstackersparameter{lt}
607 \d_math_stackers_offset_r\mathstackersparameter{rt}
608 \orelse\ifcase\c_math_stackers_top
609 \d_math_stackers_offset_l\mathstackersparameter{lb}
610 \d_math_stackers_offset_r\mathstackersparameter{rb}
611 \else
612 \d_math_stackers_offset_l\mathstackersparameter{lt}
613 \d_math_stackers_offset_r\mathstackersparameter{rt}
614 \fi
615
616 \setbox\scratchboxtwo\csname\??mathstackersalternative\p_alternative\endcsname
617 \setbox\scratchboxthree\hpack to \scratchwidth{\hss\box\scratchboxthree\hss}
618
619 \scratchunicode\c_math_stackers_extracode
620 \ifcase\scratchunicode\else
621 \d_math_stackers_offset_l\mathstackersparameter{lb}
622 \d_math_stackers_offset_r\mathstackersparameter{rb}
623 \setbox\scratchboxone\csname\??mathstackersalternative\p_alternative\endcsname
624 \fi
625
626 \math_stackers_normalize_three
627 \math_stackers_get_max_width
628 \math_stackers_set_max_width
629
630 \ifcase\c_math_stackers_bottom
631 \ifcase\c_math_stackers_top
632 \dosettagproperty\s!subtype\t!munderover
633 \else
634 \dosettagproperty\s!subtype\t!mover
635 \fi
636 \else
637 \ifcase\c_math_stackers_top
638 \dosettagproperty\s!subtype\t!munder
639 \else
640
641 \fi
642 \fi
643
644 \math_stackers_start_tagged_mid
645 \math_stackers_middle\bgroup
646 \box\scratchboxthree
647 \egroup
648 \math_stackers_stop_tagged
649
650 \ifdim\htdp\scratchboxtwo>\zeropoint
651 \ifcase\c_math_stackers_bottom\else
652 \kern\scratchwidth
653
654 \math_stackers_start_tagged_bot
655 \math_stackers_bottom\bgroup
656 \lower\dimexpr
657 \scratchdepth
658 \ht\ifcase\c_math_stackers_top\scratchboxtwo\else\scratchboxone\fi
659 \mathstackersparameter\c!distance
660 \relax
661 \ifcase\c_math_stackers_top
662 \box\scratchboxtwo
663 \else
664 \box\scratchboxone
665 \fi
666 \egroup
667 \math_stackers_stop_tagged
668 \fi
669 \ifcase\c_math_stackers_top\else
670 \kern\scratchwidth
671
672 \math_stackers_start_tagged_top
673 \math_stackers_top\bgroup
674 \raise\dimexpr
675 \scratchheight
676 \dp\scratchboxtwo
677 \mathstackersparameter\c!distance
678 \relax
679 \box\scratchboxtwo
680 \egroup
681 \math_stackers_stop_tagged
682 \fi
683 \fi}
684 \dostoptagged
685 \mathstackersparameter\c!right\relax
686 \math_stackers_stop_group}
687
688\permanent\tolerant\protected\def\definemathoverextensible[#1]#*[#2]#*[#3]
689 {\ifparameter#3\or
690 \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double\plusone \zerocount{#1}{\number#3}{0}}
691 \else
692 \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double\plusone \zerocount\noexpand\currentmathstackers{\number#2}{0}}
693 \fi}
694
695\permanent\tolerant\protected\def\definemathunderextensible[#1]#*[#2]#*[#3]
696 {\ifparameter#3\or
697 \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double\zerocount\plusone{#1}{\number#3}{0}}
698 \else
699 \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double\zerocount\plusone\noexpand\currentmathstackers{\number#2}{0}}
700 \fi}
701
702\permanent\tolerant\protected\def\definemathdoubleextensible[#1]#*[#2]#*[#3]#*[#4]
703 {\ifparameter#4\or
704 \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double\plusone \plusone{#1}{\number#3}{\number#4}}
705 \else
706 \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double\plusone \plusone\noexpand\currentmathstackers{\number#2}{\number#3}}
707 \fi}
708
709\permanent\tolerant\protected\def\definemathover[#category]#spacer[#command]#spacer[#topcode]
710 {\frozen\protected\defcsname#command\endcsname{\math_stackers_handle_direct\plusone\zerocount{#category}{#topcode}{0}}}
711
712\permanent\tolerant\protected\def\definemathunder[#category]#spacer[#command]#spacer[#bottomcode]
713 {\frozen\protected\defcsname#command\endcsname{\math_stackers_handle_direct\zerocount\plusone{#category}{#bottomcode}{0}}}
714
715\permanent\tolerant\protected\def\definemathdouble[#category]#spacer[#command]#spacer[#topcode]#spacer[#bottomcode]
716 {\frozen\protected\defcsname#command\endcsname{\math_stackers_handle_direct\plusone\plusone{#category}{#topcode}{#bottomcode}}}
717
718\permanent\tolerant\protected\def\mathover[#category]#spacer[#S#settings]#:#*#topcode#*#text
719 {\begingroup
720 \cdef\currentmathstackers{\ifparameter#category\or#category\else\v!top\fi}
721 \ifparameter#settings\or
722 \setupcurrentmathstackers[#settings]
723 \fi
724 \math_stackers_make_double\plusone\zerocount
725 {\currentmathstackers}
726 {#topcode}
727 {0}
728 {#text}
729 \endgroup}
730
731\permanent\tolerant\protected\def\mathunder[#category]#spacer[#S#settings]#:#*#bottomcode#*#text
732 {\begingroup
733 \cdef\currentmathstackers{\ifparameter#category\or#category\else\v!bottom\fi}
734 \ifparameter#settings\or
735 \setupcurrentmathstackers[#settings]
736 \fi
737 \math_stackers_make_double\zerocount\plusone
738 {\currentmathstackers}
739 {#bottomcode}
740 {0}
741 {#text}
742 \endgroup}
743
744\permanent\tolerant\protected\def\mathdouble[#category]#spacer[#settings]#:#*#topcode#*#bottomcode#*#text
745 {\begingroup
746 \cdef\currentmathstackers{\ifparameter#category\or#category\else\v!both\fi}
747 \ifparameter#settings\or
748 \setupcurrentmathstackers[#settings]
749 \fi
750 \math_stackers_make_double\plusone\plusone
751 {\currentmathstackers}
752 {#topcode}
753 {#bottomcode}
754 {#text}
755 \endgroup}
756
757\def\math_stackers_handle_direct#top#bottom#category#topcode#bottomcode#text
758 {\begingroup
759 \math_stackers_make_double#top#bottom{#category}{#topcode}{#bottomcode}{#text}
760 \endgroup}
761
762
763
764\protected\def\math_stackers_make_double_text#where#category#codepoint#text#extra
765 {\math_stackers_start_group{#category}
766 \mathstackersparameter\c!left\relax
767 \dostarttagged\t!mstacker\currentmathstackers
768 \ifmmode\math_atom_by_parameter\mathstackersparameter\else\dontleavehmode\fi
769 {\math_stackers_reset_variables
770 \edef\m_math_stackers_text_middle{#text}
771 \math_stackers_check_unicode{#codepoint}
772 \scratchunicode#codepoint\relax
773
774 \ifempty\math_stackers_middle
775 \setbox\scratchboxthree\emptyhbox
776 \else
777 \setmathtextbox\scratchboxthree\hbox{\math_stackers_middletext}
778 \fi
779
780 \ifcase#where\relax
781 \edef\m_math_stackers_text_top{#extra}
782 \ifempty\math_stackers_top
783 \setbox\scratchboxone\emptyhbox
784 \else
785 \setmathsmalltextbox\scratchboxone\hbox{\math_stackers_toptext}
786 \fi
787 \else
788 \edef\m_math_stackers_text_bottom{#extra}
789 \ifempty\math_stackers_bottom
790 \setbox\scratchboxone\emptyhbox
791 \else
792 \setmathsmalltextbox\scratchboxone\hbox{\math_stackers_bottomtext}
793 \fi
794 \fi
795
796 \scratchwidth\wd
797 \ifdim\wd\scratchboxone>\wd\scratchboxthree
798 \scratchboxone
799 \else
800 \scratchboxthree
801 \fi
802 \relax
803 \scratchdimen\mathstackersparameter\c!minwidth\relax
804 \ifdim\scratchwidth<\scratchdimen
805 \scratchwidth\scratchdimen
806 \fi
807 \advanceby\scratchwidth2\scratchhoffset
808
809 \ifdim\wd\scratchboxone<\scratchwidth
810 \setbox\scratchboxone\hpack to \scratchwidth{\hss\unhbox\scratchboxone\hss}
811 \fi
812 \ifdim\wd\scratchboxthree<\scratchwidth
813 \setbox\scratchboxthree\hpack to \scratchwidth{\hss\unhbox\scratchboxthree\hss}
814 \fi
815
816 \math_stackers_normalize_three
817
818 \dosettagproperty\s!subtype\t!munderover
819
820 \math_stackers_start_tagged_mid
821 \math_stackers_middle\bgroup
822 \box\scratchboxthree
823 \egroup
824 \math_stackers_stop_tagged
825
826 \setbox\scratchboxtwo\csname\??mathstackersalternative\p_alternative\endcsname
827 \kern\scratchwidth
828 \ifcase#where\relax
829
830 \math_stackers_start_tagged_bot
831 \math_stackers_bottom\bgroup
832 \lower\dimexpr
833 \scratchdepth
834 \ht\scratchboxtwo
835 \mathstackersparameter\c!distance
836 \relax
837 \box\scratchboxtwo
838 \egroup
839 \math_stackers_stop_tagged
840 \kern\scratchwidth
841
842 \math_stackers_start_tagged_top
843 \math_stackers_top\bgroup
844 \raise\dimexpr
845 \scratchheight
846 \dp\scratchboxone
847 \mathstackersparameter\c!voffset
848 \relax
849 \box\scratchboxone
850 \egroup
851 \math_stackers_stop_tagged
852 \else
853
854 \math_stackers_start_tagged_bot
855 \math_stackers_bottom\bgroup
856 \lower\dimexpr
857 \scratchdepth
858 \ht\scratchboxone
859 \mathstackersparameter\c!voffset
860 \relax
861 \box\scratchboxone
862 \egroup
863 \math_stackers_stop_tagged
864 \kern\scratchwidth
865
866 \math_stackers_start_tagged_top
867 \math_stackers_top\bgroup
868 \raise\dimexpr
869 \scratchheight
870 \dp\scratchboxtwo
871 \mathstackersparameter\c!distance
872 \relax
873 \box\scratchboxtwo
874 \egroup
875 \math_stackers_stop_tagged
876 \fi
877 }
878 \dostoptagged
879 \mathstackersparameter\c!right\relax
880 \math_stackers_stop_group}
881
882\permanent\tolerant\protected\def\definemathovertextextensible[#1]#*[#2]#*[#3]
883 {\ifparameter#3\or
884 \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double_text\plusone{#1}{\number#3}}
885 \else
886 \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double_text\plusone\noexpand\currentmathstackers{\number#2}}
887 \fi}
888
889\permanent\tolerant\protected\def\definemathundertextextensible[#1]#*[#2]#*[#3]
890 {\ifparameter#3\or
891 \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double_text\zerocount{#1}{\number#3}}
892 \else
893 \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double_text\zerocount\noexpand\currentmathstackers{\number#2}}
894 \fi}
895
896\permanent\tolerant\protected\def\mathovertext[#category]
897 {\begingroup
898 \math_stackers_direct_double_text\plusone {\ifarguments#category\or#category\else\v!top\fi}}
899
900\permanent\tolerant\protected\def\mathundertext[#category]
901 {\begingroup
902 \math_stackers_direct_double_text\zerocount{\ifarguments#category\or#category\else\v!bottom\fi}}
903
904\def\math_stackers_direct_double_text#where#category#codepoint#text#extra
905 {\math_stackers_make_double_text#where{#category}{#codepoint}{#text}{#extra}
906 \endgroup}
907
908
909
910
911\permanent\tolerant\protected\def\mathtriplet[#1]#:#*#=#*#=#*#=
912 {\begingroup
913 \ifparameter#1\or\cdef\currentmathstackers{#1}\fi
914 \math_stackers_triplet\plusone\currentmathstackers{#2}{#3}{#4}
915 \endgroup}
916
917\permanent\tolerant\protected\def\definemathtriplet[#1]#*[#2]#*[#3]
918 {\ifarguments\or
919 \frozen\protected\edefcsname#1\endcsname{\math_stackers_auto_triplet_nop[\noexpand\currentmathstackers]}
920 \or
921 \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_triplet_nop[#1]}
922 \or
923 \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_triplet_yes[#1][#3]}
924 \fi}
925
926\tolerant\protected\def\math_stackers_auto_triplet_yes[#1][#2]#*[#3]#:#*#=#*#=
927 {\begingroup
928 \cdef\currentmathstackers{#1}
929 \def \m_math_stackers_text_middle{#2}
930 \ifparameter#3\or\cdef\currentmathstackers{#3}\fi
931 \math_stackers_triplet\plusone\currentmathstackers\m_math_stackers_text_middle{#4}{#5}
932 \endgroup}
933
934\tolerant\protected\def\math_stackers_auto_triplet_nop[#1]#*[#2]#:#*#=#*#=#*#=
935 {\begingroup
936 \cdef\currentmathstackers{#1}
937 \ifparameter#2\or\cdef\currentmathstackers{#2}\fi
938 \math_stackers_triplet\plusone\currentmathstackers{#3}{#4}{#5}
939 \endgroup}
940
941
942
943\definemathstackers
944 [\v!mathematics]
945 [\c!topcommand=\mathematics,
946 \c!middlecommand=\mathematics,
947 \c!bottomcommand=\mathematics]
948
949\definemathstackers
950 [\s!math]
951 [\v!mathematics]
952
953\definemathstackers
954 [\v!text]
955 [\v!mathematics]
956 [\c!topcommand=,
957 \c!middlecommand=\mathematics,
958 \c!bottomcommand=]
959
960\definemathstackers
961 [\v!reverse]
962 [\v!mathematics]
963 [\c!order=\v!reverse]
964
965\definemathstackers
966 [\v!both]
967 [\v!mathematics]
968 [\c!location=\v!top,
969 \c!mathclass=\s!accent,
970 \c!strut=\v!no,
971 \c!middlecommand=\mathematics,
972 \c!hoffset=\zeropoint]
973
974\definemathstackers
975 [\v!top]
976 [\v!both]
977
978\definemathstackers
979 [\v!bottom]
980 [\v!both]
981
982\definemathstackers
983 [\v!vfenced]
984 [\v!both]
985 [\c!mathclass=\s!ordinary,
986 \c!mathlimits=\v!yes,
987
988 \c!stretch=\v!yes,
989 \c!shrink=\v!yes]
990
991
992
993
994
995
996
997
998\definemathstackers
999 [\v!bothtext]
1000 [\v!both]
1001 [\c!strut=\v!yes]
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034\immutable\protected\def\normaldoublebrace {\Umathaccent \s!both \zerocount \zerocount "23DE \zerocount \zerocount "23DF }
1035\immutable\protected\def\normaldoubleparent{\Umathaccent \s!both \zerocount \zerocount "23DC \zerocount \zerocount "23DD }
1036
1037
1038
1039\aliased\let\normaloverbrace \overbrace
1040\aliased\let\normalunderbrace \underbrace
1041\aliased\let\normaloverparent \overparent
1042\aliased\let\normalunderparent \underparent
1043\aliased\let\normaloverbracket \overbracket
1044\aliased\let\normalunderbracket \underbracket
1045
1046
1047
1048
1049
1050
1051
1052
1053\definemathstackers [\v!none] [\v!mathematics] [\c!hoffset=\zeropoint]
1054\definemathstackers [\v!normal] [\v!mathematics] [\c!hoffset=0.5\mathemwidth]
1055\definemathstackers [\v!small] [\v!mathematics] [\c!hoffset=1\mathemwidth]
1056\definemathstackers [\v!medium] [\v!mathematics] [\c!hoffset=1.5\mathemwidth]
1057\definemathstackers [\v!big] [\v!mathematics] [\c!hoffset=2\mathemwidth]
1058
1059\definemathextensible [\v!reverse] [xrel] ["2212]
1060\definemathextensible [\v!reverse] [xequal] ["003D]
1061\definemathextensible [\v!reverse] [xleftarrow] ["2190]
1062\definemathextensible [\v!reverse] [xrightarrow] ["2192]
1063\definemathextensible [\v!reverse] [xleftrightarrow] ["2194]
1064\definemathextensible [\v!reverse] [xlongleftarrow] ["27F5]
1065\definemathextensible [\v!reverse] [xlongrightarrow] ["27F6]
1066\definemathextensible [\v!reverse] [xlongleftrightarrow] ["27F7]
1067\definemathextensible [\v!reverse] [xLeftarrow] ["27F8]
1068\definemathextensible [\v!reverse] [xRightarrow] ["27F9]
1069\definemathextensible [\v!reverse] [xLeftrightarrow] ["27FA]
1070\definemathextensible [\v!reverse] [xtwoheadleftarrow] ["219E]
1071\definemathextensible [\v!reverse] [xtwoheadrightarrow] ["21A0]
1072\definemathextensible [\v!reverse] [xmapsto] ["21A6]
1073\definemathextensible [\v!reverse] [xhookleftarrow] ["21A9]
1074\definemathextensible [\v!reverse] [xhookrightarrow] ["21AA]
1075\definemathextensible [\v!reverse] [xleftharpoondown] ["21BD]
1076\definemathextensible [\v!reverse] [xleftharpoonup] ["21BC]
1077\definemathextensible [\v!reverse] [xrightharpoondown] ["21C1]
1078\definemathextensible [\v!reverse] [xrightharpoonup] ["21C0]
1079\definemathextensible [\v!reverse] [xrightoverleftarrow] ["21C4]
1080\definemathextensible [\v!reverse] [xleftoverrightarrow] ["21C6]
1081\definemathextensible [\v!reverse] [xleftrightharpoons] ["21CB]
1082\definemathextensible [\v!reverse] [xrightleftharpoons] ["21CC]
1083\definemathextensible [\v!reverse] [xtriplerel] ["2261]
1084
1085\definemathextensible [\v!mathematics] [mrel] ["2212]
1086\definemathextensible [\v!mathematics] [mequal] ["003D]
1087\definemathextensible [\v!mathematics] [mleftarrow] ["2190]
1088\definemathextensible [\v!mathematics] [mrightarrow] ["2192]
1089\definemathextensible [\v!mathematics] [mleftrightarrow] ["2194]
1090\definemathextensible [\v!mathematics] [mLeftarrow] ["21D0]
1091\definemathextensible [\v!mathematics] [mRightarrow] ["21D2]
1092\definemathextensible [\v!mathematics] [mLeftrightarrow] ["21D4]
1093\definemathextensible [\v!mathematics] [mtwoheadleftarrow] ["219E]
1094\definemathextensible [\v!mathematics] [mtwoheadrightarrow] ["21A0]
1095\definemathextensible [\v!mathematics] [mmapsto] ["21A6]
1096\definemathextensible [\v!mathematics] [mhookleftarrow] ["21A9]
1097\definemathextensible [\v!mathematics] [mhookrightarrow] ["21AA]
1098\definemathextensible [\v!mathematics] [mleftharpoondown] ["21BD]
1099\definemathextensible [\v!mathematics] [mleftharpoonup] ["21BC]
1100\definemathextensible [\v!mathematics] [mrightharpoondown] ["21C1]
1101\definemathextensible [\v!mathematics] [mrightharpoonup] ["21C0]
1102\definemathextensible [\v!mathematics] [mrightoverleftarrow] ["21C4]
1103\definemathextensible [\v!mathematics] [mleftoverrightarrow] ["21C6]
1104\definemathextensible [\v!mathematics] [mleftrightharpoons] ["21CB]
1105\definemathextensible [\v!mathematics] [mrightleftharpoons] ["21CC]
1106\definemathextensible [\v!mathematics] [mtriplerel] ["2261]
1107
1108\definemathextensible [\v!text] [trel] ["2212]
1109\definemathextensible [\v!text] [tequal] ["003D]
1110\definemathextensible [\v!text] [tmapsto] ["21A6]
1111\definemathextensible [\v!text] [tleftarrow] ["2190]
1112\definemathextensible [\v!text] [trightarrow] ["2192]
1113\definemathextensible [\v!text] [tleftrightarrow] ["2194]
1114\definemathextensible [\v!text] [tLeftarrow] ["21D0]
1115\definemathextensible [\v!text] [tRightarrow] ["21D2]
1116\definemathextensible [\v!text] [tLeftrightarrow] ["21D4]
1117\definemathextensible [\v!text] [ttwoheadleftarrow] ["219E]
1118\definemathextensible [\v!text] [ttwoheadrightarrow] ["21A0]
1119\definemathextensible [\v!text] [tmapsto] ["21A6]
1120\definemathextensible [\v!text] [thookleftarrow] ["21A9]
1121\definemathextensible [\v!text] [thookrightarrow] ["21AA]
1122\definemathextensible [\v!text] [tleftharpoondown] ["21BD]
1123\definemathextensible [\v!text] [tleftharpoonup] ["21BC]
1124\definemathextensible [\v!text] [trightharpoondown] ["21C1]
1125\definemathextensible [\v!text] [trightharpoonup] ["21C0]
1126\definemathextensible [\v!text] [trightoverleftarrow] ["21C4]
1127\definemathextensible [\v!text] [tleftoverrightarrow] ["21C6]
1128\definemathextensible [\v!text] [tleftrightharpoons] ["21CB]
1129\definemathextensible [\v!text] [trightleftharpoons] ["21CC]
1130\definemathextensible [\v!text] [ttriplerel] ["2261]
1131
1132\definemathoverextensible [\v!top] [overleftarrow] ["2190]
1133\definemathoverextensible [\v!top] [overrightarrow] ["2192]
1134\definemathoverextensible [\v!top] [overleftrightarrow] ["2194]
1135\definemathoverextensible [\v!top] [overtwoheadleftarrow] ["219E]
1136\definemathoverextensible [\v!top] [overtwoheadrightarrow] ["21A0]
1137\definemathoverextensible [\v!top] [overlefttailarrow] ["21A2]
1138\definemathoverextensible [\v!top] [overrighttailarrow] ["21A3]
1139\definemathoverextensible [\v!top] [overleftbararrow] ["21A4]
1140\definemathoverextensible [\v!top] [overrightbararrow] ["21A6]
1141\definemathoverextensible [\v!top] [overlefthookarrow] ["21A9]
1142\definemathoverextensible [\v!top] [overrighthookarrow] ["21AA]
1143\definemathoverextensible [\v!top] [overleftharpoondown] ["21BD]
1144\definemathoverextensible [\v!top] [overleftharpoonup] ["21BC]
1145\definemathoverextensible [\v!top] [overrightharpoondown] ["21C1]
1146\definemathoverextensible [\v!top] [overrightharpoonup] ["21C0]
1147\definemathoverextensible [\v!top] [overRightarrow] ["21D2]
1148\definemathoverextensible [\v!top] [overLeftarrow] ["21D0]
1149\definemathoverextensible [\v!top] [overLeftrightarrow] ["21D4]
1150\definemathoverextensible [\v!top] [overLeftbararrow] ["2906]
1151\definemathoverextensible [\v!top] [overRightbararrow] ["2907]
1152
1153\definemathunderextensible [\v!bottom] [underleftarrow] ["2190]
1154\definemathunderextensible [\v!bottom] [underrightarrow] ["2192]
1155\definemathunderextensible [\v!bottom] [underleftrightarrow] ["2194]
1156\definemathunderextensible [\v!bottom] [undertwoheadleftarrow] ["219E]
1157\definemathunderextensible [\v!bottom] [undertwoheadrightarrow] ["21A0]
1158\definemathunderextensible [\v!bottom] [underlefttailarrow] ["21A2]
1159\definemathunderextensible [\v!bottom] [underrighttailarrow] ["21A3]
1160\definemathunderextensible [\v!bottom] [underleftbararrow] ["21A4]
1161\definemathunderextensible [\v!bottom] [underrightbararrow] ["21A6]
1162\definemathunderextensible [\v!bottom] [underlefthookarrow] ["21A9]
1163\definemathunderextensible [\v!bottom] [underrighthookarrow] ["21AA]
1164\definemathunderextensible [\v!bottom] [underleftharpoondown] ["21BD]
1165\definemathunderextensible [\v!bottom] [underleftharpoonup] ["21BC]
1166\definemathunderextensible [\v!bottom] [underrightharpoondown] ["21C1]
1167\definemathunderextensible [\v!bottom] [underrightharpoonup] ["21C0]
1168\definemathunderextensible [\v!bottom] [underRightarrow] ["21D2]
1169\definemathunderextensible [\v!bottom] [underLeftarrow] ["21D0]
1170\definemathunderextensible [\v!bottom] [underLeftrightarrow] ["21D4]
1171\definemathunderextensible [\v!bottom] [underLeftbararrow] ["2906]
1172\definemathunderextensible [\v!bottom] [underRightbararrow] ["2907]
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187\definemathoverextensible [\v!vfenced] [overbar] ["203E]
1188\definemathunderextensible [\v!vfenced] [underbar] ["203E]
1189\definemathdoubleextensible [\v!vfenced] [doublebar] ["203E] ["203E]
1190
1191\definemathoverextensible [\v!vfenced] [overbrace] ["23DE]
1192\definemathunderextensible [\v!vfenced] [underbrace] ["23DF]
1193\definemathdoubleextensible [\v!vfenced] [doublebrace] ["23DE] ["23DF]
1194
1195\definemathoverextensible [\v!vfenced] [overparent] ["23DC]
1196\definemathunderextensible [\v!vfenced] [underparent] ["23DD]
1197\definemathdoubleextensible [\v!vfenced] [doubleparent] ["23DC] ["23DD]
1198
1199\definemathoverextensible [\v!vfenced] [overbracket] ["23B4]
1200\definemathunderextensible [\v!vfenced] [underbracket] ["23B5]
1201\definemathdoubleextensible [\v!vfenced] [doublebracket] ["23B4] ["23B5]
1202
1203
1204
1205\definemathdoubleextensible [\v!both] [overbarunderbar] ["203E] ["203E]
1206\definemathdoubleextensible [\v!both] [overbraceunderbrace] ["23DE] ["23DF]
1207\definemathdoubleextensible [\v!both] [overparentunderparent] ["23DC] ["23DD]
1208\definemathdoubleextensible [\v!both] [overbracketunderbracket] ["23B4] ["23B5]
1209
1210\definemathovertextextensible [\v!bothtext] [overbartext] ["203E]
1211\definemathundertextextensible [\v!bothtext] [underbartext] ["203E]
1212\definemathovertextextensible [\v!bothtext] [overbracetext] ["23DE]
1213\definemathundertextextensible [\v!bothtext] [underbracetext] ["23DF]
1214\definemathovertextextensible [\v!bothtext] [overparenttext] ["23DC]
1215\definemathundertextextensible [\v!bothtext] [underparenttext] ["23DD]
1216\definemathovertextextensible [\v!bothtext] [overbrackettext] ["23B4]
1217\definemathundertextextensible [\v!bothtext] [underbrackettext] ["23B5]
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263\installcorenamespace {mathadaptiveextensible}
1264
1265\defineadaptive
1266 [mathfiller]
1267 [\c!setups=adaptive:mathfiller,
1268 \c!stretch=1fill]
1269
1270\startsetups adaptive:mathfiller
1271 \setbox\usedadaptivebox\hbox to \usedadaptivewidth \bgroup
1272 \startimath
1273 \Uhextensible
1274 \s!width \usedadaptivewidth
1275 \s!middle \zerocount \usedadaptivealternative
1276 \relax
1277 \stopimath
1278 \egroup
1279\stopsetups
1280
1281
1282
1283
1284
1285
1286
1287\permanent\protected\def\mathfiller#1
1288 {\adaptivebox[mathfiller][\c!alternative=#1]{\hss\strut\hss}}
1289
1290\permanent\tolerant\protected\def\defineextensiblefiller[#1]#*[#2]
1291 {\frozen\instance\edefcsname#1\endcsname{\mathfiller{\number#2}}}
1292
1293
1294\defineextensiblefiller [relfill] ["2212]
1295\defineextensiblefiller [equalfill] ["003D]
1296\defineextensiblefiller [leftarrowfill] ["2190]
1297\defineextensiblefiller [rightarrowfill] ["2192]
1298\defineextensiblefiller [twoheadleftarrowfill] ["219E]
1299\defineextensiblefiller [twoheadrightarrowfill] ["21A0]
1300\defineextensiblefiller [mapstofill] ["21A6]
1301
1302
1303\defineextensiblefiller [leftharpoondownfill] ["21BD]
1304\defineextensiblefiller [leftharpoonupfill] ["21BC]
1305\defineextensiblefiller [rightharpoondownfill] ["21C1]
1306\defineextensiblefiller [rightharpoonupfill] ["21C0]
1307\defineextensiblefiller [rightoverleftarrowfill] ["21C4]
1308\defineextensiblefiller [leftoverrightarrowfill] ["21C6]
1309
1310
1311\defineextensiblefiller [triplerelfill] ["2261]
1312\defineextensiblefiller [leftrightarrowfill] ["27F7]
1313\defineextensiblefiller [Leftarrowfill] ["27F8]
1314\defineextensiblefiller [Rightarrowfill] ["27F9]
1315\defineextensiblefiller [Leftrightarrowfill] ["27FA]
1316\defineextensiblefiller [Rightleftarrowfill] ["27FA]
1317
1318
1319
1320\permanent\protected\edef\singlebond{\mathematics{\mathsurround\zeropoint\char\number"002D\relax}}
1321\permanent\protected\edef\doublebond{\mathematics{\mathsurround\zeropoint\char\number"003D\relax}}
1322\permanent\protected\edef\triplebond{\mathematics{\mathsurround\zeropoint\char\number"2261\relax}}
1323
1324
1325
1326
1327
1328
1329
1330\permanent\tolerant\protected\def\definemathunstacked[#1]#*[#2]#*[#3]
1331 {\ifarguments\or\or
1332 \frozen\protected\edefcsname#1\endcsname{\math_stackers_unstacked_normal\noexpand\currentmathstackers{\number#2}}
1333 \or
1334 \frozen\protected\edefcsname#2\endcsname{\math_stackers_unstacked_normal{#1}{\number#3}}
1335 \fi}
1336
1337\protected\def\math_stackers_unstacked_normal#category#codepoint
1338 {\begingroup
1339 \cdef\currentmathstackers{#category}
1340 \scratchdistance\zeropoint
1341 \scratchcounter\ifchknum\mathstackersparameter\c!sample\or\mathstackersparameter\c!sample\else\zerocount\fi
1342 \scratchunicode#codepoint\relax
1343 \ifconditional\indisplaymath\ifcase\scratchcounter\orelse\ifnum\lastatomclass=\mathbegincode
1344 \scratchdistance\dimexpr
1345 \fontcharwd\mathstylefont\mathstyle\scratchcounter
1346 \fontcharwd\mathstylefont\mathstyle\scratchunicode
1347 \relax
1348 \fi\fi
1349 \math_atom_by_parameter\mathstackersparameter
1350 {\usemathstackerscolorparameter\c!color
1351 \Umathchar\zerocount\zerocount\scratchunicode\relax
1352 \ifzeropt\scratchdistance\else
1353 \kern\scratchdistance
1354 \fi}
1355 \endgroup}
1356
1357\definemathstackers
1358 [\s!implication]
1359 [\c!mathclass=\s!implication,
1360 \c!sample="27FA]
1361
1362\definemathunstacked [\s!implication] [impliedby] ["27F8]
1363\definemathunstacked [\s!implication] [implies] ["27F9]
1364\definemathunstacked [\s!implication] [iff] ["27FA]
1365\definemathunstacked [\s!implication] [impliesby] ["27FA]
1366
1367
1368
1369\definemathstackers
1370 [\v!wide]
1371 [\c!mathclass=\s!implication]
1372
1373\definemathunstacked [\v!wide] [And]["0026]
1374
1375
1376
1377\definemathstackers
1378 [\v!symbol]
1379 [\c!voffset=.3\mathexheight,
1380 \c!hoffset=\zeropoint,
1381 \c!mathclass=\s!ordinary,
1382 \c!topoffset=.4\mathemwidth,
1383 \c!middlecommand=\mathematics]
1384
1385\definemathover[\v!symbol][interiorset]["2218]
1386
1387\protect \endinput
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399 |