The package easybmat

Enrico Bertolazzi

Department of Mechanics and Structures Engineering University of Trento via Mesiano 77, I – 38050 Trento, Italy

enrico.bertolazzi@ing.unitn.it

19th March 2002

Abstract The easybmat package is a macro package for supporting block matri-

ces having equal column widths or equal rows heights or both, and supporting various kinds of rules (lines) between rows and columns. The package is based on an array/tabular-like syntax.

Contents

1 Some examples with easybmat . . . . . . . . . . . . . . . . . . 2 2 An example with balancing . . . . . . . . . . . . . . . . . . . . . 5 3 Some example with minimal size setting . . . . . . . . . . . . . . 6 4 An example with various size rules . . . . . . . . . . . . . . . . . 7 5 The \addpath command . . . . . . . . . . . . . . . . . . . . . 8 6 An example with reentrance . . . . . . . . . . . . . . . . . . . . 10

1 Some examples with easybmat

The package is loaded by means the usual way:

\documentclass{article}
.
.
\usepackage[thinlines,thiklines]{easybmat}
.
.

The options thinlines and thicklines are self explanatory. easybmat provides the BMAT environment which is a re-implementation of the array/tabular environment, with some limitation and some additional features. The syntax is

\begin{BMAT}`(eq)'`[ex]'`{cc...c}'`{cc...c}'
   a & b & ... & n \\
   ...
\end{BMAT}

or

\begin{BMAT}`(eq,mx,my)'
              `[ex,MX,MY]'
              `{cc...c}'
              `{cc...c}'
   a & b & ... & n \\
   ...
\end{BMAT}

• (eq) or (eq,mx,my) . By eq you can balance the rows or the column or both, as shown in this table:

Table 1.

value of eq effect
@  no balancing
r  equal rows heights
c  equal column widths
b  equal rows heights and equal column widths
e  equal rows heights and column widths

By mx and my you can modify the minimum size of the box in the BMAT environment. This must be a valid measure e.g. 2pt . This is useful in writing matrices an vectors.

• [ex] or [ex,MX,MY] . By ex you can specify the amount of extra space around the item in the BMAT environment. The default is 2pt . By MX and MY you can modify the minimum size of the whole block matrix in the BMAT environment. This must be a valid measure e.g. 10cm .

• The first {cc...c} is the definition of the columns and their alignment. The possible alignment for the columns are:

Table 2.

c centering
l flush left
r flush right

• The second {cc...c} is the definition of the rows their alignment. The possible alignment for the rows are:

Table 3.

c centering
t flush top
b flush bottom

IMPORTANT: The package can manage matrices with a maximum of 30 rows by 30 columns.

It is possible to produce rules among columns or rows as this example shows:

\[ \begin{BMAT}(b){|l:cr|}{|t;cb|}
1_{j} & 1 & 1 \\
1_{j} & 1 & \frac{111}{222} \\
1 & 1_{j} & 1
\end{BMAT} \qquad
\begin{BMAT}(b){|r:cl|}{|b;ct|}
1_{j} & 1 & 1 \\
1_{j} & 1 & \frac{111}{222} \\
1 & 1_{j} & 1
\end{BMAT} \]

\begin{matrix}1_{j} & 1 & 1 \\ 1_{j} & 1 & \frac{111}{222} \\ 1 & 1_{j} & 1 \end{matrix}  \begin{matrix}1_{j} & 1 & 1 \\ 1_{j} & 1 & \frac{111}{222} \\ 1 & 1_{j} & 1 \end{matrix}

The available rules for the rows and columns are

Table 4.

nothing no rule
|  solid line
:  dash line
;  dot-dash line
.  dotted line
0  solid line with size 1/5 of normal line
1  solid line with size 1/4 of normal line
2  solid line with size 1/3 of normal line
3  solid line with size 1/2 of normal line
4  equivalent to |
5  solid line with size 2 times of normal line
6  solid line with size 3 times of normal line
7  solid line with size 4 times of normal line
8  solid line with size 5 times of normal line
9  solid line with size 6 times of normal line

The main feature of the BMAT environment is that it is reentrant as shown here:

  \[ \begin{BMAT}{0c.c9}{|c.c|}
        1 & 2 \\ 3 &
        \begin{BMAT}{c:c}{c:c}
            a & b \\ c & d
        \end{BMAT}
     \end{BMAT} \]

\begin{matrix}1 & 2 \\ 3 & \begin{matrix}a & b \\ c & d \end{matrix} \end{matrix}

IMPORTANT: The package can manage a maximum reentrance of 8 levels.

2 An example with balancing

The effect of various balancing is best seen below:

\[ \begin{BMAT}{|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
\frac{1}{2} & 1 & 1 \\
\frac{1}{\frac{1}{2}} & 1 & 1
\end{BMAT} \quad
\begin{BMAT}(r){|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
\frac{1}{2} & 1 & 1 \\
\frac{1}{\frac{1}{2}} & 1 & 1
\end{BMAT} \quad
\begin{BMAT}(c){|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
\frac{1}{2} & 1 & 1 \\
\frac{1}{\frac{1}{2}} & 1 & 1
\end{BMAT} \]

1 22 333 ^{\frac{1}{2} 1 1} ^{\frac{1}{\frac{1}{2}} 1 1} ^{1 22 333} ^{\frac{1}{2} 1 1} ^{\frac{1}{\frac{1}{2}} 1 1}  1 22 333 ^{\frac{1}{2} 1 1} ^{\frac{1}{\frac{1}{2}} 1 1}

3 Some example with minimal size setting

It is possible to specify the minimal size of the item inside a “BMAT” environment, as shown here

\[ \left[
\begin{BMAT}(@,50pt,20pt){c.c}{c.c}
1 & 22 \\ \frac{1}{2} & 1
\end{BMAT}
\right] \]

[  \begin{matrix}1 & 22 \\ \frac{1}{2} & 1 \end{matrix} ]

It is possible to specify the total minimal size of a BMAT environment, as shown here

\[ \left[
\begin{BMAT}(e)[2pt,3cm,3cm]{c.c}{c.c}
   1 & 22 \\ \frac{1}{2} & 1
\end{BMAT}
\right] \times \left[
\begin{BMAT}(e)[2pt,0pt,3cm]{c}{c.c}
  x \\ y
\end{BMAT}
\right] = \left[
\begin{BMAT}(e)[2pt,1cm,3cm]{c}{c.c}i
   2 \\ \frac{3}{2}
\end{BMAT} \right] \]

[ \begin{matrix}1 & 22 \\ \frac{1}{2} & 1 \end{matrix} ] × [ \begin{matrix}x \\ y \end{matrix} ] = [ i2 ; \frac{3}{2} ]

4 An example with various size rules

This example shows the use of various size rule in BMAT environment:

\[ \begin{BMAT}(e,10pt,10pt){0c1c2c3c4c5c6c7c8c9}
                             {0c1c2c3c4c5c6c7c8c9}
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \end{BMAT} \]

\begin{matrix}∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ & ∗ \end{matrix}

5 The \addpath command

Is is possible to add paths to the “BMAT” environment. The syntax is the following

\begin{BMAT} ...... {...}{...}
...... \\
...... \\
...... \\
\addpath{(`x',`y',`rule')`path'}
.
.
\addpath{(`x',`y',`rule')`path'}
\end{BMAT}

where

x and y are the integer coordinate of the starting point. The down left corner is at x = 0, y = 0. rule is the code of a valid rule as described in table 4.

path is a string describing the path. Each letter of the string is a movement coded as follows:

Table 5.

letter direction
l  left movement and drawing
r  right movement and drawing
u  up movement and drawing
d  down movement and drawing

The following example shows the use of \addpath,

\[ \begin{BMAT}[5pt]{|ccccc|}{|cccc|}
* & * & * & * & * \\
* & * & * & * & * \\
* & * & * & * & * \\
* & * & * & * & *
\addpath{(1,1,0)ruld}
\addpath{(4,3,;)lldrrdll}
\end{BMAT} \]

\begin{matrix}∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ \\ ∗ & ∗ & ∗ & ∗ & ∗ \end{matrix}

This is another example

\[ \left(\begin{BMAT}[5pt]{cccccc}{cccccc}
1 & *  & *   & *     & *      & * \\
0 & 11 & *   & *     & *      & * \\
0 & 0  & 111 & *     & *      & * \\
0 & 0  & 0   & 1111 & *      & * \\
0 & 0  & 0   & 0     & 11111 & * \\
0 & 0  & 0   & 0     & 0      & 11111
\addpath{(0,5,.)rdrdrdrdrd}
\end{BMAT}\right) \]

( \begin{matrix}1 & ∗ & ∗ & ∗ & ∗ & ∗ \\ 0 & 11 & ∗ & ∗ & ∗ & ∗ \\ 0 & 0 & 111 & ∗ & ∗ & ∗ \\ 0 & 0 & 0 & 1111 & ∗ & ∗ \\ 0 & 0 & 0 & 0 & 11111 & ∗ \\ 0 & 0 & 0 & 0 & 0 & 11111 \end{matrix} )

6 An example with reentrance

This final example shows a slightly more complex (reentrant) definition in which the BMAT environment is used:

\def\rec(#1){\expandafter\recurse#1-\end}
\def\recurse#1#2\end{%
\if\noexpand#1-\def\next##1##2{}%
\else\let\next=\recursea\fi%
\expandafter\next{#1}{#2}%
}%
\def\recursea#1#2{%
\bgroup
\begin{BMAT}[0pt]{l:c:r}{t;c;b}
\rec(#2) &       #1  & \rec(#2) \\
       #1 & \rec(#2) & #1        \\
\rec(#2) &       #1  & \rec(#2)
\end{BMAT}
\egroup
}
\[ \recurse\clubsuit\diamondsuit\heartsuit\end \]

It produces the following output:

\begin{matrix}\begin{matrix}\begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \\ ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ \\ \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \end{matrix} & ♣ & \begin{matrix}\begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \\ ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ \\ \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \end{matrix} \\ ♣ & \begin{matrix}\begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \\ ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ \\ \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \end{matrix} & ♣ \\ \begin{matrix}\begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \\ ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ \\ \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \end{matrix} & ♣ & \begin{matrix}\begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \\ ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ \\ \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} & ♢ & \begin{aligned}& ♡ \\ ♡ & & ♡ \\ & ♡ \end{aligned} \end{matrix} \end{matrix}