diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/math-arr.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/math-arr.mkiv | 401 |
1 files changed, 168 insertions, 233 deletions
diff --git a/Master/texmf-dist/tex/context/base/math-arr.mkiv b/Master/texmf-dist/tex/context/base/math-arr.mkiv index f18d6be2b27..6824c362e67 100644 --- a/Master/texmf-dist/tex/context/base/math-arr.mkiv +++ b/Master/texmf-dist/tex/context/base/math-arr.mkiv @@ -11,6 +11,10 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +%D We keep this file around as reference of his things were done in the +%D past. You can still load this module but it has been replaced by more +%D modern code. + \writestatus{loading}{ConTeXt Math Macros / Arrows} \unprotect @@ -30,156 +34,73 @@ % \mathord\rightarrow % $} % -% \def\leftarrowfill % brrr no longer in luated +% \def\leftarrowfill % brrr no longer in luatex % {$% % \mathsurround\zeropoint % \mathord\leftarrow % \mkern-7mu% % \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill % \mkern-7mu -% \smash-$ +% \smash-% % $} -\def\exmthfont#1{\mr} % \symbolicsizedfont#1\plusone{MathExtension}} +%D Extensible arrows are arrows that change their length according to the width of +%D the text to be placed above and below the arrow. +%D +%D Since we need to define a lot of arrows, we first define some helper macros. The +%D basic idea is to measure the width of the box to be placed above and below the +%D arrow, and make the \quote {body} of the arrow as long as the bigger of the two +%D widths. -\def\domthfrac#1#2#3#4#5#6#7% - {\begingroup - \mathsurround\zeropoint - \setbox0\hbox{$#1 #6$}% - \setbox2\hbox{$#1 #7$}% - \dimen0\wd0 - \ifdim\wd2>\dimen0 \dimen0\wd2 \fi - \setbox4\hbox to \dimen0{\leaders\hbox{#4}\hss#5}% - \mathord{\vcenter{{\offinterlineskip - \hbox to \dimen0{\hss\box0\hss}% - \kern \ht4% - \hbox to \dimen0{\hss\copy4\hss}% - \kern \ht4% - \hbox to \dimen0{\hss\box2\hss}}}}% - \endgroup} +\installcorenamespace{matharrowsettings} -\def\domthsqrt#1#2#3#4#5% - {\begingroup - \mathsurround\zeropoint - \setbox0\hbox{$#1 #5$}% - \dimen0=1.05\ht0 \advance\dimen0 1pt \ht0 \dimen0 - \dimen0=1.05\dp0 \advance\dimen0 1pt \dp0 \dimen0 - \dimen0\wd0 - \setbox4\hbox to \dimen0{\exmthfont#2\leaders\hbox{#3}\hfill#4}% - \delimitershortfall=0pt - \nulldelimiterspace=0pt - \setbox2\hbox{$\left\delimiter"0270370 \vrule height\ht0 depth \dp0 width0pt - \right.$}% - \mathord{\vcenter{\hbox{\copy2 - \rlap{\raise\dimexpr\ht2-\ht4\relax\copy4}\copy0}}}% - \endgroup} +\def\m_math_arrows_factor{1} +\def\m_math_arrows_extra {0} -\def\mthfrac#1#2#3#4#5{\mathchoice - {\domthfrac\displaystyle \textface {#1}{#2}{#3}{#4}{#5}}% - {\domthfrac\textstyle \textface {#1}{#2}{#3}{#4}{#5}}% - {\domthfrac\scriptstyle \scriptface {#1}{#2}{#3}{#4}{#5}}% - {\domthfrac\scriptscriptstyle\scriptscriptface{#1}{#2}{#3}{#4}{#5}}} - -\def\mthsqrt#1#2#3{\mathchoice - {\domthsqrt\displaystyle \textface {#1}{#2}{#3}}% - {\domthsqrt\textstyle \textface {#1}{#2}{#3}}% - {\domthsqrt\scriptstyle \textface {#1}{#2}{#3}}% - {\domthsqrt\scriptscriptstyle\textface {#1}{#2}{#3}}} - -% temp here - -%D We next define extensible arrows. Extensible arrows are arrows that -%D change their length according to the width of the text to be placed -%D above and below the arrow. Since we need to define a lot of arrows, -%D we first define some helper macros. The basic idea is to measure -%D the width of the box to be placed above and below the arrow, and -%D make the \quotation{body} of the arrow as long as the bigger of the -%D two widths. - -\def\mtharrfactor{1} -\def\mtharrextra {0} - -% \def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel -% {\begingroup -% \def\mtharrfactor{1}% -% \def\mtharrextra {0}% -% \processaction[#1] % will be sped up -% [ \v!none=>\def\mtharrfactor{0}, -% \v!small=>\def\mtharrextra{10}, -% \v!medium=>\def\mtharrextra{15}, -% \v!big=>\def\mtharrextra{20}, -% \v!normal=>, -% \v!default=>, -% \v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]% -% \mathsurround\zeropoint -% \muskip0=\thirdoffourarguments #2mu -% \muskip2=\fourthoffourarguments #2mu -% \muskip4=\firstoffourarguments #2mu -% \muskip6=\secondoffourarguments #2mu -% \muskip0=\mtharrfactor\muskip0 \advance\muskip0 \mtharrextra mu -% \muskip2=\mtharrfactor\muskip2 \advance\muskip2 \mtharrextra mu -% \setbox0\hbox{$\scriptstyle -% \mkern\muskip4\relax -% \mkern\muskip0\relax -% #5\relax -% \mkern\muskip2\relax -% \mkern\muskip6\relax -% $}% -% \setbox4\hbox{#3\displaystyle}% -% \dimen0\wd0 -% \ifdim\wd4>\dimen0 \dimen0\wd4 \fi -% \setbox2\hbox{$\scriptstyle -% \mkern\muskip4\relax -% \mkern\muskip0\relax -% #4\relax -% \mkern\muskip2\relax -% \mkern\muskip6\relax -% $}% -% \ifdim\wd2>\dimen0 \dimen0\wd2 \fi -% \setbox4\hbox to \dimen0{#3\displaystyle}% -% \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits\normalsuperscript{\box0}\normalsubscript{\box2}}% -% \endgroup} - -\def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel +\setvalue{\??matharrowsettings\v!none }{\def\m_math_arrows_factor{0}} +\setvalue{\??matharrowsettings\v!small }{\def\m_math_arrows_extra{10}} +\setvalue{\??matharrowsettings\v!medium }{\def\m_math_arrows_extra{15}} +\setvalue{\??matharrowsettings\v!big }{\def\m_math_arrows_extra{20}} +\setvalue{\??matharrowsettings\v!normal }{} +\setvalue{\??matharrowsettings }{} +\setvalue{\??matharrowsettings\s!unknown}{\doifnumberelse\p_math_spacing{\let\m_math_arrows_extra\p_math_spacing}\donothing} + +\def\math_arrows_construct#1#2#3#4#5% hm, looks like we do a double mathrel (a bit cleaned up .. needs checking) {\begingroup - \def\mtharrfactor{1}% - \def\mtharrextra {0}% - \processaction[#1] % will be sped up - [ \v!none=>\def\mtharrfactor{0}, - \v!small=>\def\mtharrextra{10}, - \v!medium=>\def\mtharrextra{15}, - \v!big=>\def\mtharrextra{20}, - \v!normal=>, - \v!default=>, - \v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]% + \def\m_math_arrows_factor{1}% + \def\m_math_arrows_extra {0}% + \edef\p_math_spacing{#1}% + \csname\??matharrowsettings + \ifcsname\??matharrowsettings\p_math_spacing\endcsname\p_math_spacing\else\s!unknown\fi + \endcsname \mathsurround\zeropoint - \muskip0=\thirdoffourarguments #2mu - \muskip2=\fourthoffourarguments #2mu - \muskip0=\mtharrfactor\muskip0 - \muskip2=\mtharrfactor\muskip2 - \advance\muskip0 \mtharrextra mu - \advance\muskip2 \mtharrextra mu - \advance\muskip0 \firstoffourarguments #2mu - \advance\muskip2 \secondoffourarguments #2mu + \muskip0=\muexpr\m_math_arrows_factor\muexpr\thirdoffourarguments #2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\firstoffourarguments #2\onemuskip\relax + \muskip2=\muexpr\m_math_arrows_factor\muexpr\fourthoffourarguments#2\onemuskip\relax+\m_math_arrows_extra\onemuskip+\secondoffourarguments#2\onemuskip\relax \setbox0\hbox{$\scriptstyle \mkern\muskip0\relax #5\relax \mkern\muskip2\relax $}% - \setbox4\hbox{#3\displaystyle}% - \dimen0\wd0 - \ifdim\wd4>\dimen0 \dimen0\wd4 \fi \setbox2\hbox{$\scriptstyle \mkern\muskip0\relax #4\relax \mkern\muskip2\relax $}% - \ifdim\wd2>\dimen0 \dimen0\wd2 \fi - \setbox4\hbox to \dimen0{#3\displaystyle}% + \setbox4\hbox{#3\displaystyle}% + \dimen0\wd0\relax + \ifdim\wd2>\dimen0 + \dimen0\wd2\relax + \fi + \ifdim\wd4>\dimen0 + \dimen0\wd4\relax + \fi + \ifdim\wd4=\dimen0\else + \setbox4\hbox to \dimen0{#3\displaystyle}% + \fi \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits\normalsuperscript{\box0}\normalsubscript{\box2}}% \endgroup} -\let\domthxarrsingle\domthxarr +\let\math_arrows_construct_single\math_arrows_construct %D There are some arrows which are created by stacking two arrows. The next %D macro helps in defining such \quotation{double arrows}. @@ -194,29 +115,27 @@ % \chemical{SO_2} % \stopchemicalformula -\def\domthxarrdouble#1#2#3#4#5#6#7% opt l r sp rs top bot +\def\math_arrows_construct_double#1#2#3#4#5#6#7% opt l r sp rs top bot {\mathrel - {\scratchdimen.32ex\relax % was .22, todo: make configurable - \setbox0\hbox{$\domthxarr{#1}{#2}{#4}{\phantom{#6}}{#7}$}% - \setbox2\hbox{$\domthxarr{#1}{#3}{#5}{#6}{\phantom{#7}}$}% + {\scratchdimen.32\exheight\relax % was .22, todo: make configurable + \setbox0\hbox{$\math_arrows_construct{#1}{#2}{#4}{\phantom{#6}}{#7}$}% + \setbox2\hbox{$\math_arrows_construct{#1}{#3}{#5}{#6}{\phantom{#7}}$}% \raise\scratchdimen\box0 \kern-\wd2 \lower\scratchdimen\box2}} %D \macros{definematharrow} %D -%D Macro for defining new arrows. We can define two types of -%D arrows|<|single arrows and double arrows. Single arrows are defined -%D as +%D Macro for defining new arrows. We can define two types of arrows|<|single arrows +%D and double arrows. Single arrows are defined as %D %D \starttyping %D \definematharrow [xrightarrow] [0359] [\rightarrowfill] %D \stoptyping %D -%D The first argument is the name of the arrow (\tex{xrightarrow} in -%D this case.) The second argument consists of a set of 4 numbers and -%D specify the spacing correction in math units~\type{mu}. These -%D numbers define: +%D The first argument is the name of the arrow (\tex {xrightarrow} in this case.) The +%D second argument consists of a set of 4 numbers and specify the spacing correction +%D in math units~\type {mu}. These numbers define: %D %D \startlines %D 1st number: arrow||tip correction @@ -225,9 +144,9 @@ %D 4th number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra}) %D \stoplines %D -%D The third argument is the name of the extensible fill. The third -%D argument is optional when the arrow is redefined later (this is -%D useful for font specific tweaking of the skips.) For example, +%D The third argument is the name of the extensible fill. The third argument is optional +%D when the arrow is redefined later (this is useful for font specific tweaking of the +%D skips.) For example, %D %D \startbuffer %D \math{\xrightarrow{above}} @@ -245,78 +164,80 @@ %D [\rightharpoonupfill,\leftharpoondownfill] %D \stoptyping %D -%D The second and the third set of arguments consist of comma -%D separated values. The first element of the second argument -%D (\type{3095}) corresponds to the spacing correction of top arrow -%D fill (\tex{rightarrowupfill}). Similarly, \type{0359} corresponds -%D to bottom arrow fill \tex{leftharpoondownfill}). Stacking them on -%D top of each other we get $\xrightleftharpoons[big]{above}{below}$. -%D The following math arrows are defined +%D The second and the third set of arguments consist of comma separated values. The +%D first element of the second argument (\type {3095}) corresponds to the spacing +%D correction of top arrow fill (\tex{rightarrowupfill}). Similarly, \type {0359} +%D corresponds to bottom arrow fill \tex {leftharpoondownfill}). Stacking them on +%D top of each other we get $\xrightleftharpoons [big] {above} {below}$. The +%D following math arrows are defined %D %D \placetable[none]{}{\starttable[|l|m|] -%D \NC \tex{xrightarrow } \NC \xrightarrow [big] \NC \NR -%D \NC \tex{xleftarrow } \NC \xleftarrow [big] \NC \NR -%D \NC \tex{xequal } \NC \xequal [big] \NC \NR -%D \NC \tex{xRightarrow } \NC \xRightarrow [big] \NC \NR -%D \NC \tex{xLeftarrow } \NC \xLeftarrow [big] \NC \NR -%D \NC \tex{xLeftrightarrow } \NC \xLeftrightarrow [big] \NC \NR -%D \NC \tex{xleftrightarrow } \NC \xleftrightarrow [big] \NC \NR -%D \NC \tex{xmapsto } \NC \xmapsto [big] \NC \NR -%D \NC \tex{xtwoheadrightarrow } \NC \xtwoheadrightarrow [big] \NC \NR -%D \NC \tex{xtwoheadleftarrow } \NC \xtwoheadleftarrow [big] \NC \NR -%D \NC \tex{xrightharpoondown } \NC \xrightharpoondown [big] \NC \NR -%D \NC \tex{xrightharpoonup } \NC \xrightharpoonup [big] \NC \NR -%D \NC \tex{xleftharpoondown } \NC \xleftharpoondown [big] \NC \NR -%D \NC \tex{xleftharpoonup } \NC \xleftharpoonup [big] \NC \NR -%D \NC \tex{xhookleftarrow } \NC \xhookleftarrow [big] \NC \NR -%D \NC \tex{xhookrightarrow } \NC \xhookrightarrow [big] \NC \NR -%D \NC \tex{xleftrightharpoons } \NC \xleftrightharpoons [big] \NC \NR -%D \NC \tex{xrightleftharpoons } \NC \xrightleftharpoons [big] \NC \NR +%D \NC \tex{xrightarrow} \NC \xrightarrow [big] \NC \NR +%D \NC \tex{xleftarrow} \NC \xleftarrow [big] \NC \NR +%D \NC \tex{xequal} \NC \xequal [big] \NC \NR +%D \NC \tex{xRightarrow} \NC \xRightarrow [big] \NC \NR +%D \NC \tex{xLeftarrow} \NC \xLeftarrow [big] \NC \NR +%D \NC \tex{xLeftrightarrow} \NC \xLeftrightarrow [big] \NC \NR +%D \NC \tex{xleftrightarrow} \NC \xleftrightarrow [big] \NC \NR +%D \NC \tex{xmapsto} \NC \xmapsto [big] \NC \NR +%D \NC \tex{xtwoheadrightarrow} \NC \xtwoheadrightarrow [big] \NC \NR +%D \NC \tex{xtwoheadleftarrow} \NC \xtwoheadleftarrow [big] \NC \NR +%D \NC \tex{xrightharpoondown} \NC \xrightharpoondown [big] \NC \NR +%D \NC \tex{xrightharpoonup} \NC \xrightharpoonup [big] \NC \NR +%D \NC \tex{xleftharpoondown} \NC \xleftharpoondown [big] \NC \NR +%D \NC \tex{xleftharpoonup} \NC \xleftharpoonup [big] \NC \NR +%D \NC \tex{xhookleftarrow} \NC \xhookleftarrow [big] \NC \NR +%D \NC \tex{xhookrightarrow} \NC \xhookrightarrow [big] \NC \NR +%D \NC \tex{xleftrightharpoons} \NC \xleftrightharpoons [big] \NC \NR +%D \NC \tex{xrightleftharpoons} \NC \xrightleftharpoons [big] \NC \NR %D \stoptable} +%D If needed this can be optimized (i.e. we can preexpand using \type +%D {\docheckedpair}). + \unexpanded\def\definematharrow - {\doquadrupleargument\dodefinematharrow} + {\doquadrupleargument\math_arrows_define} -\def\dodefinematharrow[#1][#2][#3][#4]% name type[none|both] template command +\def\math_arrows_define[#1][#2][#3][#4]% name type[none|both] template command {\iffourthargument - \executeifdefined{dodefine#2arrow}\gobblethreearguments{#1}{#3}{#4}% + \executeifdefined{math_arrows_define_#2}\gobblethreearguments{#1}{#3}{#4}% \else\ifthirdargument - \dodefinebotharrow{#1}{#2}{#3}% + \math_arrows_define_both{#1}{#2}{#3}% \else\ifsecondargument - \redefinebotharrow{#1}{#2}{#3}% + \math_arrows_define_both_again{#1}{#2}{#3}% \fi\fi\fi} -\def\redefinebotharrow#1#2#3% real dirty, this overload! - {\doifdefined{#1} - {\pushmacro\dohandlemtharrow - \def\dohandlemtharrow[##1][##2]{\setuvalue{#1}{\dohandlemtharrow[#2][##2]}}% - % == \def\dohandlemtharrow[##1][##2]{\dodefinebotharrow{#1}{#2}{##2}}% - \getvalue{#1}% - \popmacro\dohandlemtharrow}} +\def\math_arrows_define_both_again#1#2#3% real dirty, this overload! + {\ifcsname#1\endcsname + \pushmacro\math_arrows_do + \def\math_arrows_do[##1][##2]{\setuvalue{#1}{\math_arrows_do[#2][##2]}}% + \getvalue{#1}% + \popmacro\math_arrows_do + \fi} -\def\dodefinebotharrow#1#2#3% - {\setuvalue{#1}{\dohandlemtharrow[#2][#3]}} +\def\math_arrows_define_both#1#2#3% + {\setuvalue{#1}{\math_arrows_do[#2][#3]}} -\def\dohandlemtharrow - {\dotripleempty\doxmtharrow} +\unexpanded\def\math_arrows_do + {\doquadrupleempty\math_arrows_handle} -\def\doxmtharrow[#1][#2][#3]% #3 == optional arg - {\def\dodoxmtharrow{\dododoxmtharrow[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2} - \dodoublegroupempty\dodoxmtharrow} +\def\math_arrows_handle[#1][#2][#3][#4]% #3 == optional arg .. \empty can be just 'empty' [#4] gobbles spaces + {\def\math_arrows_handle_indeed{\math_arrows_handle_finalize[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2} + \dodoublegroupempty\math_arrows_handle_indeed} -\def\dododoxmtharrow[#1,#2,#3][#4,#5,#6][#7]#8#9% [3] is the optional arg +\def\math_arrows_handle_finalize[#1,#2,#3][#4,#5,#6][#7]#8#9% [#7] is the optional arg {\edef\!!stringa{#2}% \ifx\!!stringa\empty \ifsecondargument - \mathrel{\domthxarrsingle{#7}{#1}{#4}{#8}{#9}}% + \mathrel{\math_arrows_construct_single{#7}{#1}{#4}{#8}{#9}}% \else - \mathrel{\domthxarrsingle{#7}{#1}{#4}{}{#8}}% + \mathrel{\math_arrows_construct_single{#7}{#1}{#4}{}{#8}}% \fi \else \ifsecondargument - \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{#8}{#9}}% + \mathrel{\math_arrows_construct_double{#7}{#1}{#2}{#4}{#5}{#8}{#9}}% \else - \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{}{#8}}% + \mathrel{\math_arrows_construct_double{#7}{#1}{#2}{#4}{#5}{}{#8}}% \fi \fi} @@ -324,40 +245,38 @@ %D \macros{mtharrowfill,defaultmtharrowfill} %D -%D To extend the arrows we need to define a \quotation{math arrow -%D fill}. This command takes 8 arguments: the first four correspond -%D the second argument of \tex{definematharrow} explained above. The -%D other three specify the tail, body and head of the arrow. The last -%D argument specifies the math-mode in which the arrow is drawn. -%D \tex{defaultmtharrowfill} has values tweaked to match Latin Modern -%D fonts. For fonts that are significantly different (e.g. cows) a +%D To extend the arrows we need to define a \quotation {math arrow fill}. This +%D command takes 8 arguments: the first four correspond the second argument of +%D \tex {definematharrow} explained above. The other three specify the tail, +%D body and head of the arrow. The last argument specifies the math-mode in which +%D the arrow is drawn. \tex {defaultmtharrowfill} has values tweaked to match +%D Latin Modern fonts. For fonts that are significantly different (e.g. cows) a %D different set of values need to be determined. \def\mtharrowfill#1#2#3#4#5#6#7#8% - {$\mathsurround 0pt - \thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip + {$\mathsurround\zeropoint + \thickmuskip\zeromuskip\medmuskip\thickmuskip\thinmuskip\thickmuskip \relax#8#5% - \mkern-#1mu - \cleaders\hbox{$#8\mkern -#2mu#6\mkern -#3mu$}\hfill - \mkern-#4mu#7$} + \mkern-#1\onemuskip + \cleaders\hbox{$#8\mkern-#2\onemuskip#6\mkern-#3\onemuskip$}\hfill + \mkern-#4\onemuskip#7$} \def\defaultmtharrowfill{\mtharrowfill 7227} -%D We now define some arrow fills that will be used for defining the -%D arrows. Plain \TEX\ already defines \tex{leftarrowfill} and -%D \tex{rightarrowfill}. The \tex{defaultmtharrowfill} command defines an -%D arrowfill that takes an argument (so that it can also be used -%D with over and under arrows). However the Plain \TEX\ definitions of -%D \tex{leftarrowfill} and \tex{rightarrowfill} do not take this extra -%D argument. To be backward compatible with Plain \TEX, we define two -%D arrowfills: \tex{specrightarrowfill} which takes an extra argument, and -%D \tex{rightarrowfill} which does not. +%D We now define some arrow fills that will be used for defining the arrows. Plain +%D \TEX\ already defines \tex {leftarrowfill} and \tex {rightarrowfill}. The \tex +%D {defaultmtharrowfill} command defines an arrowfill that takes an argument (so +%D that it can also be used with over and under arrows). However the Plain \TEX\ +%D definitions of \tex {leftarrowfill} and \tex {rightarrowfill} do not take this +%D extra argument. To be backward compatible with Plain \TEX, we define two +%D arrowfills: \tex {specrightarrowfill} which takes an extra argument, and \tex +%D {rightarrowfill} which does not. \unexpanded\def\specrightarrowfill {\defaultmtharrowfill \relbar \relbar \rightarrow} \unexpanded\def\specleftarrowfill {\defaultmtharrowfill \leftarrow \relbar \relbar} -\unexpanded\def\rightarrowfill {\specrightarrowfill \textstyle} -\unexpanded\def\leftarrowfill {\specleftarrowfill \textstyle} +\unexpanded\def\rightarrowfill {\specrightarrowfill \textstyle} +\unexpanded\def\leftarrowfill {\specleftarrowfill \textstyle} \unexpanded\def\equalfill {\defaultmtharrowfill \Relbar \Relbar \Relbar} \unexpanded\def\Rightarrowfill {\defaultmtharrowfill \Relbar \Relbar \Rightarrow} @@ -382,10 +301,27 @@ \unexpanded\def\doublebond{{\xequal}} \unexpanded\def\triplebond{{\xtriplerel}} -%D Now we define most commonly used arrows. These include arrows -%D defined in \filename{amsmath.sty}, \filename{extarrows.sty}, -%D \filename{extpfel.sty} and \filename{mathtools.sty} packages for -%D \LATEX\ (plus a few more). +%D A bit or arrow juggling: +%D +%D \startbuffer +%D \hbox to \hsize{\rightoverleftarrowfill} +%D \stopbuffer +%D +%D \typebuffer \blank \getbuffer \blank + +\unexpanded\def\rightoverleftarrowfill + {\specrightoverleftarrowfill} + +\unexpanded\def\specrightoverleftarrowfill + {\defaultmtharrowfill + \ctxdoublearrowfillleftend + \ctxdoublearrowfillmiddlepart + \ctxdoublearrowfillrightend + \textstyle} + +%D Now we define most commonly used arrows. These include arrows defined in \filename +%D {amsmath.sty}, \filename {extarrows.sty}, \filename {extpfel.sty} and \filename +%D {mathtools.sty} packages for \LATEX\ (plus a few more). \definematharrow [xrightarrow] [0359] [\specrightarrowfill] \definematharrow [xleftarrow] [3095] [\specleftarrowfill] @@ -427,27 +363,26 @@ %D \macros{definemathoverarrow,defineunderarrow} %D -%D These macros for define math-overarrows are adapted from -%D \filename{amsmath.sty} +%D These macros for define math-overarrows are adapted from \filename {amsmath.sty} \unexpanded\def\definemathoverarrow - {\dotripleargument\dodefinemathoverarrow} + {\dotripleargument\math_arrows_define_over} -\def\dodefinemathoverarrow[#1][#2][#3]% +\def\math_arrows_define_over[#1][#2][#3]% {\ifthirdargument - \setuvalue{#1}{\dohandlemathoverarrow[#2][#3]}% + \setuvalue{#1}{\math_arrows_over_handle[#2][#3]}% \else - \setuvalue{#1}{\dohandlemathoverarrow[\zeropoint][#2]}% + \setuvalue{#1}{\math_arrows_over_handle[\zeropoint][#2]}% \fi} -\def\dohandlemathoverarrow[#1][#2]% - {\mathpalette{\dodohandlemathoverarrow{#1}{#2}}} +\def\math_arrows_over_handle[#1][#2]% + {\mathpalette{\math_arrows_over_handle_indeed{#1}{#2}}} -%D Note: \filename{math-pln.tex} has \type{\kern-\onepoint} and -%D \filename{amsmath.sty} does not. We keep the kern amount -%D configurable. This is useful for harpoons. +%D Note: \filename {math-pln.tex} has \type {\kern-\onepoint} and \filename +%D {amsmath.sty} does not. We keep the kern amount configurable. This is useful +%D for harpoons. -\def\dodohandlemathoverarrow#1#2#3#4% +\def\math_arrows_over_handle_indeed#1#2#3#4% {\vbox{\ialign{##\crcr #2#3\crcr \noalign{\kern#1\nointerlineskip}% @@ -456,21 +391,21 @@ %D Now the under arrows \unexpanded\def\definemathunderarrow - {\dotripleargument\dodefinemathunderarrow} + {\dotripleargument\math_arrows_define_under} %D For underarrows the default kern is 0.3ex -\def\dodefinemathunderarrow[#1][#2][#3]% +\def\math_arrows_define_under[#1][#2][#3]% {\ifthirdargument - \setuvalue{#1}{\dohandlemathunderarrow[#2][#3]}% + \setuvalue{#1}{\math_arrows_under_handle[#2][#3]}% \else - \setuvalue{#1}{\dohandlemathunderarrow[0.3ex][#2]}% + \setuvalue{#1}{\math_arrows_under_handle[0.3ex][#2]}% \fi} -\def\dohandlemathunderarrow[#1][#2]% - {\mathpalette{\dodohandlemathunderarrow{#1}{#2}}} +\def\math_arrows_under_handle[#1][#2]% + {\mathpalette{\math_arrows_under_handle_indeed{#1}{#2}}} -\def\dodohandlemathunderarrow#1#2#3#4% +\def\math_arrows_under_handle_indeed#1#2#3#4% {\vtop{\ialign{##\crcr $\mathsurround\zeropoint\hfil#3#4\hfil$\crcr \noalign{\nointerlineskip\kern#1}% |