The package easybmat

Enrico Bertolazzi

Laboratorio di Matematica Applicata e Meccanica Computazionale

Dipartimento di Ingegneria Meccanica e Strutturale

Università degli Studi di Trento

Mesiano, Trento, Italy enrico.bertolazzi@ing.unitn.it

22nd October 1999

Abstract

The easybmat package is a macro package for writing block matrices, with equal column widths or equal rows heights or both, with various kinds of rules (lines) between rows and columns. It uses 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 7 6 An example with reentrance 9

1 Some examples with easybmat

Load the package in the usual way:

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

The options thinlines, and thiklines 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 between 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 reentrance of a maximum of 8 levels.

2 An example with balancing

Here it is showed the effect of various balancing:

\[ \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 left down corner is at coordinate 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}