ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Hans Hagen <pragma@wxs.nl>
Subject: Re: math align
Date: Mon, 16 Jan 2006 13:30:42 +0100	[thread overview]
Message-ID: <43CB91F2.3020009@wxs.nl> (raw)
In-Reply-To: <43CB6121.6080100@elvenkind.com>

[-- Attachment #1: Type: text/plain, Size: 314 bytes --]

Taco Hoekwater wrote:

>
>
> David Arnold wrote:
>
>> And where should we put this module temporarily?
>
>
> Put it in the local directory and do
>
>   \input math-ext
>
> at the top of your test files.
>
attached is a next version with 'definable' aligns

\definemathalign[myalign][...]

\startmyalign ...


Hans

[-- Attachment #2: math-ext.tex --]
[-- Type: text/x-tex, Size: 7897 bytes --]

%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.

%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}

\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}%
   }\,}

\def\prepareeqalignno
  {\!!toksa{\hfil$\forgetalign\displaystyle{##}$\tabskip\zeropoint}%
   \!!toksb{&$\forgetalign\displaystyle{{}##}$\tabskip\zeropoint}%
   \!!toksc{\hfil\tabskip\centering
            &\llap{$\forgetalign##$}\tabskip\zeropoint}%
   \buildeqalign
   \presetdisplaymath
   \tabskip\centering}

\def\prepareleqalignno
  {\!!toksa{\hfil$\forgetalign\displaystyle{##}$\tabskip\zeropoint}%
   \!!toksb{&$\forgetalign\displaystyle{{}##}$\tabskip\zeropoint}%
   \!!toksc{\hfil\tabskip\centering
            &\kern-\displaywidth\rlap{$\forgetalign##$}\tabskip\displaywidth}%
   \buildeqalign
   \presetdisplaymath
   \tabskip\centering}

\def\eqalignno#1%
  {\prepareeqalignno
   \halign to \displaywidth \expandafter {\the\scratchtoks\crcr#1\crcr}}

\def\leqalignno#1%
  {\prepareleqaligno
   \halign to \displaywidth \expandafter {\the\scratchtoks\crcr#1\crcr}}

\def\aligneqalignno
  {\prepareeqalignno
   \halign to \displaywidth \expandafter \bgroup\the\scratchtoks\crcr}

\def\alignleqalignno
  {\prepareleqalignno
   \halign to \displaywidth \expandafter \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][]}

\def\doalignNR[#1][#2]%
  {\doifsomething{#1}
     {\doifelse{#1}{+}
        {\doformulanumber[][#2][]{}}
        {\doformulanumber[#1][#2][]{}}}\cr}

\def\dostartmathalign[#1][#2]%
  {\edef\currentmathalign{#1}%
   \doifassignmentelse{#2}{\setupmathalign[#1][#2]}\donothing
   \def\NC{\def\NC####1{&####1}}%
   \def\EQ{&=}%
   \def\NR{&\doxxdoubleempty\doalignNR}%
   % amstex compatibility mode: (ugly)
   \def\notag{\def\\{&\crcr}}%
   \doifelse{#2}{*}{\def\\{&\crcr}}{\def\\{&\doalignNR[+][]\crcr}}%
   % end of compatibility mode
   \numberedeqalign}

\let\dostopmathalign\finishalignno

\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 a &= b \NR[+]
%D c &= d \NR
%D   &= e \NR
%D   &= f \NR[+]
%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

\protect \endinput

[-- Attachment #3: Type: text/plain, Size: 139 bytes --]

_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

  reply	other threads:[~2006-01-16 12:30 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-15 22:37 Hans Hagen
2006-01-16  3:31 ` Aditya Mahajan
2006-01-16  6:17 ` David Arnold
2006-01-16  7:30 ` David Arnold
2006-01-16  9:02   ` Taco Hoekwater
2006-01-16 12:30     ` Hans Hagen [this message]
2006-01-16 15:40       ` Mojca Miklavec
2006-01-16 16:38         ` Hans Hagen
2006-01-16 19:47           ` Aditya Mahajan
2006-01-16 21:43             ` Hans Hagen
2006-01-16 23:03               ` Aditya Mahajan
2006-01-17  3:02       ` Aditya Mahajan
2006-01-16 18:01     ` David Arnold
2006-01-16 18:16       ` Hans Hagen
2006-01-16 18:22         ` David Arnold
2006-01-16 19:45           ` Hans Hagen
2006-01-16 18:42         ` David Arnold
2006-01-16 20:41           ` Hans Hagen
2006-01-16 23:19             ` David Arnold
2006-01-16 18:20       ` Taco Hoekwater
2006-01-16 19:09         ` David Arnold
2006-01-16 20:18           ` Hans Hagen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=43CB91F2.3020009@wxs.nl \
    --to=pragma@wxs.nl \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).