%Contents:Bordered table macro as introduced at EuroTeX '92 with some mods. %Version: December 1993. %Purpose: Typeset bordered tables, abstracting from separators, % and separation data proper from first row and column. %Example of use %\def\capbtbl{AT\&T Common Stock} %\def\header{Year\cs Price\cs Dividend} %\def\footer{* (first quarter only} %\def\data{1971\cs 41--54\cs\llap{\$}2.60\rs % 2\cs 41--54\cs 2.70}%et cetera %$$\flr\btable\data\qquad\framed\ruled\btable\data$$ %Documentation: Proceedings EuroTeX '92, Prague, and MAPS 92.2. %Macro: %C.G. van der Laan, Hunzeweg 57, 9893PB, Garnwerd. Holland. 05941-1525. %btable.tex version 1, 17/7/92 author: cgl@risc1.rug.nl \newbox\tbl\let\ea=\expandafter %Cell vertical size, row height and depth (separation implicit), \newdimen\cvsize\newdimen\tsht\newdimen\tsdp\newdimen\tvsize\newdimen\thsize %Parameter setting macros: Rules \def\hruled{\def\lineglue{\hrulefill}\def\colsep{} \def\rowsep{\hrule} \let\rowstbsep=\colsep\let\headersep=\rowsep} \def\vruled{\def\lineglue{\hfil} \def\colsep{\vrule}\def\rowsep{} \let\rowstbsep=\colsep\let\headersep=\hrule} \def\ruled {\def\lineglue{\hrulefill}\def\colsep{\vrule}\def\rowsep{\hrule} \let\rowstbsep=\colsep\let\headersep=\rowsep} \def\nonruled{\def\lineglue{\hfil} \def\colsep{} \def\rowsep{} \def\rowstbsep{\vrule}\def\headersep{\hrule}} \def\dotruled{\def\lineglue{\dotfill}\def\rowsep{\hbox to\thsize{\dotfill}} \def\colsep{\lower1.5\tsdp\vbox to\cvsize{% \leaders\hbox to0pt{\vrule height2pt depth2pt width0pt\hss.\hss}\vfil}} \let\rowstbsep=\colsep\let\headersep=\rowsep} %Parameter setting macros: Controling positioning \def\ctr{\def\lft{\hfil}\def\rgt{\hfil}}%Centered \def\fll{\def\lft{} \def\rgt{\hfil}}%Flushed left \def\flr{\def\lft{\hfil}\def\rgt{}} %Flushed right %Parameter setting macros: Framing \def\framed{\let\frameit=\boxit} \def\nonframed{\def\frameit##1{##1}} \def\dotframed{\let\frameit=\dotboxit} % \def\btable#1{\vbox{\let\rsl=\rowstblst%Copy \ifx\empty\template\ifx\empty\rowstblst \def\template{\colsepsurround\lft####\rgt&&\lft####\rgt\cr} \else\def\template{\colsepsurround####\hfil&&\lft####\rgt\cr}\fi \fi \tsht=.775\cvsize\tsdp=.225\cvsize \def\tstrut{\vrule height\tsht depth\tsdp width0pt} %Logical mark up of column and row separators, via use of \def\cs{&\colsepsurround\colsep\colsepsurround&} \def\prs{&\colsepsurround\lineglue&} \def\srp{&\lineglue\colsepsurround&} \def\rs{\colsepsurround\tstrut\cr \ifx\empty\rowsep\else\noalign{\rowsep}\fi \ifx\empty\rowstblst\else\ea\nxtrs\fi} \def\grs{\colsepsurround\tstrut\cr\ghostrow} \def\rss{&\colsepsurround\rowstbsep\colsepsurround&} \def\hs{\colsepsurround\tstrut\cr \ifx\empty\headersep\else\noalign{\headersep}\fi \ifx\empty\rowstblst\else\ea\nxtrs\fi} \preinsert \setbox\tbl=\vbox{\tabskip=0pt\relax\offinterlineskip \halign{\span\template\ifx\empty\first\ifx\empty\rowstblst\else \ifx\empty\header\else\ea\rss\fi\fi\else\first\ea\rss\fi \ifx\empty\header\ifx\empty\first\if\empty\rsl\else\ea\nxtrs\fi \else\ea\hs\fi \else\header\ea\hs\fi #1\colsepsurround\tstrut\crcr} } %end \setbox \postinsert \ifx\capbtbl\empty\else\hbox to\thsize{\strut\hfil\capbtbl\hss}\captionsep\fi \frameit{\copy\tbl} \ifx\footer\empty\else\footersep\hbox{\vtop{\noindent\hsize=\thsize% \footer}}\fi }} %end \btable %Defaults \cvsize=4ex\tsht=.775\cvsize\tsdp=.225\cvsize\def\colsepsurround{\kern.5em} \def\capbtbl{}\def\first{}\def\header{}\def\rowstblst{}\def\footer{}\def\data{} \def\captionsep{\medskip} \def\headersep{\hrule} \def\footersep{\smallskip} \def\rowstbsep{\vrule} \def\preinsert{} \def\postinsert{\global\thsize=\wd\tbl \global\tvsize=\ht\tbl\global\advance\tvsize by\dp\tbl} \ctr\nonruled\nonframed\def\template{}\def\ghostrow{} %end Defaults %Auxiliaries \def\boxit#1{\vbox{\hrule\hbox{\vrule\vbox{#1}\vrule}\hrule}} \def\dotboxit#1{\vbox{\offinterlineskip\hbox to\thsize{\dotfill}% \hbox{\lower\tsdp\vbox to\tvsize{% \leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}% \vbox{#1}\lower\tsdp\vbox to\tvsize{% \leaders\hbox to0pt{\hss\vrule height2pt depth2pt width0pt.\hss}\vfil}}% \hbox to\thsize{\dotfill}}} %And to account for logical columns with \logmultispan %\def\spicspan{\span\omit} \def\logmultispan#1{\omit\mscount=#1\multiply\mscount by2 \advance\mscount by-1 \loop\ifnum\mscount>1 \spicspan\advance\mscount by-1 \repeat} %To process FIFO, Mod 1993 %\def\fifo#1{\ifx\ofif#1\ofif\else\process#1\fi\fifo} %\def\ofif#1\fifo{\fi} %\def\process#1{\hbox to0pt{\hss#1\hss}\kern.5ex} %To handle the row stub list: \rsl \def\nxtrs{\ifx\empty\rsl%\let\nxtel=\relax \else\def\nxtel{\ea\nrs\rsl\srn}\ea\nxtel\fi}%next Row Stub \def\nrs#1#2\srn{\gdef\rsl{#2}#1\rss} %History of changes %Dec 93: \multispan name changed into \logmultispan (logical multispan) % name \caption changed into \capbtbl (no conflicts within LaTeX) %%%%btable end%%%% %end btable.tex, cgl@risc1.rug.nl % \bgroup \def\capbtbl{AT\&T Common Stock} \def\header{Year\cs Price\cs Dividend} \def\footer{* (first quarter only} \def\data{1971\cs 41--54\cs\llap{\$}2.60\rs 2\cs 41--54\cs 2.70}%et cetera $$\flr\btable\data\qquad\framed\ruled\btable\data$$ \egroup % \def\data{PD \cs licensed via UNIX\rs all platforms \cs under UNIX \rs \TeX book (also on-line) \cs On-line manual \rs METAfont's CM, virtual fonts \cs ? \rs open system \cs kernel undocumented} % \def\header{(All)\TeX\cs T/Di-roff} \def\rowstblst{{Costs}{Availability}{Documentation}{Fonts}{{Design}}} %Weird these extra {} ^ ^ \def\capbtbl{Troff versus \TeX/METAfont} $$\fll\btable\data$$ \bye