\documentclass{article}
\usepackage{sltables}

\author{A.\,Shipunov\footnote{e-mail: \texttt{dactylorhiza at gmail.com}}}

\title{\texttt{sltables},\\
the \LaTeX\ modification of R.\,Nilson\footnote{Robert Nilsson, Academic Computing Service, Texas A\&M University, ranhelp@venus.tam.edu, ranhelp@tamvenus}\\ \texttt{S-Tables} macros}

\date{}

\tolerance=10000

\begin{document}
\maketitle

\textbf{Note}: Original documentation was reformatted and changed in accordance with the current situation.

\section{Documentation}

\bigskip

\begin{stable}
\multicolumn2\bf\hfil Types of Commands\hfil\eltt

Start/End|\stpar{2.5in}{\noindent These are the commands for starting and ending
the table}\elt

Columns Separators|\stpar{2.5in}{\noindent These are used to separate the columns
in the tables}\elt

Row Separators|\stpar{2.5in}{\noindent These are used to separate the rows}\elt

Configuration|\stpar{2.5in}{\noindent These are used to set up the functioning 
of the tables such as the width of a thick rule, whether the internal rules are 
thin or thick, etc.}\elt

Specials|\stpar{2.5in}{\noindent These include any commands that do not fit into
the above categories}
\end{stable}

\bigskip

\begin{stable}
\multicolumn3\bf\hfil Start/End\hfil\eltt

Command|Arguments|Description\eltt

\verb|\begin{stable}|\hfill|none|Start a table\hfill\el

