diff options
author | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
commit | fc4466b32ed330a956ac603b00fd145524cff49a (patch) | |
tree | 2c50e2b8de13aa9233b2c76dffe201558f169e86 /Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv | |
parent | 50e2368597d5f6fe2057195d0ae6a9f2044923e4 (diff) |
context (22apr16)
git-svn-id: svn://tug.org/texlive/trunk@40691 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv | 716 |
1 files changed, 716 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv b/Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv new file mode 100644 index 00000000000..81e39723d3c --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/math-fen.mkiv @@ -0,0 +1,716 @@ +%D \module +%D [ file=math-fen, +%D version=2012.02.18, +%D title=\CONTEXT\ Math Macros, +%D subtitle=Fences, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Math Macros / Fences} + +\unprotect + +% todo: mathstyle + +% \definemathfence [fancybracket] [bracket] [command=yes,color=blue] +% +% test $|x|$ test \par +% test $||x||$ test (okay) \par +% test $a\left|\frac{1}{b}\right|c$ test \par +% test $a\left||\frac{1}{b}\right||c$ test (not okay) \par +% +% \setupmathfences [color=red] +% +% test $a\fenced[bar]{\frac{1}{b}}c$ test \par +% test $a\fenced[doublebar]{\frac{1}{b}}c$ test \par +% test $a\fenced[bracket]{\frac{1}{b}}c$ test \par +% test $a\fancybracket{\frac{1}{b}}c$ test \par + +\installcorenamespace{mathfences} + +\installcommandhandler \??mathfences {mathfence} \??mathfences + +\let\setupmathfences\setupmathfence + +\setupmathfences + [\c!left=, + \c!right=, + \c!middle=, + \c!mathstyle=, + \c!color=, + \c!command=] + +\appendtoks + \edef\p_command{\mathfenceparameter\c!command}% + \ifx\p_command\v!yes + \setuevalue\currentmathfence{\math_fenced_fenced[\currentmathfence]}% + \fi +\to \everydefinemathfence + +% we need the direct use of \Udelimiter because of { etc + +\def\math_fenced_left {\edef\p_left{\mathfenceparameter\c!left}% + \math_fenced_color_push + \normalleft\ifx\p_left\empty.\else\Udelimiter\plusfour\fam\p_left\relax\fi + \math_fenced_color_pop} +\def\math_fenced_middle{\edef\p_middle{\mathfenceparameter\c!middle}% + \mskip\thinmuskip + \math_fenced_color_push + \normalmiddle\ifx\p_middle\empty.\else\Udelimiter\plusfour\fam\p_middle\relax\fi + \math_fenced_color_pop + \mskip\thinmuskip} +\def\math_fenced_right {\edef\p_right{\mathfenceparameter\c!right}% + \math_fenced_color_push + \normalright\ifx\p_right\empty.\else\Udelimiter\plusfive\fam\p_right\relax\fi + \math_fenced_color_pop} + +\def\math_fenced_color_do_push{\pushcolor[\p_math_fenced_color]} +\let\math_fenced_color_do_pop \popcolor + +\let\math_fenced_color_push\donothing +\let\math_fenced_color_pop \donothing + +\let\fence \relax +\let\fenced\relax + +\newcount\c_math_fenced_nesting + +\unexpanded\def\math_fenced_fenced_start#1% + {\advance\c_math_fenced_nesting\plusone + \begingroup + \edef\currentmathfence{#1}% + \startusemathstyleparameter\mathfenceparameter + \let\fence\math_fenced_middle + \edef\p_math_fenced_color{\mathfenceparameter\c!color}% + \ifx\p_math_fenced_color\empty + \let\math_fenced_color_push\donothing + \let\math_fenced_color_pop \donothing + \else + \let\math_fenced_color_push\math_fenced_color_do_push + \let\math_fenced_color_pop \math_fenced_color_do_pop + \fi + \math_fenced_left} + +\unexpanded\def\math_fenced_fenced_stop#1% + {\edef\currentmathfence{#1}% + \math_fenced_right + \stopusemathstyleparameter + \endgroup + \advance\c_math_fenced_nesting\minusone} + +\unexpanded\def\math_fenced_fenced[#1]#2% + {\math_fenced_fenced_start{#1}% + #2% + \math_fenced_right + \stopusemathstyleparameter + \endgroup + \advance\c_math_fenced_nesting\minusone} + +\appendtoks + \let\fenced\math_fenced_fenced +\to \everymathematics + +% todo: | in mathmode letter +% +% \appendtoks +% \let\bar\letterbar +% \to \everymathematics +% +% but then we don't have it in embedded text too so ... + +\definemathfence [parenthesis] [\c!left="0028,\c!right="0029] +\definemathfence [bracket] [\c!left="005B,\c!right="005D] +\definemathfence [brace] [\c!left="007B,\c!right="007D] +\definemathfence [bar] [\c!left="007C,\c!right="007C] +\definemathfence [doublebar] [\c!left="2016,\c!right="2016] +\definemathfence [triplebar] [\c!left="2980,\c!right="2980] +\definemathfence [angle] [\c!left="27E8,\c!right="27E9] +\definemathfence [doubleangle] [\c!left="27EA,\c!right="27EB] +\definemathfence [solidus] [\c!left="2044,\c!right="2044] +\definemathfence [ceiling] [\c!left="2308,\c!right="2309] +\definemathfence [floor] [\c!left="230A,\c!right="230B] +\definemathfence [moustache] [\c!left="23B0,\c!right="23B1] +\definemathfence [uppercorner] [\c!left="231C,\c!right="231D] +\definemathfence [lowercorner] [\c!left="231E,\c!right="231F] +\definemathfence [group] [\c!left="27EE,\c!right="27EF] +\definemathfence [openbracket] [\c!left="27E6,\c!right="27E7] + +\definemathfence [nothing] + +\definemathfence [mirrored] % \v!mirrored + +\definemathfence [mirroredparenthesis] [mirrored] [\c!right="0028,\c!left="0029] +\definemathfence [mirroredbracket] [mirrored] [\c!right="005B,\c!left="005D] +\definemathfence [mirroredbrace] [mirrored] [\c!right="007B,\c!left="007D] +\definemathfence [mirroredbar] [mirrored] [\c!right="007C,\c!left="007C] +\definemathfence [mirroreddoublebar] [mirrored] [\c!right="2016,\c!left="2016] +\definemathfence [mirroredtriplebar] [mirrored] [\c!right="2980,\c!left="2980] +\definemathfence [mirroredangle] [mirrored] [\c!right="27E8,\c!left="27E9] +\definemathfence [mirroreddoubleangle] [mirrored] [\c!right="27EA,\c!left="27EB] +\definemathfence [mirroredsolidus] [mirrored] [\c!right="2044,\c!left="2044] +\definemathfence [mirroredceiling] [mirrored] [\c!right="2308,\c!left="2309] +\definemathfence [mirroredfloor] [mirrored] [\c!right="230A,\c!left="230B] +\definemathfence [mirroredmoustache] [mirrored] [\c!right="23B0,\c!left="23B1] +\definemathfence [mirroreduppercorner] [mirrored] [\c!right="231C,\c!left="231D] +\definemathfence [mirroredlowercorner] [mirrored] [\c!right="231E,\c!left="231F] +\definemathfence [mirroredgroup] [mirrored] [\c!right="27EE,\c!left="27EF] +\definemathfence [mirroredopenbracket] [mirrored] [\c!right="27E6,\c!left="27E7] + +\definemathfence [mirrorednothing] [mirrored] + +%D A bonus: + +\unexpanded\def\Lparenthesis {\math_fenced_fenced_start{parenthesis}} \unexpanded\def\Rparenthesis {\math_fenced_fenced_stop {parenthesis}} +\unexpanded\def\Lbracket {\math_fenced_fenced_start{bracket}} \unexpanded\def\Rbracket {\math_fenced_fenced_stop {bracket}} +\unexpanded\def\Lbrace {\math_fenced_fenced_start{brace}} \unexpanded\def\Rbrace {\math_fenced_fenced_stop {brace}} +\unexpanded\def\Langle {\math_fenced_fenced_start{angle}} \unexpanded\def\Rangle {\math_fenced_fenced_stop {angle}} +\unexpanded\def\Ldoubleangle {\math_fenced_fenced_start{doubleangle}} \unexpanded\def\Rdoubleangle {\math_fenced_fenced_stop {doubleangle}} +\unexpanded\def\Lbar {\math_fenced_fenced_start{bar}} \unexpanded\def\Rbar {\math_fenced_fenced_stop {bar}} +\unexpanded\def\Ldoublebar {\math_fenced_fenced_start{doublebar}} \unexpanded\def\Rdoublebar {\math_fenced_fenced_stop {doublebar}} +\unexpanded\def\Ltriplebar {\math_fenced_fenced_start{triplebar}} \unexpanded\def\Rtriplebar {\math_fenced_fenced_stop {triplebar}} +\unexpanded\def\Lsolidus {\math_fenced_fenced_start{solidus}} \unexpanded\def\Rsolidus {\math_fenced_fenced_stop {solidus}} +\unexpanded\def\Lfloor {\math_fenced_fenced_start{floor}} \unexpanded\def\Rfloor {\math_fenced_fenced_stop {floor}} +\unexpanded\def\Lceiling {\math_fenced_fenced_start{ceiling}} \unexpanded\def\Rceiling {\math_fenced_fenced_stop {ceiling}} +\unexpanded\def\Lmoustache {\math_fenced_fenced_start{moustache}} \unexpanded\def\Rmoustache {\math_fenced_fenced_stop {moustache}} +\unexpanded\def\Luppercorner {\math_fenced_fenced_start{uppercorner}} \unexpanded\def\Ruppercorner {\math_fenced_fenced_stop {uppercorner}} +\unexpanded\def\Llowercorner {\math_fenced_fenced_start{lowercorner}} \unexpanded\def\Rlowercorner {\math_fenced_fenced_stop {lowercorner}} +\unexpanded\def\Lgroup {\math_fenced_fenced_start{group}} \unexpanded\def\Rgroup {\math_fenced_fenced_stop {group}} +\unexpanded\def\Lopenbracket {\math_fenced_fenced_start{openbracket}} \unexpanded\def\Ropenbracket {\math_fenced_fenced_stop {openbracket}} +\unexpanded\def\Lnothing {\math_fenced_fenced_start{nothing}} \unexpanded\def\Rnothing {\math_fenced_fenced_stop {nothing}} + +\unexpanded\def\Lparenthesismirrored {\math_fenced_fenced_stop {mirroredparenthesis}} \unexpanded\def\Rparenthesismirrored {\math_fenced_fenced_start{mirroredparenthesis}} +\unexpanded\def\Lbracketmirrored {\math_fenced_fenced_stop {mirroredbracket}} \unexpanded\def\Rbracketmirrored {\math_fenced_fenced_start{mirroredbracket}} +\unexpanded\def\Lbracemirrored {\math_fenced_fenced_stop {mirroredbrace}} \unexpanded\def\Rbracemirrored {\math_fenced_fenced_start{mirroredbrace}} +\unexpanded\def\Langlemirrored {\math_fenced_fenced_stop {mirroredangle}} \unexpanded\def\Ranglemirrored {\math_fenced_fenced_start{mirroredangle}} +\unexpanded\def\Ldoubleanglemirrored {\math_fenced_fenced_stop {mirroreddoubleangle}} \unexpanded\def\Rdoubleanglemirrored {\math_fenced_fenced_start{mirroreddoubleangle}} +\unexpanded\def\Lbarmirrored {\math_fenced_fenced_stop {mirroredbar}} \unexpanded\def\Rbarmirrored {\math_fenced_fenced_start{mirroredbar}} +\unexpanded\def\Ldoublebarmirrored {\math_fenced_fenced_stop {mirroreddoublebar}} \unexpanded\def\Rdoublebarmirrored {\math_fenced_fenced_start{mirroreddoublebar}} +\unexpanded\def\Ltriplebarmirrored {\math_fenced_fenced_stop {mirroredtriplebar}} \unexpanded\def\Rtriplebarmirrored {\math_fenced_fenced_start{mirroredtriplebar}} +\unexpanded\def\Lsolidusmirrored {\math_fenced_fenced_stop {mirroredsolidus}} \unexpanded\def\Rsolidusmirrored {\math_fenced_fenced_start{mirroredsolidus}} +\unexpanded\def\Lfloormirrored {\math_fenced_fenced_stop {mirroredfloor}} \unexpanded\def\Rfloormirrored {\math_fenced_fenced_start{mirroredfloor}} +\unexpanded\def\Lceilingmirrored {\math_fenced_fenced_stop {mirroredceiling}} \unexpanded\def\Rceilingmirrored {\math_fenced_fenced_start{mirroredceiling}} +\unexpanded\def\Lmoustachemirrored {\math_fenced_fenced_stop {mirroredmoustache}} \unexpanded\def\Rmoustachemirrored {\math_fenced_fenced_start{mirroredmoustache}} +\unexpanded\def\Luppercornermirrored {\math_fenced_fenced_stop {mirroreduppercorner}} \unexpanded\def\Ruppercornermirrored {\math_fenced_fenced_start{mirroreduppercorner}} +\unexpanded\def\Llowercornermirrored {\math_fenced_fenced_stop {mirroredlowercorner}} \unexpanded\def\Rlowercornermirrored {\math_fenced_fenced_start{mirroredlowercorner}} +\unexpanded\def\Lgroupmirrored {\math_fenced_fenced_stop {mirroredgroup}} \unexpanded\def\Rgroupmirrored {\math_fenced_fenced_start{mirroredgroup}} +\unexpanded\def\Lopenbracketmirrored {\math_fenced_fenced_stop {mirroredopenbracket}} \unexpanded\def\Ropenbracketmirrored {\math_fenced_fenced_start{mirroredopenbracket}} +\unexpanded\def\Lnothingmirrored {\math_fenced_fenced_stop {mirrorednothing}} \unexpanded\def\Rnothingmirrored {\math_fenced_fenced_start{mirrorednothing}} + +% \startformula +% \left{ \frac{1}{a} \right} +% \left[ \frac{1}{b} \right] +% \left( \frac{1}{c} \right) +% \left< \frac{1}{d} \right> +% \left| \frac{1}{e} \right| +% \stopformula + +\installcorenamespace{mathleft} +\installcorenamespace{mathright} +\installcorenamespace{mathmiddle} + +\unexpanded\def\left {\afterassignment\math_left \let\nexttoken} +\unexpanded\def\right {\afterassignment\math_right \let\nexttoken} +\unexpanded\def\middle{\afterassignment\math_middle\let\nexttoken} + +\let\leftorright\relax + +\newconditional\c_math_fenced_done +\newconditional\c_math_fenced_unknown \settrue\c_math_fenced_unknown + +% maybe use \detokenize ... todo \lastnamedcs + +% \setvalue{\??mathleft \s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalleft \nexttoken\fi} +% \setvalue{\??mathright \s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalright \nexttoken\fi} +% \setvalue{\??mathmiddle\s!unknown}{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalmiddle\nexttoken\fi} +% +% \def\math_left +% {\settrue\c_math_fenced_done +% \edef\m_math_left{\meaning\nexttoken}% +% \csname\??mathleft\ifcsname\??mathleft\m_math_left\endcsname\m_math_left\else\s!unknown\fi\endcsname} +% +% \def\math_right +% {\settrue\c_math_fenced_done +% \edef\m_math_right{\meaning\nexttoken}% +% \csname\??mathright\ifcsname\??mathright\m_math_right\endcsname\m_math_right\else\s!unknown\fi\endcsname} +% +% \def\math_middle +% {\settrue\c_math_fenced_done +% \edef\m_math_middle{\meaning\nexttoken}% +% \csname\??mathmiddle\ifcsname\??mathmiddle\m_math_middle\endcsname\m_math_middle\else\s!unknown\fi\endcsname} +% +% \unexpanded\def\lfence#1% +% {\settrue\c_math_fenced_done +% \let\nexttoken#1% +% \edef\m_math_left{\meaning#1}% +% \csname\??mathleft\ifcsname\??mathleft\m_math_left\endcsname\m_math_left\else\s!unknown\fi\endcsname} +% +% \unexpanded\def\rfence#1% +% {\settrue\c_math_fenced_done +% \let\nexttoken#1% +% \edef\m_math_right{\meaning#1}% +% \csname\??mathright\ifcsname\??mathright\m_math_right\endcsname\m_math_right\else\s!unknown\fi\endcsname} +% +% \unexpanded\def\mfence#1% +% {\settrue\c_math_fenced_done +% \let\nexttoken#1% +% \edef\m_math_middle{\meaning#1}% +% \csname\??mathmiddle\ifcsname\??mathmiddle\m_math_middle\endcsname\m_math_middle\else\s!unknown\fi\endcsname} + +\unexpanded\def\installmathfencepair#1#2#3#4% + {\expandafter\let\csname\??mathleft \meaning#1\endcsname#2% + \expandafter\let\csname\??mathright\meaning#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} + +\letvalue{\??mathleft \s!unknown}\math_unknown_left +\letvalue{\??mathright \s!unknown}\math_unknown_right +\letvalue{\??mathmiddle\s!unknown}\math_unknown_middle + +\def\math_left + {\settrue\c_math_fenced_done + \ifcsname\??mathleft\meaning\nexttoken\endcsname + \expandafter\lastnamedcs + \else + \expandafter\math_unknown_left + \fi} + +\def\math_right + {\settrue\c_math_fenced_done + \ifcsname\??mathright\meaning\nexttoken\endcsname + \expandafter\lastnamedcs + \else + \expandafter\math_unknown_right + \fi} + +\def\math_middle + {\settrue\c_math_fenced_done + \ifcsname\??mathmiddle\meaning\nexttoken\endcsname + \expandafter\lastnamedcs + \else + \expandafter\math_unknown_middle + \fi} + +\unexpanded\def\lfence#1% + {\settrue\c_math_fenced_done + \let\nexttoken#1% + \ifcsname\??mathleft\meaning\nexttoken\endcsname + \expandafter\lastnamedcs + \else + \expandafter\math_unknown_left + \fi} + +\unexpanded\def\rfence#1% + {\settrue\c_math_fenced_done + \let\nexttoken#1% + \ifcsname\??mathright\meaning\nexttoken\endcsname + \expandafter\lastnamedcs + \else + \expandafter\math_unknown_right + \fi} + +\unexpanded\def\mfence#1% + {\settrue\c_math_fenced_done + \let\nexttoken#1% + \ifcsname\??mathmiddle\meaning\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 ) \Rparentmirrored ( \Lparentmirrored + +\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 + +\appendtoks + \ignorediscretionaries % so $\mtext{a|b}$ works, this is ok because it's an \hbox +\to \everymathematics + +% We unofficial support some synonyms as we need them for some fuzzy web related math. + +% The names in char-def.lua (historic mess): + +\let\lbrack \lbracket +\let\rbrack \rbracket +\let\lceiling \lceil +\let\rceiling \rceil +\let\lparenthesis\lparent +\let\rparenthesis\rparent +\let\lparen \lparent +\let\rparen \rparent + +% Just defined: + +\let\Lceil \Lceiling +\let\Rceil \Rceiling +\let\Lparent\Lparenthesis +\let\Rparent\Rparenthesis +\let\Lparen \Lparenthesis +\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 + +\let\textlbar\lbar \let\mathlbar\Lbar +\let\textrbar\lbar \let\mathrbar\Rbar + +\unexpanded\def\lbar{\mathortext\mathlbar\textlbar} +\unexpanded\def\rbar{\mathortext\mathrbar\textrbar} + +% \setupmathfences[color=darkgreen] + +\unexpanded\def\{{\mathortext\lbrace \letterleftbrace } % or maybe a chardef +\unexpanded\def\}{\mathortext\rbrace \letterrightbrace } % or maybe a chardef +\unexpanded\def\[{\mathortext\lbracket \letterleftbracket } % or maybe a chardef +\unexpanded\def\]{\mathortext\rbracket \letterrightbracket } % or maybe a chardef +\unexpanded\def\({\mathortext\lparenthesis\letterleftparenthesis } % or maybe a chardef +\unexpanded\def\){\mathortext\rparenthesis\letterrightparenthesis} % or maybe a chardef +\unexpanded\def\|{\mathortext\vert \letterbar } % or maybe a chardef +%unexpanded\def\/{\mathortext\solidus \letterslash } % or maybe a chardef + +\installmathfencepair \{ \Lbrace \} \Rbrace +\installmathfencepair \[ \Lbracket \] \Rbracket +\installmathfencepair \( \Lparenthesis \) \Rparenthesis +\installmathfencepair \< \Langle \> \Rangle +\installmathfencepair \| \Lbar \| \Rbar + +%D As we have overloaded \type {\left} and \type {\right} we also need a more +%D clever version of the following: + +% methods: +% +% 1: none +% 2: lua +% 3: tex + +% variants: +% +% 1: step 1 +% 2: step 2 +% 3: htdp * 1.33^n +% 4: size * 1.33^n + +\setnewconstant\bigmathdelimitermethod \plusone +\setnewconstant\bigmathdelimitervariant\plusthree + +\unexpanded\def\plainbigdelimiters % traditional method + {\bigmathdelimitermethod\plustwo} + +\plainbigdelimiters % is default for the moment but not so nice + +% \setconstant\bigmathdelimitermethod\plusone + +\installcorenamespace{mathbig} + +\unexpanded\def\choosemathbig#1#2% so we accept \big{||} as well + {{\hbox\bgroup + \startimath + \ifcase\bigmathdelimitermethod + \math_fenced_step#2\relax + \or + \attribute\mathsizeattribute\numexpr\bigmathdelimitervariant*\plushundred+#1\relax + \math_fenced_step#2\relax + \else + \math_fenced_step#2{\vpack to\csname\??mathbig\number#1\endcsname\bodyfontsize{}}% + \fi + \nulldelimiterspace\zeropoint\relax + \mathsurround\zeropoint + \stopimath + \egroup}} + +\def\math_fenced_step#1#2% + {\setfalse\c_math_fenced_unknown + \setfalse\c_math_fenced_done + \left#1\relax + \ifconditional\c_math_fenced_done + #2% + \right.\relax + \else + \left.\relax + #2% + \setfalse\c_math_fenced_done + \right#1\relax + \ifconditional\c_math_fenced_done + \else + \right.\relax + \fi + \fi} + +\unexpanded\def\mathdelimiterstep#1#2% + {\begingroup + \attribute\mathsizeattribute\numexpr\plushundred+#1\relax + \math_fenced_step#2\relax + \endgroup} + +\setvalue{\??mathbig1}{0.85} +\setvalue{\??mathbig2}{1.15} +\setvalue{\??mathbig3}{1.45} +\setvalue{\??mathbig4}{1.75} + +\definemathcommand [big] {\choosemathbig\plusone } +\definemathcommand [Big] {\choosemathbig\plustwo } +\definemathcommand [bigg] {\choosemathbig\plusthree} +\definemathcommand [Bigg] {\choosemathbig\plusfour } + +\definemathcommand [bigl] [open] [one] {\big} +\definemathcommand [bigm] [rel] [one] {\big} +\definemathcommand [bigr] [close] [one] {\big} +\definemathcommand [Bigl] [open] [one] {\Big} +\definemathcommand [Bigm] [rel] [one] {\Big} +\definemathcommand [Bigr] [close] [one] {\Big} +\definemathcommand [biggl] [open] [one] {\bigg} +\definemathcommand [biggm] [rel] [one] {\bigg} +\definemathcommand [biggr] [close] [one] {\bigg} +\definemathcommand [Biggl] [open] [one] {\Bigg} +\definemathcommand [Biggm] [rel] [one] {\Bigg} +\definemathcommand [Biggr] [close] [one] {\Bigg} + +% \definemathfence [integral] [\c!left="222B] +% +% \unexpanded\def\Lintegral {\math_fenced_fenced_start{integral}} +% \unexpanded\def\Rintegral {\math_fenced_fenced_stop {integral}} +% +% \installmathfencepair \lintegral \Lintegral \rintegral \Rintegral +% +% \left\lintegral +% \vrule height 3cm depth 3cm +% \right\rintegral + +%definemathfence [fancybracket] [bracket] [command=yes,color=red] + +% experimental accents: +% +% \definemathoverextensible [top] [hoed] ["FE302] +% \definemathoverextensible [top] [slang] ["FE303] + +%D This is needed for mathml (used in mrow, so it gets reset): + +% old code: + +% \let\math_fences_saved_left \left +% \let\math_fences_saved_middle\middle +% \let\math_fences_saved_right \right +% +% % \def\math_fences_traced#1{\ruledhbox{\ttx#1\low{\the\c_math_fenced_nesting}}} +% +% \unexpanded\def\math_fences_checked_left +% {%\math_fences_traced L% +% \math_fences_saved_left} +% +% \unexpanded\def\math_fences_checked_middle +% {%\math_fences_traced M% +% \ifcase\c_math_fenced_nesting +% \expandafter\math_fences_saved_middle +% \else +% \expandafter\firstofoneargument +% \fi} +% +% \unexpanded\def\math_fences_checked_right +% {%\math_fences_traced R% +% \ifcase\c_math_fenced_nesting +% \expandafter\firstofoneargument +% \else +% \expandafter\math_fences_saved_right +% \fi} +% +% \newconditional\c_math_checked_done % only bars +% +% \unexpanded\def\math_fences_checked_left_or_right +% {%\math_fences_traced B% +% \ifcase\c_math_fenced_nesting +% \settrue\c_math_checked_done +% \expandafter\math_fences_saved_left +% \else\ifconditional\c_math_checked_done +% \setfalse\c_math_checked_done +% \doubleexpandafter\math_fences_saved_right +% \else +% \doubleexpandafter\math_fences_saved_middle +% \fi\fi} +% +% \unexpanded\def\math_fences_checked_start +% {\c_math_fenced_nesting\zerocount} +% +% \unexpanded\def\math_fences_checked_stop +% {\ifcase\c_math_fenced_nesting\else +% \right.\relax % error, todo: nil spacing +% \expandafter\math_fences_checked_stop +% \fi} +% +% \unexpanded\def\startcheckedfences +% {\begingroup +% \let\left \math_fences_checked_left +% \let\middle\math_fences_checked_middle +% \let\right \math_fences_checked_right +% \math_fences_checked_start} +% +% \unexpanded\def\stopcheckedfences +% {\math_fences_checked_stop +% \endgroup} +% +% \let\leftorright\math_fences_checked_left_or_right % for bars + +\definesystemattribute[mathautofence][public] + +\let\math_fences_normal_left \left +\let\math_fences_normal_right \right +\let\math_fences_normal_middle\middle +\let\math_fences_normal_both \leftorright + +\unexpanded\def\math_fences_auto_left #1{\attribute\mathautofenceattribute\plusone #1\attribute\mathautofenceattribute\attributeunsetvalue} +\unexpanded\def\math_fences_auto_right #1{\attribute\mathautofenceattribute\plustwo #1\attribute\mathautofenceattribute\attributeunsetvalue} +\unexpanded\def\math_fences_auto_middle#1{\attribute\mathautofenceattribute\plusthree#1\attribute\mathautofenceattribute\attributeunsetvalue} +\unexpanded\def\math_fences_auto_both #1{\attribute\mathautofenceattribute\plusfour #1\attribute\mathautofenceattribute\attributeunsetvalue} + +\let\autofenceopen \math_fences_auto_left % for testing +\let\autofenceclose \math_fences_auto_right % for testing +\let\autofenceleft \math_fences_auto_left % for testing +\let\autofenceright \math_fences_auto_right % for testing +\let\autofencemiddle\math_fences_auto_middle % for testing +\let\autofenceboth \math_fences_auto_both % for testing + +% fences are used not that often (i.e. no performance issue) so we can use a state +% instead of \let ... also some state variable can come in handy in the future + +\newconditional\c_math_fences_auto + +\unexpanded\def\enableautofences + {\clf_enableautofences + \glet\clf_enableautofences\relax % onlyonce anyway + \unexpanded\gdef\enableautofences{\settrue\c_math_fences_auto}% + \enableautofences} + +\unexpanded\def\disableautofences + {\setfalse\c_math_fences_auto} + +\unexpanded\def\math_fences_used_left + {\ifconditional\c_math_fences_auto + \expandafter\math_fences_auto_left + \else + \expandafter\math_fences_normal_left + \fi} +\unexpanded\def\math_fences_used_right + {\ifconditional\c_math_fences_auto + \expandafter\math_fences_auto_right + \else + \expandafter\math_fences_normal_right + \fi} +\unexpanded\def\math_fences_used_middle + {\ifconditional\c_math_fences_auto + \expandafter\math_fences_auto_middle + \else + \expandafter\math_fences_normal_middle + \fi} +\unexpanded\def\math_fences_used_both + {\ifconditional\c_math_fences_auto + \expandafter\math_fences_auto_both + \else + \expandafter\math_fences_normal_both + \fi} + +\let\left \math_fences_used_left +\let\right \math_fences_used_right +\let\middle \math_fences_used_middle +\let\leftorright\math_fences_used_both + +% wrappers + +\unexpanded\def\startcheckedfences + {\begingroup + \enableautofences} + +\unexpanded\def\stopcheckedfences + {\endgroup} + +\appendtoks + % maybe: safeguard against overloading + % + % \let\left \math_fences_used_left + % \let\right \math_fences_used_right + % \let\middle \math_fences_used_middle + % \let\leftorright\math_fences_used_both +\to \everymathematics + +\appendtoks + \ifx\currentmathfence\empty + \doifelse{\mathfenceparameter\c!state}\v!auto\enableautofences\disableautofences + \fi +\to \everysetupmathfence + +% some day default: \setupmathfences[\c!state=\v!auto] + +%D The next characters were used for constructing nicer extensibles but +%D nowadays we have real characters. + +\Umathchardef\braceld\zerocount \defaultmathfamily "FF07A +\Umathchardef\bracerd\zerocount \defaultmathfamily "FF07B +\Umathchardef\bracelu\zerocount \defaultmathfamily "FF07C +\Umathchardef\braceru\zerocount \defaultmathfamily "FF07D + +\protect |