The package easytable

Enrico Bertolazzi

Laboratorio di Matematica Applicata Dipartimento di Ingegneria Civile ed Ambientale

Università degli Studi di Trento Mesiano, Trento, Italy

            bertolaz@ing.unitn.it

Abstract

The easytable package is a macro package for writing tables, 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.

1 Some examples with easytable

Load the package in the usual way:

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

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

\begin{TAB}`(x)'`[2pt]'`{cc...c}'`{cc...c}'
   a & b & ... & n \\
.
\end{TAB}

(x) is an optional parameter, if present it specify if you want to balance the rows or the column or both, as this table shows:

value of x effect
r  equal rows heights
c  equal column widths
b  equal rows heights and equal column widths
e  equal rows heights and column widths

[2pt] an optional paramenter that specify the amount of extra space around the item in the TAB environment. The default is 2pt.

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

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:

c centering
t flush top
b flush bottom

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

\begin{center}
\begin{TAB}(b){|l:cr|}{|t;cb|}
1 & 1 & 1 \\
1 & dummy & 1 \\
1 & 1 & 1
\end{TAB} \\
\begin{TAB}(b){|r:cl|}{|b;ct|}
1 & 1 & 1 \\
1 & dummy & 1 \\
1 & 1 & 1
\end{TAB}
\end{center}

which produce the following output:

1  1  1
1  dummy  1
1  1  1
1 1 1
1 dummy 1
1 1 1

The available rules for the rows and columns are

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 TAB environment is that it is reentrant:

\begin{center}
\fbox{\begin{TAB}{0c.c9}{|c.c|}
1 & 2 \\
3 & \begin{TAB}{c:c}{c:c}
      a & b \\
      c & d
 \end{TAB}
\end{TAB}}
\end{center}

which produces

1 2 ^{3 a b c d}

1.0.1 Some example with balancing

Here it is showed the effect of various balancing

\begin{center}
\begin{TAB}{|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
$\frac{1}{2}$ & 1 & 1 \\
$\frac{1}{\frac{1}{2}}$ & 1 & 1
\end{TAB}
\hfil
\begin{TAB}(r){|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
$\frac{1}{2}$ & 1 & 1 \\
$\frac{1}{\frac{1}{2}}$ & 1 & 1
\end{TAB}
\hfil
\begin{TAB}(c){|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
$\frac{1}{2}$ & 1 & 1 \\
$\frac{1}{\frac{1}{2}}$ & 1 & 1
\end{TAB} \\
\begin{TAB}(b){|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
$\frac{1}{2}$ & 1 & 1 \\
$\frac{1}{\frac{1}{2}}$ & 1 & 1
\end{TAB}
\hfil
\begin{TAB}(e){|c|c|c|}{|c|c|c|}
1 & 22 & 333 \\
$\frac{1}{2}$ & 1 & 1 \\
$\frac{1}{\frac{1}{2}}$ & 1 & 1
\end{TAB}
\end{center}

which produce:

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} ^{^{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.0.2 An example with size

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

\begin{center}
\begin{TAB}(e)[5pt]{0c1c2c3c4c5c6c7c8c9}
                   {0c1c2c3c4c5c6c7c8c9}
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & * \\
* & * & * & * & * & * & * & * & *
\end{TAB}
\end{center}

which produce

* * * * * * * * * ^{* * * * * * * * *} ^{* * * * * * * * *} ^{* * * * * * * * *} ^{* * * * * * * * *} ^{* * * * * * * * *} ^{* * * * * * * * *} ^{* * * * * * * * *} ^{* * * * * * * * *}

1.0.3 An example with reentrance

This example shows a slightly more complex (reentrant) definition in which the TAB 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\ignorespaces%
\begin{TAB}(e)[0pt]{0c1c2c3}{4c5c6c7}%
$#1$&$#1$&\rec(#2)\\%
$#1$&$#1$&$#1$\\%
\rec(#2)&$#1$&$#1$%
\end{TAB}%
\egroup%
}
\begin{center} \recurse\clubsuit\diamondsuit\heartsuit\end \end{center}

It produces the following output:

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

1.0.4 Another example with reentrance The same example without balance

\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\ignorespaces%
\begin{TAB}[0pt]{0c1c2c3}{4c5c6c7}%
$#1$&$#1$&\rec(#2)\\%
$#1$&$#1$&$#1$\\%
\rec(#2)&$#1$&$#1$%
\end{TAB}%
\egroup%
}
\begin{center} \recurse\clubsuit\diamondsuit\heartsuit\end \end{center}

It produces the following output:

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