diff options
author | Hans Hagen <pragma@wxs.nl> | 2020-11-23 19:48:34 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2020-11-23 19:48:34 +0100 |
commit | 18499e46a49b8ccf4346686d1cf626ada33935b8 (patch) | |
tree | bd0ae7b601b323e20954c10c07598637d9403e00 /tex/context/base/mkiv/math-ini.mkxl | |
parent | 4b089e589d39346a66a27d04f9857fe16e4b7b41 (diff) | |
download | context-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.mkxl | 3032 |
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 |