diff options
Diffstat (limited to 'tex/context/base/mkxl/math-fen.mkxl')
-rw-r--r-- | tex/context/base/mkxl/math-fen.mkxl | 389 |
1 files changed, 224 insertions, 165 deletions
diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl index 8f2a4d405..aeed32fcf 100644 --- a/tex/context/base/mkxl/math-fen.mkxl +++ b/tex/context/base/mkxl/math-fen.mkxl @@ -130,10 +130,17 @@ \s!axis \s!exact} +% \startTEXpage[offset=1dk] +% \dm { \fenced[brace][middle="7C] { \frac{p}{q} \fence p,q \in \naturalnumbers} }\par +% \dm { \fenced[brace][middle=`|] { \frac{p}{q} \fence p,q \in \naturalnumbers} }\par +% \dm { \fenced[brace][middle=124] { \frac{p}{q} \fence p,q \in \naturalnumbers} }\par +% \dm { \fenced[brace][middle=|] { \frac{p}{q} \fence p,q \in \naturalnumbers} } +% \stopTEXpage + \newconstant\c_math_fenced_class \integerdef \c_math_fence_check \zerocount -\def\math_fenced_common#1#2#3#4% \Uwhatever class symbol source +\protected\def\math_fenced_common#1#2#3#4% \Uwhatever class symbol source {\c_math_fenced_class\mathfenceparameter#2\relax \math_fenced_check_size_mismatch % we need to catch an unbalanced \F as we are sequential \ifconditional\c_math_fenced_sized @@ -198,10 +205,13 @@ \s!source \numexpr\namedboxanchor{\mathfenceparameter#4}\relax \math_fenced_trace - \Udelimiter - \mathghostcode - \fam - \ifx\p_fence\v!none\zerocount\else\p_fence\relax\fi + \ifx\p_fence\v!none + \Udelimiter\mathghostcode\fam\zerocount + \orelse\ifchknum\p_fence\or + \Udelimiter\mathghostcode\fam\p_fence + \else + \p_fence + \fi \fi % we could use \s!attr \c_math_fenced_stack here \ifconditional\c_math_fenced_sized @@ -459,13 +469,10 @@ \fi \math_fenced_force_size\bigmathdelimitervariant\c_math_fenced_level\relax} -% todo: | in mathmode letter -% -% \appendtoks -% \let\bar\letterbar -% \to \everymathematics -% -% but then we don't have it in embedded text too so ... +\appendtoks + \enforced\aliased\let|\letterbar + %\enforced\aliased\let\bar\letterbar +\to \everymathematics \definemathfence [parenthesis] [\c!left="0028,\c!right="0029] \definemathfence [bracket] [\c!left="005B,\c!right="005D] @@ -578,127 +585,163 @@ \pushoverloadmode -\protected\def\left {\afterassignment\math_left \let\nexttoken} -\protected\def\right {\afterassignment\math_right \let\nexttoken} -\protected\def\middle{\afterassignment\math_middle\let\nexttoken} - -\popoverloadmode - -% \let\leftorright\relax - -\newconditional\c_math_fenced_done -\newconditional\c_math_fenced_unknown \settrue\c_math_fenced_unknown - -\permanent\protected\def\installmathfencepair#1#2#3#4% - {\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\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 -\letcsname\??mathmiddle\s!unknown\endcsname\math_unknown_middle - -\def\math_left - {\settrue\c_math_fenced_done - \ifcsname\??mathleft\normalmeaningless\nexttoken\endcsname - \expandafter\lastnamedcs - \else - \expandafter\math_unknown_left - \fi} - -\def\math_right - {\settrue\c_math_fenced_done - \ifcsname\??mathright\normalmeaningless\nexttoken\endcsname - \expandafter\lastnamedcs - \else - \expandafter\math_unknown_right - \fi} - -\def\math_middle - {\settrue\c_math_fenced_done - \ifcsname\??mathmiddle\normalmeaningless\nexttoken\endcsname - \expandafter\lastnamedcs - \else - \expandafter\math_unknown_middle - \fi} - -\permanent\protected\def\lfence#1% - {\settrue\c_math_fenced_done - \let\nexttoken#1% - \ifcsname\??mathleft\normalmeaningless\nexttoken\endcsname - \expandafter\lastnamedcs - \else - \expandafter\math_unknown_left - \fi} - -\permanent\protected\def\rfence#1% - {\settrue\c_math_fenced_done - \let\nexttoken#1% - \ifcsname\??mathright\normalmeaningless\nexttoken\endcsname - \expandafter\lastnamedcs - \else - \expandafter\math_unknown_right - \fi} - -\permanent\protected\def\mfence#1% - {\settrue\c_math_fenced_done - \let\nexttoken#1% - \ifcsname\??mathmiddle\normalmeaningless\nexttoken\endcsname - \expandafter\lastnamedcs - \else - \expandafter\math_unknown_middle - \fi} - -\normalexpanded{\installmathfencepair {|\detokenize {|}} \Ldoublebar {|\detokenize {|}} \Rdoublebar} -\normalexpanded{\installmathfencepair {|\detokenize{||}} \Ltriplebar {|\detokenize{||}} \Rtriplebar} +% \protected\def\left {\afterassignment\math_left \let\nexttoken} +% \protected\def\right {\afterassignment\math_right \let\nexttoken} +% \protected\def\middle{\afterassignment\math_middle\let\nexttoken} -\installmathfencepair \bgroup \Lbrace \egroup \Rbrace -\installmathfencepair \egroup \Rbracemirrored \bgroup \Lbracemirrored +% \im { \left{ \frac{1}{2} \right} } +% \im { \left\bgroup \frac{1}{2} \right\egroup } +% \im { \left\{ \frac{1}{2} \right\} } +% \im { \left\lbrace \frac{1}{2} \right\rbrace } -\installmathfencepair \letteropenbrace \Lbrace \letterclosebrace \Rbrace % as we escape in mp textexts - -\installmathfencepair . \Lnothing . \Rnothing -\installmathfencepair . \Rnothingmirrored . \Lnothingmirrored +\def\math_fenced_x_left + {\advance\c_math_fence_nesting\plusone + \ifx\math_fenced_x_p_left\bgroup\let\math_fenced_x_p_left\letterleftbrace\fi + \math_fenced_common\Uleft\c!leftclass\math_fenced_x_p_left\c!leftsource} -\installmathfencepair [ \Lbracket ] \Rbracket -\installmathfencepair ] \Rbracketmirrored [ \Lbracketmirrored +\def\math_fenced_x_right + {\ifx\math_fenced_x_p_right\egroup\let\math_fenced_x_p_right\letterrightbrace\fi + \math_fenced_common\Uright\c!rightclass\math_fenced_x_p_right\c!rightsource + \advance\c_math_fence_nesting\minusone} -\installmathfencepair ( \Lparenthesis ) \Rparenthesis -\installmathfencepair ) \Rparenthesismirrored ( \Lparenthesismirrored +\def\math_fenced_x_middle_normal + {\math_fenced_common\Umiddle\c!middleclass\math_fenced_x_p_middle\c!middlesource} -\installmathfencepair < \Langle > \Rangle -\installmathfencepair > \Ranglemirrored < \Langlemirrored +% the expandafter permits \left\Uchar... -\installmathfencepair / \Lsolidus / \Rsolidus -%installmathfencepair / \Rsolidusmirrored / \Lsolidusmirrored +\protected\def\lfence{\afterassignment\math_fenced_x_left \expandafter\let\expandafter\math_fenced_x_p_left} +\protected\def\rfence{\afterassignment\math_fenced_x_right \expandafter\let\expandafter\math_fenced_x_p_right} +\protected\def\mfence{\afterassignment\math_fenced_x_middle\expandafter\let\expandafter\math_fenced_x_p_middle} -\installmathfencepair | \Lbar | \Rbar -%installmathfencepair | \Rbarmirrored | \Lbarmirrored +\aliased\let\left \lfence +\aliased\let\right \rfence +\aliased\let\middle\mfence -\installmathfencepair ⌊ \Lfloor ⌋ \Rfloor -\installmathfencepair ⌋ \Rfloormirrored ⌊ \Lfloormirrored -\installmathfencepair ⌈ \Lceiling ⌉ \Rceiling -\installmathfencepair ⌉ \Rceilingmirrored ⌈ \Lceilingmirrored +\popoverloadmode -\installmathfencepair ⟨ \Langle ⟩ \Rangle -\installmathfencepair ⟩ \Ranglemirrored ⟨ \Langlemirrored +% \let\leftorright\relax -\installmathfencepair ⟪ \Ldoubleangle ⟫ \Rdoubleangle -\installmathfencepair ⟫ \Rdoubleanglemirrored ⟪ \Ldoubleanglemirrored +\newconditional\c_math_fenced_unknown \settrue\c_math_fenced_unknown -\installmathfencepair ‖ \Ldoublebar ‖ \Rdoublebar -%installmathfencepair ‖ \Rdoublebarmirrored ‖ \Ldoublebarmirrored +% \permanent\protected\def\installmathfencepair#1#2#3#4% +% {\letcsname\??mathleft \normalmeaningless#1\endcsname#2% +% \letcsname\??mathright\normalmeaningless#3\endcsname#4} -\installmathfencepair ⦀ \Ltriplebar ⦀ \Rtriplebar -%installmathfencepair ⦀ \Rtriplebarmirrored ⦀ \Ltriplebarmirrored +\permanent\protected\def\installmathfencepair#1#2#3#4% + {} -% \installmathfencepair { \Lbrace } \Rbrace -% \installmathfencepair } \Rbracemirrored { \Lbracemirrored +% \def\math_unknown_left {\ifconditional\c_math_fenced_unknown\Uleft \nexttoken\fi} +% \def\math_unknown_right {\ifconditional\c_math_fenced_unknown\Uright \nexttoken\fi} +% \def\math_unknown_middle{\ifconditional\c_math_fenced_unknown\Umiddle nooverflow \nexttoken\fi} -\installmathfencepair ⦗ \Linterval ⦘ \Rinterval +% \def\math_unknown_left +% {\let\math_fenced_p_left\nexttoken +% \math_fenced_left} +% +% \def\math_unknown_right +% {\let\math_fenced_p_right\nexttoken +% \math_fenced_right} +% +% \def\math_unknown_middle +% {\let\math_fenced_p_middle\nexttoken +% \math_fenced_middle} +% +% \letcsname\??mathleft \s!unknown\endcsname\math_unknown_left +% \letcsname\??mathright \s!unknown\endcsname\math_unknown_right +% \letcsname\??mathmiddle\s!unknown\endcsname\math_unknown_middle +% +% \def\math_left +% {\ifcsname\??mathleft\normalmeaningless\nexttoken\endcsname +% \expandafter\lastnamedcs +% \else +% \expandafter\math_unknown_left +% \fi} +% +% \def\math_right +% {\ifcsname\??mathright\normalmeaningless\nexttoken\endcsname +% \expandafter\lastnamedcs +% \else +% \expandafter\math_unknown_right +% \fi} +% +% \def\math_middle +% {\ifcsname\??mathmiddle\normalmeaningless\nexttoken\endcsname +% \expandafter\lastnamedcs +% \else +% \expandafter\math_unknown_middle +% \fi} +% +% \permanent\protected\def\lfence#1% +% {\let\nexttoken#1% +% \ifcsname\??mathleft\normalmeaningless\nexttoken\endcsname +% \expandafter\lastnamedcs +% \else +% \expandafter\math_unknown_left +% \fi} +% +% \permanent\protected\def\rfence#1% +% {\let\nexttoken#1% +% \ifcsname\??mathright\normalmeaningless\nexttoken\endcsname +% \expandafter\lastnamedcs +% \else +% \expandafter\math_unknown_right +% \fi} +% +% \permanent\protected\def\mfence#1% +% {\let\nexttoken#1% +% \ifcsname\??mathmiddle\normalmeaningless\nexttoken\endcsname +% \expandafter\lastnamedcs +% \else +% \expandafter\math_unknown_middle +% \fi} + +% \normalexpanded{\installmathfencepair {|\detokenize {|}} \Ldoublebar {|\detokenize {|}} \Rdoublebar} +% \normalexpanded{\installmathfencepair {|\detokenize{||}} \Ltriplebar {|\detokenize{||}} \Rtriplebar} +% +% \installmathfencepair \bgroup \Lbrace \egroup \Rbrace +% \installmathfencepair \egroup \Rbracemirrored \bgroup \Lbracemirrored +% +% \installmathfencepair \letteropenbrace \Lbrace \letterclosebrace \Rbrace % as we escape in mp textexts +% +% \installmathfencepair . \Lnothing . \Rnothing +% \installmathfencepair . \Rnothingmirrored . \Lnothingmirrored +% +% \installmathfencepair [ \Lbracket ] \Rbracket +% \installmathfencepair ] \Rbracketmirrored [ \Lbracketmirrored +% +% \installmathfencepair ( \Lparenthesis ) \Rparenthesis +% \installmathfencepair ) \Rparenthesismirrored ( \Lparenthesismirrored +% +% \installmathfencepair < \Langle > \Rangle +% \installmathfencepair > \Ranglemirrored < \Langlemirrored +% +% \installmathfencepair / \Lsolidus / \Rsolidus +% %installmathfencepair / \Rsolidusmirrored / \Lsolidusmirrored +% +% \installmathfencepair | \Lbar | \Rbar +% %installmathfencepair | \Rbarmirrored | \Lbarmirrored +% +% \installmathfencepair ⌊ \Lfloor ⌋ \Rfloor +% \installmathfencepair ⌋ \Rfloormirrored ⌊ \Lfloormirrored +% \installmathfencepair ⌈ \Lceiling ⌉ \Rceiling +% \installmathfencepair ⌉ \Rceilingmirrored ⌈ \Lceilingmirrored +% +% \installmathfencepair ⟨ \Langle ⟩ \Rangle +% \installmathfencepair ⟩ \Ranglemirrored ⟨ \Langlemirrored +% +% \installmathfencepair ⟪ \Ldoubleangle ⟫ \Rdoubleangle +% \installmathfencepair ⟫ \Rdoubleanglemirrored ⟪ \Ldoubleanglemirrored +% +% \installmathfencepair ‖ \Ldoublebar ‖ \Rdoublebar +% %installmathfencepair ‖ \Rdoublebarmirrored ‖ \Ldoublebarmirrored +% +% \installmathfencepair ⦀ \Ltriplebar ⦀ \Rtriplebar +% %installmathfencepair ⦀ \Rtriplebarmirrored ⦀ \Ltriplebarmirrored +% +% % \installmathfencepair { \Lbrace } \Rbrace +% % \installmathfencepair } \Rbracemirrored { \Lbracemirrored +% +% \installmathfencepair ⦗ \Linterval ⦘ \Rinterval \appendtoks \ignorediscretionaries % so $\mtext{a|b}$ works, this is ok because it's an \hbox @@ -728,33 +771,33 @@ \aliased\let\Lparen \Lparenthesis \aliased\let\Rparen \Rparenthesis -\installmathfencepair \lbrace \Lbrace \rbrace \Rbrace -\installmathfencepair \lbracket \Lbracket \rbracket \Rbracket -\installmathfencepair \lbrack \Lbracket \rbracket \Rbracket -\installmathfencepair \lparenthesis \Lparenthesis \rparenthesis \Rparenthesis -\installmathfencepair \lparent \Lparenthesis \rparent \Rparenthesis -\installmathfencepair \lparen \Lparenthesis \rparen \Rparenthesis -\installmathfencepair \langle \Langle \rangle \Rangle -\installmathfencepair \llangle \Ldoubleangle \rrangle \Rdoubleangle -%installmathfencepair \lbar \Lbar \rbar \Rbar -\installmathfencepair \lVert \Ldoublebar \rVert \Rdoublebar -\installmathfencepair \vert \Lbar \vert \Rbar -\installmathfencepair \solidus \Lsolidus \solidus \Rsolidus -\installmathfencepair \lfloor \Lfloor \rfloor \Rfloor -\installmathfencepair \lceiling \Lceiling \rceiling \Rceiling -\installmathfencepair \lceil \Lceiling \rceil \Rceiling - -\installmathfencepair \ulcorner \Luppercorner \urcorner \Ruppercorner -\installmathfencepair \llcorner \Llowercorner \lrcorner \Rlowercorner -\installmathfencepair \lmoustache \Lmoustache \rmoustache \Rmoustache -\installmathfencepair \llbracket \Lopenbracket \rrbracket \Ropenbracket -\installmathfencepair \lgroup \Lgroup \rgroup \Rgroup - -\installmathfencepair \linterval \Linterval \rinterval \Rinterval -%installmathfencepair \linterv \Linterval \rinterv \Rinterval -\installmathfencepair \lointerval \Linterval \rointerval \Rinterval -\installmathfencepair \llointerval \Llointerval \rlointerval \Rlointerval -\installmathfencepair \lrointerval \Lrointerval \rrointerval \Rrointerval +% \installmathfencepair \lbrace \Lbrace \rbrace \Rbrace +% \installmathfencepair \lbracket \Lbracket \rbracket \Rbracket +% \installmathfencepair \lbrack \Lbracket \rbracket \Rbracket +% \installmathfencepair \lparenthesis \Lparenthesis \rparenthesis \Rparenthesis +% \installmathfencepair \lparent \Lparenthesis \rparent \Rparenthesis +% \installmathfencepair \lparen \Lparenthesis \rparen \Rparenthesis +% \installmathfencepair \langle \Langle \rangle \Rangle +% \installmathfencepair \llangle \Ldoubleangle \rrangle \Rdoubleangle +% %installmathfencepair \lbar \Lbar \rbar \Rbar +% \installmathfencepair \lVert \Ldoublebar \rVert \Rdoublebar +% \installmathfencepair \vert \Lbar \vert \Rbar +% \installmathfencepair \solidus \Lsolidus \solidus \Rsolidus +% \installmathfencepair \lfloor \Lfloor \rfloor \Rfloor +% \installmathfencepair \lceiling \Lceiling \rceiling \Rceiling +% \installmathfencepair \lceil \Lceiling \rceil \Rceiling + +% \installmathfencepair \ulcorner \Luppercorner \urcorner \Ruppercorner +% \installmathfencepair \llcorner \Llowercorner \lrcorner \Rlowercorner +% \installmathfencepair \lmoustache \Lmoustache \rmoustache \Rmoustache +% \installmathfencepair \llbracket \Lopenbracket \rrbracket \Ropenbracket +% \installmathfencepair \lgroup \Lgroup \rgroup \Rgroup + +% \installmathfencepair \linterval \Linterval \rinterval \Rinterval +% %installmathfencepair \linterv \Linterval \rinterv \Rinterval +% \installmathfencepair \lointerval \Linterval \rointerval \Rinterval +% \installmathfencepair \llointerval \Llointerval \rlointerval \Rlointerval +% \installmathfencepair \lrointerval \Lrointerval \rrointerval \Rrointerval \aliased\let\textlbar\lbar \aliased\let\mathlbar\Lbar \aliased\let\textrbar\lbar \aliased\let\mathrbar\Rbar @@ -764,20 +807,31 @@ % \setupmathfences[color=darkgreen] -\permanent\protected\def\{{\mathortext\lbrace \letterleftbrace } % or maybe a chardef -\permanent\protected\def\}{\mathortext\rbrace \letterrightbrace } % or maybe a chardef -\permanent\protected\def\[{\mathortext\lbracket \letterleftbracket } % or maybe a chardef -\permanent\protected\def\]{\mathortext\rbracket \letterrightbracket } % or maybe a chardef -\permanent\protected\def\({\mathortext\lparenthesis\letterleftparenthesis } % or maybe a chardef -\permanent\protected\def\){\mathortext\rparenthesis\letterrightparenthesis} % or maybe a chardef -\permanent\protected\def\|{\mathortext\vert \letterbar } % or maybe a chardef -%permanent\protected\def\/{\mathortext\solidus \letterslash } % or maybe a chardef - -\installmathfencepair \{ \Lbrace \} \Rbrace -\installmathfencepair \[ \Lbracket \] \Rbracket -\installmathfencepair \( \Lparenthesis \) \Rparenthesis -\installmathfencepair \< \Langle \> \Rangle -\installmathfencepair \| \Lbar \| \Rbar +% \permanent\protected\def\{{\mathortext\lbrace \letterleftbrace } % or maybe a chardef +% \permanent\protected\def\}{\mathortext\rbrace \letterrightbrace } % or maybe a chardef +% \permanent\protected\def\[{\mathortext\lbracket \letterleftbracket } % or maybe a chardef +% \permanent\protected\def\]{\mathortext\rbracket \letterrightbracket } % or maybe a chardef +% \permanent\protected\def\({\mathortext\lparenthesis\letterleftparenthesis } % or maybe a chardef +% \permanent\protected\def\){\mathortext\rparenthesis\letterrightparenthesis} % or maybe a chardef +% \permanent\protected\def\|{\mathortext\vert \letterbar } % or maybe a chardef +% %permanent\protected\def\/{\mathortext\solidus \letterslash } % or maybe a chardef +% +% \installmathfencepair \{ \Lbrace \} \Rbrace +% \installmathfencepair \[ \Lbracket \] \Rbracket +% \installmathfencepair \( \Lparenthesis \) \Rparenthesis +% \installmathfencepair \< \Langle \> \Rangle +% \installmathfencepair \| \Lbar \| \Rbar + +% isn't that already the case .. still needed in lua mode ? + +\aliased\let\{\letterleftbrace +\aliased\let\}\letterrightbrace +\aliased\let\[\letterleftbracket +\aliased\let\]\letterrightbracket +\aliased\let\(\letterleftparenthesis +\aliased\let\)\letterrightparenthesis +\aliased\let\|\letterbar +%aliased\let\/\letterslash % italic correction \popoverloadmode @@ -853,11 +907,6 @@ %definemathfence [fancybracket] [bracket] [command=yes,color=red] -% experimental accents: -% -% \definemathoverextensible [top] [hoed] ["FE302] -% \definemathoverextensible [top] [slang] ["FE303] - %D The nested fences recovery code is needed for mathml and the original %D code can still be found in the mkiv file. @@ -1044,4 +1093,14 @@ \c_math_fence_nesting\zerocount \to \everymathematics +%D Experiment: + +\permanent\protected\def\autofences + {\setmathoptions\mathopencode\numexpression + \setmathoptions\mathopencode bor \autoinjectclassoptioncode + \relax + \setmathoptions\mathclosecode\numexpression + \setmathoptions\mathclosecode bor \autoinjectclassoptioncode + \relax} + \protect |