From 82c674fdcf5bcff4ad0dc0936d638fc729145616 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Wed, 6 Jul 2022 22:05:18 +0200 Subject: 2022-07-06 21:35:00 --- tex/context/base/mkxl/math-fen.mkxl | 88 +++++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 24 deletions(-) (limited to 'tex/context/base/mkxl/math-fen.mkxl') diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl index e1a648ba4..5725c5ee1 100644 --- a/tex/context/base/mkxl/math-fen.mkxl +++ b/tex/context/base/mkxl/math-fen.mkxl @@ -58,6 +58,9 @@ \c!color=, \c!command=, \c!mathclass=, + \c!leftclass=\mathopencode, + \c!rightclass=\mathclosecode, + \c!middleclass=\mathmiddlecode, \c!leftsource=\zerocount, \c!middlesource=\zerocount, \c!rightsource=\mathfenceparameter\c!source, @@ -141,14 +144,17 @@ \s!axis \s!exact} +\newconstant \c_math_fenced_class + \def\math_fenced_common#1#2#3#4% \Uwhatever class symbol source - {\ifconditional\c_math_fenced_sized + {\c_math_fenced_class\mathfenceparameter#2\relax + \ifconditional\c_math_fenced_sized \orelse\ifconditional\c_math_fenced_level_mode - \ifnum#2=\mathopencode + \ifnum\c_math_fenced_class=\mathopencode % \hpack{\infofont}% \integerdef\c_math_fenced_stack\c_attr_mathsize \push_macro_c_math_fenced_stack - \orelse\ifnum#2=\mathclosecode + \orelse\ifnum\c_math_fenced_class=\mathclosecode \pop_macro_c_math_fenced_stack \c_attr_mathsize\c_math_fenced_stack % \hpack{\infofont}% @@ -156,7 +162,7 @@ \fi \edef\p_fence{#3}% \ifempty\p_fence - #1.\relax + \ifnum\c_math_fenced_class=\mathmiddlecode\else#1.\relax\fi \else \edef\p_factor {\mathfenceparameter\c!factor}% \edef\p_size {\mathfenceparameter\c!size}% @@ -170,6 +176,9 @@ \Uvextensible \else #1% \Uleft \Umiddle \Uleft + \ifx#1\Umiddle + nooverflow % + \fi \fi \orelse\ifx\p_factor\v!auto \ifconditional\c_math_fenced_level_mode @@ -190,8 +199,10 @@ \s!class \ifx\p_fence\v!none \mathghostcode + \orelse\ifempty\p_mathclass + \c_math_fenced_class \else - \ifempty\p_mathclass#2\else\p_mathclass\fi + \p_mathclass \fi \s!source \numexpr\namedboxanchor{\mathfenceparameter#4}\relax @@ -209,15 +220,27 @@ \def\math_fenced_left {\advance\c_math_fence_nesting\plusone - \math_fenced_common\Uleft\mathopencode\math_fenced_p_left\c!leftsource} - -\def\math_fenced_middle - {\math_fenced_common\Umiddle\mathmiddlecode\math_fenced_p_middle\c!middlesource} + \math_fenced_common\Uleft\c!leftclass\math_fenced_p_left\c!leftsource} \def\math_fenced_right - {\math_fenced_common\Uright\mathclosecode\math_fenced_p_right\c!rightsource + {\math_fenced_common\Uright\c!rightclass\math_fenced_p_right\c!rightsource \advance\c_math_fence_nesting\minusone} +\def\math_fenced_middle_normal + {\math_fenced_common\Umiddle\c!middleclass\math_fenced_p_middle\c!middlesource} + +\def\math_fenced_middle_sized + {\settrue\c_math_fenced_sized + \math_fenced_middle_normal + \setfalse\c_math_fenced_sized} + +\appendtoks + \let\math_fenced_middle\math_fenced_middle_normal + \enforced\let\fence\math_fenced_direct +\to \everymathatom + +\let\math_fenced_middle\math_fenced_middle_normal + \def\math_fenced_p_left {\ifconditional\c_math_fenced_mirror \ifconditional\c_math_right_to_left @@ -246,9 +269,12 @@ \aliased\let\fence \relax \aliased\let\fenced\relax +\protected\def\math_fenced_middle_common + {\math_fenced_middle} % redefined inside atom + \protected\def\math_fenced_fenced_common {\startusemathstyleparameter\mathfenceparameter\c!mathstyle - \enforced\let\fence\math_fenced_middle} + \enforced\let\fence\math_fenced_middle_common} \protected\def\math_fenced_fenced_start#1% {\begingroup @@ -299,6 +325,8 @@ \settrue\c_math_fenced_sized \math_fenced_left \setfalse\c_math_fenced_sized + \let\math_fenced_middle\math_fenced_middle_sized + % \enforced\let\middle\math_fenced_middle_sized #1% \settrue\c_math_fenced_sized \math_fenced_right @@ -343,6 +371,18 @@ \fi \endgroup} +% for torture testing mikael sundqvist: +% +% \setupmathfence[brace][middle=124] +% +% \im{\fenced[brace] {\vec{x}\in\reals^3\middle\vert \vec{x}\neq \vec{0}}} +% \im{\fenced[brace] {\vec{x}\in\reals^3\mid \vec{x}\neq \vec{0}}} +% \im{\fenced[brace][size=0]{\vec{x}\in\reals^3\fence \vec{x}\neq \vec{0}}} + +\aliased\let\normalmid\mid + +\protected\def\mid{\ifcase\c_math_fence_nesting\normalmid\else\middle\vert\fi} + % cases are defined in math-ali: \definemathfence [cases] [\c!left="007B,\c!right=\v!none] @@ -529,15 +569,15 @@ \definemathfence [leftopeninterval] [interval] [\c!left="2997,\c!right="2997] \definemathfence [rightopeninterval] [interval] [\c!left="2998,\c!right="2998] -\immutable\protected\def\Linterval {\math_fenced_fenced_start{interval}} -\immutable\protected\def\Lointerval {\math_fenced_fenced_start{openinterval}} -\immutable\protected\def\Llointerval {\math_fenced_fenced_start{leftopeninterval}} -\immutable\protected\def\Lrointerval {\math_fenced_fenced_start{rightopeninterval}} +\immutable\protected\def\Linterval {\math_fenced_fenced_start{interval}} +\immutable\protected\def\Lointerval {\math_fenced_fenced_start{openinterval}} +\immutable\protected\def\Llointerval {\math_fenced_fenced_start{leftopeninterval}} +\immutable\protected\def\Lrointerval {\math_fenced_fenced_start{rightopeninterval}} -\immutable\protected\def\Rinterval {\math_fenced_fenced_stop {interval}} -\immutable\protected\def\Rointerval {\math_fenced_fenced_stop {openinterval}} -\immutable\protected\def\Rlointerval {\math_fenced_fenced_stop {leftopeninterval}} -\immutable\protected\def\Rrointerval {\math_fenced_fenced_stop {rightopeninterval}} +\immutable\protected\def\Rinterval {\math_fenced_fenced_stop {interval}} +\immutable\protected\def\Rointerval {\math_fenced_fenced_stop {openinterval}} +\immutable\protected\def\Rlointerval {\math_fenced_fenced_stop {leftopeninterval}} +\immutable\protected\def\Rrointerval {\math_fenced_fenced_stop {rightopeninterval}} % \startformula % \left{ \frac{1}{a} \right} @@ -570,9 +610,9 @@ {\letcsname\??mathleft \normalmeaningless#1\endcsname#2% \letcsname\??mathright\normalmeaningless#3\endcsname#4} -\def\math_unknown_left {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalleft \nexttoken\fi} -\def\math_unknown_right {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalright \nexttoken\fi} -\def\math_unknown_middle{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalmiddle\nexttoken\fi} +\def\math_unknown_left {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\Uleft \nexttoken\fi} +\def\math_unknown_right {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\Uright \nexttoken\fi} +\def\math_unknown_middle{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\Umiddle nooverflow \nexttoken\fi} \letcsname\??mathleft \s!unknown\endcsname\math_unknown_left \letcsname\??mathright \s!unknown\endcsname\math_unknown_right @@ -805,7 +845,7 @@ \definemathcommand [Bigg] {\choosemathbig4} \definemathcommand [bigl] [\s!open] [one] {\big} -\definemathcommand [bigm] [\s!relation] [one] {\big} +\definemathcommand [bigm] [\s!relation] [one] {\big} % why not just middle \definemathcommand [bigr] [\s!close] [one] {\big} \definemathcommand [Bigl] [\s!open] [one] {\Big} \definemathcommand [Bigm] [\s!relation] [one] {\Big} @@ -847,7 +887,7 @@ \protected\def\math_fences_auto_left #1{\c_attr_mathautofence\plusone #1\c_attr_mathautofence\attributeunsetvalue} \protected\def\math_fences_auto_right #1{\c_attr_mathautofence\plustwo #1\c_attr_mathautofence\attributeunsetvalue} -\protected\def\math_fences_auto_middle#1{\c_attr_mathautofence\plusthree#1\c_attr_mathautofence\attributeunsetvalue} +\protected\def\math_fences_auto_middle#1{\c_attr_mathautofence\plusthree#1\c_attr_mathautofence\attributeunsetvalue nooverflow } \protected\def\math_fences_auto_both #1{\c_attr_mathautofence\plusfour #1\c_attr_mathautofence\attributeunsetvalue} \permanent\let\autofenceopen \math_fences_auto_left % for testing -- cgit v1.2.3