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