[NTG-context] Border matrix

Hans Hagen pragma at wxs.nl
Mon Aug 28 19:29:29 CEST 2017


On 8/28/2017 6:33 PM, Fabrice L wrote:
> Hi,
> 
> I’have a lot of courses notes in MKII. I’m trying to move to MKIV. I 
> have a problem that I’m not able to resolve, to make a border matrix 
> with brackets. In MKII, I was using a macro, found somewhere, which 
> works great, but no longer works; here is the macro:
> 
> % Border matrix: first line and column are label
> \catcode`\@=11\relax
> \newdimen\p at renwd
> \font\tenex=cmex10 \setbox0=\hbox{\tenex B} \p at renwd=\wd0
> \def\bbordermatrix#1{\begingroup \m at th
> \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
>      \ialign{$##$\hfil\kern2\p@\kern\p at renwd&\thinspace\hfil$##$\hfil
>        &&\quad\hfil$##$\hfil\crcr
>        \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
>        #1\crcr\omit\strut\cr}}%
>    \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
>    \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
>    \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p at renwd\left[\kern-\wd\@ne
>      \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
>      \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right]$}%
>    \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
> \catcode`\@=12\relax

Such a plain macro needs to be made bodyfotn size aware and such.

> but MKIV gives me the error:
> 
> \bbordermatrix #1->\begingroup \m at th
> 
>                                       \setbox \z@ \vbox {\def \cr {\crcr 
> \noa...
> 
> l.26    i & j & k & l \cr}
> 
> 
> 16       \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
> 
> 17     \catcode`\@=12\relax
> 
> 
> I look for solutions on the list, but did not find anything.Here is a 
> minimal example:
> 
> \starttext
> A border matrix:
> \startformula
> \bbordermatrix{
>     a & b & c & d \cr
>     e & f & G & h \cr
>     i & j & k & l \cr}
> \stopformula
> \stoptext
> 
> As I have in my notes hundreds of such matrix, it is really difficult to 
> change the input format.
> 
> Do you know, or can you point me, to a solution ? I’m in a dead end..  
> Thanks a lot.
I'll add this:

\unprotect

\unexpanded\def\math_border_matrix#1#2#3% adapted plain
   {\begingroup
    %
    \pushmacro\cr
    %
    \setbox\scratchbox\hbox\bgroup
      \mr B%
    \egroup
    \scratchdimenone\wd\scratchbox
    %
    \scratchdimentwo.2\bodyfontsize
    %
    \mathsurround\zeropoint
    %
    \setbox\scratchboxone\vbox\bgroup
      \def\cr{%
        \crcr
        \noalign\bgroup
          \kern\scratchdimentwo
          \global\let\cr\endline
        \egroup
      }%
      \ialign{%
        \startimath\alignmark\alignmark\stopimath
        \hfil
        \kern\dimexpr\scratchdimentwo+\scratchdimenone\relax
        \aligntab
        \thinspace
        \hfil
        \startimath\alignmark\alignmark\stopimath
        \hfil
        \aligntab
        \aligntab
        \quad
        \hfil
        \startimath\alignmark\alignmark\stopimath
        \hfil
        \crcr
        \omit
        \strut
        \hfil
        \crcr
        \noalign{\kern-\baselineskip}%
        #3\crcr
        \omit
        \strut
        \cr
      }%
    \egroup
    \setbox\scratchboxtwo\vbox\bgroup
      \unvcopy\scratchboxone
      \global\setbox\globalscratchbox\lastbox
    \egroup
    \setbox\scratchboxtwo\hbox\bgroup
      \unhbox\globalscratchbox
      \unskip
      \global\setbox\globalscratchbox\lastbox
    \egroup
    \setbox\scratchboxtwo\hbox\bgroup
      \startimath
      \kern\dimexpr\wd\globalscratchbox-\scratchdimenone\relax
      \left#1\relax
      \kern-\wd\globalscratchbox
      \global\setbox\globalscratchbox\vbox\bgroup
        \box\globalscratchbox
        \kern\scratchdimentwo
      \egroup
      \vcenter\bgroup
        \kern-\ht\globalscratchbox
        \unvbox\scratchboxone
        \kern-\baselineskip
      \egroup
      \thinspace
      \right#2\relax
      \stopimath
    \egroup
    \null
    \thickspace
    \vbox\bgroup
      \kern\ht\globalscratchbox
      \box\scratchboxtwo
    \egroup
    %
    \popmacro\cr
    %
    \endgroup}

\unexpanded\def\bordermatrix {\math_border_matrix()}
\unexpanded\def\bbordermatrix{\math_border_matrix[]}

\protect

\starttext

A plain border matrix:

\startformula
\bordermatrix{
    a & b & c & d \cr
    e & f & G & h \cr
    i & j & k & l \cr}
\stopformula

\startformula
\bbordermatrix{
    a & b & c & d \cr
    e & f & G & h \cr
    i & j & k & l \cr}
\stopformula

\stoptext


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------


More information about the ntg-context mailing list