\verb|\begin{stableto}|\hfill|width|\stpar{2.5in}{\noindent Start a table with the
specified width.  The table will be stretched until it is `width' wide}\el

\verb|\begin{stablesp}|\hfill|stretch amount|\stpar{2.5in}{\noindent Start a table and stretch
it `stretch amount' wider than it would normally be}\elt

\stpar{1in}{\noindent\verb|\end{stable}|, \verb|\end{stablesp}|, \verb|\end{stableto}|}\hfill|none|End the table\hfill
\end{stable}

\bigskip

\begin{stable}
\multicolumn3\bf\hfil Column Separators\hfil\eltt

Command|Arguments|Description\eltt

\tt\char'174
\hfill|none|\stpar{2.5in}{\noindent End a column and place a vertical rule
of the default width between the columns (do not use this at the end of a 
line)}\el

\verb!\!\tt\char'174
\hfill|none|\stpar{2.5in}{\noindent Same as above but the vertical rule
will be suppressed}\el

\verb|\vt|\hfill|none|\stpar{2.5in}{\noindent Same as above but the vertical rule
will be thin}\el

\verb|\vtt|\hfill|none|\stpar{2.5in}{\noindent Same as above but the vertical rule
will be thick}\el

\verb|\vttt|\hfill|thickness|\stpar{2.5in}{\noindent Same as above but the vertical
rule will be `thickness' wide}
\end{stable}

\bigskip

\begin{stable}
\multicolumn3\bf\hfil Row Separators\hfil\eltt

Command|Arguments|Description\eltt

\verb|\el|\hfill|none|\stpar{2.5in}{\noindent End a line and don't put a rule under it.  (Do 
not use this after the last line of the table, use \verb|\endtable|)}\el

\verb|\elt|\hfill|none|\stpar{2.5in}{\noindent Same as above except put a thin rule under 
the line}\el

\verb|\eltt|\hfill|none|\stpar{2.5in}{\noindent Same as above except put a thick rule under 
the line}\el

\verb|\elttt|\hfill|thickness|\stpar{2.5in}{\noindent Same as above except put a rule of 
width `thickness' under the line}\el

\verb|\elspec|\hfill|none|\stpar{2.5in}{\noindent This command is used to set up 
rules under rows that DO NOT span the entire row.  It in effect indicates that 
the next row will specify the rule to be used under the current row.  This is 
especially useful when using with the row spanning commands.  This introduces
a subclass, the horizontal rule commands}\elt
\multicolumn3\hfil Horizonal Rule Command Subset\hfil\elt

\verb|\trule|\hfill|none|\stpar{2.5in}{\noindent Places a thin horizontal rule 
under a column.  This command is only for use in conjunction with the \verb|\elspec| 
command  (To leave a column blank, i.e. no rule, just leave it blank)}\el

\verb|\ttrule|\hfill|none|\stpar{2.5in}{\noindent Same as above but the rule will be 
thick}\el

\verb|\tttrule|\hfill|thickness|\stpar{2.5in}{\noindent Same as above but the rule 
will be `thickness' thick}

\end{stable}

\bigskip

You may be wondering what the difference between the \verb|\elt| and the \verb|\trule| 
command is.  The \verb|\elt| will end the line and draw a thin rule under it.  The 
\verb|\trule| works in conjunction with the \verb|\elspec| to generate a special rule.  
The special rule line is entered the same way a regular row will be entered.
For example, a normal row would look like:

\begin{verbatim}
This|is|a|Test\elt
\end{verbatim}

This will produce a row with a thin rule under it.  To produce the 
same effect without a rule under the column `is' the following would be used:

\begin{verbatim}
This|is|a|Test\elspec
\trule||\trule|\trule\el
\end{verbatim}

Notice that the vertical bars are used.  The macro is starting a new 
row and the vertical bars need to be included if you want them to continue 
through the line.  (There is no need to only use the \verb!|!, any other column 
separator is also valid).

\begin{stable}
\multicolumn3\bf\hfill Configuration\hfill\eltt

Variable|Value|Description\eltt
\multicolumn3\hfill Dimensions\hfill\elt

\verb|\stablesthinline|\hfill|dimension|\stpar{2.5in}{\noindent This variable
contains the width of a thin rule in the table.  The default value is
0.4pt and it may be changed with the command:

\verb|\stablesthinline=<dimen>|

\noindent where \verb|<dimen>| is the new width.}\el

\verb|\stablesthickline|\hfill|dimension|\stpar{2.5in}{\noindent This
variable contains the width of a thick rule in the table.  The default
value is 1pt and it may be changed as above.}\elt
\multicolumn3\hfill Counters\hfill\elt

\verb|\stablestyle|\hfill|0|\stpar{2.5in}{\noindent Center the table using
the current \verb|\hsize|.  This is the default setting and it may be
changed by the following command:

\verb|\stablestyle=|$n$

\noindent where $n$ is the new value (0, 1, 2, or 3)}\el

|1|Left justify the table\hfill\el

|2|Right justify the table\hfill\el

|3|No justification\hfill

\elt\multicolumn3\hfill If Statements\hfill\elt

\verb|\ifstablesinternalthin|\hfill|true|\stpar{2.5in}{\noindent Make the
internal rules of the table thin.  This sets the vertical rule
generated by the \textbar.  To set the value of this variable the following
command must be used:

\verb|\stablesinternalthintrue|

\noindent Please note the word `if' is removed and the word `true' has
been appended to the end.  The value after this command will be true.
To set it to false append the word `false' instead of `true'.}\el
|false|\stpar{2.5in}{\noindent Use thick internal rules (where the \textbar
is used)}\elspec

|\trule|\trule\el

\verb|\ifstablesborderthin|\hfill|true|\stpar{2.5in}{\noindent Use thin rules
for the border of the table}\el

|false|\stpar{2.5in}{\noindent Use thick rules for the border of the
table.  This is the default.}
\end{stable}

\bigskip

All settings in the configuration section should be used {\bf OUTSIDE}
the table.  The results of changing a setting inside the table will be
unpredictable, and undesirable.

There are two more settings that need to be discussed.  First is the
element buffering.  There are two definitions that are used for this:
\verb|\stablesleft| and \verb|\stablesright|.  The default settings are as
follows:

\begin{verbatim}
\def\stablesleft{\quad\hfil}
\def\stablesright{\hfil\quad}
\end{verbatim}

To change these, simply redefine them.

The other setting is the strut.  If you are interested in resetting
this, the \TeX book should provide sufficient information (The strut
is used to hold up the box).

\section{Specials}

This section will be broken into three parts:  the spanning commands, the 
paragraph commands, and miscellaneous information.

First of all we have two (actually three, but I'll discuss the third later) 
spanning commands.  They are \verb|\multicolumn| and \verb|\multirow|.  To use 
\verb|\multicolumn| to span several columns the command will be:

\verb|\multicolumn|$n$ and your data here.\footnote{\textbf{Note}: \texttt{multicolumn} cannon start a new paragraph!}

The $n$ specifies the number of columns to span across.  For 
example, if a table has 3 columns and you want a title across the top, 
$n$ would be 3.  Omit each column separator that is spanned across (in 
this case none would be used).  When this command is used the buffering is 
suspended on the spanning column, so it is necessary to put \verb|\hfil|'s around 
the data in the spanning column to center it.

\verb|\multirow| works slightly differently.  The number of rows to span is 
specified in the same way as the number of columns in the \verb|\multicolumn| macro, 
but the text to be spanned must be placed in curly braces directly after:

\verb|\multirow|$n$\verb|{<horizontal material>}|

The \verb|<horizontal material>| will be vertically centered in the number 
of spanned rows.  The horizontal rules are not automatically omitted under the 
columns of the rows being spanned.  The \verb|\elspec| command must be used to omit  
these rules.  There will be an example at the end of the documentation of this.

The paragraph commands are \verb|\stpar| and \verb|\stparrow|.  The format for \verb|\stpar| 
is:

\verb|\stpar{<dimen>}{<vertical material>}|

The \verb|<dimen>| is the width of the paragraph (the \verb|\hsize|) and the 
\verb|<vertical material>| is the paragraph.

\verb|\stparrow| will do the same thing as \verb|\stpar| but it will also perform the 
function of \verb|\multirow|.  It is a composite command and the only way to span a 
paragraph across multiple rows.  The format is:

\verb|\stparrow|$n$\verb|{<dimen>}{<vertical material>}|

In this command the $n$ is the number of rows to be spanned and the 
other material is the same as in the \verb|\stpar| macro.  Please note that the 
rules for spanning multiple rows apply to this macro also (the use of the 
\verb|\elspec| command).

To use both multiple rows and multiple columns, specify the \verb|\multicolumn| 
command first, then the \verb|\multirow| or \verb|\stparrow|.

The last point I would like to make concerns the use of varying width vertical 
rules.  If a thin vertical rule runs into a thick vertical rule there will 
be an offset.  The default for this offset is to the left.  There are two ways
to change the setting.  The first is by using an `r' after any of the \verb|\vt|
commands.  For example \verb|\vttr| will produce a thick vertical rule right
justified on any wider rules.  The other method is by using the 
\verb|\ifstablesright| setting.  A true setting will line up all vertical rules
generated by the \verb||| on the right.  A false setting will make the vertical 
rules generated by the \verb||| left justified (the default).

In all of the specials using a $n$ parameter, if the number to be used is 
greater than 9, it must be placed in curly braces (\verb|{}|).

\newpage
\section{Examples}

This section will give some example tables and the code to generate them
organized from simple to complex.

\subsection{Example 1}

\begin{verbatim}
\begin{stable}
Ck\#\vt Date\vt Memo\vt Debit\vt Credit\vt Balance\eltt
245|8--2|Rent|\$ \hfill 250.00||\$ \hfill 436.29\el
246|8--2|Danson Electric|\$ \hfill 49.28||\$ \hfill 387.01\el
247|8--5|Jeff's Grocery|\$ \hfill 35.88||\$ \hfill 351.13\el
248||Void|||\el
249|8--10|Danson Times|\$ \hfill 19.00||\$ \hfill 332.13\el
250|8--14|Pizza Palace|\$ \hfill 9.95||\$ \hfill 322.18\el
251|8--15|Jones Hardware|\$ \hfill 45.20||\$ \hfill 276.98\el
252|8--15|Deposit||\$ \hfill 255.81|\$ \hfill 532.79\el
253|8--21|Account Fee|\$ \hfill .85||\$ \hfill 531.94\el
254|8--29|Telephone Co.|\$ \hfill 21.19||\$ \hfill 510.75
\end{stable}
\end{verbatim}

\begin{stable}
Ck\#\vt Date\vt Memo\vt Debit\vt Credit\vt Balance\eltt
245|8--2|Rent|\$ \hfill 250.00||\$ \hfill 436.29\el
246|8--2|Danson Electric|\$ \hfill 49.28||\$ \hfill 387.01\el
247|8--5|Jeff's Grocery|\$ \hfill 35.88||\$ \hfill 351.13\el
248||Void|||\el
249|8--10|Danson Times|\$ \hfill 19.00||\$ \hfill 332.13\el
250|8--14|Pizza Palace|\$ \hfill 9.95||\$ \hfill 322.18\el
251|8--15|Jones Hardware|\$ \hfill 45.20||\$ \hfill 276.98\el
252|8--15|Deposit||\$ \hfill 255.81|\$ \hfill 532.79\el
253|8--21|Account Fee|\$ \hfill .85||\$ \hfill 531.94\el
254|8--29|Telephone Co.|\$ \hfill 21.19||\$ \hfill 510.75
\end{stable}

\subsection{Example 2}

\begin{verbatim}
\begin{stableto}{5truein}
\multicolumn6 \hfill Account Activity for August\hfill\eltt
Ck\#\vt Date\vt Memo\vtt Debit\vt Credit\vtt Balance\eltt
245|8--2|Rent\vtt\$ \hfill 250.00|\vtt\$ \hfill 436.29\el
246|8--2|Danson Electric\vtt\$ \hfill 49.28|\vtt\$ \hfill 387.01\el
247|8--5|Jeff's Grocery\vtt\$ \hfill 35.88|\vtt\$ \hfill 351.13\el
248||Void\vtt|\vtt\el
249|8--10|Danson Times\vtt\$ \hfill 19.00|\vtt\$ \hfill 332.13\el
250|8--14|Pizza Palace\vtt\$ \hfill 9.95|\vtt\$ \hfill 322.18\el
251|8--15|Jones Hardware\vtt\$ \hfill 45.20|\vtt\$ \hfill 276.98\el
252|8--15|Deposit\vtt|\$ \hfill 255.81\vtt\$ \hfill 532.79\el
253|8--21|Account Fee\vtt\$ \hfill .85|\vtt\$ \hfill 531.94\el
254|8--29|Telephone Co.\vtt\$ \hfill 21.19|\vtt\$ \hfill 510.75
\end{stableto}
\end{verbatim}

\begin{stableto}{5truein}
\multicolumn6 \hfill Account Activity for August\hfill\eltt
Ck\#\vt Date\vt Memo\vtt Debit\vt Credit\vtt Balance\eltt
245|8--2|Rent\vtt\$ \hfill 250.00|\vtt\$ \hfill 436.29\el
246|8--2|Danson Electric\vtt\$ \hfill 49.28|\vtt\$ \hfill 387.01\el
247|8--5|Jeff's Grocery\vtt\$ \hfill 35.88|\vtt\$ \hfill 351.13\el
248||Void\vtt|\vtt\el
249|8--10|Danson Times\vtt\$ \hfill 19.00|\vtt\$ \hfill 332.13\el
250|8--14|Pizza Palace\vtt\$ \hfill 9.95|\vtt\$ \hfill 322.18\el
251|8--15|Jones Hardware\vtt\$ \hfill 45.20|\vtt\$ \hfill 276.98\el
252|8--15|Deposit\vtt|\$ \hfill 255.81\vtt\$ \hfill 532.79\el
253|8--21|Account Fee\vtt\$ \hfill .85|\vtt\$ \hfill 531.94\el
254|8--29|Telephone Co.\vtt\$ \hfill 21.19|\vtt\$ \hfill 510.75
\end{stableto}

\subsection{Example 3}

\begin{verbatim}
\begin{stable}
\multirow2{\#}\vt\multirow2{Date}\vt\multirow2{Memo}\vt 
	Debit/Credit\elspec
|||\trule\el
|||Balance\eltt
\multirow2{245}|\multirow2{8--2}|\multirow2{Rent}|
	\$ \hfill 250.00\elspec
|||\trule\el
|||\$ \hfill 436.29\elttt{.7pt}
\multirow2{246}|\multirow2{8--2}|\multirow2{Danson Electric}|
	\$ \hfill 49.28\elspec
|||\trule\el
|||\$ \hfill 387.01\elttt{.7pt}
\multirow2{247}|\multirow2{8--5}|\multirow2{Jeff's Grocery}|
	\$ \hfill 35.88\elspec
|||\trule\el
|||\$ \hfill 351.13\elttt{.7pt}
\multirow2{248}||\multirow2{Void}|\elspec
|||\el
|||\elttt{.7pt}
\multirow2{249}|\multirow2{8--10}|\multirow2{Danson Times}|\$
	\hfill 19.00\elspec
|||\trule\el
|||\$ \hfill 332.13
\end{stable}
\end{verbatim}

\begin{stable}
\multirow2{\#}\vt\multirow2{Date}\vt\multirow2{Memo}\vt 
	Debit/Credit\elspec
|||\trule\el
|||Balance\eltt
\multirow2{245}|\multirow2{8--2}|\multirow2{Rent}|
	\$ \hfill 250.00\elspec
|||\trule\el
|||\$ \hfill 436.29\elttt{.7pt}
\multirow2{246}|\multirow2{8--2}|\multirow2{Danson Electric}|
	\$ \hfill 49.28\elspec
|||\trule\el
|||\$ \hfill 387.01\elttt{.7pt}
\multirow2{247}|\multirow2{8--5}|\multirow2{Jeff's Grocery}|
	\$ \hfill 35.88\elspec
|||\trule\el
|||\$ \hfill 351.13\elttt{.7pt}
\multirow2{248}||\multirow2{Void}|\elspec
|||\el
|||\elttt{.7pt}
\multirow2{249}|\multirow2{8--10}|\multirow2{Danson Times}|\$
	\hfill 19.00\elspec
|||\trule\el
|||\$ \hfill 332.13
\end{stable}

\subsection{Example 4}

\begin{verbatim}
\begin{stable}
Account|Ck\#|Debit|Credit|Balance\eltt
\stparrow3{2in}{\noindent\strut The Lyons Investment Memorial 
	Student Fund following specifications 11.2.3 of the 
	U.S. Governmental Code CCA1}
|123|\$\hfill 1,000.00||\$\hfill 20,000\elspec
|\trule|\trule|\trule|\trule\el
|124|\$\hfill 200.00||\$\hfill 19,800\elspec
|\trule|\trule|\trule|\trule\el
|||\$\hfill 4,000.00|\$\hfill 23,800\elttt{.7pt}
\multicolumn4\hfil\stpar{4.25in}{At the end of the physical
	year 1990 the balance in the account for Lyons Investment
	Memorial Student Fund will be tallied and the results 
	will be published as per Governmental Code 3.4.2 of the
	last payable week in the session. The value presented here 
	is a projection of the actual that will be available.}\hfil|
	\$\hfill 25,000
\end{stable}
\end{verbatim}

\begin{stable}
Account|Ck\#|Debit|Credit|Balance\eltt
\stparrow3{2in}{\noindent\strut The Lyons Investment Memorial 
	Student Fund following specifications 11.2.3 of the 
	U.S. Governmental Code CCA1}
|123|\$\hfill 1,000.00||\$\hfill 20,000\elspec
|\trule|\trule|\trule|\trule\el
|124|\$\hfill 200.00||\$\hfill 19,800\elspec
|\trule|\trule|\trule|\trule\el
|||\$\hfill 4,000.00|\$\hfill 23,800\elttt{.7pt}
\multicolumn4\hfil\stpar{4.25in}{At the end of the physical
	year 1990 the balance in the account for Lyons Investment
	Memorial Student Fund will be tallied and the results 
	will be published as per Governmental Code 3.4.2 of the
	last payable week in the session. The value presented here 
	is a projection of the actual that will be available.}\hfil|
	\$\hfill 25,000
\end{stable}

\subsection{Example 5, ``table acid test''}

\begin{verbatim}
\begin{stable}
\multirow3{A}|\multicolumn2 \hfill B\hfill\elspec
|\trule|\trule\el
|\multirow2{C}|D\elspec
||\trule\el
||E
\end{stable}
\end{verbatim}

\begin{stable}
\multirow3{A}|\multicolumn2 \hfill B\hfill\elspec
|\trule|\trule\el
|\multirow2{C}|D\elspec
||\trule\el
||E
\end{stable}

\end{document}
