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