# [NTG-context] Problem with \definemathmatrix

Thu Jan 18 04:53:57 CET 2018

On Wed, 17 Jan 2018, Fabrice Couvreur wrote:

> Hello,
> This macro that is not mine worked very well. I just tested the following
> file and there is a problem.

> \math{M^3=\startpmatrix
>       \NC 2 \NC 3 \NC 6  \NC 4 \NC 2 \NC 7  \NC 3  \NC 1 \NR
>       \NC 3 \NC 0 \NC 1  \NC 1 \NC 2 \NC 3  \NC 6  \NC 4 \NR
>       \NC 6 \NC 1 \NC 4  \NC 4 \NC 4 \NC 9  \NC 10 \NC 6 \NR
>       \NC 4 \NC 1 \NC 4  \NC 4 \NC 5 \NC 8  \NC 8  \NC 3 \NR
>       \NC 2 \NC 2 \NC 4  \NC 5 \NC 2 \NC 7  \NC 3  \NC 1 \NR
>       \NC 7 \NC 3 \NC 9  \NC 8 \NC 7 \NC 8  \NC 10 \NC 3 \NR
>       \NC 3 \NC 6 \NC 10 \NC 8 \NC 3 \NC 10 \NC 4  \NC 1 \NR
>       \NC 1 \NC 4 \NC 6  \NC 3 \NC 1 \NC 3  \NC 1  \NC 0 \NR
>
>     \stoppmatrix}

If you type a lot of such matrices, you might find the attached module
interesting. Using it you can use matlab-like syntax for writing matrices:

\usemodule[simplematrix]
\definesimplematrix[MATRIX][fence=parenthesis, align=middle]

\starttext
$\MATRIX{1,2,3,4;5,6,7,8;9,10,11,12}$
\stoptext

-------------- next part --------------
%D \module
%D   [     file=t-simplematrix,
%D      version=2014.02.18,
%D        title=\CONTEXT\ User Module,
%D     subtitle=Simple matrix,
%D         date=\currentdate,
%D        email=adityam <at> ieee <dot> org,

\startmodule[simplematrix]

\unprotect

\definenamespace
[simplematrix]
[   \c!type=module,
\c!name=simplematrix,
\c!command=\v!yes,
setup=\v!list,
\s!parent=simplematrix,
]

\setupsimplematrix
[
\c!distance=\emwidth,
\c!mathstyle=,
fence=bracket,
\c!align=
]

\appendtoks
\setevalue{\currentsimplematrix}{\usesimplematrix[\currentsimplematrix]}
\to \everydefinesimplematrix

\newtoks\simplematrixtoks

\define[1]\simplematrix_row
{\processcommalist[#1]\simplematrix_col
\appendtoks \NR \to \simplematrixtoks}

\define[1]\simplematrix_col
{\appendtoks \NC #1 \to \simplematrixtoks}

\unexpanded\def\usesimplematrix
{\dodoubleargument\usesimplematrix_indeed}

\def\simplematrix_left
{\edef\p_left{\namedmathfenceparameter{\simplematrixparameter{fence}}\c!left}%
\normalleft\ifx\p_left\empty.\else\Udelimiter\plusfour\fam\p_left\relax\fi
\,}

\def\simplematrix_right
{\edef\p_right{\namedmathfenceparameter{\simplematrixparameter{fence}}\c!right}%
\,
\normalright\ifx\p_right\empty.\else\Udelimiter\plusfive\fam\p_right\relax\fi}

\def\usesimplematrix_indeed[#name][#options]#matrix%
{\begingroup
\edef\currentsimplematrix{#name}%
\setupsimplematrix[#name][#options]%
\simplematrixtoks\emptytoks
\startusemathstyleparameter\simplematrixparameter
\appendtoks
\bgroup
\startmathmatrix
[
\c!distance=\simplematrixparameter\c!distance,
\c!left=\simplematrix_left,
\c!right=\simplematrix_right,
\c!align=\simplematrixparameter\c!align,
]
\to \simplematrixtoks
\processlist[];\simplematrix_row[#matrix]%
\appendtoks \stopmathmatrix \egroup \to \simplematrixtoks
\the\simplematrixtoks
\stopusemathstyleparameter
\endgroup}

\protect

\stopmodule