From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/25457 Path: news.gmane.org!not-for-mail From: David Arnold Newsgroups: gmane.comp.tex.context Subject: Re: math Date: Fri, 20 Jan 2006 20:01:40 -0800 Message-ID: <03E9FF72-A9F1-45A9-84C1-7C4743BBFEB8@cox.net> References: <43CCF636.6020604@wxs.nl> Reply-To: mailing list for ConTeXt users NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 (Apple Message framework v746.2) Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1137816196 14785 80.91.229.2 (21 Jan 2006 04:03:16 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sat, 21 Jan 2006 04:03:16 +0000 (UTC) Original-X-From: ntg-context-bounces@ntg.nl Sat Jan 21 05:03:11 2006 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane.org Original-Received: from ronja.vet.uu.nl ([131.211.172.88] helo=ronja.ntg.nl) by ciao.gmane.org with esmtp (Exim 4.43) id 1F09y0-0005GS-8d for gctc-ntg-context-518@m.gmane.org; Sat, 21 Jan 2006 05:03:08 +0100 Original-Received: from localhost (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 9190E12853; Sat, 21 Jan 2006 05:03:06 +0100 (CET) Original-Received: from ronja.ntg.nl ([127.0.0.1]) by localhost (smtp.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 30777-04; Sat, 21 Jan 2006 05:03:01 +0100 (CET) Original-Received: from ronja.vet.uu.nl (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 8F57512863; Sat, 21 Jan 2006 05:03:01 +0100 (CET) Original-Received: from localhost (localhost [127.0.0.1]) by ronja.ntg.nl (Postfix) with ESMTP id 65F6812853 for ; Sat, 21 Jan 2006 05:03:00 +0100 (CET) Original-Received: from ronja.ntg.nl ([127.0.0.1]) by localhost (smtp.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 30819-03 for ; Sat, 21 Jan 2006 05:02:58 +0100 (CET) Original-Received: from fed1rmmtao02.cox.net (fed1rmmtao02.cox.net [68.230.241.37]) by ronja.ntg.nl (Postfix) with SMTP id 0F52E12826 for ; Sat, 21 Jan 2006 05:02:57 +0100 (CET) Original-Received: from [10.0.1.2] (really [70.191.56.23]) by fed1rmmtao02.cox.net (InterMail vM.6.01.05.02 201-2131-123-102-20050715) with ESMTP id <20060121040056.RJLY17006.fed1rmmtao02.cox.net@[10.0.1.2]> for ; Fri, 20 Jan 2006 23:00:56 -0500 In-Reply-To: <43CCF636.6020604@wxs.nl> Original-To: mailing list for ConTeXt users X-Mailer: Apple Mail (2.746.2) X-Virus-Scanned: amavisd-new at ntg.nl X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.5 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: ntg-context-bounces@ntg.nl Errors-To: ntg-context-bounces@ntg.nl X-Virus-Scanned: amavisd-new at ntg.nl Xref: news.gmane.org gmane.comp.tex.context:25457 Archived-At: Hans et al, I am going to assume that all of this is saved as math-ext.tex. None of it goes anywhere else at the moment. Correct? Also, I assume that: \ifx\startalign\undefined \input math-ext.tex \fi still needs to go into cont-new.tex. Correct? On Jan 17, 2006, at 5:50 AM, Hans Hagen wrote: > Hi, > > Attached is a new version of math-ext > > - multiple columns > - alignment per column > > See examples in source (mixed &|cr and NC|NR is no longer supported). > > That's all the math for this week. > > Hans > %D \module > %D [ file=math-ext, > %D version=2006.01.14, > %D title=\CONTEXT\ Math Macros, > %D subtitle=Extra Macros, > %D author={Hans Hagen \& Taco Hoekwater}, > %D date=\currentdate, > %D copyright=\PRAGMA] > %C > %C This module is part of the \CONTEXT\ macro||package and is > %C therefore copyrighted by \PRAGMA. See mreadme.pdf for > %C details. > > %D This will go into core-mat > > %M \ifx\startalign\undefined \input math-ext.tex \fi > > % some simple math constructs (based on user requests) > % > % preliminary > > \unprotect > > % adapted stuff > > % we need to make this plain code a bit more 'readable' > > \def\openup > {\afterassignment\dopenup\scratchdimen=} > > \def\dopenup > {\advance\lineskip \scratchdimen > \advance\baselineskip \scratchdimen > \advance\lineskiplimit\scratchdimen} > > \def\jot{.25\bodyfontsize} % plain tex: 3 pt (todo: better name) > > \newif\ifdt@p > > \def\displ@y % \presetdisplayspacing or so > {\global\dt@ptrue > \openup\jot > \mathsurround\zeropoint > \everycr{\noalign{% > \ifdt@p > \global\dt@pfalse > \ifdim\prevdepth>-\thousandpoint > \vskip-\lineskiplimit > \vskip\normallineskiplimit > \fi > \else > \penalty\interdisplaylinepenalty > \fi}}} > > % context (hooks) > > \let\normaldispl@y\displ@y > > \def\displ@y{\resetdisplaymatheq\normaldispl@y} > > \let\presetdisplaymath\displ@y > > % plain tex value: \centering = 0pt plus 1000pt minus 1000pt > % plain tex valye: \jot = 3pt > > % n>1 #### needed, strange # interaction (maybe we need a toks in > recurse ane no macro) > > \def\buildeqalign > {\scratchtoks\emptytoks > \dorecurse{\mathalignparameter\c!m} > {\ifnum\recurselevel>\plusone > \appendtoks > \tabskip\mathalignparameter\c!distance&\tabskip\zeropoint > \to\scratchtoks > \fi > \expanded{\scratchtoks{\the\scratchtoks\the\!!toksa}}% > \dorecurse{\numexpr\mathalignparameter\c!n-\plusone\relax} > {\expanded{\scratchtoks{\the\scratchtoks\the\!!toksb}}}}% > \expanded{\scratchtoks{\the\scratchtoks\the\!!toksc}}} > > \def\forgetalign > {\tabskip\zeropoint\everycr\emptytoks} > > \let\firstineqalign\empty > \let\nextineqalign \empty > \let\leftofeqalign \empty > \let\rightofeqalign\empty > > \def\mathineqalign#1{$\forgetalign\displaystyle{{}#1{}}$} > \def\textineqalign#1{$\forgetalign#1$} > > \def\eqalign#1% why no halign here, probably because of displaywidth > {\!!toksa{\strut\hfil$\displaystyle{##}$}% > \!!toksb{&$\displaystyle{{}##{}}$\hfil}% > \!!toksc\emptytoks > \buildeqalign > \null\,\vcenter > {\openup\jot > \mathsurround\zeropoint > \expandafter \ialign \expandafter {\the\scratchtoks\crcr#1 > \crcr}% > }\,} > > % preamble is scanned for tabskips so we need the span to prevent > an error message > > \def\prepareeqalignno > {\!!toksa{\strut\firstineqalign\hfil\leftofeqalign\span > \mathineqalign{##}\rightofeqalign\tabskip\zeropoint}% > \!!toksb{&\nextineqalign\leftofeqalign\span\mathineqalign{##} > \rightofeqalign\tabskip\zeropoint}% > \!!toksc{\hfil\tabskip\centering&\llap{\span\textineqalign{##}} > \tabskip\zeropoint}% > \buildeqalign > \presetdisplaymath > \tabskip\centering} > > \def\prepareleqalignno > {\!!toksa{\strut\firstineqalign\hfil\leftofeqalign\span > \mathineqalign{##}\rightofeqalign\tabskip\zeropoint}% > \!!toksb{&\nextineqalign\leftofeqalign\span\mathineqalign{##} > \rightofeqalign\tabskip\zeropoint}% > \!!toksc{\hfil\tabskip\centering&\kern-\displaywidth\rlap{\span > \textineqalign{##}}\tabskip\displaywidth}% > \buildeqalign > \presetdisplaymath > \tabskip\centering} > > \chardef\eqalignmode=1 > > \def\eqalignno#1% > {\prepareeqalignno > \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA {\the > \scratchtoks\crcr#1\crcr}} > > \def\leqalignno#1% > {\prepareleqaligno > \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA {\the > \scratchtoks\crcr#1\crcr}} > > \def\aligneqalignno > {\prepareeqalignno > \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup > \the\scratchtoks\crcr} > > \def\alignleqalignno > {\prepareleqalignno > \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup > \the\scratchtoks\crcr} > > \def\finishalignno > {\crcr\egroup} > > \definesystemvariable{eq} > > \def\setupmathalign > {\dodoubleempty\dosetupmathalign} > > \def\dosetupmathalign[#1][#2]% > {\ifsecondargument > \getparameters[\??eq#1][#2]% > \else > \getparameters[\??eq][#1]% > \fi} > > \let\currentmathalign\empty > > \def\mathalignparameter#1% > {\executeifdefined{\??eq\currentmathalign#1}{\executeifdefined{\?? > eq#1}\empty}} > > \setupmathalign > [\c!n=2, > \c!m=1, > \c!distance=1em] > > \def\numberedeqalign > {\doifelse\@@fmlocation\v!left\alignleqalignno\aligneqalignno} > > \def\doxxdoubleempty#1#2% > {\ifx#2[\expandafter\dodoxxdoubleempty\else\expandafter > \noxxdoubleempty\fi#1#2} > > \def\dodoxxdoubleempty#1[#2]#3% > {\ifx#3[\else\expandafter\nonoxxdoubleempty\fi#1[#2]#3} > > \def\noxxdoubleempty #1{#1[][]} > \def\nonoxxdoubleempty#1[#2]{#1[#2][]} > > \newcount\eqaligncolumn > > \def\firstineqalign{\global\eqaligncolumn\plusone} > \def\nextineqalign {\global\advance\eqaligncolumn\plusone} > \def\leftofeqalign {\getvalue{\??eq:\v!left :\number\eqaligncolumn}} > \def\rightofeqalign{\getvalue{\??eq:\v!right:\number\eqaligncolumn}} > > \def\doseteqaligncolumn#1% > {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\empty > \letvalue{\??eq:\v!right:\number\eqaligncolumn}\empty > \doif{#1}\v!left {\letvalue{\??eq:\v!right:\number > \eqaligncolumn}\hfill}% > \doif{#1}\v!right {\letvalue{\??eq:\v!left :\number > \eqaligncolumn}\hfill}% > \doif{#1}\v!middle{\letvalue{\??eq:\v!right:\number > \eqaligncolumn}\hfill > \letvalue{\??eq:\v!left :\number > \eqaligncolumn}\hfill}} > > \def\dodoalignNC > {\gdef\doalignNC##1{&##1}} > > \def\doalignNR[#1][#2]% > {\doifsomething{#1} > {\doifelse{#1}{+} > {\doformulanumber[][#2][]{}} > {\doformulanumber[#1][#2][]{}}}% > \crcr} > > \def\dostartmathalign[#1][#2]% > {\pushmacro\doalignNC > \edef\currentmathalign{#1}% > \doifassignmentelse{#2}{\setupmathalign[#1][#2]}\donothing > \def\NC{\doalignNC}% > \global\let\doalignNC\dodoalignNC > \def\EQ{&=}% > \def\NR{&\global\let\doalignNC\dodoalignNC\doxxdoubleempty > \doalignNR}% > % amstex compatibility mode: (ugly) > \def\notag{\def\\{&\crcr}}% > \doifelse{#2}{*}{\def\\{&\crcr}}{\def\\{&\doalignNR[+][]\crcr}}% > % end of compatibility mode > \eqaligncolumn\zerocount > \processcommacommand[\mathalignparameter\c!align]{\advance > \eqaligncolumn\plusone\doseteqaligncolumn}% > % the real action > \global\eqaligncolumn\plusone > \numberedeqalign} > > \def\dostopmathalign > {\finishalignno > \popmacro\doalignNC} > > \def\definemathalign > {\dodoubleempty\dodefinemathalign} > > \def\dodefinemathalign[#1]% [#2]% > {\setvalue{\e!start#1}{\dodoubleempty\dostartmathalign[#1]}% > \setvalue{\e!stop #1}{\dostopmathalign}% > \setupmathalign[#1]}% [#2] > > \definemathalign[align] % default case > > % \def\startsplit > % {\startalign[*]} % no number by default > % > % \def\stopsplit > % {&\doalignNR[+][]\crcr % for a number on last line > % \stopalign} > > %D \startbuffer > %D \placeformula \startformula \eqalignno { > %D a &= b & \formulanumber \cr > %D c &= d \cr > %D &= e \cr > %D &= f & \formulanumber > %D } \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign > %D \NC a \EQ b \NR[+] > %D \NC c \EQ d \NR > %D \NC \EQ f \NR[for:demo-a-1] > %D \NC \EQ g \NR[for:demo-a-2][a] > %D \NC \EQ h \NR[for:demo-a-3][b] > %D \NC \EQ i \NR > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign > %D \NC a \EQ b \NR[+] > %D \NC c \EQ d \NR > %D \NC \EQ f \NR > %D \NC \EQ g \NR > %D \NC \EQ h \NR > %D \NC \EQ i \NR[+] > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign > %D a &= b \\ > %D c &= d \notag \\ > %D &= e \notag \\ > %D &= f \\ > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign > %D \NC a \NC \eq b \NR[+] > %D \NC c \NC \neq d \NR > %D \NC \NC \neq f \NR[for:demo-b-1] > %D \NC \NC \geq g \NR[for:demo-b-2][a] > %D \NC \NC \leq h \NR[for:demo-b-3][b] > %D \NC \NC \neq i \NR > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign[*] > %D a &= b \\ > %D c &= d \\ > %D &= e \\ > %D &= f \\ > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign > %D x &= y \\ > %D a &= b \\ > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign[m=3] > %D x &= y & x &= y & z &= t \\ > %D a &= b & p &= q & w &= s \\ > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign[m=3,distance=0pt] > %D x &= y &= x &= y &= z &= t \\ > %D a &= b &= p &= q &= w &= s \\ > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign[n=5,distance=0pt] > %D x &= yy &= xx &= yy &= zz \\ > %D a &= b &= p &= q &= w \\ > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign[n=3,align= > {left,middle,right}] > %D \NC l \NC = \NC r \NR > %D \NC left \NC = \NC right \NR > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign[n=3,align= > {right,middle,left}] > %D \NC l \NC = \NC r \NR > %D \NC left \NC = \NC right \NR > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula \startformula \startalign[n=3,align= > {middle,middle,middle}] > %D \NC l \NC = \NC r \NR > %D \NC left \NC = \NC right \NR > %D \stopalign \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > > % BEGIN OF PATCH (CORE-MAT.TEX) > > \def\doplaceformula[#1][#2]% #2 = dummy, gobbles spaces > {\def\redoplaceformula > {\bgroup > \ifx\next\bgroup > \egroup \@EA\moreplaceformula % [ref]{} > \else > \def\nextnext{$}% > \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 > \def\nextnext{$}% > \ifx\next\nextnext > \egroup \@EA\dispplaceformula % [ref]$$ > \else > \egroup \@EA\dodoplaceformula % [ref]\start > \fi > [#1]{#3}}% > \futurelet\next\redoplaceformula#4} > > % END OF PATCH > > \def\startformulas#1\stopformulas > {\bgroup > \forgetdisplayskips > \startdisplaymath > \setlocalhsize > \long\def\startformula##1\stopformula{\advance\scratchcounter > \plusone}% > \scratchcounter\zerocount #1% preroll > \divide \hsize \scratchcounter > \hbox to \localhsize \bgroup > \hss > \def\normalstartformula{\vskip-\strutdepth$$}% i hate this > \def\normalstopformula {$$}% > % \def\jot{0pt}% > \def\startformula{$\vcenter\bgroup\normalstartformula}% > \def\stopformula {\normalstopformula\egroup$\hss}% > #1% > \egroup > \stopdisplaymath > \egroup} > > %D \startbuffer > %D \placeformula > %D \startformula > %D \startalign[n=3,align={middle,middle,middle}] > %D \NC a \NC = \NC b \NR[+] > %D \NC 2a \NC = \NC 2b \NR > %D \stopalign > %D \stopformula > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula > %D \startformulas > %D \setupmathalign[n=3,align={middle,middle,middle}]% > %D \startformula > %D \startalign > %D \NC a \NC = \NC b \NR[+] > %D \NC 2a \NC = \NC 2b \NR > %D \stopalign > %D \stopformula > %D \startformula > %D \startalign > %D \NC a \NC = \NC b \NR[+] > %D \NC 2a \NC = \NC 2b \NR > %D \stopalign > %D \stopformula > %D \stopformulas > %D \stopbuffer > %D > %D \typebuffer \getbuffer > %D > %D \startbuffer > %D \placeformula > %D \startformulas > %D \dorecurse{5}{\startformula > %D \startalign[n=3,align={middle,middle,middle}] > %D \NC a \NC = \NC b \NR[+] > %D \NC 2a \NC = \NC 2b \NR > %D \stopalign > %D \stopformula} > %D \stopformulas > %D \stopbuffer > %D > %D \typebuffer \getbuffer > > \protect \endinput > _______________________________________________ > ntg-context mailing list > ntg-context@ntg.nl > http://www.ntg.nl/mailman/listinfo/ntg-context