summaryrefslogtreecommitdiff
path: root/macros/inrstex/inrstex/tables.tex
blob: 144169e9a25476b74de4e26cb1b56617d258e0a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
%-*-tex-*-
% Copyright Michael J. Ferguson, INRS-Telecommunications
% All rights reserved. 
% \left and \right redefined to remove primitive conflict MJF Oct 87


%============= Table making macros ============
% the basic format is
% \begintable
% <special definitions for this table>
% \table format <format as in halign except it needs ## instead of #>
% \br{<struts>} .... | .... | .... " ..... | .... \er{<stuff>}
% \-  
% ....etc

% these macros require that | and " be active during the entire 
% document to work correctly. ... although some definitions specifically
% set them active
\newcount\a@lignstate  \a@lignstate=0  %0 -- between lines after \cr
                                       %1 -- beginning of line in \bl
                                       %2 -- midline
                                       %3 -- endline in \el
\def\hssf{\hskip 0pt plus 1fill minus 1fill\relax}
\def\n@ewaligndefs{\def\center##1{\hssf ##1\hssf\null}
          \def\left##1{\ifmmode\l@f##1\else##1\hssf\null\fi}
          \def\right##1{\ifmmode\r@t##1\else\hssf ##1\null\fi}}
\def\s@avelr{\let\l@f=\left\let\r@t=\right}
\newdimen\trulesize
\let\tr=\trulesize
\trulesize = .4pt
\def\zerocenteredbox#1{\ifmmode \ifinner \setbox2 =\hbox{$#1$}\else 
                           \setbox2 =\hbox{$\displaystyle#1$}\fi
                     \else \setbox2 =\hbox{#1}\fi
           \setbox0=\hbox{\lower.5ex\hbox{$\vcenter{\box2}$}}\ht0=0pt\dp0 =0pt\box0}
\let\zb=\zerocenteredbox

%this macro creates a strut with the that is higher by #2 and deeper than #3
% than the natural size of #1 ... the sizes may be negative
\def\modifystrut#1#2#3{\setbox4=\hbox{#1}\dimen0=\ht4
             \advance \dimen0 by #2 \dimen2 = \dp4 
             \advance  \dimen2 by #3 
            \vrule width 0pt height \dimen0 depth \dimen2}
\let\mst=\modifystrut
%general math form
\def\math#1{\relax $\relax#1\relax$}
\def\displaymath #1{\relax$\displaystyle #1\relax$}


%   
\newskip\tcs  
\newtoks\tablespread
\newskip\midtabglue \midtabglue = 0pt plus 1fill
\newtoks\everytable  \everytable = {\relax}

{\catcode`\|=\active   \catcode`\" = \active
  \gdef\begintable{\vbox\bgroup \s@avelr \tcs=.5em % uses font in force when entering 
                  \catcode`\|=\active
                  \catcode`\"=\active
                   \def\:{\relax \vrule height 2.5ex depth .9ex width 0pt}
          \def\-{\ifcase\a@lignstate \fulltablerule{\tr}
                  \else 
                  \thrule{\tr}\fi}
          \let\t@xx =\relax % for premature expansions
          \everycr={\noalign{\global\a@lignstate=0}}
          \def\fulltablerule##1{\noalign{\hrule height
                   ##1}}
          \def\thrule##1{\omit\leaders\hrule height ##1\hfill}
          \def\center{\hskip\tcs\hss ########\hss\hskip\tcs}
          \def\left{\hskip\tcs ########\hss\hskip\tcs}
          \def\right{\hskip\tcs\hss ########\hskip\tcs}
          \def\sprule{\tvrule{2.5\tr}}
          \def|{\ifcase\a@lignstate \def\t@xx{\tvrule{\tr}}\or
                            \def\t@xx{\tvrule{\tr}}\or
                             \def\t@xx{\unskip&\tvrule{\tr}&}\else 
                             \def\t@xx{\tvrule{\tr}}\fi\t@xx}
          \def\|{\ifcase\a@lignstate \def\t@xx{\sprule}\or
                            \def\t@xx{\sprule}\or
                             \def\t@xx{\unskip&\sprule&}\else 
                              \def\t@xx{\sprule}\fi\t@xx}
          \def"{&########&} % for table format
          \def\br##1{\global\a@lignstate=1 ##1\unskip\global\a@lignstate=2&}
          \def\er##1{\global\a@lignstate=3\unskip&##1\unskip
                      \global\a@lignstate=0\cr}
          \def\tvrule##1{\hss\vrule width ##1\hss}
          \def~{\penalty\@M \hphantom{0}} % changes ~ to be phantom of width .5em
          \tablespread = {}
          \the\everytable 
               }
  \gdef\begintableformat #1\endtableformat{\offinterlineskip \tabskip = 0pt
       \edef\t@blform{####\tabskip =\midtabglue &#1&####\tabskip=0pt\cr} %adds rules front and back
                                  \n@ewaligndefs
                                 \def"{\ifcase\a@lignstate \def\t@xx{\relax}\or
                                          \def\t@xx{\relax}\or
                                        \def\t@xx{\unskip&&}\else 
                                        \def\t@xx{\relax}\fi\t@xx}
                                \edef\h@align{\halign \the\tablespread}
                                  \h@align\bgroup\span\t@blform}
      }% " and | are always active in INRSTEX

\def\use#1{\omit\mscount=#1 \advance\mscount by -1\multiply\mscount by2
                \loop\ifnum\mscount>1 \sp@n\repeat
                \ifnum\mscount>0 \span \else \relax \fi}
\let\sp=\span
\let\om = \omit
\def\sa#1{\setbox0=\hbox{#1}\hbox to \wd0{}}
\def\endtable{\crcr\egroup\egroup}