summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/strc-mat.mkiv
diff options
context:
space:
mode:
authorTaco Hoekwater <taco@elvenkind.com>2010-05-24 14:05:02 +0000
committerTaco Hoekwater <taco@elvenkind.com>2010-05-24 14:05:02 +0000
commit57ea7dad48fbf2541c04e434c31bde655ada3ac4 (patch)
tree1f8b43bc7cb92939271e1f5bec610710be69097f /Master/texmf-dist/tex/context/base/strc-mat.mkiv
parent6ee41e1f1822657f7f23231ec56c0272de3855e3 (diff)
here is context 2010.05.24 13:05
git-svn-id: svn://tug.org/texlive/trunk@18445 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/strc-mat.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/base/strc-mat.mkiv962
1 files changed, 399 insertions, 563 deletions
diff --git a/Master/texmf-dist/tex/context/base/strc-mat.mkiv b/Master/texmf-dist/tex/context/base/strc-mat.mkiv
index 097b1d71059..2064db2c586 100644
--- a/Master/texmf-dist/tex/context/base/strc-mat.mkiv
+++ b/Master/texmf-dist/tex/context/base/strc-mat.mkiv
@@ -15,9 +15,11 @@
\registerctxluafile{strc-mat}{1.001}
+% we have potential for captions
+
\unprotect
-\definestructureconversionset[\v!formula][number,characters]
+\definestructureconversionset[\v!formula][numbers,characters]
\setupformulas
[%\c!way=\@@nrway,
@@ -46,117 +48,208 @@
\definestructurecounter
[\v!formula]
-\setupstructurecounter
- [\v!formula]
- [\c!numberconversionset=\v!formula]
+% \setupstructurecounter
+% [\v!formula]
+% [\c!numberconversionset=\v!formula]
+
+\presetstructurecountersetup\setupformulas\sharedstructurecounterparameter
+
+\appendtoks
+% \dostructurecountersetup\currentformula\formulaparameter
+% \docheckstructurecountersetup\currentformula
+ \dostructurecountersetup\v!formula\formulaparameter
+% \docheckstructurecountersetup\v!formula
+\to \everysetupformulas
+
+\setupformulas
+ [\c!numberconversionset=\v!formula] % why forgotten
-\def\storecurrentformulanumber#1#2#3#4% ref, todo:str, \sync % todo: title etc (like float)
+\def\storecurrentformulanumber#1#2#3#4#5% ref, todo:str, \sync % todo: title etc (like float)
{\dostructurecountercomponent
{formula}%
- \getfloatparameters
- \formulaparameter
- \detokenizedformulaparameter
- \relax
- \relax
- \relax
- [\c!name=\currentformula,\s!counter=\currentformula,%
- \s!hascaption=\v!yes,\s!hasnumber=\v!yes,\s!hastitle=\v!yes,%
+ \getformulaparameters \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=,\c!bookmark=]%
[#2]%
- \globallet\currentformulanumber\laststructurecounternumber
- \globallet#3\laststructurecountersynchronize
- \globallet#4\laststructurecounterattribute}
+ \globallet#3\laststructurecounternumber
+ \globallet#4\laststructurecountersynchronize
+ \globallet#5\laststructurecounterattribute}
-\def\thecurrentformulanumber
- {%\ifnoformulacaption \else \ifnoformulanumber \else
- \labeltexts\currentformula{\convertedstructurecounter[formula]}% ! ! todo: use a lua call instead
- }%\fi \fi}
+\newif\ifnoformulanumber
-\def\placecurrentformulanumber
- {\currentformulassynchronize \currentformulasattribute % todo
- \currentformulasynchronize \currentformulasattribute % todo
- \currentsubformulasynchronize \currentsubformulaattribute % todo
- \thecurrentformulanumber}
+\newconditional\handleformulanumber
+\newconditional\incrementformulanumber
-\def\doformulanumber
- {\dotripleempty\dodoformulanumber}
+\newtoks\everyresetformulas
-\def\dodoformulanumber[#1][#2][#3]%
- {\doquadruplegroupempty\dododoformulanumber{#1}{#2}{#3}}
+\newconditional\insideplaceformula
+\newconditional\insideplacesubformula
+\newconditional\insideformulas
+\newconditional\insidesubformulas
+
+% 0=unset, 1=forced, 2=none, 3=reference
+
+\def\handleplaceformulanumbering % place formula
+ {\settrue\handleformulanumber
+ \docheckformulareference\placeformulanumbermode\currentplaceformulareference
+ \glet\doplaceformulanumber \doplaceformulanumberindeed
+ \glet\donestedformulanumber\donestedformulanumberindeed}
+
+\def\handleformulasnumbering % formulas
+ {\docheckformulareference\formulasnumbermode\currentformularesference}
+
+\def\handlesubformulasnumbering % sub formulas
+ {\docheckformulareference\subformulasnumbermode\currentsubformulasreference
+ \doincrementsubstructurecounter[\v!formula][1]% always
+ \storecurrentformulanumber
+ \currentsubformulasreference
+ \empty
+ \currentsubformulasnumber
+ \currentsubformulassynchronize
+ \currentsubformulasattribute
+ }
+
+\def\tracedformulamode
+ {\hbox{\quad\tt\txx[\number\placeformulanumbermode,\number\formulasnumbermode,\number\subformulasnumbermode,\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
+ \strut
+ \formulaparameter\c!left
+ \labeltexts\v!formula{\ignorespaces\doplacecurrentformulanumber\unskip}%
+ \formulaparameter\c!right}%
+ \doif{\formulaparameter\c!location}\v!left{\hskip\formulaparameter\c!distance}}
+
+\def\doplacecurrentformulanumber
+ {\dohandlecurrentformulareferences
+ %\currentformulasattribute % todo
+ %\currentformulasattribute % todo
+ %\currentsubformulaattribute % todo
+ \labeltexts\currentformula{\doconvertedstructurecounter[\v!formula][]}}
+
+\appendtoks
+ \glet\currentplaceformulasynchronize \relax
+ \glet\currentformulassynchronize \relax
+ \glet\currentsubformulassynchronize \relax
+ \glet\currentnestedformulasynchronize\relax
+ \let\currentformula\empty
+\to \everyresetformulas
+
+\def\dohandlecurrentformulareferences
+ {\ifnum\placeformulanumbermode=\plusthree
+ \storecurrentformulanumber
+ \currentplaceformulareference
+ \empty
+ \currentplaceformulanumber
+ \currentplaceformulasynchronize
+ \currentplaceformulaattribute
+ \currentplaceformulasynchronize
+ \glet\currentplaceformulasynchronize\relax
+ \fi
+ \ifnum\formulasnumbermode=\plusthree
+ \storecurrentformulanumber
+ \currentformulasreference
+ \empty
+ \currentformulasnumber
+ \currentformulassynchronize
+ \currentformulasattribute
+ \currentformulassynchronize
+ \glet\currentformulassynchronize\relax
+ \fi
+ \ifnum\subformulasnumbermode=\plusthree
+ \currentsubformulassynchronize
+ \glet\currentsubformulassynchronize\relax
+ \fi
+ \ifnum\nestedformulanumbermode=\plusthree
+ \storecurrentformulanumber
+ \currentnestedformulareference
+ \empty
+ \currentnestedformulanumber
+ \currentnestedformulasynchronize
+ \currentnestedformulaattribute
+ \currentnestedformulasynchronize
+ \glet\currentnestedformulasynchronize\relax
+ \fi}
-\let\subformulasreference\empty % temp hack
+\let\currentformulasreference \empty \let\currentformulassuffix \empty
+\let\currentformulareference \empty \let\currentformulasuffix \empty
+\let\currentsubformulareference \empty \let\currentsubformulasuffix \empty
+\let\currentnestedformulareference\empty \let\currentnestedformulasuffix\empty
\let\currentformulasynchronize \relax \let\currentformulaattribute \relax
\let\currentsubformulasynchronize\relax \let\currentsubformulaattribute\relax
\let\currentformulassynchronize \relax \let\currentformulasattribute \relax
-\def\dododoformulanumber#1#2#3#4% (#1,#2)=outer(ref,sub) (#3,#4)=inner(ref,sub)
- {\hbox\bgroup
- \ifconditional\handleformulanumber
- \ifconditional\incrementformulanumber
+\def\dohandleformulanumbering
+ {\doincrementsubstructurecounter[\v!formula][1]%
+ \doiftext\currentplaceformulasuffix{\setsubstructurecounterown[\v!formula][2]{\currentplaceformulasuffix}}%
+ \placecurrentformulanumber}
+
+\def\dohandlesubformulanumbering
+ {\doiftextelse\currentsubformulasuffix
+ {\setsubstructurecounterown[\v!formula][2]{\currentsubformulasuffix}}
+ {\doincrementsubstructurecounter[\v!formula][2]}%
+ \placecurrentformulanumber}
+
+\def\dododoformulanumber
+ {\ifconditional\handleformulanumber
+ \hbox\bgroup
+ % main counter
\ifconditional\insidesubformulas
- \incrementsubstructurecounter[\v!formula][2]%
+ % nothing
\else
- \incrementstructurecounter[\v!formula]%
+ \ifcase\formulasnumbermode
+ \ifcase\placeformulanumbermode
+ \dohandleformulanumbering
+ \or
+ \dohandleformulanumbering
+ \or
+ % nothing
+ \or
+ \dohandleformulanumbering
+ \fi
+ \or
+ \dohandleformulanumbering
+ \or
+ % nothing
+ \or
+ \dohandleformulanumbering
+ \fi
\fi
- \fi
- %
- % main counter
- \setbox0\hbox{\ignorespaces#2\unskip}%
- \ifdim\wd0>\zeropoint
- \setsubstructurecounterown[\v!formula][2]{#2}% \detokenize?
- \fi
- \edef\currentformulareference{#1}%
- \ifx\currentformulareference\empty
- \glet\currentformulasynchronize\relax
- \glet\currentformulaattribute \relax
- \else
- \storecurrentformulanumber\currentformulareference\empty\currentformulasynchronize\currentformulaattribute
- \fi
- % subcounter
- \setbox0\hbox{\ignorespaces#4\unskip}%
- \ifdim\wd0>\zeropoint
- \setsubstructurecounterown[\v!formula][2]{#4}% \detokenize?
- \fi
- \edef\currentsubformulareference{#3}%
- \ifx\currentsubformulareference\empty
- \glet\currentsubformulasynchronize\relax
- \glet\currentsubformulaattribute \relax
- \else
- \storecurrentformulanumber\currentsubformulareference\empty\currentsubformulasynchronize\currentsubformulaattribute
- \fi
- %
- \rm % nodig ?
- \doif{\formulaparameter\c!location}\v!right{\hskip\formulaparameter\c!distance}%
- \formulaparameter\c!numbercommand
- {\dosetformulaattributes\c!numberstyle\c!numbercolor
- \strut
- \formulaparameter\c!left
- \labeltexts\v!formula{\ignorespaces\placecurrentformulanumber\unskip}%
- \formulaparameter\c!right}%
- \doif{\formulaparameter\c!location}\v!left{\hskip\formulaparameter\c!distance}%
- \fi
- \egroup}
-
-\let\donestedformulanumber\gobbletwoarguments
+ % subcounter
+ \ifconditional\insidesubformulas
+ \ifcase\subformulasnumbermode
+ % nothing
+ \or
+ \dohandlesubformulanumbering
+ \or
+ % nothing
+ \or
+ \dohandlesubformulanumbering
+ \fi
+ \fi
+ %\rlap{\tracedformulamode}%
+ \egroup
+ \fi}
\definelist[\v!formula]
-\global\let\doflushformulalistentry\gobbleoneargument
-
-\def\setformulalistentry#1%
- {\gdef\doflushformulalistentry##1%
- {\normalexpanded{\noexpand\writetolist[\v!formula]{##1}}{#1}%
- \global\let\doflushformulalistentry\gobbleoneargument}}
-
-\newconditional\handleformulanumber
-\newconditional\incrementformulanumber
-\newconditional\insidesubformulas
+\appendtoks
+ \global\setfalse\insideplaceformula
+ \global\setfalse\insideplacesubformula
+% \global\setfalse\insideformulas
+% \global\setfalse\insidesubformulas
+\to \everyresetformulas
\newif\ifinformula
-\let\doplaceformulanumber\empty
-
%D We need a hook into the plain math alignment macros
%D
%D \starttyping
@@ -168,13 +261,13 @@
%D Otherwise we get a missing \type {$$} error reported.
\def\resetdisplaymatheq
- {\let\normalleqno\relax \let\leqno\relax
- \let\normalreqno\relax \let\eqno \relax
+ {\let\normalleqno\gobbleoneargument \let\leqno\gobbleoneargument
+ \let\normalreqno\gobbleoneargument \let\eqno \gobbleoneargument
\let\doplaceformulanumber\empty}
%D
-\def\defineformula
+\unexpanded\def\defineformula
{\dodoubleempty\dodefineformula}
\def\dodefineformula[#1][#2]%
@@ -184,7 +277,7 @@
\setvalue{\e!start#1\v!formula}{\dostartformula{#1}}%
\setvalue{\e!stop #1\v!formula}{\dostopformula}}}
-\def\defineformulaalternative
+\unexpanded\def\defineformulaalternative
{\dotripleargument\dodefineformulaalternative}
\def\dodefineformulaalternative[#1][#2][#3]%
@@ -227,7 +320,7 @@
\def\subformulaparameter#1{\ifcname\??fn#1\endcsname\cname\??fn#1\endcsname\fi}
-\def\setupsubformulas
+\unexpanded\def\setupsubformulas
{\dodoubleargument\getparameters[\??fn]}
\setupsubformulas
@@ -255,27 +348,6 @@
\newdimen\lastlinewidth
-% test \par \dorecurse{10}{test } \moveformula \startformula test \stopformula test \endgraf
-% test \par \dorecurse{10}{test } \startformula test \stopformula test \endgraf
-% \dorecurse{30}{\bpar \dorecurse\recurselevel{test } \epar \startformula formula \stopformula}
-
-\def\setlastlinewidth
- {\resetlastlinewidth
- \ifoptimizedisplayspacing\ifmmode\else\ifhmode
- \bgroup
- \forgetdisplayskips
- \displaywidowpenalty\widowpenalty % brrr, else widowpenalty does not work
- \everymath \emptytoks
- \everydisplay\emptytoks
- $$\strut\global\lastlinewidth\predisplaysize$$
- \vskip-\lineheight
- \vskip\zeropoint
- \egroup
- \fi\fi\fi}
-
-\def\resetlastlinewidth
- {\global\lastlinewidth\zeropoint\relax}
-
\abovedisplayskip \zeropoint
\abovedisplayshortskip \zeropoint % evt. 0pt minus 3pt
\belowdisplayskip \zeropoint
@@ -286,13 +358,6 @@
% we don't use the skip's
-\def\displayskipsize#1#2% obsolete
- {\ifdim\ctxparskip>\zeropoint
- #1\ctxparskip\!!plus#2\ctxparskip\!!minus#2\ctxparskip\relax
- \else
- #1\lineheight\!!plus#2\lineheight\!!minus#2\lineheight\relax
- \fi}
-
\def\forgetdisplayskips % to do
{\abovedisplayskip \zeropoint
\belowdisplayskip \zeropoint
@@ -308,7 +373,6 @@
\def\rightdisplayskip {\rightskip}
\def\leftdisplaymargin {\formulaparameter\c!leftmargin}
\def\rightdisplaymargin {\formulaparameter\c!rightmargin}
-\def\displaygridsnapping{\formulaparameter\c!grid}
\def\beforedisplayspace
{\doifnot{\formulaparameter\c!spacebefore}\v!none{\blank[\formulaparameter\c!spacebefore]}}
@@ -316,26 +380,26 @@
\def\afterdisplayspace
{\doifnot{\formulaparameter\c!spaceafter }\v!none{\blank[\formulaparameter\c!spaceafter ]}}
-\def\setpredisplaysize#1%
- {\predisplaysize#1\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\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
\displaywidth\hsize
-% \setlocalhsize
-% \displaywidth\localhsize
+ %\setlocalhsize
+ %\displaywidth\localhsize
\ifdim\hangindent>\zeropoint
\advance\displayindent\hangindent
\else
@@ -344,8 +408,6 @@
\advance\displaywidth\dimexpr-\displayindent-\rightdisplayskip-\rightdisplaymargin\relax
\hsize\displaywidth} % new, else overfull in itemize
-\newif\ifoptimizedisplayspacing
-
\def\dostartformula#1%
{\dodoubleempty\dodostartformula[#1]}
@@ -353,8 +415,6 @@
\newskip\formulastrutht
\newskip\formulastrutdp
-% hm, invoke otr in hmode in order to move skips to mvl, could be an option
-
%D \startbuffer
%D \startformula[9pt] x = 1 \stopformula
%D \startformula[7pt] x = 1 \stopformula
@@ -363,12 +423,7 @@
%D \typebuffer \getbuffer
\def\dodostartformula[#1][#2]% setting leftskip adaption is slow !
- {% todo: test first
- %
- % \ifdim\lastskip>\zeropoint
- % \resetlastlinewidth % else problems with in between stuff without \epar
- % \fi
- \bgroup % HERE
+ {\bgroup % HERE
\def\currentformula{#1}%
\the\everybeforedisplayformula
\formulaparskip\parskip
@@ -391,13 +446,6 @@
\freezedimenmacro\rightdisplaymargin
\freezedimenmacro\predisplaysizethreshhold
\forgetdisplayskips
- \ifoptimizedisplayspacing
- \ifdim\lastlinewidth>\zeropoint
- \abovedisplayshortskip-\strutht\relax
- \fi
- \else
- \resetlastlinewidth
- \fi
\getvalue{\e!start\formulaparameter\c!alternative\v!formula}}
\def\switchtoformulabodyfont{\switchtobodyfont}
@@ -414,100 +462,52 @@
\def\dostopformula
{\doplaceformulanumber
\getvalue{\e!stop\formulaparameter\c!alternative\v!formula}%
- \resetlastlinewidth
\nonoindentation
\checknextindentation[\formulaparameter\c!indentnext]%
\egroup
\hangafter\minusone % added for side floats
\hangindent\zeropoint % added for side floats
\setfalse\handleformulanumber
+ \the\everyresetformulas
\dorechecknextindentation} % here ?
-\def\startdisplaymath
- {\ifgridsnapping
- \beforedisplayspace
- \snapmathtogrid\vbox
- \bgroup
- \informulatrue
- %\forgetall % breaks side floats
- \else
- \bgroup
- \parskip\formulaparskip % ! !
- \informulatrue
- %\forgetall % otherwise backgrounds fail
- \ifdim\lastskip<\zeropoint\else
- \par
- \ifvmode \ifdim\parskip>\zeropoint\relax
- \whitespace \vskip-\parskip % kind of forces and cancels again
- \fi \fi
- \fi
- \doif\displaygridcorrection{-\v!top}{\kern-\strutht}% new, currently only option/default
- \beforedisplayspace
- \par
- \ifvmode
- \prevdepth-\maxdimen % texbook pagina 79-80
- % otherwise problems at the top of a page
- \verticalstrut
- \vskip-\struttotal
- \vskip-\baselineskip
- \fi
+%D \starttyping
+%D % test \par % no preceding hlist
+%D % $$x$$ % preceding hlist
+%D % \noindent $$x$$ % no preceding hlist
+%D \startformula x \stopformula % now has \noindent (in mkii we messed with baselineskip)
+%D \stoptyping
+
+\unexpanded\def\startdisplaymath
+ {\bgroup
+ \par
+ \informulatrue
+ \beforedisplayspace
+ \par
+ \ifvmode
+ \prevdepth-\maxdimen % texbook pagina 79-80
\fi
- $$\setdisplaydimensions
- \setpredisplaysize\lastlinewidth
+ \noindent % else funny hlist with funny baselineskip
+ $$% \Ustartdisplaymath
+ \setdisplaydimensions
+ %\setpredisplaysize
\startinnermath}
-\def\stopdisplaymath
+\unexpanded\def\stopdisplaymath
{\stopinnermath
- $$%
- \ifgridsnapping
- \egroup
- \afterdisplayspace
- \else
- \par\ifvmode\ifdim\parskip>\zeropoint\whitespace\vskip-\parskip\fi\fi
- \afterdisplayspace
- \egroup
- \fi
- \globallet\displaylinecorrection\empty
- \gdef\displaygridcorrection{\displaygridsnapping}}
+ $$% \Ustopdisplaymath
+ \par
+ \afterdisplayspace
+ \par
+ \egroup}
\newif\ifclipdisplaymath \clipdisplaymathtrue
\def\displaymathclipfactor{1.1}
-\def\snapmathtogrid % to do \dp
- {\dowithnextbox
- {\bgroup
- \donefalse
- \ifclipdisplaymath
- \ifdim\nextboxht<\displaymathclipfactor\lineheight
- \donetrue
- \fi
- \fi
- \ifdone
- \nextboxht\lineheight
- \else
- \getnoflines\nextboxht
- \setbox\nextbox\vbox to \noflines\lineheight{\vfill\flushnextbox\vfill}%
- \setbox\nextbox\hbox{\lower\strutdepth\flushnextbox}%
- \fi
- \snaptogrid[\displaygridcorrection]\hbox{\flushnextbox}%
- \egroup}}
-
-\def\displaygridcorrection{\displaygridsnapping}
-\let\displaygridcorrection\empty
-
-\def\moveformula
- {\dosingleempty\domoveformula}
-
-\def\domoveformula[#1]% brr gaat mogelijk fout
- {\iffirstargument
- \xdef\displaygridcorrection{#1}%
- \else
- \gdef\displaygridcorrection{-\v!top}% handy with short preline
- \fi
- \globallet\displaylinecorrection\displaygridcorrection}
-
-\let\startinnermath\empty
-\let\stopinnermath \empty
+% already defined
+%
+% \let\startinnermath\empty
+% \let\stopinnermath \empty
% \defineformulaalternative[multi][\begindmath][\enddmath]
%
@@ -530,47 +530,31 @@
% \placeformula {f} \startspformule \fakespacingformula \stopspformule
% \fakewords{20}{40}
-\def\placeformula
- {\settrue\incrementformulanumber
- \dodoubleempty\doplaceformula}
-
-\def\placesubformula
- {\setfalse\incrementformulanumber
- \dodoubleempty\doplaceformula}
-
-\def\startsubformulas
+\unexpanded\def\startsubformulas
{\dosingleempty\dostartsubformulas}
\def\dostartsubformulas[#1]%
- {\ifconditional\incrementformulanumber
- \incrementstructurecounter[\v!formula]%
- \edef\subformulasreference{#1}% messy
- \ifx\subformulasreference\empty
- \glet\currentformulassynchronize\relax
- \glet\currentformulasattribute \relax
- \else
- \storecurrentformulanumber\subformulasreference\empty\currentformulassynchronize\currentformulasattribute
- \fi
- \fi
- \settrue\insidesubformulas}
+ {\edef\currentsubformulasreference{#1}%
+ \global\settrue\insidesubformulas
+ \handlesubformulasnumbering}
-\def\stopsubformulas
- {\setfalse\insidesubformulas
- \resetlastlinewidth
- \nonoindentation
+\unexpanded\def\stopsubformulas
+ {\nonoindentation
\checknextindentation[\formulaparameter\c!indentnext]%
+ \the\everyresetformulas % to be checked
+ \global\setfalse\insidesubformulas
\dorechecknextindentation} % here ?
-%D Named subformulas
+%D Named subformulas (to be redone)
-\def\startnamedsubformulas
+\unexpanded\def\startnamedsubformulas
{\dosingleempty\dostartnamedsubformulas}
\def\dostartnamedsubformulas[#1]#2%
{\setformulalistentry{#2}%
\startsubformulas[#1]}
-\def\stopnamedsubformulas
+\unexpanded\def\stopnamedsubformulas
{\stopsubformulas}
%D Experimental goodie:
@@ -584,339 +568,191 @@
%D
%D \typebuffer \getbuffer
-\def\placenamedformula
- {\dosingleempty\doplacenamedformula}
-
-\def\doplacenamedformula[#1]#2%
- {\iffirstargument
- \def\next{\placeformula[#1]}%
- \else
- \let\next\placeformula
- \fi
- \setformulalistentry{#2}%
- \next}
-
-%D The implementation of placement is a bit ugly:
-
-\def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces
- {\def\redoplaceformula
- {\bgroup
- \ifx\next\bgroup
- \egroup \@EA\moreplaceformula % [ref]{}
- \else
- \let\nextnext$% no def
- \ifx\next\nextnext
- \egroup \@EAEAEA\dispplaceformula % [ref]$$
- \else
- \egroup \@EAEAEA\dodoplaceformula % [ref]\start
- \fi
- \fi[#1]{}}%
- \futurelet\next\redoplaceformula}
-
-\long\def\moreplaceformula[#1]#2#3#4% #2 dummy #4 gobbles spaces
- {\def\redoplaceformula
- {\bgroup
- \let\nextnext$% no def
- \ifx\next\nextnext
- \egroup \@EA\dispplaceformula % [ref]$$
- \else
- \egroup \@EA\dodoplaceformula % [ref]\start
- \fi
- [#1]{#3}}%
- \futurelet\next\redoplaceformula#4}
-
-\let\startplaceformula\placeformula
-\let\stopplaceformula \relax
+\unexpanded\def\startformulas
+ {\dosingleempty\dostartformulas}
-\def\startformulas#1\stopformulas % new / to be internationalized
+\def\dostartformulas[#1]#2\stopformulas % new / to be internationalized
{\bgroup
+ \global\settrue\insideformulas
+ \edef\currentformulasreference{#1}%
+ \handleformulasnumbering
\let\currentformula\empty
\forgetdisplayskips
\startdisplaymath
\setlocalhsize
- \long\def\startformula##1\stopformula
+ \long\unexpanded\def\startformula##1\stopformula
{\advance\scratchcounter\plusone}%
\scratchcounter\zerocount
- #1% preroll
+ #2% preroll
\ifcase\scratchcounter\else
\divide \hsize \scratchcounter
\fi
\hbox to \localhsize \bgroup
\hss
- \def\normalstartformula{\vskip-\strutdepth$$}% i hate this
- \def\normalstopformula {$$}%
- \def\startformula {$\vcenter\bgroup\normalstartformula}%
- \def\stopformula {\normalstopformula\egroup$\hss}%
- #1%
+ \def\normalstartformula{\vskip-\strutdepth\Ustartdisplaymath}% i hate this
+ \def\normalstopformula {\Ustopdisplaymath}%
+ \unexpanded\def\startformula {\Ustartmath\vcenter\bgroup\normalstartformula}%
+ \unexpanded\def\stopformula {\normalstopformula\egroup\Ustopmath\hss}%
+ #2%
\egroup
\stopdisplaymath
+ \global\setfalse\insideformulas
\egroup
+ \the\everyresetformulas
\hangafter\minusone % added for side floats
\hangindent\zeropoint} % added for side floats
-\def\dispplaceformula[#1]#2$$#3$$%
- {\dodoplaceformula[#1]{#2}\dostartformula{}#3\dostopformula}
-
-\def\dodoplaceformula[#1]#2% messy, needs a clean up
- {\doifelse{#1}{-}
- {\setfalse\handleformulanumber}
- {\doifelse{#2}{-}
- {\setfalse\handleformulanumber}
- {\settrue\handleformulanumber}}%
- \ifconditional\handleformulanumber
- \def\formulanumber
- {%\global\let\subformulanumber\doformulanumber % no, bug
- \doformulanumber[#1][#2]}%
- \def\donestedformulanumber##1##2%
- {\doifsomething{##1}
- {\doifelse{##1}{+}{\doformulanumber[#1]}{\doformulanumber[##1]}[##2][]{}}}%
- \def\subformulanumber
- {\setfalse\incrementformulanumber
- \formulanumber}%
- \gdef\doplaceformulanumber
- {\global\let\doplaceformulanumber\empty
- \doifelse{\formulaparameter\c!location}\v!left
- {\normalleqno{\doformulanumber[#1][#2][]{}}}
- {\normalreqno{\doformulanumber[#1][#2][]{}}}}%
+% place
+
+% 0=unset, 1=forced, 2=none, 3=reference
+
+\chardef\placeformulanumbermode \zerocount
+\chardef\formulanumbermode \zerocount
+\chardef\formulasnumbermode \zerocount
+\chardef\subformulasnumbermode \zerocount
+\chardef\nestedformulanumbermode\zerocount
+
+\def\inhibitformulanumberflag{-}
+\def\forceformulanumberflag {+}
+
+\def\docheckformulareference#1#2%
+ {\chardef#1\ifx#2\empty
+ \zerocount
+ \else\ifx#2\forceformulanumberflag
+ \plusone
+ \else\ifx#2\inhibitformulanumberflag
+ \plustwo
\else
- \def\formulanumber{\doformulanumber[#1][#2]}%
- \let\donestedformulanumber\gobbletwoarguments
- \let\subformulanumber\doformulanumber % was \global
- \global\let\doplaceformulanumber\empty
- \fi}
-
-%D Here we implement a basic math alignment mechanism. Numbers
-%D are also handled. The macros \type {\startinnermath} and
-%D \type {\stopinnermath} can be overloaded in specialized
-%D modules.
-
-\def\startinnermath
- {\getvalue{\e!start\??fm\formulaparameter\c!align}}
-
-\def\stopinnermath
- {\getvalue{\e!stop \??fm\formulaparameter\c!align}}
-
-\def\mathinnerstrut
- {\doif{\formulaparameter\c!strut}\v!yes\strut}
-
-\long\def\defineinnermathhandler#1#2#3%
- {\setvalue{\e!start\??fm#1}{#2}%
- \setvalue{\e!stop \??fm#1}{#3}}
-
-\newif\iftracemath
-
-\def\mathhbox
- {\iftracemath\ruledhbox\else\hbox\fi}
-
-\chardef\mathraggedstatus=0 % normal left center right
-\chardef\mathnumberstatus=0 % nothing normal shift_right
-\let\mathnumbercorrection\!!zeropoint
-
-\def\startmathbox#1%
- {\hsize\displaywidth
- \global\chardef\mathnumberstatus\plusone
- \chardef\mathraggedstatus#1\relax
- \let\mathnumbercorrection\!!zeropoint
- \global\let\@eqno \empty \def\eqno {\gdef\@eqno }%
- \global\let\@leqno\empty \def\leqno{\gdef\@leqno}%
- % added
- \let\normalreqno\eqno
- \let\normalleqno\leqno
- % added
- \doplaceformulanumber
- \setbox\scratchbox\mathhbox to \displaywidth\bgroup
- \mathinnerstrut
- $%
- \displaystyle
- \ifcase\mathraggedstatus\or\hfill\or\hfill\fi}
-
-\def\llappedmathno
- {\ifcase\mathraggedstatus\or
- \@eqno
- \or
- \llap{\@eqno}%
- \or
- \llap{\@eqno}%
- \fi}
+ \plusthree
+ \fi\fi\fi}
+
+\def\formulanumber{\doformulanumber} % for the moment
-\def\rlappedmathno
- {\ifcase\mathraggedstatus\or
- \rlap{\@leqno}%
+\def\doformulanumber
+ {\dosingleempty\dodoformulanumber}
+
+\def\dodoformulanumber[#1]%
+ {\def\currentformulareference{#1}%
+ \dosinglegroupempty\dododoformulanumber}
+
+\def\redoformulanumber#1%
+ {\def\currentformulasuffix{#1}%
+ \dododoformulanumber}
+
+\unexpanded\def\placeformula
+ {\doglobal\settrue\insideplaceformula
+ \settrue\incrementformulanumber
+ \dodoubleempty\doplaceformula}
+
+\unexpanded\def\placesubformula
+ {\doglobal\settrue\insideplacesubformula
+ \setfalse\incrementformulanumber
+ \dodoubleempty\doplaceformula}
+
+% \def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces
+% {\def\currentplaceformulareference{#1}%
+% \let\currentplaceformulasuffix\empty
+% \futurelet\next\redoplaceformulaone}
+%
+% \let\mathdollarsign$ % no def
+%
+% \def\redoplaceformulaone % use doifnextcharelse
+% {\ifx\next\bgroup
+% \@EA\moreplaceformula % [ref]{}
+% \else
+% \@EA\redoplaceformulatwo
+% \fi}
+%
+% \long\def\moreplaceformula#1#2% #1 dummy #1 gobbles spaces
+% {\def\currentplaceformulasuffix{#1}%
+% \futurelet\next\redoplaceformulatwo#2}
+%
+% \def\redoplaceformulatwo
+% {\ifx\next\mathdollarsign
+% \@EA\dispplaceformula % [ref]$$
+% \else
+% \@EA\dodoplaceformula % [ref]\start
+% \fi}%
+
+\def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces
+ {\def\currentplaceformulareference{#1}%
+ \let\currentplaceformulasuffix\empty
+ \doifnextbgroupelse\moreplaceformula\redoplaceformula} % [ref]{}
+
+\long\def\moreplaceformula#1%
+ {\def\currentplaceformulasuffix{#1}%
+ \redoplaceformula}
+
+\long\def\redoplaceformula
+ {\doifnextcharelse$\dispplaceformula\dodoplaceformula} % [ref]$$ [ref]\start
+
+\def\dodoplaceformula
+ {\handleplaceformulanumbering}
+
+\def\dispplaceformula$$#1$$%
+ {\handleplaceformulanumbering
+ \dostartformula{}#1\dostopformula}
+
+\let\startplaceformula\placeformula
+\let\stopplaceformula \relax
+
+% 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
+
+\def\donestedformulanumberindeed#1#2%
+ {\def\currentnestedformulareference{#1}%
+ \def\currentnestedformulasuffix{#2}%
+ \glet\doplaceformulanumber\relax
+ \docheckformulareference\nestedformulanumbermode\currentnestedformulareference
+ \ifcase\nestedformulanumbermode
+ % nothing
\or
- \rlap{\@leqno}%
+ \doformulanumber
\or
- \@leqno
+ % nothing
+ \or
+ \doformulanumber
\fi}
-\def\stopmathbox
- {$%
- \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi
- \egroup
- \setbox0\hbox{\unhcopy\scratchbox}%
- \scratchdimen\wd0
- \ifdim\scratchdimen>\displaywidth
- \donetrue
+\def\doplaceformulanumberindeed
+ {\glet\doplaceformulanumber\relax
+ \doifelse{\formulaparameter\c!location}\v!left
+ {\normalleqno{\dododoformulanumber}}
+ {\normalreqno{\dododoformulanumber}}}
+
+% todo
+
+\unexpanded\def\placenamedformula
+ {\dosingleempty\doplacenamedformula}
+
+\def\doplacenamedformula[#1]#2%
+ {\iffirstargument
+ \def\next{\placeformula[#1]}%
\else
- \donefalse
+ \let\next\placeformula
\fi
- \hbox to \displaywidth\bgroup
- \ifcase\mathnumberstatus
- \box\scratchbox
- \or
- \ifx\@leqno\empty
- \ifx\@eqno\empty
- \box\scratchbox
- \else
- \ifdone
- \vbox{\box\scratchbox\hbox to \displaywidth{\hss\llappedmathno}}%
- \else
- \hss\box\scratchbox\llappedmathno % hss makes room for number
- \fi
- \fi
- \else
- \ifdone
- \vbox{\hbox to \displaywidth{\rlappedmathno\hss}\box\scratchbox}%
- \else
- \rlappedmathno\box\scratchbox\hss % hss makes room for number
- \fi
- \fi
- \or
- \hskip\mathnumbercorrection
- \box\scratchbox
- \hss
- \else
- \box\scratchbox
- \fi
- \egroup}
+ \setformulalistentry{#2}%
+ \next}
-\defineinnermathhandler\v!left {\startmathbox\plusone }{\stopmathbox}
-\defineinnermathhandler\v!middle {\startmathbox\plustwo }{\stopmathbox}
-\defineinnermathhandler\v!right {\startmathbox\plusthree}{\stopmathbox}
-\defineinnermathhandler\v!flushleft {\startmathbox\plusthree}{\stopmathbox}
-\defineinnermathhandler\v!center {\startmathbox\plustwo }{\stopmathbox}
-\defineinnermathhandler\v!flushright{\startmathbox\plusone }{\stopmathbox}
+\global\let\doflushformulalistentry\gobbleoneargument
-%D [The examples below are in english and don't process in the
-%D documentation style, which will be english some day.]
-%D
-%D Normally a formula is centered, but in case you want to
-%D align it left or right, you can set up formulas to behave
-%D that way. Normally a formula will adapt is left indentation
-%D to the environment:
-%D
-%D \startbuffer
-%D \fakewords{20}{40}\epar
-%D \startitemize
-%D \item \fakewords{20}{40}\epar
-%D \placeformula \startformula \fakeformula \stopformula
-%D \item \fakewords{20}{40}\epar
-%D \stopitemize
-%D \fakewords{20}{40}\epar
-%D \stopbuffer
-%D
-%D % \getbuffer
-%D
-%D In the next examples we explicitly align formulas to the
-%D left (\type {\raggedleft}), center and right (\type
-%D {\raggedright}):
-%D
-%D \startbuffer
-%D \setupformulas[align=left]
-%D \startformula\fakeformula\stopformula
-%D \setupformulas[align=middle]
-%D \startformula\fakeformula\stopformula
-%D \setupformulas[align=right]
-%D \startformula\fakeformula\stopformula
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Or in print:
-%D
-%D % {\getbuffer}
-%D
-%D With formula numbers these formulas look as follows:
-%D
-%D \startbuffer
-%D \setupformulas[align=left]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \setupformulas[align=middle]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \setupformulas[align=right]
-%D \placeformula \startformula\fakeformula\stopformula
-%D \stopbuffer
-%D
-%D % {\getbuffer}
-%D
-%D This was keyed in as:
-%D
-%D \typebuffer
-%D
-%D When tracing is turned on (\type {\tracemathtrue}) you can
-%D visualize the bounding box of the formula,
-%D
-%D % {\tracemathtrue\getbuffer}
-%D
-%D As you can see, the dimensions are the natural ones, but if
-%D needed you can force a normalized line:
-%D
-%D \startbuffer
-%D \setupformulas[strut=yes]
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D This time we get a more spacy result.
-%D
-%D % {\tracemathtrue\getbuffer}
-%D
-%D We will now show a couple of more settings and combinations
-%D of settings. In centered formulas, the number takes no space
-%D
-%D \startbuffer
-%D \setupformulas[align=middle]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D You can influence the placement of the whole box with the
-%D parameters \type {leftmargin} and \type {rightmargin}.
-%D
-%D \startbuffer
-%D \setupformulas[align=right,leftmargin=3em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D
-%D \setupformulas[align=left,rightmargin=1em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D You can also inherit the margin from the environment.
-%D
-%D \startbuffer
-%D \setupformulas[align=right,margin=standard]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
-%D
-%D The distance between the formula and the number is only
-%D applied when the formula is left or right aligned.
-%D
-%D \startbuffer
-%D \setupformulas[align=left,distance=2em]
-%D \startformula \fakeformula \stopformula
-%D \placeformula \startformula \fakeformula \stopformula
-%D \stopbuffer
-%D
-%D \typebuffer % {\tracemathtrue\getbuffer}
+\def\setformulalistentry#1%
+ {\gdef\doflushformulalistentry##1%
+ {\normalexpanded{\noexpand\writetolist[\v!formula]{##1}}{#1}%
+ \global\let\doflushformulalistentry\gobbleoneargument}}
\protect \endinput