On Wed, 27 Mar 2019, Hans Hagen wrote:

On 3/27/2019 4:56 PM, Aditya Mahajan wrote:
Hi,

It was reported on TeX.SE[1] that there is a bug when math matrix is used
inside a math align:

\starttext
\startformula
     \startalign[n=2,align={right,left}]
         \NC x
         \NC = a ~ long ~ sequence ~ of ~ terms
         \NR
         \NC y
         \NC = ok ~ left
         \NR
         \NC \startmatrix[left={\left\lbrack},right={\right\rbrack}]
                 \NC x \NR
                 \NC y \NR
             \stopmatrix
         \NC = why ~ right?
         \NR
         \NC y
         \NC = ok ~ left ~ again
         \NR
     \stopalign
\stopformula
\stoptext

gives

https://i.stack.imgur.com/ZTAp3.png

It appears that \startmatrix globally resets \NC. I haven't looked into
the code yet to see why this is happening.
you can play with

\unprotect

\newcount\c_math_eqalign_column_saved
\newcount\c_math_eqalign_first_saved

\unexpanded\def\math_matrix_start#1%
 {\begingroup
\c_math_eqalign_column_saved\c_math_eqalign_column
\c_math_eqalign_first_saved \c_math_eqalign_first
  \edef\currentmathmatrix{#1}%
  \dosingleempty\math_matrix_start_indeed}

\def\math_matrix_stop
 {\math_matrix_stop_processing
\global\c_math_eqalign_column\c_math_eqalign_column_saved
\global\c_math_eqalign_first\c_math_eqalign_first_saved
  \endgroup}

\protect

Yes, this works. But we still need \globalpushmacro\c_math_matrix_first, otherwise nested matrices have wrong distance.

https://mailman.ntg.nl/pipermail/ntg-context/2017/089631.html

So, the following appears to work correctly:

\unprotect
\newcount\c_math_eqalign_column_saved
\newcount\c_math_eqalign_first_saved

\unexpanded\def\math_matrix_start#1%
  {\begingroup
   \globalpushmacro\c_math_matrix_first
   \c_math_eqalign_column_saved\c_math_eqalign_column
   \c_math_eqalign_first_saved \c_math_eqalign_first
   \edef\currentmathmatrix{#1}%
   \dosingleempty\math_matrix_start_indeed}

\def\math_matrix_stop
  {\math_matrix_stop_processing
   \global\c_math_eqalign_column\c_math_eqalign_column_saved
   \global\c_math_eqalign_first\c_math_eqalign_first_saved
   \globalpopmacro\c_math_matrix_first
   \endgroup}
\protect

I am not sure why the assignments in math_matrix_start are not global but those in math_matrix_stop are global.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to