[NTG-context] Bug when mathmatrix is used inside mathalign

Aditya Mahajan adityam at umich.edu
Thu Mar 28 00:09:14 CET 2019


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


More information about the ntg-context mailing list