diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/strc-mat.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/strc-mat.mkiv | 417 |
1 files changed, 215 insertions, 202 deletions
diff --git a/Master/texmf-dist/tex/context/base/strc-mat.mkiv b/Master/texmf-dist/tex/context/base/strc-mat.mkiv index 8d408936036..121808cd13a 100644 --- a/Master/texmf-dist/tex/context/base/strc-mat.mkiv +++ b/Master/texmf-dist/tex/context/base/strc-mat.mkiv @@ -5,7 +5,7 @@ %D subtitle=Math Numbering, %D author=Hans Hagen, %D date=\currentdate, -%D copyright=PRAGMA-ADE / Hans Hagen] +%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 @@ -15,91 +15,158 @@ \registerctxluafile{strc-mat}{1.001} -% we have potential for captions +% -- we have potential for captions +% -- this module will use the commandhandler +% -- key/value pairs will be added (I have no time now) \unprotect -\definestructureconversionset[\v!formula][numbers,characters] - \setupformulas - [%\c!way=\@@nrway, + [%\c!way=, %\c!blockway=, - %\c!sectionnumber=\@@nrsectionnumber, + %\c!sectionnumber=, %\c!conversion=\v!numbers, - \c!location=\v!right, - \c!left=(, - \c!right=), %\c!numberstyle=, %\c!numbercolor=, %\c!numbercommand=, + %\c!margin=, + %\c!align=, + %\c!separator=, + %\c!grid=, + \c!location=\v!right, + \c!left=(, + \c!right=), + \c!expansion=\v!yes, % maybe automatically \c!spacebefore=\v!big, \c!spaceafter=\formulaparameter\c!spacebefore, \c!leftmargin=\!!zeropoint, \c!rightmargin=\!!zeropoint, - %\c!margin=, \c!indentnext=\v!no, \c!alternative=\s!default, - %\c!align=, \c!strut=\v!no, - %\c!separator=\@@koseparator, - %\c!grid=, \c!distance=1em] -\definestructurecounter +\setupsubformulas % subformulas could be last in chain + [\c!indentnext=\formulaparameter\c!indentnext] + +\definecounter [\v!formula] -% \setupstructurecounter -% [\v!formula] -% [\c!numberconversionset=\v!formula] +\defineconversionset + [\v!formula] + [numbers,characters] -\presetstructurecountersetup\setupformulas\sharedstructurecounterparameter +\strc_counter_preset_using_parameter\setupformulas\sharedcounterparameter \appendtoks -% \dostructurecountersetup\currentformula\formulaparameter -% \docheckstructurecountersetup\currentformula - \dostructurecountersetup\v!formula\formulaparameter -% \docheckstructurecountersetup\v!formula -\to \everysetupformulas + \strc_counter_setup_using_parameter\v!formula\formulaparameter + \strc_counters_check_setup\v!formula % yes or no +\to \everysetupformula \setupformulas [\c!numberconversionset=\v!formula] % why forgotten +\appendtoks + \normalexpanded{\definelist[\currentformula]}% is expansion needed? + \setuevalue{\e!start\currentformula\v!formula}{\dostartformula{\currentformula}}% + \setuevalue{\e!stop \currentformula\v!formula}{\dostopformula}% +\to \everydefineformula + +\definelist[\v!formula] + +\setuvalue{\e!start\v!formula}{\dostartformula{}} +\setuvalue{\e!stop \v!formula}{\dostopformula} + +\let\dostartformula\relax % defined later +\let\dostopformula \relax % defined later + +\unexpanded\def\defineformulaalternative % this might change ... start and stop can become keys + {\dotripleargument\dodefineformulaalternative} % to the general define .. s!startcommand + +\def\dodefineformulaalternative[#1][#2][#3]% + {\setvalue{\e!start#1\v!formula}{#2}% + \setvalue{\e!stop #1\v!formula}{#3}} + +% sp = single line paragraph sd = single line display +% mp = multi line paragraph md = multy line display + +\defineformulaalternative[\s!default][\startdisplaymath][\stopdisplaymath] +\defineformulaalternative[\s!single] [\startdisplaymath][\stopdisplaymath] +\defineformulaalternative[\s!multi] [\startdisplaymath][\stopdisplaymath] + +\defineformula + [sp] + [\c!spacebefore=\v!none, + \c!spaceafter=\v!none, + \c!indentnext=\v!no, + \c!alternative=\s!single] + +\defineformula + [sd] + [\c!spacebefore=\v!none, + \c!spaceafter=\v!none, + \c!indentnext=\v!yes, + \c!alternative=\s!single] + +\defineformula + [mp] + [\c!indentnext=\v!no, + \c!alternative=\s!multi] + +\defineformula + [md] + [\c!indentnext=\v!yes, + \c!alternative=\s!multi] + +\newtoks\everyresetformulas + +\appendtoks + \let\currentformula\empty % to be checked: +\to \everyresetformulas + +% implementation + \def\storecurrentformulanumber#1#2#3#4#5% ref, todo:str, \sync % todo: title etc (like float) - {\dostructurecountercomponent + {\settrue\handleformulanumber + \strc_counters_register_component {formula}% - \getformulaparameters \formulaparameter \detokenizedformulaparameter + \setupcurrentformula \formulaparameter \detokenizedformulaparameter \relax \relax \relax -% [\c!name=\currentformula,\s!counter=\currentformula,% [\c!name=\v!formula,\s!counter=\v!formula,% \s!hascaption=\v!yes,\s!hastitle=\v!yes,\s!hasnumber=\v!yes,%\s!haslevel=#6,% - \s!hasnumber=\v!no,% \c!reference=#1,\c!title=\namedformulaentry,\c!bookmark=]% [#2]% - \glet\namedformulaentry\relax - \globallet#3\laststructurecounternumber - \globallet#4\laststructurecountersynchronize - \globallet#5\laststructurecounterattribute} - -\newif\ifnoformulanumber + \glet\namedformulaentry\empty % \relax + \globallet#3\m_strc_counters_last_registered_index + \globallet#4\m_strc_counters_last_registered_synchronize + \globallet#5\m_strc_counters_last_registered_attribute} -\newconditional\handleformulanumber -\newconditional\incrementformulanumber - -\newtoks\everyresetformulas - -% 0=unset, 1=forced, 2=none, 3=reference +% modes: 0=unset, 1=forced, 2=none, 3=reference \newconstant\placeformulanumbermode \newconstant\formulasnumbermode \newconstant\subformulasnumbermode \newconstant\nestedformulanumbermode +\appendtoks + \placeformulanumbermode \zerocount + \formulasnumbermode \zerocount + \subformulasnumbermode \zerocount + \nestedformulanumbermode\zerocount +\to \everyresetformulas + +\newconditional\handleformulanumber +\newconditional\incrementformulanumber + \newconditional\insideplaceformula \newconditional\insideplacesubformula \newconditional\insideformulas \newconditional\insidesubformulas -% 0=unset, 1=forced, 2=none, 3=reference +\appendtoks + \global\setfalse\insideplaceformula + \global\setfalse\insideplacesubformula +\to \everyresetformulas \def\handleplaceformulanumbering % place formula {\settrue\handleformulanumber @@ -108,11 +175,11 @@ \glet\donestedformulanumber\donestedformulanumberindeed} \def\handleformulasnumbering % formulas - {\docheckformulareference\formulasnumbermode\currentformularesference} + {\docheckformulareference\formulasnumbermode\currentformulareference} \def\handlesubformulasnumbering % sub formulas {\docheckformulareference\subformulasnumbermode\currentsubformulasreference - \doincrementsubstructurecounter[\v!formula][1]% always + \strc_counters_increment\v!formula \storecurrentformulanumber \currentsubformulasreference \empty @@ -121,23 +188,41 @@ \currentsubformulasattribute } -\def\tracedformulamode - {\hbox{\quad\tt\txx[\number\placeformulanumbermode,\number\formulasnumbermode,\number\subformulasnumbermode,\number\nestedformulanumbermode]}} +\let\dotraceformulareferencestate\relax +\let\doshowformulareferencestate \relax + +% \def\dotraceformulareferencestate +% {\rlap{\hbox{\quad\tt\txx[% +% \number\placeformulanumbermode,% +% \number\formulasnumbermode,% +% \number\subformulasnumbermode,% +% \number\nestedformulanumbermode +% ]}}} + +% \def\doshowformulareferencestate +% {\writestatus{\v!formula}% +% {place: \number\placeformulanumbermode,\space +% formula: \number\formulasnumbermode,\space +% subformula: \number\subformulasnumbermode,\space +% nested: \number\nestedformulanumbermode]}} \unexpanded\def\placecurrentformulanumber {\rm % nodig ? \doif{\formulaparameter\c!location}\v!right{\hskip\formulaparameter\c!distance}% \formulaparameter\c!numbercommand - {\dosetformulaattributes\c!numberstyle\c!numbercolor + {\useformulastyleandcolor\c!numberstyle\c!numbercolor \strut \formulaparameter\c!left - \labeltexts\v!formula{\ignorespaces\doplacecurrentformulanumber\unskip}% + \namedtaggedlabeltexts + \t!formulalabel \v!formula + \t!formulanumber\v!formula + {\ignorespaces\doplacecurrentformulanumber\removeunwantedspaces}% \formulaparameter\c!right}% \doif{\formulaparameter\c!location}\v!left{\hskip\formulaparameter\c!distance}} \def\doplacecurrentformulanumber {\dohandlecurrentformulareferences - \labeltexts\currentformula{\doconvertedstructurecounter[\v!formula][]}} + \labeltexts\currentformula{\convertedcounter[\v!formula][]}} % \def\theboxdestinationattribute#1{\iflocation\ifx#1\relax\else\ifx#1\empty\else attr \destinationattribute#1\fi\fi\fi} % \def\thedestinationattribute #1{\iflocation\ifx#1\relax\else\ifx#1\empty\else \attribute\destinationattribute#1\fi\fi\fi} @@ -148,18 +233,57 @@ \glet#1\relax \fi\fi\fi} +\let\currentplaceformulaattribute\relax +\let\currentformulaattribute \relax +\let\currentsubformulaattribute \relax +\let\currentformulasattribute \relax + +\let\currentplaceformulanumber\relax +\let\currentformulanumber \relax +\let\currentsubformulanumber \relax +\let\currentformulasnumber \relax + +\let\currentformulasreference \empty +\let\currentformulareference \empty +\let\currentsubformulareference \empty +\let\currentnestedformulareference\empty + +\appendtoks + \glet\currentformulasreference \empty + \glet\currentformulareference \empty + \glet\currentsubformulareference \empty + \glet\currentnestedformulareference\empty +\to \everyresetformulas + +\let\currentformulassuffix \empty +\let\currentformulasuffix \empty +\let\currentsubformulasuffix \empty +\let\currentnestedformulasuffix\empty + +\appendtoks + \glet\currentformulassuffix \empty + \glet\currentformulasuffix \empty + \glet\currentsubformulasuffix \empty + \glet\currentnestedformulasuffix\empty +\to \everyresetformulas + +\let\currentplaceformulasynchronize\relax +\let\currentformulasynchronize \relax +\let\currentsubformulasynchronize \relax +\let\currentformulassynchronize \relax + \appendtoks \glet\currentplaceformulasynchronize \relax \glet\currentformulassynchronize \relax \glet\currentsubformulassynchronize \relax \glet\currentnestedformulasynchronize\relax - \let\currentformula\empty \to \everyresetformulas % currently we do the number, some day we will do the (sub) formula \def\dohandlecurrentformulareferences - {\ifnum\placeformulanumbermode=\plusthree + {\doshowformulareferencestate + \ifnum\placeformulanumbermode=\plusthree \storecurrentformulanumber \currentplaceformulareference \empty @@ -199,25 +323,15 @@ % needs checking ... too many: -\let\currentplaceformulaattribute\relax \let\currentplaceformulasynchronize\relax \let\currentplaceformulanumber\relax -\let\currentformulaattribute \relax \let\currentformulasynchronize \relax \let\currentformulanumber \relax -\let\currentsubformulaattribute \relax \let\currentsubformulasynchronize \relax \let\currentsubformulanumber \relax -\let\currentformulasattribute \relax \let\currentformulassynchronize \relax \let\currentformulasnumber \relax - -\let\currentformulasreference \empty \let\currentformulassuffix \empty -\let\currentformulareference \empty \let\currentformulasuffix \empty -\let\currentsubformulareference \empty \let\currentsubformulasuffix \empty -\let\currentnestedformulareference\empty \let\currentnestedformulasuffix\empty - \def\dohandleformulanumbering - {\doincrementsubstructurecounter[\v!formula][1]% - \doiftext\currentplaceformulasuffix{\setsubstructurecounterown[\v!formula][2]{\currentplaceformulasuffix}}% + {\strc_counters_increment\v!formula + \doiftext\currentplaceformulasuffix{\strc_counters_setown_sub\v!formula\plustwo\currentplaceformulasuffix}% \placecurrentformulanumber} \def\dohandlesubformulanumbering {\doiftextelse\currentsubformulasuffix - {\setsubstructurecounterown[\v!formula][2]{\currentsubformulasuffix}} - {\doincrementsubstructurecounter[\v!formula][2]}% + {\strc_counters_setown_sub\v!formula\plustwo\currentsubformulasuffix} + {\strc_counters_increment_sub\v!formula\plustwo}% \placecurrentformulanumber} \def\dododoformulanumber @@ -257,27 +371,15 @@ \dohandlesubformulanumbering \fi \fi - %\rlap{\tracedformulamode}% + \dotraceformulareferencestate \egroup \fi} -\definelist[\v!formula] - \installstructurelistprocessor\v!formula % to be checked ... - {\dodolistelement - \currentlist - \structurelistlocation - \structurelistgenericnumber - \structurelistgenerictitle % hm, can end up in message (volkers test) - \structurelistpagenumber - \structurelistrealpagenumber} - -\appendtoks - \global\setfalse\insideplaceformula - \global\setfalse\insideplacesubformula -% \global\setfalse\insideformulas -% \global\setfalse\insidesubformulas -\to \everyresetformulas + {\let\currentlistentrynumber \structurelistgenericnumber + \let\currentlistentrytitle \structurelistgenerictitle + \let\currentlistentrypagenumber\structurelistpagenumber + \strc_lists_apply_renderingsetup} \newif\ifinformula @@ -296,69 +398,9 @@ \let\normalreqno\gobbleoneargument \let\eqno \gobbleoneargument \let\doplaceformulanumber\empty} -%D - -\unexpanded\def\defineformula - {\dodoubleempty\dodefineformula} - -\def\dodefineformula[#1][#2]% - {\doifsomething{#1} - {\getparameters[\??fm#1][\s!parent=\??fm,#2]% - \definelist[#1]% - \setvalue{\e!start#1\v!formula}{\dostartformula{#1}}% - \setvalue{\e!stop #1\v!formula}{\dostopformula}}} - -\unexpanded\def\defineformulaalternative - {\dotripleargument\dodefineformulaalternative} - -\def\dodefineformulaalternative[#1][#2][#3]% - {\setvalue{\e!start#1\v!formula}{#2}% - \setvalue{\e!stop #1\v!formula}{#3}} - -% sp = single line paragraph sd = single line display -% mp = multi line paragraph md = multy line display - -\defineformulaalternative[\s!default][\startdisplaymath][\stopdisplaymath] -\defineformulaalternative[\s!single] [\startdisplaymath][\stopdisplaymath] -\defineformulaalternative[\s!multi] [\startdisplaymath][\stopdisplaymath] - -\defineformula - [sp] - [\c!spacebefore=\v!none, - \c!spaceafter=\v!none, - \c!indentnext=\v!no, - \c!alternative=\s!single] - -\defineformula - [sd] - [\c!spacebefore=\v!none, - \c!spaceafter=\v!none, - \c!indentnext=\v!yes, - \c!alternative=\s!single] - -\defineformula - [mp] - [\c!indentnext=\v!no, - \c!alternative=\s!multi] - -\defineformula - [md] - [\c!indentnext=\v!yes, - \c!alternative=\s!multi] - %D \macros -%D {setupsubformulas, startsubformulas} - -\def\subformulaparameter#1{\ifcname\??fn#1\endcsname\cname\??fn#1\endcsname\fi} +%D {startsubformulas} -\unexpanded\def\setupsubformulas - {\dodoubleargument\getparameters[\??fn]} - -\setupsubformulas - [\c!indentnext=\formulaparameter\c!indentnext] - -% \setupsubformulas[conversion=romannumerals] -% % \placeformula % \startsubformulas[Maxwell] % \startformulas @@ -395,9 +437,6 @@ \abovedisplayshortskip\zeropoint \belowdisplayshortskip\zeropoint} -\setvalue{\e!start\v!formula}{\dostartformula{}} -\setvalue{\e!stop \v!formula}{\dostopformula} - \def\predisplaysizethreshhold{2em} % was 3em \def\leftdisplayskip {\leftskip} @@ -411,20 +450,6 @@ \def\afterdisplayspace {\doifnot{\formulaparameter\c!spaceafter }\v!none{\blank[\formulaparameter\c!spaceafter ]}} -% \def\setpredisplaysize -% {\predisplaysize\lastlinewidth\relax -% \ifdim\predisplaysize<\maxdimen -% \ifdim\predisplaysize>\zeropoint -% \advance\predisplaysize \predisplaysizethreshhold -% \fi -% \advance\predisplaysize \displayindent % needed ? -% \ifdim\predisplaysize>\hsize -% \predisplaysize\hsize -% \fi -% \else -% \predisplaysize\zeropoint -% \fi} - \def\setdisplaydimensions {\displayindent\leftdisplayskip \advance\displayindent\leftdisplaymargin @@ -439,7 +464,7 @@ \advance\displaywidth\dimexpr-\displayindent-\rightdisplayskip-\rightdisplaymargin\relax \hsize\displaywidth} % new, else overfull in itemize -\def\dostartformula#1% +\unexpanded\def\dostartformula#1% {\dodoubleempty\dodostartformula[#1]} \newskip\formulaparskip @@ -480,43 +505,45 @@ \forgetdisplayskips \getvalue{\e!start\formulaparameter\c!alternative\v!formula}} +% tagging of formulanumbers is not ok (we get two display maths blobs) + +\unexpanded\def\dostopformula + {\dostarttagged\t!formulacaption\empty + \doplaceformulanumber + \dostoptagged + \dostarttagged\t!formulacontent\empty + \getvalue{\e!stop\formulaparameter\c!alternative\v!formula}% + \dostoptagged + \dostoptagged + \nonoindentation + \useindentnextparameter\formulaparameter + \egroup + \hangafter\minusone % added for side floats + \hangindent\zeropoint % added for side floats + \setfalse\handleformulanumber + \the\everyresetformulas + \dorechecknextindentation} % here ? + % experiment: \appendtoks \edef\currentformulagrid{\formulaparameter\c!grid}% \ifx\currentformulagrid\empty \else - \autosetsnapvalue\currentformulagrid + \spac_grids_snap_value_auto\currentformulagrid \fi \to \everybeforedisplayformula \def\switchtoformulabodyfont{\switchtobodyfont} -\setvalue{\v!formula}{\dosingleempty\doformula} +\setuvalue{\v!formula}{\dosingleempty\doformula} -\def\doformula[#1]#2% +\def\doformula[#1]#2% todo: tagged {\begingroup \doifsomething{#1}{\switchtoformulabodyfont[#1]}% % not : \def\doformula[##1]##2{\mathematics{##2}}% \mathematics{#2}% \endgroup} -\def\dostopformula - {\dostarttagged\t!formulatag\empty - \doplaceformulanumber - \dostoptagged - \dostarttagged\t!formulacontent\empty - \getvalue{\e!stop\formulaparameter\c!alternative\v!formula}% - \dostoptagged - \dostoptagged - \nonoindentation - \checknextindentation[\formulaparameter\c!indentnext]% - \egroup - \hangafter\minusone % added for side floats - \hangindent\zeropoint % added for side floats - \setfalse\handleformulanumber - \the\everyresetformulas - \dorechecknextindentation} % here ? - %D \starttyping %D % test \par % no preceding hlist %D % $$x$$ % preceding hlist @@ -547,9 +574,6 @@ \par \egroup} -\newif\ifclipdisplaymath \clipdisplaymathtrue -\def\displaymathclipfactor{1.1} - % already defined % % \let\startinnermath\empty @@ -586,7 +610,7 @@ \unexpanded\def\stopsubformulas {\nonoindentation - \checknextindentation[\formulaparameter\c!indentnext]% + \useindentnextparameter\subformulaparameter \the\everyresetformulas % to be checked \global\setfalse\insidesubformulas \dorechecknextindentation} % here ? @@ -656,7 +680,7 @@ \def\forceformulanumberflag {+} \def\docheckformulareference#1#2% - {#1\unless\ifx\namedformulaentry\relax % new 29/8/2010 + {#1\unless\ifx\namedformulaentry\empty % \relax % new 29/8/2010 \plusthree \else\ifx#2\empty \zerocount @@ -668,7 +692,7 @@ \plusthree \fi\fi\fi\fi} -\def\formulanumber{\doformulanumber} % for the moment +\unexpanded\def\formulanumber{\doformulanumber} % for the moment \def\doformulanumber {\dosingleempty\dodoformulanumber} @@ -696,11 +720,11 @@ \let\currentplaceformulasuffix\empty \doifnextbgroupelse\moreplaceformula\redoplaceformula} % [ref]{} -\long\def\moreplaceformula#1% +\def\moreplaceformula#1% {\def\currentplaceformulasuffix{#1}% \redoplaceformula} -\long\def\redoplaceformula +\def\redoplaceformula {\doifnextcharelse$\dispplaceformula\dodoplaceformula} % [ref]$$ [ref]\start \def\dodoplaceformula @@ -715,19 +739,8 @@ % to be checked -\def\doformulanumber - {\dosingleempty\dodoformulanumber} - -\def\dodoformulanumber[#1]% - {\def\currentformulareference{#1}% - \dosinglegroupempty\dododoformulanumber} - -\def\redoformulanumber#1% - {\def\currentformulasuffix{#1}% - \dododoformulanumber} - -\glet\doplaceformulanumber \relax -\glet\donestedformulanumber\gobbletwoarguments +\let\doplaceformulanumber \relax +\let\donestedformulanumber\gobbletwoarguments \def\donestedformulanumberindeed#1#2% {\def\currentnestedformulareference{#1}% @@ -764,9 +777,9 @@ \setformulalistentry{#2}% \next} -\glet\namedformulaentry\relax % this will become a key/value so that we can do bookmarks +\let\namedformulaentry\empty % \relax % this will become a key/value so that we can do bookmarks -\def\setformulalistentry#1% +\unexpanded\def\setformulalistentry#1% {\gdef\namedformulaentry{#1}} \protect \endinput |