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