\documentclass[a4paper]{article} % \usepackage{times} \usepackage{easytitle}% \usepackage{easybmat}% \let\package\texttt % so \package{foo} comes out in \tt \let\envname\textsf % so \envname{foo} comes out as \sf \newbox\tempbox \def\BOX{% \setbox\tempbox\hbox\bgroup \begin{minipage}{0.9\textwidth} } \def\endBOX{% \end{minipage} \egroup \par\bigskip \begin{center} \fboxsep=10pt\fbox{\box\tempbox} \end{center} \bigskip\par } \title{The package \package{easybmat}} \author[E. Bertolazzi]{Enrico Bertolazzi} \address{ Laboratorio di Matematica Applicata e Meccanica Computazionale\\ Dipartimento di Ingegneria Meccanica e Strutturale\\ Universit\`a degli Studi di Trento\\ Mesiano, Trento, Italy} \mailto{enrico.bertolazzi@ing.unitn.it} \begin{document} \maketitle \begin{abstract} The \package{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/ta\-bular-like syntax. \end{abstract} \tableofcontents \newpage \section{Some examples with \package{easybmat}} Load the package in the usual way: \begin{BOX} \begin{verbatim} \documentclass{article} . . \usepackage[thinlines,thiklines]{easybmat} . . \end{verbatim} \end{BOX} The options \texttt{thinlines}, and \texttt{thiklines} are self explanatory. \package{easybmat} provides the \envname{BMAT}~environment which is a re-implementation of the array/tabular environment, with some limitation and some additional features. The syntax is \begin{BOX} \begin{verbatim} \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} \end{verbatim} \end{BOX} \begin{itemize} \item \verb+(eq)+ or \verb+(eq,mx,my)+. By \verb+eq+ you can balance the rows or the column or both, as shown in this table: \begin{center} \textbf{Table 1.} \\[1em] \begin{tabular}{|l|l|} \hline value of $x$ & effect \\ \hline \verb+@+ & no balancing \\ \verb+r+ & equal rows heights \\ \verb+c+ & equal column widths \\ \verb+b+ & equal rows heights and equal column widths \\ \verb+e+ & equal rows heights and column widths \\ \hline \end{tabular} \end{center} By \verb+mx+ and \verb+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. \item \verb+[ex]+ or \verb+[ex,MX,MY]+. By ``\verb+ex+'' you can specify the amount of extra space around the item in the \envname{BMAT} environment. The default is \verb+2pt+. By \verb+MX+ and \verb+MY+ you can modify the minimum size of the whole block matrix in the \envname{BMAT} environment. This must be a valid measure e.g.10cm. \item The first \verb+`{cc...c}'+ is the definition of the columns and their alignment. The possible alignment for the columns are: \begin{center} \textbf{Table 2.} \\[1em] \begin{tabular}{|l|l|} \hline \verb+c+ & centering \\ \verb+l+ & flush left \\ \verb+r+ & flush right \\ \hline \end{tabular} \end{center} \item The second \verb+`{cc...c}'+ is the definition of the rows their alignment. The possible alignment for the rows are: \begin{center} \textbf{Table 3.} \\[1em] \begin{tabular}{|l|l|} \hline \verb+c+ & centering \\ \verb+t+ & flush top \\ \verb+b+ & flush bottom \\ \hline \end{tabular} \end{center} \end{itemize} \textbf{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{BOX} \begin{verbatim} \[ \begin{BMAT}(b){|l:cr|}{|t;cb|} 1 & 1 & 1 \\ 1 & \frac{111}{222} & 1 \\ 1 & 1 & 1 \end{BMAT} \qquad \begin{BMAT}(b){|r:cl|}{|b;ct|} 1 & 1 & 1 \\ 1 & \frac{111}{222} & 1 \\ 1 & 1 & 1 \end{BMAT} \] \end{verbatim} \[ \begin{BMAT}(b){|l:cr|}{|t;cb|} 1 & 1 & 1 \\ 1 & \frac{111}{222} & 1 \\ 1 & 1 & 1 \end{BMAT} \qquad \begin{BMAT}(b){|r:cl|}{|b;ct|} 1 & 1 & 1 \\ 1 & \frac{111}{222} & 1 \\ 1 & 1 & 1 \end{BMAT} \] \end{BOX} The available rules for the rows and columns are \begin{center} \textbf{Table 4.} \\[1em] \begin{tabular}{|l|l|} \hline nothing & no rule \\ \verb+|+ & solid line \\ \verb+:+ & dash line \\ \verb+;+ & dot-dash line \\ \verb+.+ & dotted line \\ \verb+0+ & solid line with size $1/5$ of normal line \\ \verb+1+ & solid line with size $1/4$ of normal line \\ \verb+2+ & solid line with size $1/3$ of normal line \\ \verb+3+ & solid line with size $1/2$ of normal line \\ \verb+4+ & equivalent to \verb+|+ \\ \verb+5+ & solid line with size $2$ times of normal line \\ \verb+6+ & solid line with size $3$ times of normal line \\ \verb+7+ & solid line with size $4$ times of normal line \\ \verb+8+ & solid line with size $5$ times of normal line \\ \verb+9+ & solid line with size $6$ times of normal line \\ \hline \end{tabular} \end{center} The main feature of the \envname{BMAT}~environment is that it is reentrant as shown here: \begin{BOX} \begin{verbatim} \[ \begin{BMAT}{0c.c9}{|c.c|} 1 & 2 \\ 3 & \begin{BMAT}{c:c}{c:c} a & b \\ c & d \end{BMAT} \end{BMAT} \] \end{verbatim} \[ \begin{BMAT}{0c.c9}{|c.c|} 1 & 2 \\ 3 & \begin{BMAT}{c:c}{c:c} a & b \\ c & d \end{BMAT} \end{BMAT} \] \end{BOX} \textbf{IMPORTANT:} The package can manage a reentrance of a maximum of $8$ levels. \section{Some example with balancing} Here it is showed the effect of various balancing: \begin{BOX} \begin{verbatim} \[ \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} \] \[ \begin{BMAT}(b){|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}(e){|c|c|c|}{|c|c|c|} 1 & 22 & 333 \\ \frac{1}{2} & 1 & 1 \\ \frac{1}{\frac{1}{2}} & 1 & 1 \end{BMAT} \] \end{verbatim} \end{BOX} which produce: \begin{BOX} \[ \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} \] \[ \begin{BMAT}(b){|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}(e){|c|c|c|}{|c|c|c|} 1 & 22 & 333 \\ \frac{1}{2} & 1 & 1 \\ \frac{1}{\frac{1}{2}} & 1 & 1 \end{BMAT} \] \end{BOX} \section{An example with minimal size setting} It is possible to specify the minimal size of the item inside a ``BMAT'' environment, as shown here \begin{BOX} \begin{verbatim} \[ \left[ \begin{BMAT}(@,50pt,20pt){c.c}{c.c} 1 & 22 \\ \frac{1}{2} & 1 \end{BMAT} \right] \] \end{verbatim} \[ \left[ \begin{BMAT}(@,50pt,20pt){c.c}{c.c} 1 & 22 \\ \frac{1}{2} & 1 \end{BMAT} \right] \] \end{BOX} It is possible to specify the total minimal size of a ``BMAT'' environment, as shown here \begin{BOX} \begin{verbatim} \[ \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} 2 \\ \frac{3}{2} \end{BMAT} \right] \] \end{verbatim} \[ \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} 2 \\ \frac{3}{2} \end{BMAT} \right] \] \end{BOX} \section{An example with various size rules} This example shows the use of various size rule in \envname{BMAT} environment: \begin{BOX} \begin{verbatim} \[ \begin{BMAT}(e,10pt,10pt){0c1c2c3c4c5c6c7c8c9} {0c1c2c3c4c5c6c7c8c9} * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \end{BMAT} \] \end{verbatim} \[ \begin{BMAT}(e,10pt,10pt){0c1c2c3c4c5c6c7c8c9} {0c1c2c3c4c5c6c7c8c9} * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \\ * & * & * & * & * & * & * & * & * \end{BMAT} \] \end{BOX} \section{The \texttt{\char`\\addpath} command} Is is possible to add paths to the ``BMAT'' environment. The sintax is the following \begin{verbatim} \begin{BMAT} ...... {...}{...} ...... \\ ...... \\ ...... \\ \addpath{(`x',`y',`rule')`path'} . . \addpath{(`x',`y',`rule')`path'} \end{BMAT} \end{verbatim} where \begin{itemize} \item \verb+x+ and \verb+y+ are the integer coordinate of the starting point. The left down corner is at coordinate $x=0$, $y=0$. \item \verb+rule+ is the code of a valud rule as described in table 4. \item \verb+path+ is a string describing the path. Each letter of the string is a movement coded as follows: \begin{center} \textbf{Table 5.} \\[1em] \begin{tabular}{|l|l|} \hline letter & direction \\ \hline \verb+l+ & left movement and drawing \\ \verb+r+ & right movement and drawing \\ \verb+u+ & up movement and drawing \\ \verb+d+ & down movement and drawing \\ \hline \end{tabular} \end{center} \end{itemize} The following example shows the use of \verb+\addpath+, \begin{BOX} \begin{verbatim} \[ \begin{BMAT}[5pt]{|ccccc|}{|cccc|} * & * & * & * & * \\ * & * & * & * & * \\ * & * & * & * & * \\ * & * & * & * & * \addpath{(1,1,0)ruld} \addpath{(4,3,;)lldrrdll} \end{BMAT} \] \end{verbatim} \[ \begin{BMAT}[5pt]{|ccccc|}{|cccc|} * & * & * & * & * \\ * & * & * & * & * \\ * & * & * & * & * \\ * & * & * & * & * \addpath{(1,1,0)ruld} \addpath{(4,3,;)lldrrdll} \end{BMAT} \] \end{BOX} This is another example \begin{BOX} \begin{verbatim} \[ \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) \] \end{verbatim} \[ \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) \] \end{BOX} \section{An example with reentrance} This final example shows a slightly more complex (reentrant) definition in which the \envname{BMAT}~environment is used: \begin{BOX} \begin{verbatim} \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 \] \end{verbatim} \end{BOX} It produces the following output: \typeout{This example can take a while to compile on small machine, please wait...} \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 }\small \[ \recurse\clubsuit\diamondsuit\heartsuit\end \] \typeout{...thanks, I have done} \end{document}