summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/math-ini.mkxl
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2020-11-23 19:48:34 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2020-11-23 19:48:34 +0100
commit18499e46a49b8ccf4346686d1cf626ada33935b8 (patch)
treebd0ae7b601b323e20954c10c07598637d9403e00 /tex/context/base/mkiv/math-ini.mkxl
parent4b089e589d39346a66a27d04f9857fe16e4b7b41 (diff)
downloadcontext-18499e46a49b8ccf4346686d1cf626ada33935b8.tar.gz
2020-11-23 18:39:00
Diffstat (limited to 'tex/context/base/mkiv/math-ini.mkxl')
-rw-r--r--tex/context/base/mkiv/math-ini.mkxl3032
1 files changed, 0 insertions, 3032 deletions
diff --git a/tex/context/base/mkiv/math-ini.mkxl b/tex/context/base/mkiv/math-ini.mkxl
deleted file mode 100644
index ad3ad4b20..000000000
--- a/tex/context/base/mkiv/math-ini.mkxl
+++ /dev/null
@@ -1,3032 +0,0 @@
-%D \module
-%D [ file=math-ini,
-%D version=2008.01.02,
-%D title=\CONTEXT\ Math Macros,
-%D subtitle=Initializations,
-%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 / Initializations}
-
-% todo: hpack as we skip math anyway
-%
-% todo: 0x2061 : function application
-% todo: 0x2062 : invisible times
-% todo: 0x2063 : invisible comma
-
-% a bit tricky way to set ... no (pseudo) registers but math hash values:
-%
-% \normalexpanded{\Umathlimitabovevgap\displaystyle=40\dimexpr\the\Umathlimitabovevgap\displaystyle\relax}
-
-% Todo in luatex maincontrol.w: also accept a number here:
-%
-% case set_math_param_cmd:
-% p = cur_chr;
-% get_token();
-% if (cur_cmd != math_style_cmd) {
-%
-% plus two new math styles: larger/smaller
-%
-% \protected\def\Umathshow#1%
-% {\hbox{\infofont(\string#1:\the#1\textstyle,\the#1\scriptstyle,\the#1\scriptscriptstyle)}}
-
-%D This module provides namespaces for math fonts, thereby permitting mixed usage of
-%D math fonts. Although not strictly needed, we also provide a family name mapping
-%D mechanism as used in the (original) AMS math definition files, but here these
-%D names can recursively be remapped and if needed, dynamically be changed. We've
-%D tried to minimize the number of definition commands and use plain \TEX\
-%D definitions as fallback. We've tried to follow a couple of conventions from plain
-%D and AMS math in order to achieve backward compatinility. We also kept an eye on
-%D future usage of these modules in the perspective of MathML and unicode fonts.
-
-%D There is a subtle issue with grouping: the \type {\begingroup} method will not
-%D restore a changed mathstyle so best avoid that one. However, there are cases where
-%D we really need to use such grouping.
-
-% Weird, these fail, maybe amp is solved in a later state from char noads (needs a
-% fix in luatex):
-%
-% $\char"26$
-% $\a$
-% $\string&$
-
-% mathop applied to characters centers it vertically
-
-\unprotect
-
-%D We move these definitions into the format:
-
-% test [[\char948 \cldcontext{utf.char(948)}]]
-% test $[[\char948 \cldcontext{utf.char(948)}]]$
-
-\registerctxluafile{math-ini}{}
-\registerctxluafile{math-dim}{}
-\registerctxluafile{math-act}{}
-\registerctxluafile{math-ext}{}
-\registerctxluafile{math-vfu}{}
-\registerctxluafile{math-ttv}{}
-\registerctxluafile{math-map}{optimize}
-\registerctxluafile{math-ren}{}
-\registerctxluafile{math-noa}{autosuffix,optimize}
-\registerctxluafile{math-tag}{autosuffix}
-\registerctxluafile{math-fbk}{}
-\registerctxluafile{math-dir}{}
-\registerctxluafile{math-spa}{}
-
-%D A starter:
-%D
-%D \startbuffer
-%D \mathsurround 10pt
-%D \mathsurroundskip30pt
-%D x $x + \ruledhbox{$x$} + x$ x
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \start \blank \getbuffer \blank \stop
-
-\newcount\mathnestinglevel
-
-\appendtoks
- \advance\mathnestinglevel\plusone
-\to \everymathematics
-
-%D A few compatibility helpers:
-
-\permanent\def\Umathbotaccent{\Umathaccent \s!bottom }
-\permanent\def\Umathtopaccent{\Umathaccent \s!top }
-\permanent\def\Umathaccents {\Umathaccent \s!both } % strange highlighting
-
-\ifdefined\Umathcharclass \else
- \permanent\def\Umathcharclass{\numexpr\cldcontext{tex.getmathcode(token.scan_int())[1]}\relax}
- \permanent\def\Umathcharfam {\numexpr\cldcontext{tex.getmathcode(token.scan_int())[2]}\relax}
- \permanent\def\Umathcharslot {\numexpr\cldcontext{tex.getmathcode(token.scan_int())[3]}\relax}
-\fi
-
-%D The attributes that we will use (todo: pack some into one but uglier code):
-
-\definesystemattribute[mathalphabet] [public]
-\definesystemattribute[mathsize] [public]
-\definesystemattribute[mathpunctuation][public]
-\definesystemattribute[mathgreek] [public] % will become generic
-\definesystemattribute[mathalternate] [public]
-\definesystemattribute[mathrendering] [public]
-\definesystemattribute[mathcategory] [public]
-\definesystemattribute[mathmode] [public]
-\definesystemattribute[mathitalics] [public]
-\definesystemattribute[mathkernpairs] [public]
-\definesystemattribute[mathbidi] [public]
-\definesystemattribute[mathdomain] [public]
-\definesystemattribute[mathcollapsing] [public]
-\definesystemattribute[mathunstack] [public]
-
-\definesystemattribute[displaymath] [public]
-
-\mathflattenmode 31
-
-\ifdefined\ordlimits\else
- \let\ordlimits\limits
-\fi
-
-\appendtoks
- \c_attr_mathmode\plusone
-\to \everydisplay
-
-\appendtoks
- \c_attr_mathmode \plusone
- \c_attr_displaymath\plusone
-\to \everybeforedisplayformula
-
-\defaultmathfamily \zerocount % 255
-
-\permanent\protected\def\resetmathattributes{\clf_resetmathattributes}
-
-% handy
-
-\newconditional\indisplaymath
-
-\appendtoks
- \setfalse\indisplaymath
-\to \everymath
-
-\appendtoks
- \settrue\indisplaymath
-\to \everydisplay
-
-\permanent\def\inlineordisplaymath{\ifconditional\indisplaymath\expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments\fi}
-
-\permanent\protected\def\forcedisplaymath
- {\ifmmode
- \displaystyle
- \settrue\indisplaymath
- \fi}
-
-\permanent\protected\def\startforceddisplaymath
- {\startimath
- \displaystyle
- \begingroup
- \settrue\indisplaymath}
-
-\permanent\protected\def\stopforceddisplaymath
- {\endgroup
- \stopimath}
-
-\permanent\protected\def\startpickupmath % for the moment private
- {\ifconditional\indisplaymath
- \startforceddisplaymath
- \let\stoppickupmath\stopforceddisplaymath
- \else
- \startimath
- \let\stoppickupmath\stopimath
- \fi}
-
-\let\stoppickupmath\relax
-
-% \protected\def\rawmathcharacter#1% slow but only for tracing
-% {\begingroup
-% \ifmmode
-% \resetmathattributes\Uchar#1%
-% \else
-% \startimath\resetmathattributes\Uchar#1\stopimath
-% \fi
-% \endgroup}
-
-\permanent\protected\def\rawmathematics#1% slow but only for tracing
- {\begingroup
- \ifmmode
- \clf_resetmathattributes#1%
- \else
- \startimath\clf_resetmathattributes#1\stopimath
- \fi
- \endgroup}
-
-%D Some measures (maybe spac-mth):
-
-% \def\mathskipsmall {\mskip\thinmuskip}
-% \def\mathskipmedium{\mskip\medmuskip}
-% \def\mathskipbig {\mskip\thickmuskip}
-
-%D \macros
-%D {setupmathematics}
-%D
-%D Configuration for integrals. (If needed we can speed this up and make it
-%D installable; no processaction is needed then).
-
-\installcorenamespace{mathematics}
-
-\installswitchcommandhandler \??mathematics {mathematics} \??mathematics
-
-\permanent\protected\def\startmathematics % no grouping, if ever then also an optional second
- {\doifelsenextoptionalcs\math_mathematics_start_yes\math_mathematics_start_nop}
-
-\installmacrostack\currentmathematics
-
-\protected\def\math_mathematics_start_yes[#1]%
- {\push_macro_currentmathematics
- \edef\currentmathematics{#1}% check for valid
- \the\everyswitchmathematics}
-
-\protected\def\math_mathematics_start_nop
- {\push_macro_currentmathematics
- \let\currentmathematics\empty
- \the\everyswitchmathematics}
-
-\permanent\protected\def\stopmathematics
- {\pop_macro_currentmathematics
- \the\everyswitchmathematics}
-
-\definemathematics[\v!default] % not needed, but nicer when nesting back to normal
-
-% Now we redefine \type {\mathematics} and \type {\m}:
-
-\pushoverloadmode
-
- \permanent\protected\def\mathematics{\doifelsenextoptionalcs\math_m_yes\math_m_nop}
-
- \aliased\let\m \mathematics % we keep the simple versions
- \aliased\let\math\mathematics % we keep the simple versions
-
-\popoverloadmode
-
-\def\math_m_yes
- {\relax
- \ifmmode
- \expandafter\math_m_yes_math
- \else
- \expandafter\math_m_yes_text
- \fi}
-
-\def\math_m_yes_math[#1]#2%
- {#2}
-
-\def\math_m_yes_text[#1]%
- {\begingroup
- \ifcondition\validassignment{#1}%
- \setupcurrentmathematics[#1]%
- \else
- \edef\currentmathematics{#1}% check for valid
- \fi
- \edef\p_openup{\mathematicsparameter\c!openup}%
- \ifx\p_openup\v!yes
- \expandafter\math_m_yes_text_openedup
- \else
- \expandafter\math_m_yes_text_normal
- \fi}
-
-\def\math_m_yes_text_openedup#1%
- {\setbox\scratchbox\hbox\bgroup
- \the\everyswitchmathematics\relax
- \normalstartimath
- #1%
- \normalstopimath
- \egroup
- \ifdim\ht\scratchbox>\strutht
- \math_inline_openup_start_yes
- \orelse\ifdim\dp\scratchbox>\strutdp
- \math_inline_openup_start_yes
- \else
- \math_inline_openup_start_nop
- \fi
- \unhbox\scratchbox % \normalstartimath#1\normalstopimath
- \math_inline_openup_stop
- \endgroup}
-
-\def\math_m_yes_text_normal#1%
- {\the\everyswitchmathematics\relax
- \normalstartimath
- #1%
- \normalstopimath
- \endgroup}
-
-\def\math_m_nop#1%
- {\relax
- \ifmmode
- #1%
- \else
- \normalstartimath
- #1%
- \normalstopimath
- \fi}
-
-% e.g.: \definemathematics[i:mp][setups=i:tight,openup=yes]
-
-\newmuskip\defaultthickmuskip \defaultthickmuskip 5mu plus 5mu
-\newmuskip\defaultmedmuskip \defaultmedmuskip 4mu plus 2mu minus 4mu
-\newmuskip\defaultthinmuskip \defaultthinmuskip 3mu
-
-\newmuskip\halfthickmuskip \halfthickmuskip 2.5mu plus 2.5mu
-\newmuskip\halfmedmuskip \halfmedmuskip 2.0mu plus 1.0mu minus 2.0mu
-\newmuskip\halfthinmuskip \halfthinmuskip 1.5mu
-
-\newcount \defaultrelpenalty \defaultrelpenalty 500
-\newcount \defaultbinoppenalty \defaultbinoppenalty 700
-\newcount \defaultprerelpenalty \defaultprerelpenalty -100
-\newcount \defaultprebinoppenalty \defaultprebinoppenalty -100
-
-% we need to control these otherwise:
-%
-% \prerelpenalty \defaultprerelpenalty
-% \prebinoppenalty\defaultprebinoppenalty
-
-\startsetups math:spacing:default
- \thickmuskip \defaultthickmuskip
- \medmuskip \defaultmedmuskip
- \thinmuskip \defaultthinmuskip
- \relpenalty \defaultrelpenalty
- \binoppenalty \defaultbinoppenalty
- \prebinoppenalty\maxdimen
- \prerelpenalty \maxdimen
-\stopsetups
-
-\startsetups math:spacing:split
- \thickmuskip \defaultthickmuskip
- \medmuskip \defaultmedmuskip
- \thinmuskip \defaultthinmuskip
- \relpenalty \defaultrelpenalty
- \binoppenalty \defaultbinoppenalty
- \prebinoppenalty\defaultprebinoppenalty
- \prerelpenalty \defaultprerelpenalty
-\stopsetups
-
-\startsetups math:spacing:half
- \thickmuskip \halfthickmuskip
- \medmuskip \halfmedmuskip
- \thinmuskip \halfthinmuskip
- \relpenalty \defaultrelpenalty
- \binoppenalty \defaultbinoppenalty
- \prebinoppenalty\maxdimen
- \prerelpenalty \maxdimen
-\stopsetups
-
-\startsetups math:spacing:tight
- \ifcase\raggedstatus
- \thickmuskip \halfthickmuskip
- \medmuskip \halfmedmuskip
- \thinmuskip \halfthinmuskip
- \else
- \thickmuskip 1\halfthickmuskip
- \medmuskip 1\halfmedmuskip
- \thinmuskip 1\halfthinmuskip
- \fi
- \relpenalty \defaultrelpenalty
- \binoppenalty \maxdimen
- \prebinoppenalty\maxdimen
- \prerelpenalty \maxdimen
-\stopsetups
-
-\startsetups math:spacing:fixed
- \ifcase\raggedstatus
- \thickmuskip \halfthickmuskip
- \medmuskip \halfmedmuskip
- \thinmuskip \halfthinmuskip
- \else
- \thickmuskip 1\halfthickmuskip
- \medmuskip 1\halfmedmuskip
- \thinmuskip 1\halfthinmuskip
- \fi
- \relpenalty \maxdimen
- \binoppenalty \maxdimen
- \prebinoppenalty\maxdimen
- \prerelpenalty \maxdimen
-\stopsetups
-
-% \dorecurse{80}{test \m[i:tight]{\red \fakeformula} test }
-
-\definemathematics[i:default][\c!setups=math:spacing:equal]
-\definemathematics[i:half] [\c!setups=math:spacing:half]
-\definemathematics[i:tight] [\c!setups=math:spacing:tight]
-\definemathematics[i:fixed] [\c!setups=math:spacing:fixed]
-
-% Normally the next is applied to only one character.
-%
-% $ABC$ $\cal ABC$ $\mathaltcal ABC$
-
-% todo: only in mmode
-% these commands are semi-public but should not be used directly (lua names wil change)
-
-\protected\def\math_set_attribute #1#2{\ifmmode\clf_setmathattribute{#1}{#2}\fi}
-\protected\def\math_set_alphabet #1{\ifmmode\clf_setmathalphabet{#1}\fi}
-\protected\def\math_set_font_style #1{\ifmmode\clf_setmathstyle{#1}\fi}
-\protected\def\math_set_font_alternate#1{\ifmmode\clf_setmathalternate\defaultmathfamily{#1}\fi}
-
-\installcorenamespace{mathstylealternative} % might become a setuphandler
-
-\protected\def\math_set_font_style_alternate#1%
- {\ifcsname\??mathstylealternative\fontclass:#1\endcsname
- \expandafter\math_set_font_alternate\lastnamedcs
- \orelse\ifcsname\??mathstylealternative#1\endcsname
- \expandafter\math_set_font_alternate\lastnamedcs
- \fi}
-
-\protected\def\setupmathrendering % the name might change
- {\dodoubleargument\math_setup_rendering}
-
-\def\math_setup_rendering[#1][#2]%
- {\ifsecondargument
- \getparameters[\??mathstylealternative#1:][#2]%
- \else
- \getparameters[\??mathstylealternative][#1]%
- \fi}
-
-\appendtoks
- \edef\p_stylealternative{\mathematicsparameter\c!stylealternative}%
- \ifempty\p_stylealternative\else
- \clf_presetmathalternate\defaultmathfamily{\p_stylealternative}%
- \fi
-\to \everymathematics
-
-% if there were many features we could have a feature pass over math nodes but it makes no
-% sense now so we have commands to deal with it
-
-% \enabletrackers[math.alternates]
-% \setupbodyfont[lucidaot]
-%
-% \startTEXpage
-% \setupmathematics[stylealternative={reset}]$x+\mathcal A$\par
-% \setupmathematics[stylealternative={reset,calligraphic}]$x+\mathcal A$\par
-% \setupmathematics[stylealternative={reset,italic}]$x+\mathcal A$\par
-% \setupmathematics[stylealternative={reset,calligraphic,italic}]$x+\mathcal A$
-% \stopTEXpage
-
-% no longer needed now we have enforce so the next few lines will go
-
-\pushoverloadmode
- \enforced\let\dotlessi\dotlessi
- \enforced\let\dotlessj\dotlessj
-\popoverloadmode
-
-\permanent\protected\def\mathaltcalligraphic{\math_set_font_alternate{calligraphic}\cal} % set via goody file
-\permanent\protected\def\mathaltitalic {\math_set_font_alternate{italic}} % set via goody file
-\permanent\protected\def\mathslashedzero {\begingroup\math_set_font_alternate{zero}∅\endgroup} % set via goody file or automatic
-\permanent\protected\def\mathdotless {\math_set_font_alternate{dotless}} % set via goody file or automatic
-\permanent\protected\def\mathdotlessi {\begingroup\mathdotless i\endgroup}
-\permanent\protected\def\mathdotlessj {\begingroup\mathdotless j\endgroup}
-
-\aliased\let\mathaltcal\mathaltcalligraphic
-\aliased\let\mathaltit \mathaltitalic
-
-%aliased\let\textslashedzero\slashedzero \permanent\protected\def\autoslashedzero{\mathortext\mathslashedzero\textslashedzero}
-\aliased\let\textdotlessi \dotlessi \permanent\protected\def\autodotlessi {\mathortext\mathdotlessi \textdotlessi}
-\aliased\let\textdotlessj \dotlessj \permanent\protected\def\autodotlessj {\mathortext\mathdotlessj \textdotlessj}
-
-\appendtoks
- %enforced\let\slashedzero\autoslashedzero
- \enforced\let\dotlessi\autodotlessi
- \enforced\let\dotlessj\autodotlessj
-\to \everymathematics
-
-\let\setmathattribute \math_set_attribute
-\let\setmathalphabet \math_set_alphabet
-\let\setmathfontstyle \math_set_font_style
-\let\setmathfontalternate \math_set_font_alternate
-\let\setmathfontalternative \math_set_font_alternate
-\let\setmathfontstylealternate \math_set_font_style_alternate
-\let\setmathfontstylealternative\math_set_font_style_alternate
-
-\let\mathalternate \math_set_font_alternate
-
-\permanent\protected\def\mathupright {\math_set_attribute\s!regular\s!tf\math_set_font_style_alternate\s!tf}
-\permanent\protected\def\mathitalic {\math_set_attribute\s!regular\s!it\math_set_font_style_alternate\s!it}
-\permanent\protected\def\mathscript {\math_set_alphabet \s!script \math_set_font_style_alternate\s!script}
-\permanent\protected\def\mathfraktur {\math_set_alphabet \s!fraktur \math_set_font_style_alternate\s!fraktur}
-\permanent\protected\def\mathblackboard{\math_set_alphabet \s!blackboard \math_set_font_style_alternate\s!blackboard}
-
-\permanent\protected\def\mathrm {\math_set_attribute\s!rm\s!tf \math_set_font_style_alternate\s!tf}
-\permanent\protected\def\mathss {\math_set_attribute\s!ss\s!tf \math_set_font_style_alternate\s!tf}
-\permanent\protected\def\mathtt {\math_set_attribute\s!tt\s!tf \math_set_font_style_alternate\s!tf}
-
-\permanent\protected\def\mathtf {\math_set_font_style\s!tf \math_set_font_style_alternate\s!tf}
-\permanent\protected\def\mathsl {\math_set_font_style\s!it \math_set_font_style_alternate\s!it} % no sl
-\permanent\protected\def\mathit {\math_set_font_style\s!it \math_set_font_style_alternate\s!it}
-
-\permanent\protected\def\mathbf {\math_set_font_style\s!bf \math_set_font_style_alternate\s!bf}
-\permanent\protected\def\mathbs {\math_set_font_style\s!bi \math_set_font_style_alternate\s!bi} % no sl
-\permanent\protected\def\mathbi {\math_set_font_style\s!bi \math_set_font_style_alternate\s!bi}
-
-\let\mathdefault\mathitalic
-
-\appendtoks
- \edef\p_default{\mathematicsparameter\c!default}%
- \ifx\p_default\v!normal
- \enforced\let\mathdefault\mathupright
- \else
- \enforced\let\mathdefault\mathitalic
- \fi
-\to \everysetupmathematics
-
-\setupmathematics
- [\c!default=\v!italic]
-
-\aliased\let\tfmath\mathtf % maybe a grouped command
-\aliased\let\slmath\mathsl
-\aliased\let\itmath\mathit
-
-\aliased\let\bfmath\mathbf
-\aliased\let\bsmath\mathbs
-\aliased\let\bimath\mathbi
-
-\aliased\let\Bbb\mathblackboard
-
-\permanent\protected\def\frak {\ifmmode\expandafter\mathfraktur \fi}
-\permanent\protected\def\cal {\ifmmode\expandafter\mathscript \fi}
-\permanent\protected\def\bbd {\ifmmode\expandafter\mathblackboard\fi}
-\permanent\protected\def\blackboard{\ifmmode\expandafter\mathblackboard\fi}
-\permanent\protected\def\fraktur {\ifmmode\expandafter\mathfraktur \fi}
-\permanent\protected\def\gothic {\ifmmode\expandafter\mathfraktur \fi}
-
-\permanent\protected\def\mathcal #1{{\mathscript #1}} % for AMS compatibility
-\permanent\protected\def\mathfrak#1{{\mathfraktur #1}} % for AMS compatibility
-\permanent\protected\def\mathbb #1{{\mathblackboard#1}} % for AMS compatibility
-
-\ifdefined\normaltf \else \permanent\let\normaltf\tf \fi \permanent\protected\def\tf{\ifmmode\mathtf\else\normaltf\fi}
-\ifdefined\normalbf \else \permanent\let\normalbf\bf \fi \permanent\protected\def\bf{\ifmmode\mathbf\else\normalbf\fi}
-\ifdefined\normalit \else \permanent\let\normalit\it \fi \permanent\protected\def\it{\ifmmode\mathit\else\normalit\fi}
-\ifdefined\normalsl \else \permanent\let\normalsl\sl \fi \permanent\protected\def\sl{\ifmmode\mathsl\else\normalsl\fi}
-\ifdefined\normalbi \else \permanent\let\normalbi\bi \fi \permanent\protected\def\bi{\ifmmode\mathbi\else\normalbi\fi}
-\ifdefined\normalbs \else \permanent\let\normalbs\bs \fi \permanent\protected\def\bs{\ifmmode\mathbs\else\normalbs\fi}
-
-\permanent\protected\def\rm{\ifmmode\mathrm\else\normalrm\fi}
-\permanent\protected\def\ss{\ifmmode\mathss\else\normalss\fi}
-\permanent\protected\def\tt{\ifmmode\mathtt\else\normaltt\fi}
-
-\ifdefined\mr \else \let\mr\relax \fi % hm ... permanent
-\ifdefined\mb \else \let\mb\relax \fi % hm ... permanent
-
-% 1: $\setmathattribute{ss}{bf}3$
-% 2: $\setmathattribute{ss}{bf}\setmathfontstylealternate{bf}3$
-% 3: $\setmathattribute{ss}{bf}\setmathfontstyle{bf}3$
-% 4: $\setmathattribute{ss}{bf}\setmathfontstyle{bf}\setmathfontstylealternate{bf}3$
-% 5: $e=mc^2 \quad \mb e=mc^2$
-
-\prependtoks
- \mathdefault
-\to \everymathematics
-
-%D We could set the rendering attribute at the \LUA\ end but as there can be many
-%D small math snippets we keep track of the state at the \TEX\ end (mapping is
-%D export safe).
-%D
-%D \starttyping
-%D \startformula
-%D \reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411}
-%D \stopformula
-%D
-%D \setupmathematics
-%D [symbolset=blackboard-to-bold]
-%D
-%D \startformula
-%D \reals {\mathbf R} \utfchar{"0211D} \utfchar{"1D411}
-%D \stopformula
-%D \stoptyping
-
-\newcount\c_math_renderings_attribute
-
-\appendtoks
- \c_math_renderings_attribute\clf_mathrenderset{\mathematicsparameter\c!symbolset}\relax
-\to \everysetupmathematics % only in mathematics
-
-\appendtoks
- \ifcase\c_math_renderings_attribute\else
- \c_attr_mathrendering\c_math_renderings_attribute
- \fi
-\to \everymathematics
-
-\setupmathematics
- [\c!symbolset=]
-
-%D \macros
-%D {boldsymbol}
-%D
-%D To be done.
-
-\let\mathboldsymbol\relax % yet unsupported, will be
-
-\permanent\protected\def\boldsymbol
- {\mathortext\mathboldsymbol\bold}
-
-%D Helpers
-
-\permanent\def\utfmathclass #1{\clf_utfmathclass {#1}}
-\permanent\def\utfmathstretch#1{\clf_utfmathstretch{#1}}
-\permanent\def\utfmathcommand#1{\clf_utfmathcommand{#1}}
-\permanent\def\utfmathfiller #1{\clf_utfmathfiller {#1}}
-
-\permanent\def\utfmathcommandabove #1{\clf_utfmathcommandabove {#1}}
-\permanent\def\utfmathcommandbelow #1{\clf_utfmathcommandbelow {#1}}
-\permanent\def\utfmathcommandfiller#1{\clf_utfmathcommandfiller{#1}}
-
-\permanent\protected\def\doifelseutfmathaccent#1{\clf_doifelseutfmathaccent{#1}}
-\permanent\protected\def\doifelseutfmathabove #1{\clf_doifelseutfmathabove {#1}}
-\permanent\protected\def\doifelseutfmathbelow #1{\clf_doifelseutfmathbelow {#1}}
-\permanent\protected\def\doifelseutfmathfiller#1{\clf_doifelseutfmathfiller{#1}}
-\permanent\protected\def\doifelseutfmathlimop #1{\clf_doifelseutfmathlimop {#1}}
-
-\aliased\let\doifutfmathaccentelse \doifelseutfmathaccent
-\aliased\let\doifutfmathaboveelse \doifelseutfmathabove
-\aliased\let\doifutfmathbelowelse \doifelseutfmathbelow
-\aliased\let\doifutfmathfillerelse \doifelseutfmathfiller
-\aliased\let\doifutfmathlimopelse \doifelseutfmathlimop
-
-%D Not used that much:
-
-\installcorenamespace{mathcodecommand}
-
-\permanent\protected\def\mathlimop#1{\mathop{#1}} %no \limits
-\permanent\protected\def\mathbox #1{\dontleavehmode\hbox\Ustartmath\mathsurround\zeropoint#1\Ustopmath}
-\permanent\protected\def\mathnolop#1{\mathop{#1}\nolimits}
-
-\let\mathnothing\firstofoneunexpanded
-\let\mathalpha \firstofoneunexpanded
-
-\setnewconstant\mathordcode \zerocount \letvalue{\??mathcodecommand ord}\mathord
-\setnewconstant\mathopcode \plusone \letvalue{\??mathcodecommand op}\mathop
-\setnewconstant\mathbincode \plustwo \letvalue{\??mathcodecommand bin}\mathbin
-\setnewconstant\mathrelcode \plusthree \letvalue{\??mathcodecommand rel}\mathrel
-\setnewconstant\mathopencode \plusfour \letvalue{\??mathcodecommand open}\mathopen
-\setnewconstant\mathclosecode \plusfive \letvalue{\??mathcodecommand close}\mathclose
-\setnewconstant\mathpunctcode \plussix \letvalue{\??mathcodecommand punct}\mathpunct
-\setnewconstant\mathalphacode \plusseven \letvalue{\??mathcodecommand alpha}\mathalpha
-\setnewconstant\mathinnercode \zerocount \letvalue{\??mathcodecommand inner}\mathinner
-\setnewconstant\mathnothingcode \zerocount \letvalue{\??mathcodecommand nothing}\mathnothing
-\setnewconstant\mathlimopcode \plusone \letvalue{\??mathcodecommand limop}\mathlimop
-\setnewconstant\mathnolopcode \plusone \letvalue{\??mathcodecommand nolop}\mathnolop
-\setnewconstant\mathboxcode \zerocount \letvalue{\??mathcodecommand box}\mathbox
-\setnewconstant\mathchoicecode \zerocount %letvalue{\??mathcodecommand choice}\mathnothing
-
-\setnewconstant\mathaccentcode \pluseight
-\setnewconstant\mathradicalcode \plusnine
-
-\permanent \def\mathcodenumber #1{\the\csname math#1code\endcsname}
-\permanent\protected\def\mathcodecommand#1{\csname\??mathcodecommand#1\endcsname}
-\permanent \def\mathcodechecked#1{\ifcsname math#1code\endcsname\lastnamedcs\else#1\fi}
-
-% \startlines
-% $\mathopnolimits{\rm d}x$
-% $\mathopnolimits{\kern\zeropoint \rm d}x$
-% $\mathcodecommand{nolop}{\rm d}x$
-% $\mathcodecommand{nolop}{\kern\zeropoint\rm d}x$
-% \blank
-% $\mathcodecommand{nolop}{\mr d}x$
-% $\mathcodecommand{nolop}{\kern\zeropoint\mr d}x$
-% $\mathop{\kern\zeropoint\mr d}x$
-% $\mathopnolimits{\kern\zeropoint d}x$
-% \stoplines
-
-\installcorenamespace{mathcommand}
-
-% todo: define these commands as frozen!
-
-\permanent\tolerant\protected\def\definemathcommand[#1]#*[#2]#*[#3]#:#*#4% command class args meaning
- {\ifparameter#3\or
- \edef\nofmathcommandarguments{#3}% make this one m_arguments
- \ifx\nofmathcommandarguments\v!one
- \frozen\setuvalue{\??mathcommand#1}##1{\mathcodecommand{#2}{#4{##1}}}%
- \orelse\ifx\nofmathcommandarguments\v!two
- \frozen\setuvalue{\??mathcommand#1}##1##2{\mathcodecommand{#2}{#4{##1}{##2}}}%
- \else
- \frozen\setuvalue{\??mathcommand#1}{\mathcodecommand{#2}{#4}}%
- \fi
- \orelse\ifparameter#2\or
- \frozen\setuvalue{\??mathcommand#1}{\mathcodecommand{#2}{#4}}%
- \else
- \frozen\setuvalue{\??mathcommand#1}{\mathcodecommand{nothing}{#4}}%
- \fi
- \ifparameter#1\or % safeguard
- \letcsnamecsname\csname#1\endcsname\csname\??mathcommand#1\endcsname
- \fi}
-
-\permanent\protected\def\mathcommand#1%
- {\begincsname\??mathcommand#1\endcsname}
-
-%D Let's define a few comands here:
-
-%definemathcommand [mathstrut] {\vphantom{(}}
-%definemathcommand [joinrel] {\mathrel{\mkern-3mu}}
-\definemathcommand [joinrel] [rel] {\mkern-3mu}
-
-\chardef\c_math_strut"28
-
-\protected\def\math_strut_htdp#1%
- {\s!height\fontcharht#1\c_math_strut
- \s!depth \fontchardp#1\c_math_strut}
-
-\protected\def\math_strut_normal
- {\vrule
- \s!width \zeropoint
- \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}%
- \relax}
-
-\protected\def\math_strut_visual
- {\hskip-.01\emwidth
- \vrule
- \s!width .02\emwidth
- \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}%
- \relax
- \hskip-.01\emwidth}
-
-\protected\def\showmathstruts % let's not overload \math_strut_normal
- {\enforced\let\math_strut\math_strut_visual}
-
-\let\math_strut\math_strut_normal
-
-% \protected\def\mathstrut{\mathcodecommand{nothing}{\math_strut}}
-
-\pushoverloadmode
-
- \definemathcommand [mathstrut] {\math_strut}
-
-\popoverloadmode
-
-%D We could have a arg variant \unknown\ but not now.
-
-\permanent\protected\def\mathopwithlimits#1#2{\mathop{#1{#2}}\limits}
-\permanent\protected\def\stackrel #1#2{\mathrel{\mathop{#2}\limits^{#1}}}
-
-%D Moved from font-ini.mkiv:
-%D
-%D \macros
-%D {mf,mbox,enablembox,mathop}
-%D
-%D Todo:
-
-\protected\def\mf{\begincsname\fontalternative\endcsname} % todo: \frozen
-
-% \let\normalmathop\mathop % already defined
-
-% no longer needed as we no longer switch fonts
-%
-% \protected\def\mathop
-% {\normalmathop
-% \bgroup
-% % no: \let\rm\mf
-% \afterassignment\math_op\let\nexttoken=}
-%
-% \def\math_op{\ifx\nexttoken\bgroup\else\nexttoken\egroup\fi}
-
-% this one too: \letvalue{\??mathcodecommand op}\mathop ?
-
-\permanent\protected\def\normalmbox
- {\normalhbox\bgroup
- \usemathematicsstyleandcolor\c!textstyle\c!textcolor % new
- \dowithnextboxcs\math_mbox_finish\normalhbox}
-
-\def\math_mbox_finish
- {\flushnextbox
- \egroup}
-
-\permanent\protected\def\mbox % we cannot add \dontleavehmode ... else no \setbox0\mbox possible
- {\ifmmode\normalmbox\else\normalhbox\fi}
-
-\permanent\protected\def\enablembox
- {\toksapp\everymathematics{\math_enable_mbox}}
-
-\permanent\def\math_enable_mbox % brrrr
- {\enforced\let\hbox\mbox}
-
-\permanent\protected\def\snappedmath#1% sort of \struttedbox
- {\dontleavehmode
- \begingroup
- \setbox\scratchbox\normalhbox\bgroup
- \startimath#1\stopimath
- \egroup
- \ht\scratchbox\strutht
- \dp\scratchbox\strutdp
- \box\scratchbox
- \endgroup}
-
-\permanent\protected\def\mtext#1%
- {\text{\usemathematicsstyleandcolor\c!textstyle\c!textcolor#1}}
-
-%D The next hack is needed needed for sine, cosine etc.
-
-\let\mathfunction\firstofoneunexpanded
-
-\let\math_tags_function \firstofoneunexpanded
-\let\math_tags_functionlabeltext\mathlabeltext
-
-\let\math_tags_mo\firstofoneunexpanded
-\let\math_tags_mi\firstofoneunexpanded
-
-\protected\def\math_tags_mn#1{\begingroup\mathupright\math_set_o_both#1\endgroup}
-\protected\def\math_tags_ms#1{\begingroup\mathupright\math_set_p_both#1\endgroup}
-
-% Once this is stable we can store the number at the tex end which is
-% faster. Functions getnumbers >= 1000.
-
-% \setupmathematics[functionstyle=normal] % will give ligatures and kerning
-
-\setupmathematics
- [\c!textstyle=, % rm ss etc i.e. known alternatives, otherwise math
- \c!textcolor=,
- \c!functionstyle=, % rm ss etc i.e. known alternatives, otherwise math
- \c!functioncolor=]
-
-\protected\def\math_mfunction_styled
- {\begingroup
- \usemathematicscolorparameter\c!functioncolor
- \edef\p_functionstyle{\mathematicsparameter\c!functionstyle}%
- \ifempty\p_functionstyle
- \expandafter\math_mfunction_styled_none
- \orelse\ifcsname\??alternativestyle\p_functionstyle\endcsname
- \doubleexpandafter\math_mfunction_styled_text
- \else
- \doubleexpandafter\math_mfunction_styled_math
- \fi}
-
-\protected\def\math_mfunction_styled_text#1%
- %{\mathoptext{\csname\??alternativestyle\p_functionstyle\endcsname#1}%
- {\expandafter\mathoptext\expandafter{\lastnamedcs#1}%
- \endgroup}
-
-\protected\def\math_mfunction_styled_math#1%
- {\p_functionstyle
- #1%
- \endgroup}
-
-\protected\def\math_mfunction_styled_none#1%
- {\mathupright
- #1%
- \endgroup}
-
-\permanent\protected\def\mfunction#1%
- {\begingroup
- \math_tags_mfunctiontxt{#1}\c_apply_function
- \math_mfunction_styled{#1}%
- \endgroup}
-
-\permanent\protected\def\mfunctionlabeltext#1%
- {\begingroup
- \math_tags_mfunctionlab{#1}\c_apply_function
- \math_mfunction_styled{\mathlabeltext{#1}}%
- \endgroup}
-
-\let\math_tags_mfunctiontxt\gobbletwoarguments
-\let\math_tags_mfunctionlab\gobbletwoarguments
-
-\permanent\protected\def\math_tags_mo_indeed#1{\begingroup \c_attr_mathcategory\plusone #1\endgroup}
-\permanent\protected\def\math_tags_mi_indeed#1{\begingroup \c_attr_mathcategory\plustwo #1\endgroup}
-\permanent\protected\def\math_tags_mn_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusthree\math_set_o_both#1\endgroup}
-\permanent\protected\def\math_tags_ms_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusfour \math_set_p_both#1\endgroup} % todo: mathoptext
-
-\newconditional\c_apply_function
-
-\permanent\protected\def\math_tags_apply#1#2%
- {\begingroup
- \settrue\c_apply_function
- #1%
- \endgroup
- \begingroup
- % todo: auto ()
- #2%
- \endgroup}
-
-\appendtoks
- \enforced\let\math_tags_mfunctiontxt\clf_tagmfunctiontxt
- \enforced\let\math_tags_mfunctionlab\clf_tagmfunctionlab
- \enforced\let\math_tags_mo \math_tags_mo_indeed
- \enforced\let\math_tags_mi \math_tags_mi_indeed
- \enforced\let\math_tags_mn \math_tags_mn_indeed
- \enforced\let\math_tags_ms \math_tags_ms_indeed
-\to \everyenableelements
-
-\appendtoks
- \enforced\let\mo \math_tags_mo
- \enforced\let\mi \math_tags_mi
- \enforced\let\mn \math_tags_mn
- \enforced\let\ms \math_tags_ms
- \enforced\let\apply\math_tags_apply
-\to\everymathematics
-
-% \def\mlimitsfunction #1{\mathlimopcomm{{\mr#1}}
-% \def\mnolimitsfunction#1{\mathnolopcomm{{\mr#1}}
-
-% %D Taco posted this solution as response to a mail by Olivier, so let's integrate
-% %D it here.
-%
-% \def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option
-%
-% \protected\def\math_function_style_opnolimits #1{\mathop{\mscaledtext{#1}}\nolimits}
-% \protected\def\math_function_style_mfunction #1{\mscaledtext{\math_tags_function{#1}}}
-% \protected\def\math_function_style_mfunctionlabeltext#1{\mscaledtext{\math_tags_functionlabeltext{#1}}}
-%
-% \protected\def\setmathfunctionstyle#1% rm ss tt (can be made faster if needed)
-% {\doifsomething{#1}
-% {\def\currentmscaledstyle{#1}%
-% \let\mathopnolimits \math_function_style_opnolimits
-% \let\mfunction \math_function_style_mfunction
-% \let\mfunctionlabeltext\math_function_style_mfunctionlabeltext}}
-
-\def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option
-
-\permanent\protected\def\mscaledtext#1%
- {\mathchoice
- {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}}
- {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}}
- {\hbox{\csname\currentmscaledstyle\endcsname\tfx #1}}
- {\hbox{\csname\currentmscaledstyle\endcsname\tfxx#1}}}
-
-\permanent\protected\def\setmathfunctionstyle#1%
- {\setupmathematics[\c!functionstyle=#1]} % for old times sake
-
-%D Usage:
-%D
-%D \starttyping
-%D \setmathfunctionstyle\fontstyle % or {rm} or {ss} or ..
-%D \rm test $\sin{(x^{\sin(x^{\sin(x)})})}$ test
-%D \ss test $\sin{(x^{\sin(x^{\sin(x)})})}$ test
-%D \tt test $\sin{(x^{\sin(x^{\sin(x)})})}$ test
-%D \stoptyping
-
-%D \macros
-%D {nonknuthmode, donknuthmode}
-%D
-%D The underscore is frequently used in manuals but unfortunately \TEX\ prefers
-%D it to be a math specific character. And since computer modern fonts didn't
-%D have an underscore, one had to use commands to fake one. Nowadays we do
-%D have underscores in latin modern, and since all other fonts have them, we
-%D decided to get away from the restriction to use the underscore character in
-%D text mode.
-%D
-%D \starttyping
-%D \def\test#1{#1}
-%D
-%D \nonknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2}
-%D
-%D \donknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2}
-%D \stoptyping
-%D
-%D The result is as expected: the first line typesets ok, while the second
-%D one triggers an error message.
-
-\setnewconstant\activemathcharcode "8000
-
-\newtoks\activatedmathcharacters
-
-\permanent\protected\def\activatemathcharacter#1%
- {\appendtoks
- \global\mathcode#1=\activemathcharcode
- \to \activatedmathcharacters}
-
-\permanent\def\activatemathcharacters
- {\the\activatedmathcharacters}
-
-% beware, not runtime, so has to happen at format generation
-
-\activatemathcharacter\circumflexasciicode
-\activatemathcharacter\underscoreasciicode
-\activatemathcharacter\ampersandasciicode
-
-\appendtoks
- \edef\p_ampersand{\mathematicsparameter\s!ampersand}%
- \ifx\p_ampersand\v!normal
- \let\specialmathaligntab\normalmathaligntab
- \else
- \let\specialmathaligntab\mathampersand
- \fi
-\to \everysetupmathematics
-
-%D A simplified version of this code is:
-%D
-%D \starttyping
-%D \catcode"26=12
-%D
-%D \bgroup
-%D \global\mathcode"26="8000
-%D
-%D \catcode"26=4
-%D
-%D \xdef\normalmathaligntab{&}
-%D
-%D \catcode"26=13
-%D
-%D \global\everymath{\def&{\normalmathaligntab}}
-%D \egroup
-%D \stoptyping
-%D
-%D The following works okay:
-%D
-%D \starttyping
-%D A & B
-%D \stoptyping
-%D
-%D As does:
-%D
-%D \starttyping
-%D $A \Umathchar"2"0"26 B$
-%D \stoptyping
-%D
-%D But the next code:
-%D
-%D \starttyping
-%D $A \char"26 B$
-%D \stoptyping
-%D
-%D fails with: \type{Misplaced alignment tab character &} and here is the
-%D reason.
-%D
-%D When we have a letter or other category a check happens for an active
-%D character and when it has one then it gets expanded and fed back into the
-%D scanner (sort of).
-%D
-%D A \type {\char} is also fed back as raw character and again when it's letter
-%D of other goes through the same process.
-%D
-%D This means that we cannot have a definition like:
-%D
-%D \starttyping
-%D \def\AND{\char"26\relax}
-%D \stoptyping
-%D
-%D that can be used in math mode, which is why the cweb macros do:
-%D
-%D \starttyping
-%D \def\AND{\def\AND{\mathchar"2026\relax}\AND}
-%D \stoptyping
-%D
-%D Maybe we need an option to treat chars like chars.
-
-% \activatemathcharacter\primeasciicode
-
-% not used:
-%
-% \mathcode\spaceasciicode\activemathcharcode
-%
-% not used:
-%
-% \bgroup
-% \catcode\underscoreasciicode\activecatcode
-% \doglobal\appendtoks
-% \mathcode\underscoreasciicode\activemathcharcode
-% \let_\activemathunderscore
-% \to \everymathematics
-% \egroup
-
-% Here follows some plain legacy: primes.
-%
-% The \let\prime\math_prime_indeed might become an obsolete as we have \doubleprime
-% and \tripleprime and collapsing can nicely handle the script then.
-%
-% Collapsing to 0x2033 and 0x2034 happens elsewhere.
-%
-% \switchtobodyfont[modern]
-% \switchtobodyfont[cambria]
-% \switchtobodyfont[xits]
-% \switchtobodyfont[minion]
-% \setupbodyfont[dejavu]
-%
-% \startbuffer
-% \def\SampleLine#1{%
-% \NC#1
-% \NC\switchtobodyfont[#1]$f^2$ % 1
-% \NC\switchtobodyfont[#1]$f\prime^2$ % 2
-% \NC\switchtobodyfont[#1]$f\prime\prime^2$ % 3
-% \NC\switchtobodyfont[#1]$f\prime\prime\prime^2$ % 4
-% \NC\switchtobodyfont[#1]$f{\prime}^2$ % 5
-% \NC\switchtobodyfont[#1]$f{\prime\prime}^2$ % 6
-% \NC\switchtobodyfont[#1]$f{\prime\prime\prime}^2$ % 7
-% \NC\switchtobodyfont[#1]$f'(x)$ % 8
-% \NC\switchtobodyfont[#1]$f''(x)$ % 9
-% \NC\switchtobodyfont[#1]$f'''(x)$ % 10
-% \NC\NR
-% }
-%
-% \starttabulate[|Tl|Tc|Tc|Tc|Tc|Tc|Tc|Tc|Tc|Tc|Tc|]
-% \NC\NC1\NC2\NC3\NC4\NC5\NC6\NC7\NC8\NC9\NC10\NC\NR
-% \SampleLine{modern}
-% \SampleLine{cambria}
-% \SampleLine{xits}
-% \SampleLine{minion}
-% \stoptabulate
-% \stopbuffer
-%
-% \typebuffer \getbuffer
-
-% most math fonts have messed up primes, just test this: $\prime^{\prime^{\prime}}$
-
-{ \catcode\circumflexasciicode\othercatcode \glet\othercircumflextoken ^ }
-{ \catcode\circumflexasciicode\superscriptcatcode \glet\superscriptcircumflextoken^ }
-
-\ifdefined \prime \else
- \Umathchardef\prime "0 "0 "2032
-\fi
-
-% \let\math_prime_indeed_normal\prime
-%
-% \appendtoks
-% \let\math_prime_indeed_normal\prime % gets defined later
-% \let\mathfontprime\prime % for tracing
-% \let\prime\math_prime_indeed % so this is needed
-% \to \everydump
-%
-% \protected\def\math_prime_indeed
-% {\iffontchar\textfont\zerocount"FE325\relax
-% ^\bgroup
-% \expandafter\math_prime_indeed_virtual % virtual mess (using funny signal)
-% \else
-% % \expandafter\math_prime_indeed_normal % gets collapsed
-% \expandafter\math_prime_indeed_crapped % gets collapsed
-% \fi}
-%
-% \def\math_prime_indeed_crapped
-% {{^{\math_prime_indeed_normal}}}
-%
-% % \let\prime\math_prime_indeed
-%
-% \def\math_prime_indeed_virtual
-% {\math_prime_indeed_normal
-% \futurelet\nexttoken\math_prime_indeed_choice}
-%
-% \installcorenamespace{mathprime}
-%
-% \def\math_prime_indeed_choice
-% {\csname\??mathprime
-% \ifx '\nexttoken a\else
-% \ifx \math_prime_indeed_normal\nexttoken a\else
-% \ifx \prime\nexttoken a\else
-% \ifx\superscriptcircumflextoken\nexttoken b\else
-% \ifx\othercircumflextoken \nexttoken b\else
-% c\fi\fi\fi\fi\fi
-% \endcsname}
-%
-% \setvalue{\??mathprime a}#1{\math_prime_indeed_virtual}
-% \setvalue{\??mathprime b}#1#2{#2\egroup}
-% \setvalue{\??mathprime c}{\egroup}
-%
-% \let\activemathprime\math_prime_indeed
-%
-% \bgroup
-%
-% \catcode\primeasciicode\activecatcode
-%
-% \global\everymathematics\expandafter{\the\everymathematics\let'\math_prime_indeed} % todo: do this at the lua end
-%
-% \egroup
-
-% $\char26$ gives an error because it expands to an active character that
-% then becomes an & which is then seen as an alignment character; anyway,
-% even when we switch like this the different meaning only happens when
-% we're in math mode which can be delayed till we're in a cell
-
-\bgroup
-
- \catcode\underscoreasciicode\activecatcode
- \catcode\circumflexasciicode\activecatcode
- \catcode\ampersandasciicode \activecatcode
-
- \glet\specialmathaligntab\normalmathaligntab
-
- \permanent\protected\gdef\obeymathcatcodes
- {\let _\normalsubscript
- \let ^\normalsuperscript
- \def &\specialmathaligntab
- }
-
- \doglobal\appendtoks
- \enforced\let _\normalsubscript
- \enforced\let ^\normalsuperscript
- \enforced\let &\specialmathaligntab
- \to \everymathematics
-
- % \permanent\protected\gdef\normalmathampersands
- % {\let\specialmathaligntab\mathampersand}
-
-\egroup
-
-\newtoks\everydonknuthmode
-\newtoks\everynonknuthmode
-
-\newconditional \knuthmode
-
-\let\nonknuthmode\relax % no longer needed in MkIV
-\let\donknuthmode\relax % no longer needed in MkIV
-
-% \def\nonknuthmode
-% {\pushcatcodetable
-% \setcatcodetable\ctxcatcodes
-% \the\everynonknuthmode
-% \let\nonknuthmode\relax
-% \popcatcodetable}
-%
-% \def\donknuthmode
-% {\pushcatcodetable
-% \setcatcodetable\ctxcatcodes
-% \the\everydonknuthmode
-% \popcatcodetable}
-%
-% \bgroup
-%
-% \catcode\underscoreasciicode\activecatcode
-% \catcode\circumflexasciicode\activecatcode
-% \catcode\ampersandasciicode \activecatcode
-%
-% \global \everynonknuthmode {\appendtoks
-% \let_\normalsubscript
-% \let^\normalsuperscript
-% \let&\normalmathaligntab % use \def when it's \aligntab
-% \to \everymathematics}
-%
-% \egroup
-%
-% \appendtoks
-% \setfalse\knuthmode
-% \catcode\underscoreasciicode\othercatcode
-% \catcode\circumflexasciicode\othercatcode
-% \catcode\ampersandasciicode \othercatcode
-% \to \everynonknuthmode
-%
-% \appendtoks
-% \settrue\knuthmode
-% \catcode\underscoreasciicode\subscriptcatcode
-% \catcode\circumflexasciicode\superscriptcatcode
-% \catcode\ampersandasciicode \alignmentcatcode
-% \to \everydonknuthmode
-%
-% \appendtoks
-% \startextendcatcodetable\ctxcatcodes
-% \catcode\underscoreasciicode\othercatcode
-% \catcode\circumflexasciicode\othercatcode
-% \catcode\ampersandasciicode \othercatcode
-% \stopextendcatcodetable
-% \to \everynonknuthmode
-%
-% \appendtoks
-% \startextendcatcodetable\ctxcatcodes
-% \catcode\underscoreasciicode\subscriptcatcode
-% \catcode\circumflexasciicode\superscriptcatcode
-% \catcode\ampersandasciicode \alignmentcatcode
-% \stopextendcatcodetable
-% \to \everydonknuthmode
-
-%D Even more drastic (this code will move as nonknuthmode is default now)
-
-% \protected\def\enableasciimode
-% {\ctxlua{resolvers.macros.enablecomment()}%
-% \glet\enableasciimode\relax}
-%
-% \protected\def\asciimode
-% {\catcodetable\txtcatcodes
-% \enableasciimode
-% \nonknuthmode}
-%
-% \protected\def\startasciimode
-% {\pushcatcodetable
-% \catcodetable\txtcatcodes
-% \enableasciimode
-% \nonknuthmode}
-%
-% \protected\def\stopasciimode
-% {\popcatcodetable
-% \ifconditional\knuthmode\else\donknuthmode\fi}
-
-\permanent\protected\def\enableasciimode
- {\clf_enableasciimode} % relaxes itself
-
-\permanent\protected\def\asciimode
- {\catcodetable\txtcatcodes
- \clf_enableasciimode}
-
-\permanent\protected\def\startasciimode
- {\pushcatcodetable
- \catcodetable\txtcatcodes
- \clf_enableasciimode}
-
-\permanent\protected\def\stopasciimode
- {\popcatcodetable}
-
-%D Needed for unicode:
-
-\permanent\def\nulloperator{\mathortext{\mathop{\emptyhbox}}{\emptyhbox}}
-
-%D Memory saver:
-
-\def\math_basics_check_compact
- {\doifelse{\mathematicsparameter\c!compact}\v!yes
- \enabledirectives\disabledirectives[math.virtual.optional]}
-
-\appendtoks
- \ifempty\currentmathematics
- \math_basics_check_compact % less tracing
- \fi
-\to \everysetupmathematics
-
-\setupmathematics
- [\c!compact=\v!no]
-
-% \enabletrackers[typesetters.directions.math]
-
-%D Right||to||left typesetting in math is supported by the \type {align} parameter
-%D with as option the \type {bidi} parameter. Of course support for special symbols
-%D like square roots depends on the font as well. We probably need to mirror a few
-%D more characters.
-%D
-%D \startbuffer
-%D \removeunwantedspaces
-%D \m{ ( 1 = 1) }\quad
-%D \m{ (123 = 123) }\quad
-%D \m{ a ( 1 = 1) b }\quad
-%D \m{ a (123 = 123) b }\quad
-%D \m{ x = 123 y + (1 / \sqrt {x}) }
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \starttabulate[|T|T||]
-%D \HL
-%D \NC align \NC bidi \NC \NC \NR
-%D \HL
-%D \NC l2r \NC no \NC \setupmathematics[bidi=no] \getbuffer \NC \NR
-%D \NC l2r \NC yes \NC \setupmathematics[bidi=yes] \getbuffer \NC \NR
-%D \NC r2l \NC no \NC \setupmathematics[align=r2l,bidi=no] \getbuffer \NC \NR
-%D \NC r2l \NC yes \NC \setupmathematics[align=r2l,bidi=yes] \getbuffer \NC \NR
-%D \HL
-%D \stoptabulate
-
-% We will use proper constants when we go numbers instead of XXX.
-
-\newconditional\c_math_right_to_left
-
-\installcorenamespace{mathaligndirection}
-
-\setvalue{\??mathaligndirection r2l}{\settrue\c_math_right_to_left}
-\setvalue{\??mathaligndirection\v!righttoleft}{\settrue\c_math_right_to_left}
-
-\appendtoks
- \ifcsname\??mathaligndirection\mathematicsparameter\c!align\endcsname
- \lastnamedcs
- \else
- \setfalse\c_math_right_to_left
- \fi
-\to \everyswitchmathematics
-
-\protected\def\math_basics_synchronize_direction
- {\mathdirection\ifconditional\c_math_right_to_left\directionrighttoleft\else\directionlefttoright\fi}
-
-% Not \everymathematics as it comes too late and I'm not in the mood for a mixed mode
-% kludge now (should be a property of beginmath nodes and passed to callbacks).
-
-\appendtoks
- \math_basics_synchronize_direction
-\to \everyswitchmathematics
-
-% experimental (needed for an article)
-
-\installcorenamespace {mathbidi}
-
-\newcount\c_math_bidi
-
-\def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone}
-\def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue}
-
-\letvalue{\??mathbidi\v!yes}\math_bidi_enable
-\letvalue{\??mathbidi\v!no }\math_bidi_disable
-
-\appendtoks
- \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ?
- \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi
-\to \everysetupmathematics
-
-\appendtoks
- \c_attr_mathbidi\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi
-\to \everyswitchmathematics
-
-%D Delayed: greek.
-%D
-%D \starttyping
-%D \usetypescript[cambria]\setupbodyfont[cambria]
-%D \startTEXpage
-%D $\alpha \mathgreekupright \alpha \mathgreekitalic \alpha$
-%D \stopTEXpage
-%D \stoptyping
-
-% [lc uc] normal (upright) = 2, italic = 3, none = 0/1
-
-% We can move the setting to the lua end and use abstract numbers instead
-% if funny ones here.
-
-\installcorenamespace{mathgreek}
-
-\newconstant\c_math_greek_attribute
-
-\setvalue{\??mathgreek\v!none }{1}
-\setvalue{\??mathgreek\v!normal}{2}
-\setvalue{\??mathgreek\v!italic}{3}
-
-% \appendtoks
-% \edef\p_sygreek{\mathematicsparameter\s!sygreek}%
-% \edef\p_lcgreek{\mathematicsparameter\s!lcgreek}%
-% \edef\p_ucgreek{\mathematicsparameter\s!ucgreek}%
-% \c_math_greek_attribute"% hex digits
-% \csname\??mathgreek\ifcsname\??mathgreek\p_sygreek\endcsname\p_sygreek\else\v!none\fi\endcsname
-% \csname\??mathgreek\ifcsname\??mathgreek\p_lcgreek\endcsname\p_lcgreek\else\v!none\fi\endcsname
-% \csname\??mathgreek\ifcsname\??mathgreek\p_ucgreek\endcsname\p_ucgreek\else\v!none\fi\endcsname
-% \relax
-% \ifcase\c_math_greek_attribute
-% \c_math_greek_attribute\attributeunsetvalue
-% \fi
-% \to \everyswitchmathematics
-
-\appendtoks
- \edef\p_sygreek{\mathematicsparameter\s!sygreek}% still needed ?
- \edef\p_lcgreek{\mathematicsparameter\s!lcgreek}% still needed ?
- \edef\p_ucgreek{\mathematicsparameter\s!ucgreek}% still needed ?
- \c_math_greek_attribute"% hex digits
- \ifcsname\??mathgreek\p_sygreek\endcsname\lastnamedcs\else1\fi
- \ifcsname\??mathgreek\p_lcgreek\endcsname\lastnamedcs\else1\fi
- \ifcsname\??mathgreek\p_ucgreek\endcsname\lastnamedcs\else1\fi
- \relax
- \ifcase\c_math_greek_attribute
- \c_math_greek_attribute\attributeunsetvalue
- \fi
-\to \everyswitchmathematics
-
-% only used local
-
-\permanent\protected\def\mathgreekupright{\c_attr_mathgreek"222\relax}
-\permanent\protected\def\mathgreekitalic {\c_attr_mathgreek"333\relax}
-\permanent\protected\def\mathgreekdefault{\c_attr_mathgreek"000\relax}
-
-\let\mathgreeknormal\mathgreekupright
-\let\mathgreeknone \mathgreekdefault
-
-\appendtoks
- \c_attr_mathgreek\c_math_greek_attribute
-\to \everymathematics
-
-\setupmathematics
- [\s!sygreek=\v!normal,
- \s!lcgreek=\v!italic,
- \s!ucgreek=\v!normal] % was: none
-
-%D Math collapsing (ligatures)
-
-\installcorenamespace{mathcollapsing}
-
-\setnewconstant\c_math_collapsing_attribute\attributeunsetvalue
-
-\letvalue{\??mathcollapsing 1}\plusone % specials
-\letvalue{\??mathcollapsing 2}\plustwo % specials + mathlist
-\letvalue{\??mathcollapsing 3}\plusthree % mathlist + specials
-\letvalue{\??mathcollapsing\v!none }\attributeunsetvalue
-\letvalue{\??mathcollapsing\v!reset}\attributeunsetvalue
-
-\def\math_collapsing_initialize
- {\ifnum\c_math_collapsing_attribute=\attributeunsetvalue \else
- \clf_initializemathcollapsing % one time
- \glet\math_collapsing_initialize\relax
- \fi}
-
-\appendtoks
- \edef\p_collapsing{\mathematicsparameter\s!collapsing}%
- \c_math_collapsing_attribute
- \ifcsname\??mathcollapsing\p_collapsing\endcsname\lastnamedcs\else\attributeunsetvalue\fi
- \relax
-\to \everyswitchmathematics % only in mathematics
-
-\appendtoks
- \math_collapsing_initialize
- \c_attr_mathcollapsing\c_math_collapsing_attribute
-\to \everymathematics
-
-\setupmathematics
- [\s!collapsing=1] % so that we at least do primes
-
-%D Math italics (experiment)
-
-%D We need keys but what names to use and because we have hardcoded solution
-%D we can stick to numbers.
-
-\installcorenamespace{mathitalics}
-
-\setnewconstant\c_math_italics_attribute\attributeunsetvalue
-
-\letvalue{\??mathitalics 1}\plusone % fontitalics
-\letvalue{\??mathitalics 2}\plustwo % fontdata
-\letvalue{\??mathitalics 3}\plusthree % quad based
-\letvalue{\??mathitalics 4}\plusfour % combination of 1 and 3
-\letvalue{\??mathitalics\v!none }\attributeunsetvalue
-\letvalue{\??mathitalics\v!reset}\attributeunsetvalue
-
-\def\math_italics_initialize
- {\ifnum\c_math_italics_attribute=\attributeunsetvalue \else
- \clf_initializemathitalics % one time
- \glet\math_italics_initialize\relax
- \fi}
-
-\appendtoks
- \edef\p_italics{\mathematicsparameter\s!italics}%
- \c_math_italics_attribute
- \ifcsname\??mathitalics\p_italics\endcsname\lastnamedcs\else\attributeunsetvalue\fi
- \relax
- % \math_italics_initialize
-\to \everyswitchmathematics % only in mathematics
-
-\appendtoks
- \math_italics_initialize
- \c_attr_mathitalics\c_math_italics_attribute
-\to \everymathematics
-
-% \setupmathematics % done later
-% [\s!italics=3] % 4 is probably better
-
-% looks nicer but can generate bogus csnames
-%
-% \setvalue{\??mathitalics1}{\math_italics_initialize\c_math_italics_attribute\plusone } % fontitalics
-% \setvalue{\??mathitalics2}{\math_italics_initialize\c_math_italics_attribute\plustwo } % fontdata
-% \setvalue{\??mathitalics3}{\math_italics_initialize\c_math_italics_attribute\plusthree} % quad based
-% \setvalue{\??mathitalics4}{\math_italics_initialize\c_math_italics_attribute\plusfour } % combination of 1 and 3
-%
-% \appendtoks
-% \c_math_italics_attribute\attributeunsetvalue
-% \csname\??mathitalics\mathematicsparameter\s!italics\endcsname
-% \to \everyswitchmathematics % only in mathematics
-
-%D Math kerns (experiment)
-
-\installcorenamespace{mathkernpairs}
-
-\setnewconstant\c_math_kernpairs_attribute\attributeunsetvalue % no real need for an extra constant
-
-\def\math_kernpairs_initialize
- {\ifnum\c_math_kernpairs_attribute=\attributeunsetvalue \else
- \clf_initializemathkernpairs % one time
- \glet\math_kernpairs_initialize\relax
- \fi}
-
-\appendtoks
- \edef\p_kernpairs{\mathematicsparameter\s!kernpairs}%
- \c_math_kernpairs_attribute\ifx\p_kernpairs\v!yes\plusone\else\attributeunsetvalue\fi\relax
-\to \everyswitchmathematics % only in mathematics
-
-\appendtoks
- \math_kernpairs_initialize
- \c_attr_mathkernpairs\c_math_kernpairs_attribute
-\to \everymathematics
-
-\setupmathematics
- [\s!kernpairs=\v!no]
-
-%D \macros
-%D {enablemathpunctuation,disablemathpunctuation}
-%D
-%D \startbuffer
-%D \enablemathpunctuation$(1,2) (1, 2) (1{,}2) \hbox{foo, not bar}$
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \blank{\getbuffer}\blank
-
-% \newconditional\automathpunctuation
-%
-% \protected\def\enablemathpunctuation {\settrue \automathpunctuation}
-% \protected\def\disablemathpunctuation{\setfalse\automathpunctuation}
-%
-% \appendtoks
-% \doifelse{\mathematicsparameter\v!autopunctuation}\v!yes\settrue\setfalse\automathpunctuation
-% \to \everyswitchmathematics
-%
-% \setupmathematics
-% [\v!autopunctuation=\v!no]
-%
-% \def\math_punctuation_next{\ifx\nexttoken\blankspace\signalcharacter\fi}
-%
-% \protected\def\math_punctuation_comma {\textcomma \futurelet\nexttoken\math_punctuation_next}
-% \protected\def\math_punctuation_period{\textperiod\futurelet\nexttoken\math_punctuation_next}
-%
-% \setnewconstant\c_math_comma "002C
-% \setnewconstant\c_math_period "002E
-% \setnewconstant\c_math_special"8000
-%
-% \bgroup
-%
-% \catcode\c_math_comma \activecatcode
-% \catcode\c_math_period\activecatcode
-%
-% \protected\gdef\math_punctuation_initialize_indeed
-% {\mathcode\c_math_comma \c_math_special
-% \mathcode\c_math_period\c_math_special
-% \let,\math_punctuation_comma
-% \let.\math_punctuation_period
-% \c_attr_mathpunctuation\plustwo}
-%
-% \protected\gdef\math_punctuation_initialize_yes
-% {\c_attr_mathpunctuation\plustwo}
-%
-% \protected\gdef\math_punctuation_initialize_nop
-% {\c_attr_mathpunctuation\plusone}
-%
-% \egroup
-%
-% \appendtoks
-% \ifconditional\automathpunctuation
-% \math_punctuation_initialize_indeed
-% \math_punctuation_initialize_yes
-% \let\enablemathpunctuation \math_punctuation_initialize_yes
-% \let\disablemathpunctuation\math_punctuation_initialize_nop
-% \fi
-% \to \everymathematics
-
-% Later I will look again into a \LUATEX\ based solution. It only makes sense
-% to delegate to \LUA\ when we have more variants and need analysis (experimental
-% trickery removed for a while).
-
-% \def\math_punctuation_comma_next {\ifx\nexttoken\blankspace\mathpunct\else\mathord\fi{\textcomma }}
-% \def\math_punctuation_period_next{\ifx\nexttoken\blankspace\mathpunct\else\mathord\fi{\textperiod}}
-%
-% \protected\def\math_punctuation_nop_comma {\mathpunct{\textcomma}}
-% \protected\def\math_punctuation_nop_period{\mathord{\textperiod}}
-%
-% \protected\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next}
-% \protected\def\math_punctuation_all_period{\futurelet\nexttoken\math_punctuation_period_next}
-%
-% \let\math_punctuation_yes_comma \math_punctuation_all_comma
-% \let\math_punctuation_yes_period\math_punctuation_nop_period
-%
-% The next one is more efficient as it produces more flat noad lists for numbers.
-
-\setnewconstant\c_math_comma "002C
-\setnewconstant\c_math_period "002E
-%setnewconstant\c_math_colon "003A
-\setnewconstant\c_math_semicolon"003B
-\setnewconstant\c_math_special "8000
-
-% todo: use \Umathclass\c_math_comma\mathpunctcode etc for temporary switching
-
-\def\math_set_o_comma {\Umathcode\c_math_comma \mathordcode \zerocount\c_math_comma}
-\def\math_set_p_comma {\Umathcode\c_math_comma \mathpunctcode\zerocount\c_math_comma}
-\def\math_set_o_period {\Umathcode\c_math_period \mathordcode \zerocount\c_math_period}
-\def\math_set_p_period {\Umathcode\c_math_period \mathpunctcode\zerocount\c_math_period}
-\def\math_set_o_semicolon{\Umathcode\c_math_semicolon\mathordcode \zerocount\c_math_semicolon}
-\def\math_set_p_semicolon{\Umathcode\c_math_semicolon\mathpunctcode\zerocount\c_math_semicolon}
-
-\edef\math_set_o_both {\math_set_o_period\math_set_o_comma}
-\edef\math_set_p_both {\math_set_p_period\math_set_p_comma}
-
-\protected\def\math_punctuation_nop_comma {\begingroup\math_set_p_comma ,\endgroup}
-\protected\def\math_punctuation_nop_period {\begingroup\math_set_o_period .\endgroup}
-\protected\def\math_punctuation_nop_semicolon{\begingroup\math_set_p_semicolon;\endgroup}
-
-% todo: use new lookahead stuff
-
-\protected\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next}
-\protected\def\math_punctuation_all_period {\futurelet\nexttoken\math_punctuation_period_next}
-\protected\def\math_punctuation_all_semicolon{\futurelet\nexttoken\math_punctuation_semicolon_next}
-
- \let\math_punctuation_yes_comma \math_punctuation_all_comma
- \let\math_punctuation_yes_period \math_punctuation_nop_period
- \let\math_punctuation_yes_semicolon\math_punctuation_all_semicolon
-
-\def\math_punctuation_comma_next {\begingroup\Umathcode\c_math_comma \ifx\nexttoken\blankspace\mathordcode\else\mathordcode\fi\zerocount\c_math_comma ,\endgroup}
-\def\math_punctuation_period_next {\begingroup\Umathcode\c_math_period \ifx\nexttoken\blankspace\mathordcode\else\mathordcode\fi\zerocount\c_math_period .\endgroup}
-\def\math_punctuation_semicolon_next{\begingroup\Umathcode\c_math_semicolon\ifx\nexttoken\blankspace\mathordcode\else\mathordcode\fi\zerocount\c_math_semicolon;\endgroup}
-
-\installcorenamespace {mathautopunctuation}
-
-\bgroup
-
- \catcode\c_math_comma \activecatcode
- \catcode\c_math_period \activecatcode
- \catcode\c_math_semicolon\activecatcode
-
- \setgvalue{\??mathautopunctuation\v!no}%
- {\let,\math_punctuation_nop_comma
- \let.\math_punctuation_nop_period
- \let;\math_punctuation_nop_semicolon}
-
- % more efficient list:
- %
- % \setgvalue{\??mathautopunctuation\v!no}%
- % {\Umathcode\c_math_period\mathordcode \zerocount\c_math_period
- % \Umathcode\c_math_comma \mathpunctcode\zerocount\c_math_comma }
-
- \setgvalue{\??mathautopunctuation\v!yes}%
- {\let,\math_punctuation_yes_comma
- \let.\math_punctuation_yes_period
- \let;\math_punctuation_nop_semicolon}
-
- \setgvalue{\??mathautopunctuation\v!all}%
- {\let,\math_punctuation_all_comma
- \let.\math_punctuation_all_period
- \let;\math_punctuation_nop_semicolon}
-
- \setgvalue{\??mathautopunctuation comma}%
- {\let,\math_punctuation_yes_comma
- \let.\math_punctuation_yes_period
- \let;\math_punctuation_nop_semicolon}
-
- \setgvalue{\??mathautopunctuation\v!yes\string,semicolon}%
- {\let,\math_punctuation_yes_comma
- \let.\math_punctuation_yes_period
- \let;\math_punctuation_yes_semicolon}
-
- \setgvalue{\??mathautopunctuation comma\string,semicolon}%
- {\let,\math_punctuation_yes_comma
- \let.\math_punctuation_yes_period
- \let;\math_punctuation_yes_semicolon}
-
- \setgvalue{\??mathautopunctuation\v!all\string,semicolon}%
- {\let,\math_punctuation_all_comma
- \let.\math_punctuation_all_period
- \let;\math_punctuation_all_semicolon}
-
-\egroup
-
-% \appendtoks
-% \global\mathcode\c_math_comma \c_math_special
-% \global\mathcode\c_math_period \c_math_special
-% \global\mathcode\c_math_semicolon\c_math_special
-% \to \everyjob
-
-% \activatemathcharacter\c_math_comma
-% \activatemathcharacter\c_math_period
-% \activatemathcharacter\c_math_semicolon
-
-\appendtoks
- \mathcode\c_math_comma \c_math_special
- \mathcode\c_math_period \c_math_special
- \mathcode\c_math_semicolon\c_math_special
- \begincsname\??mathautopunctuation\mathematicsparameter\v!autopunctuation\endcsname
-\to \everymathematics
-
-\appendtoks
- \ifcsname\??mathautopunctuation\mathematicsparameter\v!autopunctuation\endcsname \else
- \letmathematicsparameter\v!autopunctuation\v!no
- \fi
-\to \everysetupmathematics
-
-\def\enablemathpunctuation {\csname\??mathautopunctuation\v!no \endcsname}
-\def\disablemathpunctuation{\csname\??mathautopunctuation\v!yes\endcsname}
-
-\setupmathematics
- [\v!autopunctuation=\v!no] % no | yes | all | comma | yes,semicolon | all,semicolon
-
-%D The consequences of setting this are as follows:
-%D
-%D \def\TestA#1#2#3%
-%D {\ifnum#1=0 \type{#2}\else\setupmathematics[autopunctuation={#2}]$#3$\fi}
-%D \def\TestB#1#2%
-%D {\NC \TestA{#1}{no} {#2}
-%D \NC \TestA{#1}{yes} {#2}
-%D \NC \TestA{#1}{yes,semicolon}{#2}
-%D \NC \TestA{#1}{all} {#2}
-%D \NC \TestA{#1}{all,semicolon}{#2}
-%D \NC \NR}
-%D \starttabulate[|c|c|c|c|c|]
-%D \TestB{0}{}
-%D \TestB{1}{(1,2)=(1, 2)}
-%D \TestB{1}{(1.2)=(1. 2)}
-%D \TestB{1}{(1;2)=(1; 2)}
-%D \stoptabulate
-
-%D \macros
-%D {mathstyle}
-%D
-%D If one want to be sure that something is typeset in the appropriate style, \type
-%D {\mathstyle} can be used:
-%D
-%D \starttyping
-%D \mathstyle{something}
-%D \stoptyping
-
-% \def\mathstyle#1%
-% {\mathchoice
-% {\displaystyle #1}%
-% {\textstyle #1}%
-% {\scriptstyle #1}%
-% {\scriptscriptstyle#1}}
-%
-% We now have a primitive operation for this. As the macro overloads a new
-% primitive introduced in \LUATEX, we need to use \type {\normalmathstyle} when we
-% consult the current math style.
-%
-% \let \mathstyle \Ustack % spoils cramped
-%
-% \let \mathstyle \firstofoneargument
-%
-% 0 = display
-% 1 = crampeddisplay
-% 2 = text
-% 3 = crampedtext
-% 4 = script
-% 5 = crampedscript
-% 6 = scriptscript
-% 7 = crampedscriptscript
-
-\permanent\def\uncramped#1%
- {{\ifmathstyle
- \or \displaystyle \or
- \or \textstyle \or
- \or \scriptstyle \or
- \or \scriptscriptstyle \fi
- #1}}
-
-\permanent\def\cramped#1%
- {{\ifmathstyle
- \crampeddisplaystyle \or \or % 0 -> 1
- \crampedtextstyle \or \or % 2 -> 3
- \crampedscriptstyle \or \or % 4 -> 5
- \crampedscriptscriptstyle \fi % 6 -> 7
- #1}}
-
-\permanent\def\triggermathstyle#1{\Ustyle\numexpr#1\relax}
-%permanent\def\mathstyletrigger#1{\numexpr#1\relax}
-\permanent\let\mathstyletrigger \firstofoneargument
-
-\permanent\def\triggeredmathstyleparameter#1% to bypass the relax
- {\ifcase\numexpr\normalmathstyle\relax
- #1\displaystyle \or % 0
- #1\crampeddisplaystyle \or % 1
- #1\textstyle \or % 2
- #1\crampedtextstyle \or % 3
- #1\scriptstyle \or % 4
- #1\crampedscriptstyle \or % 5
- #1\scriptscriptstyle \or % 6
- #1\crampedscriptscriptstyle \else
- % error
- \fi}
-
-\permanent\def\mathstylefont#1% #1 is number (\normalmathstyle)
- {\ifcase\numexpr#1\relax
- \textfont \or
- \textfont \or
- \textfont \or
- \textfont \or
- \scriptfont \or
- \scriptfont \or
- \scriptscriptfont \or
- \scriptscriptfont \else
- \textfont
- \fi\fam} % was \zerocount
-
-\permanent\def\somemathstylefont#1% #1 is number (\normalmathstyle)
- {\ifcase\numexpr#1\relax
- \textfont \or
- \textfont \or
- \textfont \or
- \textfont \or
- \scriptfont \or
- \scriptfont \or
- \scriptscriptfont \or
- \scriptscriptfont \else
- \textfont
- \fi}
-
-\permanent\def\mathsmallstylefont#1% #1 is number (\normalmathstyle)
- {\ifcase\numexpr#1\relax
- \scriptfont \or
- \scriptfont \or
- \scriptfont \or
- \scriptfont \or
- \scriptscriptfont \or
- \scriptscriptfont \or
- \scriptscriptfont \or
- \scriptscriptfont \else
- \scriptfont
- \fi\fam} % was \zerocount
-
-\permanent\def\mathstyleface#1% #1 is number (\normalmathstyle)
- {\ifcase\numexpr#1\relax
- \textface \or
- \textface \or
- \textface \or
- \textface \or
- \scriptface \or
- \scriptface \or
- \scriptscriptface \or
- \scriptscriptface \else
- \textface
- \fi}
-
-\permanent\def\mathsmallstyleface#1% #1 is number (\normalmathstyle)
- {\ifcase\numexpr#1\relax
- \scriptface \or
- \scriptface \or
- \scriptface \or
- \scriptface \or
- \scriptscriptface \or
- \scriptscriptface \or
- \scriptscriptface \or
- \scriptscriptface \else
- \scriptface
- \fi}
-
-\permanent\def\mathstylecommand#1#2#3%
- {\ifcase\numexpr\normalmathstyle\relax
- \expandafter#1\or
- \expandafter#1\or
- \expandafter#1\or
- \expandafter#1\or
- \expandafter#2\or
- \expandafter#2\or
- \expandafter#3\or
- \expandafter#3\else
- \expandafter#1\fi}
-
-% \permanent\def\textstyleface#1% #1 is number (\normalmathstyle)
-% {\ifcase\numexpr#1\relax
-% \tf \or
-% \tf \or
-% \tf \or
-% \tf \or
-% \tfx \or
-% \tfx \or
-% \tfxx \or
-% \tfxx \else
-% \tf
-% \fi}
-
-\permanent\protected\def\verbosemathstyle#1% #1 is number (\normalmathstyle)
- {{\normalexpanded{\relax\darkgray\ttxx[\number#1:\ifcase\numexpr#1\relax
- display\or % 0
- crampeddisplay\or % 1
- text\or % 2
- crampedtext\or % 3
- script\or % 4
- crampedscript\or % 5
- scriptscript\or % 6
- crampedscriptscript\else % 7
- unknown\fi]}}}
-
-\permanent\protected\def\showmathstyle{\verbosemathstyle\normalmathstyle}
-
-%D Handy too:
-
-\permanent\def\mathcharwd{\fontcharwd\mathstylefont\normalmathstyle}
-\permanent\def\mathcharht{\fontcharht\mathstylefont\normalmathstyle}
-\permanent\def\mathchardp{\fontchardp\mathstylefont\normalmathstyle}
-
-%D Some dimension fun:
-
-\let\mathexheight \exheight % also in math-ini.mkiv
-\def\mathemwidth {\Umathquad\normalmathstyle} % also in math-ini.mkiv
-
-%D A plain inheritance:
-
-\permanent\def\mathpalette#1#2%
- {\mathchoice
- {#1\displaystyle {#2}}%
- {#1\textstyle {#2}}%
- {#1\scriptstyle {#2}}%
- {#1\scriptscriptstyle{#2}}}
-
-%D \macros
-%D {cramedllap, crampedrlap, crampedclap}
-%D
-%D In many cases, one wants to use the \tex {clap} macro in math mode while using
-%D subscripts. Normally, subscripts are in cramped mode, and these macros allow you
-%D to go to cramped mode. For example:
-%D
-%D \startbuffer
-%D \startformula
-%D \sum_{a^2 < b^2 < c^2} \quad
-%D \sum_{\clap{a^2 < b^2 < c^2}} \quad
-%D \sum_{\crampedclap{a^2 < b^2 < c^2}}
-%D \stopformula
-%D \stopbuffer
-%D
-%D \start
-%D \typebuffer
-%D \switchtobodyfont[24pt]
-%D \getbuffer
-%D \stop
-%D
-%D This used to be in \type {supp-math.mkxl}:
-
-\permanent\protected\def\crampedllap#1{\llap{\cramped#1}}
-\permanent\protected\def\crampedrlap#1{\rlap{\cramped#1}}
-\permanent\protected\def\crampedclap#1{\clap{\cramped#1}}
-
-%D Often we can use:
-%D
-%D \startbuffer
-%D $x^{\mathstylehbox{x^{\mathstylehbox{x}}}}$
-%D \stopbuffer
-%D
-%D \typebuffer \getbuffer
-
-% to be tested: {#1} but it could have side effects
-
-% \protected\def\mathstylehbox#1% sensitive for: a \over b => {a\over b} or \frac{a}{b}
-% {\normalexpanded{\hbox\bgroup
-% \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup}
-
-\permanent\protected\def\mathstylehbox#1#% sensitive for: a \over b => {a\over b} or \frac{a}{b}
- {\math_style_hbox{#1}}
-
-\protected\def\math_style_hbox#1#2% sensitive for: a \over b => {a\over b} or \frac{a}{b}
- {\normalexpanded{\hbox#1\bgroup
- \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#2\stopimath\egroup}
-
-\permanent\protected\def\mathstylevbox#1%
- {\normalexpanded{\vbox\bgroup
- \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup}
-
-\permanent\protected\def\mathstylevcenter#1%
- {\normalexpanded{\vcenter\bgroup
- \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup}
-
-\permanent\protected\def\mathstylevcenteredhbox#1%
- {\normalexpanded{\vcenter\bgroup\hbox\bgroup
- \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup\egroup}
-
-\permanent\protected\def\mathstylevcenteredvbox#1%
- {\normalexpanded{\vcenter\bgroup\vbox\bgroup
- \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup\egroup}
-
-\permanent\protected\def\setmathsmalltextbox#1#2#%
- {\normalizebodyfontsize\m_math_text_choice_face{\mathsmallstyleface\normalmathstyle}%
- \setbox#1#2\bgroup
- \font_basics_switchtobodyfont\m_math_text_choice_face
- \let\next}
-
-\permanent\protected\def\setmathtextbox#1#2#%
- {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
- \setbox#1#2\bgroup
- \font_basics_switchtobodyfont\m_math_text_choice_face
- \let\next}
-
-%D Here is the new mechanism ... it might replace some of the above but we will do
-%D that stepwise. Keep in mind that cramped only affects superscripts and even then,
-%D only when in a smaller size than normal.
-%D
-%D \def\TestMe#1%
-%D {\NC \ttbf #1
-%D \NC \ruledhbox{$\setupmathstyle[#1]x + x_j^2 + x_i^{e^2} + \frac{1}{x}$}
-%D \NC \ruledhbox{$\setupmathstyle[#1,small]x + x_j^2 + x_i^{e^2} + \frac{1}{x}$}
-%D \NC \NR}
-%D
-%D \starttabulate[|l|r|l|]
-%D \HL
-%D \NC \NC \NC \ttbf ...,small \NC \NR
-%D \HL
-%D \TestMe{text} \TestMe{text,cramped}
-%D \TestMe{script} \TestMe{script,cramped}
-%D \TestMe{scriptscript} \TestMe{scriptscript,cramped}
-%D \TestMe{display} \TestMe{display,cramped}
-%D \HL
-%D \stoptabulate
-
-\permanent\def\triggerdisplaystyle
- {\ifmathstyle
- \displaystyle \or
- \crampeddisplaystyle \or
- \displaystyle \or
- \crampeddisplaystyle \or
- \displaystyle \or
- \crampeddisplaystyle \or
- \displaystyle \or
- \crampeddisplaystyle \or
- \fi}
-
-\permanent\def\triggertextstyle
- {\ifmathstyle
- \textstyle \or
- \crampedtextstyle \or
- \textstyle \or
- \crampedtextstyle \or
- \textstyle \or
- \crampedtextstyle \or
- \textstyle \or
- \crampedtextstyle \else
- \fi}
-
-\permanent\def\triggerscriptstyle
- {\ifmathstyle
- \scriptstyle \or
- \crampedscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \or
- \fi}
-
-\permanent\def\triggerscriptscriptstyle
- {\ifmathstyle
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \fi}
-
-\permanent\def\triggeruncrampedstyle
- {\ifmathstyle
- \or \displaystyle \or
- \or \textstyle \or
- \or \scriptstyle \or
- \or \scriptscriptstyle \fi}
-
-\permanent\def\triggercrampedstyle
- {\ifmathstyle
- \crampeddisplaystyle \or \or
- \crampedtextstyle \or \or
- \crampedscriptstyle \or \or
- \crampedscriptscriptstyle \fi}
-
-\permanent\def\triggersmallstyle
- {\ifmathstyle
- \scriptstyle \or
- \crampedscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \fi}
-
-\permanent\def\triggeruncrampedsmallstyle
- {\ifmathstyle
- \scriptstyle \or
- \scriptstyle \or
- \scriptstyle \or
- \scriptstyle \or
- \scriptscriptstyle \or
- \scriptscriptstyle \or
- \scriptscriptstyle \or
- \scriptscriptstyle \or
- \fi}
-
-\permanent\def\triggercrampedsmallstyle
- {\ifmathstyle
- \crampedscriptstyle \or
- \crampedscriptstyle \or
- \crampedscriptstyle \or
- \crampedscriptstyle \or
- \crampedscriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \crampedscriptscriptstyle \or
- \fi}
-
-\permanent\def\triggerbigstyle
- {\ifmathstyle
- \displaystyle \or
- \crampeddisplaystyle \or
- \textstyle \or
- \crampedtextstyle \or
- \textstyle \or
- \crampedtextstyle \or
- \scriptstyle \or
- \crampedscriptstyle \or
- \fi}
-
-\permanent\def\triggeruncrampedbigstyle
- {\ifmathstyle
- \displaystyle \or
- \displaystyle \or
- \textstyle \or
- \textstyle \or
- \textstyle \or
- \textstyle \or
- \scriptstyle \or
- \scriptstyle \or
- \fi}
-
-\permanent\def\triggercrampedbigstyle
- {\ifmathstyle
- \crampeddisplaystyle \or
- \crampeddisplaystyle \or
- \crampedtextstyle \or
- \crampedtextstyle \or
- \crampedtextstyle \or
- \crampedtextstyle \or
- \crampedscriptstyle \or
- \crampedscriptstyle \or
- \fi}
-
-\newcount\c_math_saved_style
-
-\permanent\protected\def\pushmathstyle % assumes begingroup .. endgroup
- {\c_math_saved_style\mathstyle}
-
-\permanent\protected\def\popmathstyle
- {\ifnum\mathstyle=\c_math_saved_style\else
- \triggermathstyle\c_math_saved_style
- \fi}
-
-\installcorenamespace{mathstylecommand}
-\installcorenamespace{mathstylecache}
-
-\newconstant\c_math_styles_state_style
-\newconstant\c_math_styles_state_cramped
-\newconstant\c_math_styles_state_size
-
-\def\math_style_add_to_cache_choice {%
- \ifcase\c_math_styles_state_size
- \ifcase\c_math_styles_state_style
- \ifcase\c_math_styles_state_cramped
- \relax \or
- \noexpand\triggeruncrampedstyle \or
- \noexpand\triggercrampedstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerdisplaystyle \or
- \displaystyle \or
- \crampeddisplaystyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggertextstyle \or
- \textstyle \or
- \crampedtextstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerscriptscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \fi
- \fi
- \or % small
- \ifcase\c_math_styles_state_style
- \ifcase\c_math_styles_state_cramped
- \noexpand\triggersmallstyle \or
- \noexpand\triggeruncrampedsmallstyle \or
- \noexpand\triggercrampedsmallstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerscriptscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerscriptscriptstyle \or
- \scriptscriptstyle \or
- \crampedscriptscriptstyle \fi
- \fi
- \or % large
- \ifcase\c_math_styles_state_style
- \ifcase\c_math_styles_state_cramped
- \noexpand\triggerbigstyle \or
- \noexpand\triggeruncrampedbigstyle \or
- \noexpand\triggercrampedbigstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerdisplaystyle \or
- \displaystyle \or
- \crampeddisplaystyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggertextstyle \or
- \textstyle \or
- \crampedtextstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggertextstyle \or
- \textstyle \or
- \crampedtextstyle \fi
- \or\ifcase\c_math_styles_state_cramped
- \noexpand\triggerscriptstyle \or
- \scriptstyle \or
- \crampedscriptstyle \fi
- \fi
- \fi
-}
-
-\protected\def\math_style_set#1%
- {\edef\m_math_style_asked{#1}%
- \ifempty\m_math_style_asked \else
- \math_style_set_indeed
- \fi}
-
-\let\setmathstyle\math_style_set
-
-\permanent\def\installmathstyle#1#2%
- {\ifcsname\??mathstylecommand#1\endcsname \else
- \setvalue{\??mathstylecommand#1}{#2}%
- \fi}
-
-\def\math_style_collect#1%
- {\csname\??mathstylecommand#1\endcsname}
-
-\setvalue{\??mathstylecommand\s!display }{\c_math_styles_state_style \plusone}
-\setvalue{\??mathstylecommand\s!text }{\c_math_styles_state_style \plustwo}
-\setvalue{\??mathstylecommand\s!script }{\c_math_styles_state_style \plusthree}
-\setvalue{\??mathstylecommand\s!scriptscript}{\c_math_styles_state_style \plusfour}
-
-\setvalue{\??mathstylecommand\s!uncramped }{\c_math_styles_state_cramped\plusone}
-\setvalue{\??mathstylecommand\s!cramped }{\c_math_styles_state_cramped\plustwo}
-\setvalue{\??mathstylecommand\v!normal }{\c_math_styles_state_cramped\plusone}
-\setvalue{\??mathstylecommand\v!packed }{\c_math_styles_state_cramped\plustwo}
-
-\setvalue{\??mathstylecommand\v!small }{\c_math_styles_state_size \plusone}
-\setvalue{\??mathstylecommand\v!big }{\c_math_styles_state_size \plustwo}
-
-\permanent\protected\def\setupmathstyle[#1]%
- {\edef\m_math_style_asked{#1}%
- \ifempty\m_math_style_asked \else
- \math_style_set_indeed
- \fi}
-
-\permanent\protected\def\usemathstyleparameter#1% faster local variant
- {\edef\m_math_style_asked{#1\c!mathstyle}%
- \ifempty\m_math_style_asked \else
- \math_style_set_indeed
- \fi}
-
-%D \startbuffer
-%D \definemathstyle[mystyle][scriptscript]
-%D
-%D $text\startmathstyle[mystyle]scriptscript\stopmathstyle text$
-%D \stopbuffer
-%D
-%D \typebuffer \blank \start \getbuffer \stop \blank
-
-\installcorenamespace {mathstyle}
-
-\permanent\tolerant\protected\def\definemathstyle[#1]#*[#2]%
- {\c_math_styles_state_style \zerocount
- \c_math_styles_state_cramped\zerocount
- \c_math_styles_state_size \zerocount
- \rawprocesscommacommand[#2]\math_style_collect
- \letcsname\??mathstyle#1\normalexpanded{\endcsname\math_style_add_to_cache_choice}}
-
-% \def\math_style_set_indeed
-% {\csname\??mathstyle
-% \ifcsname\??mathstyle\m_math_style_asked\endcsname
-% \m_math_style_asked
-% \else
-% \??mathstyle
-% \fi
-% \endcsname}
-%
-% \setvalue{\??mathstyle\??mathstyle}%
-% {\csname\??mathstylecache
-% \ifcsname\??mathstylecache\m_math_style_asked\endcsname
-% \m_math_style_asked
-% \else
-% \??mathstylecache
-% \fi
-% \endcsname}
-%
-% \setvalue{\??mathstylecache\??mathstylecache}%
-% {\c_math_styles_state_style \zerocount
-% \c_math_styles_state_cramped\zerocount
-% \c_math_styles_state_size \zerocount
-% \rawprocesscommacommand[\m_math_style_asked]\math_style_collect
-% \expandafter\glet\csname\??mathstylecache\m_math_style_asked\normalexpanded{\endcsname\math_style_add_to_cache_choice}%
-% \csname\??mathstylecache\m_math_style_asked\endcsname}
-
-\def\math_style_set_indeed
- {\ifcsname\??mathstyle\m_math_style_asked\endcsname
- \lastnamedcs
- \else
- \math_style_set_mathstyle_mathstyle
- \fi}
-
-\def\math_style_set_mathstyle_mathstyle
- {\ifcsname\??mathstylecache\m_math_style_asked\endcsname
- \lastnamedcs
- \else
- \math_style_set_mathstyle_mathstylecache
- \fi}
-
-\def\math_style_set_mathstyle_mathstylecache
- {\c_math_styles_state_style \zerocount
- \c_math_styles_state_cramped\zerocount
- \c_math_styles_state_size \zerocount
- \rawprocesscommacommand[\m_math_style_asked]\math_style_collect
- \expandafter\glet\csname\??mathstylecache\m_math_style_asked\normalexpanded{\endcsname\math_style_add_to_cache_choice}%
- \csname\??mathstylecache\m_math_style_asked\endcsname}
-
-\letvalue{\??mathstyle \??mathstyle }\math_style_set_mathstyle_mathstyle % still needed?
-\letvalue{\??mathstylecache\??mathstylecache}\math_style_set_mathstyle_mathstylecache % still needed?
-
-%D \startbuffer
-%D $x\begingroup\setupmathstyle[script]x\endgroup x$
-%D $x{\setupmathstyle[script]x}x$
-%D $x\startmathstyle[script]x\stopmathstyle x$
-%D \stopbuffer
-%D
-%D \typebuffer \getbuffer
-
-\permanent\protected\def\startmathstyle[#1]%
- {\edef\m_math_style_asked{#1}%
- \ifempty\m_math_style_asked
- \let\stopmathstyle\relax
- \else
- \bgroup
- \math_style_set_indeed
- \let\stopmathstyle\egroup
- \fi}
-
-\let\stopmathstyle\relax
-
-\permanent\protected\def\startusemathstyleparameter#1%
- {\edef\m_math_style_asked{#1\c!mathstyle}%
- \ifempty\m_math_style_asked
- \let\stopusemathstyleparameter\relax
- \else
- \bgroup
- \math_style_set_indeed
- \let\stopusemathstyleparameter\egroup
- \fi}
-
-\let\stopusemathstyleparameter\relax
-
-%D Something similar can be used in the (re|)|definition of \type {\text}. This
-%D version is a variation on the one in the math module (see \type{m-math} and|/|or
-%D \type {m-newmat}).
-
-\let\m_math_text_choice_face\relax
-
-% if needed we can get rid of the normalize (predo in font code)
-
-% \def\math_text_choice_font#1#2#%
-% {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
-% \hbox#2\bgroup
-% \font_basics_switchtobodyfont\m_math_text_choice_face
-% #1%
-% \let\next}
-
-% \def\math_text_choice_word#1#2#%
-% {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
-% \hbox#2\bgroup
-% \font_basics_switchtobodyfont\m_math_text_choice_face
-% #1%
-% \nospacing % \normalnospaces\plusone
-% \let\next}
-
-%D We accept a low level box specification so that one can make helpers:
-%D
-%D \startbuffer
-%D \startformula
-%D \startalign[m=2,align={middle}]
-%D \NC \text to 6cm{One\hfill} \NC a = 1 \NR
-%D \NC \text to 6cm{One Two\hfill} \NC b = 2 \NR
-%D \NC \text to 6cm{One Two Three\hfill} \NC c = 3 \NR
-%D \stopalign
-%D \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer \getbuffer
-
-\def\math_text_choice_font#1#2#%
- {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
- \hbox#2\bgroup
- \bgroup
- \aftergroup\hss
- \aftergroup\egroup
- \hss
- \font_basics_switchtobodyfont\m_math_text_choice_face
- #1%
- \let\next}
-
-\def\math_text_choice_word#1#2#%
- {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
- \hbox#2\bgroup
- \bgroup
- \aftergroup\hss
- \aftergroup\egroup
- \hss
- \font_basics_switchtobodyfont\m_math_text_choice_face
- #1%
- \nospacing % \normalnospaces\plusone
- \let\next}
-
-% \ruledhbox{$\mathtext{abc ffi}$}
-% \ruledhbox{$\mathword{abc ffi}$}
-
-% I need to decide:
-%
-%mathscriptboxmode \zerocount % no kerning
-%mathscriptboxmode \plusone % lists
-\mathscriptboxmode \plustwo % lists and boxes
-\mathscriptcharmode \plusone % lists and boxes
-%mathscriptboxmode \plusthree % lists and boxes with \boundary=1 (also for testing and demo)
-\mathrulethicknessmode\plusone % adaptive
-
-\permanent\protected\def\mathtext {\mathortext{\math_text_choice_font\relax}\hbox}
-\permanent\protected\def\mathword {\mathortext{\math_text_choice_word\relax}\hbox}
-
-\permanent\protected\def\mathtexttf{\mathortext{\math_text_choice_font\tf}\hbox}
-\permanent\protected\def\mathtextit{\mathortext{\math_text_choice_font\it}\hbox}
-\permanent\protected\def\mathtextsl{\mathortext{\math_text_choice_font\sl}\hbox}
-\permanent\protected\def\mathtextbf{\mathortext{\math_text_choice_font\bf}\hbox}
-\permanent\protected\def\mathtextbi{\mathortext{\math_text_choice_font\bi}\hbox}
-\permanent\protected\def\mathtextbs{\mathortext{\math_text_choice_font\bs}\hbox}
-
-\permanent\protected\def\mathwordtf{\mathortext{\math_text_choice_word\tf}\hbox}
-\permanent\protected\def\mathwordit{\mathortext{\math_text_choice_word\it}\hbox}
-\permanent\protected\def\mathwordsl{\mathortext{\math_text_choice_word\sl}\hbox}
-\permanent\protected\def\mathwordbf{\mathortext{\math_text_choice_word\bf}\hbox}
-\permanent\protected\def\mathwordbi{\mathortext{\math_text_choice_word\bi}\hbox}
-\permanent\protected\def\mathwordbs{\mathortext{\math_text_choice_word\bs}\hbox}
-
-%D Safeguard against redefinitions:
-
-\appendtoks
- \enforced\let\_\normalunderscore % is textunderscore or fakeunderscore
-\to \everymathematics
-
-%D Because we may overload \type {\text} in other (structuring) macros, we say:
-
-\appendtoks
- \enforced\let\text\mathtext
-\to \everymathematics
-
-%D The next code is derived from plain \TEX. The names will change!
-
-\newcount\interdisplaylinepenalty \interdisplaylinepenalty\plushundred
-
-% Actually, not using an if saves one macro so there is no penalty
-% for splitting up this macro.
-%
-% \newif\ifdt@p
-%
-% \def\displ@y
-% {\global\dt@ptrue
-% \math_openup\displayopenupvalue % was \openup\jot
-% \everycr
-% {\noalign
-% {\ifdt@p
-% \global\dt@pfalse
-% \ifdim\prevdepth>-\thousandpoint
-% \vskip-\lineskiplimit
-% \vskip\normallineskiplimit
-% \fi
-% \else
-% \penalty\interdisplaylinepenalty
-% \fi}}}
-
-\newtoks\mathdisplayaligntweaks
-
-% this can become an option:
-
-\protected\def\math_display_align_hack % I don't like the global, maybe we should push and pop
- {\glet\math_display_align_hack_indeed\math_display_align_hack_remove_skip
- \math_openup\displayopenupvalue % was \math_openup\jot
- \everycr{\noalign{\math_display_align_hack_indeed}}}
-
-\def\math_display_align_hack_remove_skip
- {\ifdim\prevdepth>-\thousandpoint
- \vskip\dimexpr-\lineskiplimit+\normallineskiplimit\relax
- \fi
- \glet\math_display_align_hack_indeed\math_display_align_hack_insert_penalty}
-
-\def\math_display_align_hack_insert_penalty
- {\penalty\interdisplaylinepenalty}
-
-\appendtoks
- \math_display_align_hack
-\to \mathdisplayaligntweaks
-
-%D Text in math:
-
-\permanent\protected\def\mathortext
- {\ifmmode
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-% \defineactivecharacter _ {\mathortext{_}{\_}} text_text $a^2$
-
-% force text mode, will be overloaded later
-
-\ifdefined\text\else \let\text\hbox \fi
-
-% \protected\def\mathoptext#1{\mathop{\text{#1}}}
-
-\permanent\protected\def\mathoptext
- {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}%
- %\showmathstyle
- \dowithnextbox
- {\mathop{\box\nextbox}}%
- \hbox\bgroup\font_basics_switchtobodyfont\m_math_text_choice_face\let\next}
-
-% new:
-
-% \startsetups math:morespacing
-% \Umathordordspacing\textstyle 1mu plus .5mu minus .25mu\relax
-% \stopsetups
-%
-% \setupmathematics
-% [setups=math:morespacing]
-
-\appendtoks
- \edef\p_setups{\mathematicsparameter\c!setups}%
- \ifempty\p_setups\else
- \directsetup\p_setups
- \fi
-\to \everyswitchmathematics
-
-% new:
-
-\permanent\protected\def\smallmathsymbol#1%
- {\mathematics{\mathbin{\normalexpanded{\raise.15\exheight\hbox{\normalstartimath
- \triggermathstyle{\the\numexpr\normalmathstyle+2\relax}#1%
- \normalstopimath}}}}}
-
-% this should be a primitive:
-
-\permanent\def\mathextensiblecode#1#2{\clf_extensiblecode\numexpr#1\relax\numexpr#2\relax}
-\permanent\def\mathhorizontalcode#1#2{\clf_horizontalcode\numexpr#1\relax\numexpr#2\relax}
-
-% experimental:
-
-%D \starttyping
-%D \enabletrackers[math.openedup]
-%D
-%D \dorecurse{10}{\dorecurse{#1}{whatever }}
-%D
-%D \startitemize[packed]
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \stopitemize
-%D \startitemize[packed,columns]
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \stopitemize
-%D
-%D \dorecurse{5}{\dorecurse{#1}{whatever }\openedupimath{\frac{1}{2}} }
-%D
-%D \startitemize[packed,columns]
-%D \startitem whatever \openedupimath{1+2} whatever
-%D \startitem whatever \openedupimath{1+2} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{1+2} whatever
-%D \startitem whatever \openedupimath{1+2} whatever
-%D \stopitemize
-%D
-%D \dorecurse{5}{\dorecurse{#1}{whatever }\openedupimath{1+2} }
-%D
-%D \startitemize[packed]
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \startitem whatever \openedupimath{\frac{1}{2}} whatever
-%D \stopitemize
-%D
-%D \dorecurse{10}{whatever }
-%D \dorecurse {5}{\dorecurse{#1}{whatever }\openedupimath{\frac{1}{2}} }
-%D \dorecurse{10}{whatever }
-%D \stoptyping
-
-\def\m_math_inline_openup_ht{\dimexpr\ifinsidecolumns\strutdp\else\lineheight\fi/\plusfour\relax}
-\def\m_math_inline_openup_dp{\dimexpr\ifinsidecolumns\strutdp\else\lineheight\fi/\plusfour\relax}
-
-% \def\m_math_inline_openup_ht{\dimexpr\lineheight/\ifinsidecolumns\pluseight\else\plusfour\fi\relax}
-% \def\m_math_inline_openup_dp{\dimexpr\lineheight/\ifinsidecolumns\pluseight\else\plusfour\fi\relax}
-
-\installtextracker
- {math.openedup}
- {\let\math_inline_openup_start_yes\math_inline_openup_traced_start}
- {\let\math_inline_openup_start_yes\math_inline_openup_normal_start}
-
-\protected\def\math_inline_openup_normal_start
- {\scratchheight\dimexpr\ht\scratchbox+\m_math_inline_openup_ht\relax
- \scratchdepth \dimexpr\dp\scratchbox+\m_math_inline_openup_dp\relax
- \vrule\s!width\zeropoint\s!height\scratchheight\s!depth\scratchdepth\relax
- \begingroup
- \let\math_inline_openup_stop\math_inline_openup_normal_stop}
-
-\protected\def\math_inline_openup_normal_stop
- {\endgroup
- \vrule\s!width\zeropoint\s!height\scratchheight\s!depth\scratchdepth\relax}
-
-\protected\def\math_inline_openup_traced_start
- {\scratchtopoffset \ht\scratchbox
- \scratchbottomoffset\dp\scratchbox
- \scratchheight \dimexpr\scratchtopoffset +\m_math_inline_openup_ht\relax
- \scratchdepth \dimexpr\scratchbottomoffset+\m_math_inline_openup_dp\relax
- \vrule\s!width\zeropoint\s!height\scratchheight\s!depth\scratchdepth\relax
- \begingroup
- \dofastcoloractivation{darkred}%
- \vrule\s!width\emwidth\s!height\scratchheight\s!depth-\scratchtopoffset\relax
- \endgroup
- \kern-\emwidth
- \begingroup
- \let\math_inline_openup_stop\math_inline_openup_traced_stop}
-
-\protected\def\math_inline_openup_traced_stop
- {\endgroup
- \kern-\emwidth
- \begingroup
- \dofastcoloractivation{darkblue}%
- \vrule\s!width\emwidth\s!height-\scratchbottomoffset\s!depth\scratchdepth\relax
- \endgroup
- \vrule\s!width\zeropoint\s!height\scratchheight\s!depth\scratchdepth\relax}
-
-\let\math_inline_openup_start_yes\math_inline_openup_normal_start
-\let\math_inline_openup_stop \relax
-
-\def\math_inline_openup_start_nop
- {\let\math_inline_openup_stop\relax}
-
-\permanent\protected\def\openedupimath
- {\dontleavehmode
- \begingroup
- \ifmmode
- \expandafter\openedupimath_math
- \else
- \expandafter\openedupimath_text
- \fi}
-
-\protected\def\openedupimath_math#1%
- {\setbox\scratchbox\mathstylehbox{#1}%
- \ifdim\ht\scratchbox>\strutht
- \math_inline_openup_start_yes
- \orelse\ifdim\dp\scratchbox>\strutdp
- \math_inline_openup_start_yes
- \else
- \math_inline_openup_start_nop
- \fi
- #1%
- \math_inline_openup_stop
- \endgroup}
-
-\protected\def\openedupimath_text#1%
- {\setbox\scratchbox\hbox{\startimath#1\stopimath}%
- \ifdim\ht\scratchbox>\strutht
- \math_inline_openup_start_yes
- \orelse\ifdim\dp\scratchbox>\strutdp
- \math_inline_openup_start_yes
- \else
- \math_inline_openup_start_nop
- \fi
- \startimath
- #1%
- \stopimath
- \math_inline_openup_stop
- \endgroup}
-
-% Also handy, especially for units:
-%
-% 0x002B=plus 0x2212=minus 0x2013=endash
-
-\permanent\protected\def\mathplus {+}
-\permanent\protected\def\mathminus {\ifmmode –\orelse\iffontchar\font`−−\else –\fi}
-\permanent\protected\def\mathplusminus{±}
-
-%D The \type {\displaywidth} is only known inside a display formula, so we need to catch
-%D it when still zero.
-
-\permanent\def\checkeddisplaywidth % hsize if zero
- {\dimexpr
- \ifzeropt\displaywidth
- \hsize
- \else
- \displaywidth
- \fi
- \relax}
-
-\permanent\def\maximizeddisplaywidth % larger than zero but within hsize
- {\dimexpr
- \ifzeropt\displaywidth
- \hsize
- \orelse\ifdim\displaywidth>\hsize
- \hsize
- \else
- \displaywidth
- \fi
- \relax}
-
-%D Experiment: (todo: same switch as italic, using \type {\everyswitchmathematics}).
-
-\newcount\c_math_domain_attribute
-
-\def\math_domain_initialize
- {\ifnum\c_math_domain_attribute=\attributeunsetvalue \else
- \clf_initializemathdomain % one time
- \glet\math_domain_initialize\relax
- \fi}
-
-\appendtoks
- \edef\p_domain{\mathematicsparameter\c!domain}%
- \ifempty\p_domain
- \c_math_domain_attribute\attributeunsetvalue
- \else
- \c_math_domain_attribute\clf_getmathdomain\p_domain\relax
- \math_domain_initialize
- \fi
-\to \everyswitchmathematics % only in mathematics
-
-\appendtoks
- \c_attr_mathdomain\c_math_domain_attribute
-\to \everymathematics
-
-\setupmathematics
- [\s!italics=3] % for the moment only this one makes sense .. still experimental
-
-%D For special purposed we set this one:
-
-\installcorenamespace{mathrules}
-
-\permanent\protected\def\enablemathrules{\letgvalue{\??mathrules\fontclass}\plusone}
-
-\appendtoks
- \mathrulesmode\ifcsname\??mathrules\fontclass\endcsname
- \lastnamedcs
- \else
- \zerocount
- \fi
- \mathrulesfam\zerocount
-\to \everymathematics
-
-%D Maybe:
-
-% \starttabulate[|||c|c|]
-% \BC positive \BC negative \BC text \BC math \NC \NR
-% \NC \tex {f1} \tex {hairspace} \tex{,} \NC \tex {b1} \tex {neghairspace} \NC {\darkred\vl}\f1{\darkblue\vl} \NC ${\darkred\vl}\f1{\darkblue\vl}$ \NC \NR
-% \NC \tex {f2} \tex {thinspace} \tex{:} \NC \tex {b2} \tex {negthinspace} \tex{!} \NC {\darkred\vl}\f2{\darkblue\vl} \NC ${\darkred\vl}\f2{\darkblue\vl}$ \NC \NR
-% \NC \tex {f3} \tex {medspace} \tex{;} \NC \tex {b3} \tex {negmedspace} \NC {\darkred\vl}\f3{\darkblue\vl} \NC ${\darkred\vl}\f3{\darkblue\vl}$ \NC \NR
-% \NC \tex {f4} \tex {thickspace} \NC \tex {b4} \tex {negthickspace} \NC {\darkred\vl}\f4{\darkblue\vl} \NC ${\darkred\vl}\f4{\darkblue\vl}$ \NC \NR
-% \NC \tex {f5} \tex {enspace} \NC \tex {b5} \NC {\darkred\vl}\f5{\darkblue\vl} \NC ${\darkred\vl}\f5{\darkblue\vl}$ \NC \NR
-% \NC \tex {f6} \tex {emspace} \NC \tex {b6} \NC {\darkred\vl}\f6{\darkblue\vl} \NC ${\darkred\vl}\f6{\darkblue\vl}$ \NC \NR
-% \stoptabulate
-
-% \protected\def\negenspace{\kern-.5\emwidth}
-% \protected\def\negemspace{\kern- \emwidth}
-%
-% \protected\def\math_f#1%
-% {\ifcase#1\or
-% \hairspace
-% \or
-% \thinspace
-% \or
-% \medspace
-% \or
-% \thickspace
-% \or
-% \enspace
-% \or
-% \emspace
-% \fi}
-%
-% \protected\def\math_b#1%
-% {\ifcase#1\or
-% \neghairspace
-% \or
-% \negthinspace
-% \or
-% \negmedspace
-% \or
-% \negthickspace
-% \or
-% \negenspace
-% \or
-% \negemspace
-% \fi}
-%
-% \appendtoks
-% \let\f\math_f
-% \let\b\math_b
-% \to \everymathematics
-
-%D Experiment
-
-\permanent\protected\def\math_scripts_stack
- {\c_attr_mathunstack\attributeunsetvalue}
-
-\permanent\protected\def\math_scripts_unstack
- {\clf_enablescriptunstacking
- \c_attr_mathunstack\plusone}
-
-\appendtoks
- \enforced\let\stackscripts \math_scripts_stack
- \enforced\let\unstackscripts\math_scripts_unstack
-\to \everymathematics
-
-%D Expensive (tracing and inject) but a primitive (using factors) is tricky as we
-%D want this frozen support.
-
-% \def\math_openup_parameter#1#2%
-% {\ifzeropt#1\displaystyle \orelse\ifdim#1\displaystyle =\maxdimen\else\frozen#1\displaystyle #2#1\displaystyle \fi
-% \ifzeropt#1\crampeddisplaystyle \orelse\ifdim#1\crampeddisplaystyle =\maxdimen\else\frozen#1\crampeddisplaystyle #2#1\crampeddisplaystyle \fi
-% \ifzeropt#1\textstyle \orelse\ifdim#1\textstyle =\maxdimen\else\frozen#1\textstyle #2#1\textstyle \fi
-% \ifzeropt#1\crampedtextstyle \orelse\ifdim#1\crampedtextstyle =\maxdimen\else\frozen#1\crampedtextstyle #2#1\crampedtextstyle \fi
-% \ifzeropt#1\scriptstyle \orelse\ifdim#1\scriptstyle =\maxdimen\else\frozen#1\scriptstyle #2#1\scriptstyle \fi
-% \ifzeropt#1\crampedscriptstyle \orelse\ifdim#1\crampedscriptstyle =\maxdimen\else\frozen#1\crampedscriptstyle #2#1\crampedscriptstyle \fi
-% \ifzeropt#1\scriptscriptstyle \orelse\ifdim#1\scriptscriptstyle =\maxdimen\else\frozen#1\scriptscriptstyle #2#1\scriptscriptstyle \fi
-% \ifzeropt#1\crampedscriptscriptstyle\orelse\ifdim#1\crampedscriptscriptstyle=\maxdimen\else\frozen#1\crampedscriptscriptstyle#2#1\crampedscriptscriptstyle\fi}
-
-% \def\mdim#1#2%
-% {\ifcase\ifzeropt#1#2\plusone\orelse\ifdim#1#2=\maxdimen\plusone\else\zerocount\fi}
-%
-% \def\mdim
-% {\afterassignment\mmdim\scratchdimen}
-%
-% \def\mmdim
-% {\ifcase\ifzeropt\scratchdimen\plusone\orelse\ifdim\scratchdimen=\maxdimen\plusone\else\zerocount\fi}
-%
-% \def\math_openup_parameter#1#2%
-% {\ifcondition\mdim#1\displaystyle \frozen#1\displaystyle #2\dimexpr#1\displaystyle \relax\fi
-% \ifcondition\mdim#1\crampeddisplaystyle \frozen#1\crampeddisplaystyle #2\dimexpr#1\crampeddisplaystyle \relax\fi
-% \ifcondition\mdim#1\textstyle \frozen#1\textstyle #2\dimexpr#1\textstyle \relax\fi
-% \ifcondition\mdim#1\crampedtextstyle \frozen#1\crampedtextstyle #2\dimexpr#1\crampedtextstyle \relax\fi
-% \ifcondition\mdim#1\scriptstyle \frozen#1\scriptstyle #2\dimexpr#1\scriptstyle \relax\fi
-% \ifcondition\mdim#1\crampedscriptstyle \frozen#1\crampedscriptstyle #2\dimexpr#1\crampedscriptstyle \relax\fi
-% \ifcondition\mdim#1\scriptscriptstyle \frozen#1\scriptscriptstyle #2\dimexpr#1\scriptscriptstyle \relax\fi
-% \ifcondition\mdim#1\crampedscriptscriptstyle\frozen#1\crampedscriptscriptstyle#2\dimexpr#1\crampedscriptscriptstyle\relax\fi}
-
-% \ifmathparameter : 0=zero, 1=set, 2=unset (les stracing clutter this way)
-
-%D New stuff:
-%D
-%D \starttyping
-%D $\mathopenupparameter\Umathradicalvgap{10.5}\sqrt[3]{x}$
-%D \stoptyping
-
-\permanent\protected\def\mathopenupparameter#1#2%
- {\ifmathparameter#1\displaystyle \or\frozen#1\displaystyle #2#1\displaystyle \fi
- \ifmathparameter#1\crampeddisplaystyle \or\frozen#1\crampeddisplaystyle #2#1\crampeddisplaystyle \fi
- \ifmathparameter#1\textstyle \or\frozen#1\textstyle #2#1\textstyle \fi
- \ifmathparameter#1\crampedtextstyle \or\frozen#1\crampedtextstyle #2#1\crampedtextstyle \fi
- \ifmathparameter#1\scriptstyle \or\frozen#1\scriptstyle #2#1\scriptstyle \fi
- \ifmathparameter#1\crampedscriptstyle \or\frozen#1\crampedscriptstyle #2#1\crampedscriptstyle \fi
- \ifmathparameter#1\scriptscriptstyle \or\frozen#1\scriptscriptstyle #2#1\scriptscriptstyle \fi
- \ifmathparameter#1\crampedscriptscriptstyle\or\frozen#1\crampedscriptscriptstyle#2#1\crampedscriptscriptstyle\fi}
-
-%D New stuff:
-%D
-%D \startbuffer
-%D $x\mathopen {!}+123+\mathclose {!}x$
-%D $x\tomathopen ! +123+\tomathclose ! x$
-%D $x\mathclose {!}+123+\mathopen {!}x$
-%D $x\tomathclose ! +123+\tomathopen ! x$
-%D $x ! +123+ ! x$
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \startlines
-%D \getbuffer
-%D \stoplines
-
-\permanent\protected\def\tomathord {\Umathclass\zerocount}
-\permanent\protected\def\tomathop {\Umathclass\plusone } % \mathinfix
-\permanent\protected\def\tomathbin {\Umathclass\plustwo }
-\permanent\protected\def\tomathrel {\Umathclass\plusthree}
-\permanent\protected\def\tomathopen {\Umathclass\plusfour } % \mathprefix
-\permanent\protected\def\tomathclose{\Umathclass\plusfive } % \mathsuffix
-\permanent\protected\def\tomathpunct{\Umathclass\plussix }
-
-%D Prescripts. These work in \CONTEXT\ because we have the super- and subscript
-%D triggers enabled as active characters but when we would have
-%D
-%D \starttyping
-%D \catcode\underscoreasciicode\subscriptcatcode
-%D \catcode\circumflexasciicode\superscriptcatcode
-%D \stoptyping
-%D
-%D we also need the next line to disable character escaping via \type {^} in
-%D math mode:
-%D
-%D \startbuffer
-%D \blank \hbox{
-%D \ruledhbox{${\tf X} ^1 _2 ^^3 __4$}
-%D \ruledhbox{${\tf X} ^1 $}
-%D \ruledhbox{${\tf X} _2 $}
-%D \ruledhbox{${\tf X} ^^3 $}
-%D \ruledhbox{${\tf X} __4$}
-%D \ruledhbox{${\tf X} ^1 _2 $}
-%D \ruledhbox{${\tf X} ^1 ^^3 $}
-%D \ruledhbox{${\tf X} ^1 __4$}
-%D \ruledhbox{${\tf X} _2 ^^3 $}
-%D \ruledhbox{${\tf X} _2 __4$}
-%D \ruledhbox{${\tf X} ^1 _2 ^^3 $}
-%D \ruledhbox{${\tf X} ^1 _2 __4$}
-%D \ruledhbox{${\tf X} _2 ^^3 $}
-%D \ruledhbox{${\tf X} _2 ^^3 __4$}
-%D \ruledhbox{${\tf X} ^^3 __4$}
-%D } \blank
-%D
-%D \typebuffer \getbuffer
-
-\normalsupmarkmode\plusone % 2 also disable ^[^+] in text mode
-
-\protect \endinput
-
-% % not used (yet)
-%
-% \newtoks \everystartimath
-% \newtoks \everystopimath
-%
-% \protected\def\startimath{\Ustartmath\the\everystartimath}
-% \protected\def\stopimath {\the\everystopimath\Ustopmath}
-%
-% \protected\def\m%
-% {\relax
-% \ifmmode\expandafter\math_m_stay\else\expandafter\math_m_math\fi}
-%
-% \protected\def\math_m_math#1%
-% {\startimath#1\stopimath}
-%
-% \let\math_m_stay\firstofoneargument