diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/math-stc.mklx')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/math-stc.mklx | 250 |
1 files changed, 133 insertions, 117 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/math-stc.mklx b/Master/texmf-dist/tex/context/base/mkxl/math-stc.mklx index 1e488af2cbd..cae400db5c9 100644 --- a/Master/texmf-dist/tex/context/base/mkxl/math-stc.mklx +++ b/Master/texmf-dist/tex/context/base/mkxl/math-stc.mklx @@ -16,6 +16,8 @@ \unprotect +% is subtype for tagged needed: dosettagproperty only used here .. maybe for tagged pdf? + %D WARNING: If the code here changes, the export needs to be checked! Stackers are %D rather special because the order in mathml matters, so we flush in [base under %D over] order. We also do some analysis at the \TEX\ end (passing the right @@ -85,11 +87,15 @@ % simply ignore the lack. Better choose a font that matches expectations that some % fragile imperfect hackery. +%D The extensible gets sort of inlined so we loose tagging applied to the box +%D which actually is an nested mlist_to_list call then. Kind of messy in the +%D tagging code. + \def\math_stackers_fallback {\mathstylehbox to \scratchwidth{\usemathstackerscolorparameter\c!color \hss \hskip\mathstackersparameter\c!topoffset\relax % for manual italic correction - % \ifcsname\??mathextensiblefallbacks\number\scratchunicode\endcsname + % \ifcsname\??mathextensiblefallbacks\the\scratchunicode\endcsname % \lastnamedcs % \else \Umathchar\zerocount\zerocount\scratchunicode @@ -147,15 +153,26 @@ \def\math_stackers_skip_indeed#amount% {\filledhboxk{\strut\hskip#amount}} -\let\math_stackers_start_tagged_mid\relax -\let\math_stackers_start_tagged_top\relax -\let\math_stackers_start_tagged_bot\relax -\let\math_stackers_stop_tagged \relax +\lettonothing\math_stackers_start_tagged_mid +\lettonothing\math_stackers_start_tagged_top +\lettonothing\math_stackers_start_tagged_bot +\lettonothing\math_stackers_stop_tagged + +\def\math_stackers_unicode{\ifcase\scratchunicode\else\the\scratchunicode\fi} + +\def\math_stackers_reset_variables + {\scratchunicode\zerocount + \edef\p_offset {\mathstackersparameter\c!offset}% + \edef\p_location {\mathstackersparameter\c!location}% + \edef\p_strut {\mathstackersparameter\c!strut}% + \edef\p_alternative{\mathstackersparameter\c!alternative}% + \scratchleftoffset \zeropoint + \scratchrightoffset\zeropoint} \appendtoks - \def\math_stackers_start_tagged_mid{\dostarttagged\t!mstackermid\empty\hbox\bgroup}% - \def\math_stackers_start_tagged_top{\dostarttagged\t!mstackertop\empty\hbox\bgroup}% - \def\math_stackers_start_tagged_bot{\dostarttagged\t!mstackerbot\empty\hbox\bgroup}% + \def\math_stackers_start_tagged_mid{\dostarttagged\t!mstackermid{\math_stackers_unicode}\hbox\bgroup}% + \def\math_stackers_start_tagged_top{\dostarttagged\t!mstackertop{\math_stackers_unicode}\hbox\bgroup}% + \def\math_stackers_start_tagged_bot{\dostarttagged\t!mstackerbot{\math_stackers_unicode}\hbox\bgroup}% \def\math_stackers_stop_tagged {\egroup\dostoptagged}% \to \everysetuptagging @@ -208,17 +225,22 @@ \lettonothing\m_math_stackers_text_bottom \lettonothing\m_math_stackers_text_middle -\def\math_stackers_flushtext#command#text% - {\ifdim\scratchleftoffset >\zeropoint\math_stackers_skip\scratchleftoffset \fi +\def\math_stackers_flushtext#command#style#color#text% + {\ifdim\scratchleftoffset>\zeropoint + \math_stackers_skip\scratchleftoffset + \fi \ifx\p_strut\v!no \else \strut \fi + \usemathstackersstyleandcolor#style#color% \mathstackersparameter#command#text% - \ifdim\scratchrightoffset>\zeropoint\math_stackers_skip\scratchrightoffset\fi} + \ifdim\scratchrightoffset>\zeropoint + \math_stackers_skip\scratchrightoffset + \fi} -\def\math_stackers_toptext {\math_stackers_flushtext\c!topcommand \m_math_stackers_text_top } -\def\math_stackers_bottomtext{\math_stackers_flushtext\c!bottomcommand\m_math_stackers_text_bottom} -\def\math_stackers_middletext{\math_stackers_flushtext\c!middlecommand\m_math_stackers_text_middle} +\def\math_stackers_toptext {\math_stackers_flushtext\c!topcommand \c!topstyle \c!topcolor \m_math_stackers_text_top } +\def\math_stackers_bottomtext{\math_stackers_flushtext\c!bottomcommand\c!bottomstyle\c!bottomcolor\m_math_stackers_text_bottom} +\def\math_stackers_middletext{\math_stackers_flushtext\c!middlecommand\c!middlestyle\c!middlecolor\m_math_stackers_text_middle} \def\math_stackers_content {\ifcase\scratchcounter @@ -239,7 +261,7 @@ \letcsname\??mathstackersalternative\v!default\endcsname\math_stackers_content \setupmathstackers - [\c!mp=math:stacker:\number\scratchunicode, + [\c!mp=math:stacker:\the\scratchunicode, \c!mpheight=\mathcharht\scratchunicode, \c!mpdepth=\mathchardp\scratchunicode, \c!mpoffset=.25\mathexheight] @@ -339,27 +361,22 @@ \protected\def\math_stackers_triplet#method#category#codepoint#toptext#bottomtext% {\begingroup - \edef\currentmathstackers{#category}% + \cdef\currentmathstackers{#category}% \mathstackersparameter\c!left\relax \dostarttagged\t!mstacker\currentmathstackers \ifmmode\math_atom_by_parameter\mathstackersparameter\else\dontleavehmode\fi - {\edef\p_offset {\mathstackersparameter\c!offset}% - \edef\p_location {\mathstackersparameter\c!location}% - \edef\p_strut {\mathstackersparameter\c!strut}% - \edef\p_alternative{\mathstackersparameter\c!alternative}% + {\math_stackers_reset_variables \edef\m_math_stackers_text_top {#toptext}% \edef\m_math_stackers_text_bottom{#bottomtext}% \ifparameter#bottomtext\or - \edef\p_order{\mathstackersparameter\c!order}% - \ifx\p_order\v!reverse + \ifcstok{\mathstackersparameter\c!order}\v!reverse \swapmacros\m_math_stackers_text_top\m_math_stackers_text_bottom \fi \fi - \scratchleftoffset \zeropoint - \scratchrightoffset\zeropoint \ifcase#method\relax \math_stackers_check_unicode{#codepoint}% \else + %\scratchunicode\zerocount \edef\m_math_stackers_text_middle{#codepoint}% \fi \ifempty\m_math_stackers_text_top @@ -405,7 +422,7 @@ \advanceby\scratchwidth2\scratchhoffset % \ifcase#method\relax - \dostarttagged\t!mstackermid\empty + \dostarttaggednodetail\t!mstackermid \setbox\scratchboxthree\csname\??mathstackersalternative\p_alternative\endcsname \dostoptagged \fi @@ -439,7 +456,7 @@ \setbox\scratchboxthree\hpack{\lower\scratchdistance\box\scratchboxthree}% \fi \math_stackers_normalize_three - % analysis + % analysis: is this still ok here? \ifdim\htdp\scratchboxtwo>\zeropoint \ifdim\htdp\scratchboxone>\zeropoint \dosettagproperty\s!subtype\t!munderover @@ -495,10 +512,22 @@ \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_normal{#1}{\number#3}}% \fi} -\tolerant\protected\def\math_stackers_auto_normal#1#2#*[#3]#:#=#*#=% +% \tolerant\protected\def\math_stackers_auto_normal#1#2#*[#3]#:#*#=#*#=% +% {\begingroup +% \scratchcounter#2\relax +% \cdef\currentmathstackers{\ifparameter#3\or#3\else#1\fi}% +% \math_stackers_triplet\zerocount\currentmathstackers\scratchcounter{#4}{#5}% +% \endgroup} + +\tolerant\protected\def\math_stackers_auto_normal#1#2#*[#3]#:#*#=#*#=% {\begingroup \scratchcounter#2\relax - \edef\currentmathstackers{\ifparameter#3\or#3\else#1\fi}% + \cdef\currentmathstackers{#1}% + \ifhastok={#3}% + \setupcurrentmathstackers[#3]% + \orelse\ifparameter#3\or + \cdef\currentmathstackers{#3}% + \fi \math_stackers_triplet\zerocount\currentmathstackers\scratchcounter{#4}{#5}% \endgroup} @@ -526,9 +555,8 @@ \protected\def\math_stackers_start_group#category% {\begingroup - \edef\currentmathstackers{#category}% - \edef\p_limits{\mathstackersparameter\c!mathlimits}% - \ifx\p_limits\v!yes + \cdef\currentmathstackers{#category}% + \ifcstok{\mathstackersparameter\c!mathlimits}\v!yes \def\math_stackers_stop_group{\egroup\endgroup\ordlimits}% % \mathop\bgroup \mathaccent\bgroup @@ -545,7 +573,7 @@ \setupmathstackers[lt=\zeropoint,rt=\zeropoint,lb=\zeropoint,rb=\zeropoint] -\tolerant\protected\def\math_stackers_make_double#top#bottom#category#codepoint#codeextra#spacer[#settings]#:#text% +\tolerant\protected\def\math_stackers_make_double#top#bottom#category#codepoint#codeextra#spacer[#S#settings]#:#*#text% {\math_stackers_start_group{#category}% \c_math_stackers_top #top\relax \c_math_stackers_bottom #bottom\relax @@ -557,18 +585,9 @@ \mathstackersparameter\c!left\relax \dostarttagged\t!mstacker\currentmathstackers \ifmmode\math_atom_by_parameter\mathstackersparameter\else\dontleavehmode\fi - {\edef\m_math_stackers_text_middle {#text}% - % - \edef\p_offset {\mathstackersparameter\c!offset}% - \edef\p_location {\mathstackersparameter\c!location}% - \edef\p_strut {\mathstackersparameter\c!strut}% - \edef\p_alternative{\mathstackersparameter\c!alternative}% - % - \scratchleftoffset \zeropoint - \scratchrightoffset\zeropoint - % + {\math_stackers_reset_variables + \edef\m_math_stackers_text_middle{#text}% \math_stackers_check_unicode\c_math_stackers_codepoint - % \ifempty\math_stackers_middle \setbox\scratchboxthree\emptyhbox \else @@ -593,11 +612,12 @@ \d_math_stackers_offset_l\mathstackersparameter{lt}% \d_math_stackers_offset_r\mathstackersparameter{rt}% \fi + % \setbox\scratchboxtwo\csname\??mathstackersalternative\p_alternative\endcsname \setbox\scratchboxthree\hpack to \scratchwidth{\hss\box\scratchboxthree\hss}% % - \ifcase\c_math_stackers_extracode\else - \scratchunicode\c_math_stackers_extracode + \scratchunicode\c_math_stackers_extracode + \ifcase\scratchunicode\else % uses \scratchunicode \d_math_stackers_offset_l\mathstackersparameter{lb}% \d_math_stackers_offset_r\mathstackersparameter{rb}% \setbox\scratchboxone\csname\??mathstackersalternative\p_alternative\endcsname @@ -606,7 +626,7 @@ \math_stackers_normalize_three \math_stackers_get_max_width \math_stackers_set_max_width - % analysis + % analysis: is this still ok here? \ifcase\c_math_stackers_bottom \ifcase\c_math_stackers_top \dosettagproperty\s!subtype\t!munderover @@ -695,9 +715,9 @@ \permanent\tolerant\protected\def\definemathdouble[#category]#spacer[#command]#spacer[#topcode]#spacer[#bottomcode]% {\frozen\protected\defcsname#command\endcsname{\math_stackers_handle_direct\plusone\plusone{#category}{#topcode}{#bottomcode}}} -\permanent\tolerant\protected\def\mathover[#category]#spacer[#settings]#:#topcode#text% +\permanent\tolerant\protected\def\mathover[#category]#spacer[#S#settings]#:#*#topcode#*#text% {\begingroup - \edef\currentmathstackers{\ifparameter#category\or#category\else\v!top\fi}% + \cdef\currentmathstackers{\ifparameter#category\or#category\else\v!top\fi}% \ifparameter#settings\or \setupcurrentmathstackers[#settings]% \fi @@ -708,9 +728,9 @@ {#text}% \endgroup} -\permanent\tolerant\protected\def\mathunder[#category]#spacer[#settings]#:#bottomcode#text% +\permanent\tolerant\protected\def\mathunder[#category]#spacer[#S#settings]#:#*#bottomcode#*#text% {\begingroup - \edef\currentmathstackers{\ifparameter#category\or#category\else\v!bottom\fi}% + \cdef\currentmathstackers{\ifparameter#category\or#category\else\v!bottom\fi}% \ifparameter#settings\or \setupcurrentmathstackers[#settings]% \fi @@ -721,9 +741,9 @@ {#text}% \endgroup} -\permanent\tolerant\protected\def\mathdouble[#category]#spacer[#settings]#:#topcode#bottomcode#text% +\permanent\tolerant\protected\def\mathdouble[#category]#spacer[#settings]#:#*#topcode#*#bottomcode#*#text% {\begingroup - \edef\currentmathstackers{\ifparameter#category\or#category\else\v!both\fi}% + \cdef\currentmathstackers{\ifparameter#category\or#category\else\v!both\fi}% \ifparameter#settings\or \setupcurrentmathstackers[#settings]% \fi @@ -746,16 +766,7 @@ \mathstackersparameter\c!left\relax \dostarttagged\t!mstacker\currentmathstackers \ifmmode\math_atom_by_parameter\mathstackersparameter\else\dontleavehmode\fi - {\edef\currentmathstackers{#category}% - % - \edef\p_offset {\mathstackersparameter\c!offset}% - \edef\p_location {\mathstackersparameter\c!location}% - \edef\p_strut {\mathstackersparameter\c!strut}% - \edef\p_alternative{\mathstackersparameter\c!alternative}% - % - \scratchleftoffset \zeropoint - \scratchrightoffset\zeropoint - % + {\math_stackers_reset_variables \edef\m_math_stackers_text_middle{#text}% \math_stackers_check_unicode{#codepoint}% \scratchunicode#codepoint\relax @@ -803,7 +814,7 @@ \fi % \math_stackers_normalize_three - % analysis + % analysis: is this still ok here? \dosettagproperty\s!subtype\t!munderover % base \math_stackers_start_tagged_mid @@ -897,9 +908,10 @@ %D Here is a bonus macro that takes three texts. It can be used to get consistent %D mixed usage. -\permanent\tolerant\protected\def\mathtriplet[#category]#:#middletext#toptext#bottomtext% +\permanent\tolerant\protected\def\mathtriplet[#1]#:#*#=#*#=#*#=% {\begingroup - \math_stackers_triplet\plusone{\ifarguments#category\or#category\else\currentmathstackers\fi}{#middletext}{#toptext}{#bottomtext}% + \ifparameter#1\or\cdef\currentmathstackers{#1}\fi + \math_stackers_triplet\plusone\currentmathstackers{#2}{#3}{#4}% \endgroup} \permanent\tolerant\protected\def\definemathtriplet[#1]#*[#2]#*[#3]% category name default @@ -911,18 +923,18 @@ \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_triplet_yes[#1][#3]}% \fi} -\tolerant\protected\def\math_stackers_auto_triplet_yes[#1][#2]#*[#3]#:#=#*#=% [#2]% #2 gobble spaces +\tolerant\protected\def\math_stackers_auto_triplet_yes[#1][#2]#*[#3]#:#*#=#*#=% [#2]% #2 gobble spaces {\begingroup - \edef\currentmathstackers{#1}% + \cdef\currentmathstackers{#1}% \def \m_math_stackers_text_middle{#2}% - \ifarguments#3\or\edef\currentmathstackers{#3}\fi + \ifparameter#3\or\cdef\currentmathstackers{#3}\fi \math_stackers_triplet\plusone\currentmathstackers\m_math_stackers_text_middle{#4}{#5}% \endgroup} -\tolerant\protected\def\math_stackers_auto_triplet_nop[#1]#*[#2]#:#=#*#=#*#=% [#2]% #2 gobble spaces% +\tolerant\protected\def\math_stackers_auto_triplet_nop[#1]#*[#2]#:#*#=#*#=#*#=% [#2]% #2 gobble spaces% {\begingroup - \edef\currentmathstackers{#1}% - \ifarguments#2\or\edef\currentmathstackers{#2}\fi + \cdef\currentmathstackers{#1}% + \ifparameter#2\or\cdef\currentmathstackers{#2}\fi \math_stackers_triplet\plusone\currentmathstackers{#3}{#4}{#5}% \endgroup} @@ -1048,10 +1060,13 @@ \definemathextensible [\v!reverse] [xequal] ["003D] \definemathextensible [\v!reverse] [xleftarrow] ["2190] % ["27F5] \definemathextensible [\v!reverse] [xrightarrow] ["2192] % ["27F6] -\definemathextensible [\v!reverse] [xleftrightarrow] ["27F7] -\definemathextensible [\v!reverse] [xLeftarrow] ["27F8] -\definemathextensible [\v!reverse] [xRightarrow] ["27F9] -\definemathextensible [\v!reverse] [xLeftrightarrow] ["27FA] +\definemathextensible [\v!reverse] [xleftrightarrow] ["2194] % ["27F7] +\definemathextensible [\v!reverse] [xlongleftarrow] ["27F5] +\definemathextensible [\v!reverse] [xlongrightarrow] ["27F6] +\definemathextensible [\v!reverse] [xlongleftrightarrow] ["27F7] +\definemathextensible [\v!reverse] [xLeftarrow] ["27F8] % why not ["27D2] +\definemathextensible [\v!reverse] [xRightarrow] ["27F9] % why not ["27D0] +\definemathextensible [\v!reverse] [xLeftrightarrow] ["27FA] % why not ["27D4] \definemathextensible [\v!reverse] [xtwoheadleftarrow] ["219E] \definemathextensible [\v!reverse] [xtwoheadrightarrow] ["21A0] \definemathextensible [\v!reverse] [xmapsto] ["21A6] @@ -1071,7 +1086,7 @@ \definemathextensible [\v!mathematics] [mequal] ["003D] \definemathextensible [\v!mathematics] [mleftarrow] ["2190] % ["27F5] \definemathextensible [\v!mathematics] [mrightarrow] ["2192] % ["27F6] -\definemathextensible [\v!mathematics] [mleftrightarrow] ["2194] +\definemathextensible [\v!mathematics] [mleftrightarrow] ["2194] % ["27F7] \definemathextensible [\v!mathematics] [mLeftarrow] ["21D0] \definemathextensible [\v!mathematics] [mRightarrow] ["21D2] \definemathextensible [\v!mathematics] [mLeftrightarrow] ["21D4] @@ -1095,7 +1110,7 @@ \definemathextensible [\v!text] [tmapsto] ["21A6] \definemathextensible [\v!text] [tleftarrow] ["2190] % ["27F5] \definemathextensible [\v!text] [trightarrow] ["2192] % ["27F6] -\definemathextensible [\v!text] [tleftrightarrow] ["2194] +\definemathextensible [\v!text] [tleftrightarrow] ["2194] % ["27F7] \definemathextensible [\v!text] [tLeftarrow] ["21D0] \definemathextensible [\v!text] [tRightarrow] ["21D2] \definemathextensible [\v!text] [tLeftrightarrow] ["21D4] @@ -1201,20 +1216,6 @@ \definemathovertextextensible [\v!bothtext] [overbrackettext] ["23B4] \definemathundertextextensible [\v!bothtext] [underbrackettext] ["23B5] -%D Some bonus ones (for the moment here): - -\definemathstackers - [\v!chemistry] - [\c!offset=\v!max, - \c!left=\enspace, - \c!right=\enspace, - \c!hoffset=.5\mathemwidth] - -\definemathextensible [\v!chemistry] [cleftarrow] ["2190] -\definemathextensible [\v!chemistry] [crightarrow] ["2192] -\definemathextensible [\v!chemistry] [crightoverleftarrow] ["21C4] -\definemathextensible [\v!chemistry] [cleftoverrightarrow] ["21C6] - % \def\math_stackers_hacked_fill#1#2#3% % {\mathematics % {\begingroup @@ -1277,11 +1278,14 @@ \egroup \stopsetups -\def\mathfiller#1% - {\begingroup - \scratchunicode#1\relax - \adaptivebox[mathfiller][\c!alternative=#1]{\hss\strut\hss}% - \endgroup} +% \def\mathfiller#1% +% {\begingroup +% \scratchunicode#1\relax +% \adaptivebox[mathfiller][\c!alternative=#1]{\hss\strut\hss}% +% \endgroup} + +\permanent\protected\def\mathfiller#1% + {\adaptivebox[mathfiller][\c!alternative=#1]{\hss\strut\hss}} \permanent\tolerant\protected\def\defineextensiblefiller[#1]#*[#2]% {\frozen\instance\edefcsname#1\endcsname{\mathfiller{\number#2}}} @@ -1326,36 +1330,48 @@ \permanent\tolerant\protected\def\definemathunstacked[#1]#*[#2]#*[#3]% category name unicode {\ifarguments\or\or \frozen\protected\edefcsname#1\endcsname{\math_stackers_unstacked_normal\noexpand\currentmathstackers{\number#2}}% - \else + \or \frozen\protected\edefcsname#2\endcsname{\math_stackers_unstacked_normal{#1}{\number#3}}% \fi} \protected\def\math_stackers_unstacked_normal#category#codepoint% {\begingroup - \edef\currentmathstackers{#category}% - \edef\p_moffset{\mathstackersparameter\c!moffset}% - \ifconditional\indisplaymath - \ifempty\p_moffset \else - \ifmmode\mskip\else\hskip\fi\p_moffset\relax - \fi - \fi - \ifmmode\math_atom_by_parameter\mathstackersparameter\else\dontleavehmode\fi + \cdef\currentmathstackers{#category}% + \scratchdistance\zeropoint + \scratchcounter\ifchknum\mathstackersparameter\c!sample\or\mathstackersparameter\c!sample\else\zerocount\fi + \scratchunicode#codepoint\relax + \scratchclass\mathcodechecked{\mathstackersparameter\c!mathclass}\relax + \ifconditional\indisplaymath\ifcase\scratchcounter\orelse\ifnum\lastatomclass=\mathbegincode + \scratchdistance\dimexpr + \fontcharwd\mathstylefont\mathstyle\scratchcounter + -\fontcharwd\mathstylefont\mathstyle\scratchunicode + \relax + \fi\fi + \math_atom_by_parameter\mathstackersparameter {\usemathstackerscolorparameter\c!color - \Umathchar\zerocount\zerocount#codepoint}% - \ifconditional\indisplaymath - \ifempty\p_moffset \else - \ifmmode\mskip\else\hskip\fi\p_moffset\relax - \fi - \fi + \Umathchar\scratchclass\fam\scratchunicode\relax + \ifzeropt\scratchdistance\else + \kern\scratchdistance + \fi}% \endgroup} -\definemathstackers [\v!wide] [\c!moffset=\thickmuskip,\c!mathclass=\s!relation] +\definemathstackers + [\s!implication] + [\c!mathclass=\s!implication, + \c!sample="27FA] + +\definemathunstacked [\s!implication] [impliedby] ["27F8] +\definemathunstacked [\s!implication] [implies] ["27F9] +\definemathunstacked [\s!implication] [iff] ["27FA] % \ifandonlyif +\definemathunstacked [\s!implication] [impliesby] ["27FA] + +% This is a weird one: + +\definemathstackers + [\v!wide] + [\c!mathclass=\s!implication] -\definemathunstacked [\v!wide] [And] ["0026] % \mathrel{\;&\;} -\definemathunstacked [\v!wide] [impliedby] ["27F8] % \mathrel{\;\Longleftarrow\;} -\definemathunstacked [\v!wide] [implies] ["27F9] % \mathrel{\;\Longrightarrow\;} -\definemathunstacked [\v!wide] [iff] ["27FA] % \mathrel{\;\Longleftrightarrow\;} -\definemathunstacked [\v!wide] [impliesby] ["27FA] % \mathrel{\;\Longleftrightarrow\;} +\definemathunstacked [\v!wide] [And]["0026] % \mathrel{\;&\;} % New (an example of using \mathexheight): |