summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/misc/tabledoc.tex
blob: 2ff9fe6deb8a2caba8f4bf3b1489e29c6a59cec8 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
% file: tabledoc.tex
% :: $Header: /usr2/myers/texsis/RCS/tabledoc.tex,v 1.1 90/05/24 13:39:32 myers Rel $
% +--------------------------------------------------------------------+
% |                                                                    |
% |  This file contains documentation for the macro set TABLES.TEX.    |
% |                                                                    |
% |  To make a copy, say "TEX1 TABLEDOC".                              |
% |                                                                    |
% |                                                                    |
% |  Ray F. Cowan, 22-February-85.                                     |
% |                                                                    |
% |  Princeton University                                              |
% |                                                                    |
% |                                                                    |
% |  Major Revision History:                                           |
% |  -----------------------                                           |
% |                                                                    |
% |  22-Oct-85  RFC  Temporary fixes for \& added.                     |
% |                                                                    |
% |  27-Feb-86  RFC  Removed call to PHYZZX macro package.             |
% |                  Fixes for \& no longer needed and were removed.   |
% |                                                                    |
% +--------------------------------------------------------------------+
%
%  Note to myself:  add info on        \tablelet
%                                      put \tstrut in table
%                                      \vctr
%                                      \ifhmode test in centeredtables
%                                      \header
%                                      \spreadwidth
%                                      new def of \tstrut
%                                      put spaces around entries
%                                      last revision ( 2 places )
%                                      notes on use of spaces
%
%%%\input TABLES.TEX
\input ruled.tex                % use E. Myers' ruled table macros instead
%
% +--------------------------------------------------------------------+
% |                                                                    |
% |  Definitions of font families and spacing parameters.              |
% |                                                                    |
% +--------------------------------------------------------------------+
%
\catcode`\@=11%  Enable use of `@' in macro names.
%
\font\fourteenrm=cmr10 scaled\magstep2
%
\font\twelverm=cmr10 scaled\magstep1
\font\twelvebf=cmbx10 scaled\magstep1
\font\twelvei=cmmi10 scaled\magstep1        \skewchar\twelvei='177
\font\twelvesy=cmsy10 scaled\magstep1       \skewchar\twelvesy='60
\font\twelveex=cmex10 scaled\magstep1
\font\twelvesl=cmsl10 scaled\magstep1
\font\twelveit=cmti10 scaled\magstep1
\font\twelvett=cmtt10 scaled\magstep1
\font\twelvecp=cmcsc10 scaled\magstep1
%
\font\ninerm=cmr9            \font\sixrm=cmr6
\font\ninebf=cmbx9            \font\sixbf=cmbx6
\font\ninei=cmmi9                           \skewchar\ninei='177
\font\ninesy=cmsy9                          \skewchar\ninesy='60
\font\ninesl=cmsl9
%
\font\sixi=cmmi6                            \skewchar\sixi='177
\font\sixsy=cmsy6                           \skewchar\sixsy='60
%
\font\tencp=cmcsc10
\newfam\cpfam
%
\newcount\f@ntkey            \f@ntkey=0
\def\samef@nt{\relax \ifcase\f@ntkey \rm \or\oldstyle \or\or
         \or\it \or\sl \or\bf \or\tt \or\caps \fi }
%
\def\twelvepoint{\relax
    \textfont0=\twelverm          \scriptfont0=\ninerm
    \scriptscriptfont0=\sixrm
     \def\rm{\fam0 \twelverm \f@ntkey=0 }\relax
    \textfont1=\twelvei           \scriptfont1=\ninei
    \scriptscriptfont1=\sixi
     \def\oldstyle{\fam1 \twelvei\f@ntkey=1 }\relax
    \textfont2=\twelvesy          \scriptfont2=\ninesy
    \scriptscriptfont2=\sixsy
    \textfont3=\twelveex          \scriptfont3=\twelveex
    \scriptscriptfont3=\twelveex
    \def\it{\fam\itfam \twelveit \f@ntkey=4 }\textfont\itfam=\twelveit
    \def\sl{\fam\slfam \twelvesl \f@ntkey=5 }\textfont\slfam=\twelvesl
    \scriptfont\slfam=\ninesl
    \def\bf{\fam\bffam \twelvebf \f@ntkey=6 }\textfont\bffam=\twelvebf
    \scriptfont\bffam=\ninebf     \scriptscriptfont\bffam=\sixbf
    \def\tt{\fam\ttfam \twelvett \f@ntkey=7 }\textfont\ttfam=\twelvett
    \h@big=10.2\p@{}
    \h@Big=13.8\p@{}
    \h@bigg=17.4\p@{}
    \h@Bigg=21.0\p@{}
    \def\caps{\fam\cpfam \twelvecp \f@ntkey=8 }\textfont\cpfam=\twelvecp
    \setbox\strutbox=\hbox{\vrule height 10pt depth 4pt width\z@}
    \samef@nt}
%
\def\tenpoint{\relax
    \textfont0=\tenrm          \scriptfont0=\sevenrm
    \scriptscriptfont0=\fiverm
    \def\rm{\fam0 \tenrm \f@ntkey=0 }\relax
    \textfont1=\teni           \scriptfont1=\seveni
    \scriptscriptfont1=\fivei
    \def\oldstyle{\fam1 \teni \f@ntkey=1 }\relax
    \textfont2=\tensy          \scriptfont2=\sevensy
    \scriptscriptfont2=\fivesy
    \textfont3=\tenex          \scriptfont3=\tenex
    \scriptscriptfont3=\tenex
    \def\it{\fam\itfam \tenit \f@ntkey=4 }\textfont\itfam=\tenit
    \def\sl{\fam\slfam \tensl \f@ntkey=5 }\textfont\slfam=\tensl
    \def\bf{\fam\bffam \tenbf \f@ntkey=6 }\textfont\bffam=\tenbf
    \scriptfont\bffam=\sevenbf     \scriptscriptfont\bffam=\fivebf
    \def\tt{\fam\ttfam \tentt \f@ntkey=7 }\textfont\ttfam=\tentt
    \def\caps{\fam\cpfam \tencp \f@ntkey=8 }\textfont\cpfam=\tencp
    \setbox\strutbox=\hbox{\vrule height 8.5pt depth 3.5pt width\z@}
    \samef@nt}
%
\newdimen\h@big  \h@big=8.5\p@
\newdimen\h@Big  \h@Big=11.5\p@
\newdimen\h@bigg  \h@bigg=14.5\p@
\newdimen\h@Bigg  \h@Bigg=17.5\p@
%
\def\big#1{{\hbox{$\left#1\vbox to\h@big{}\right.\n@space$}}}
\def\Big#1{{\hbox{$\left#1\vbox to\h@Big{}\right.\n@space$}}}
\def\bigg#1{{\hbox{$\left#1\vbox to\h@bigg{}\right.\n@space$}}}
\def\Bigg#1{{\hbox{$\left#1\vbox to\h@Bigg{}\right.\n@space$}}}
%
\normalbaselineskip = 20pt plus 0.2pt minus 0.1pt
\normallineskip = 1.5pt plus 0.1pt minus 0.1pt
\normallineskiplimit = 1.5pt
\newskip\normaldisplayskip
\normaldisplayskip = 20pt plus 5pt minus 10pt
\newskip\normaldispshortskip
\normaldispshortskip = 6pt plus 5pt
\newskip\normalparskip
\normalparskip = 6pt plus 2pt minus 1pt
\newskip\skipregister
\skipregister = 5pt plus 2pt minus 1.5pt
%
\newif\ifsingl@    \newif\ifdoubl@
\newif\iftwelv@    \twelv@true
%
\def\singlespace{\singl@true\doubl@false\spaces@t}
\def\doublespace{\singl@false\doubl@true\spaces@t}
\def\normalspace{\singl@false\doubl@false\spaces@t}
\def\Tenpoint{\tenpoint\twelv@false\spaces@t}
\def\Twelvepoint{\twelvepoint\twelv@true\spaces@t}
%
\def\spaces@t{\relax%
 \iftwelv@ \ifsingl@\subspaces@t3:4;\else\subspaces@t1:1;\fi%
 \else \ifsingl@\subspaces@t3:5;\else\subspaces@t4:5;\fi \fi%
 \ifdoubl@ \multiply\baselineskip by 5%
 \divide\baselineskip by 4 \fi \unskip}
%
\def\subspaces@t#1:#2;{
      \baselineskip = \normalbaselineskip
      \multiply\baselineskip by #1 \divide\baselineskip by #2
      \lineskip = \normallineskip
      \multiply\lineskip by #1 \divide\lineskip by #2
      \lineskiplimit = \normallineskiplimit
      \multiply\lineskiplimit by #1 \divide\lineskiplimit by #2
      \parskip = \normalparskip
      \multiply\parskip by #1 \divide\parskip by #2
      \abovedisplayskip = \normaldisplayskip
      \multiply\abovedisplayskip by #1 \divide\abovedisplayskip by #2
      \belowdisplayskip = \abovedisplayskip
      \abovedisplayshortskip = \normaldispshortskip
      \multiply\abovedisplayshortskip by #1
        \divide\abovedisplayshortskip by #2
      \belowdisplayshortskip = \abovedisplayshortskip
      \advance\belowdisplayshortskip by \belowdisplayskip
      \divide\belowdisplayshortskip by 2
      \smallskipamount = \skipregister
      \multiply\smallskipamount by #1 \divide\smallskipamount by #2
      \medskipamount = \smallskipamount \multiply\medskipamount by 2
      \bigskipamount = \smallskipamount \multiply\bigskipamount by 4 }
%
\def\normalbaselines{ \baselineskip=\normalbaselineskip
   \lineskip=\normallineskip \lineskiplimit=\normallineskip
   \iftwelv@\else \multiply\baselineskip by 4 \divide\baselineskip by 5
     \multiply\lineskiplimit by 4 \divide\lineskiplimit by 5
     \multiply\lineskip by 4 \divide\lineskip by 5 \fi }
%
\Twelvepoint  % That's the default
%
\interlinepenalty=50
\interfootnotelinepenalty=5000
\predisplaypenalty=9000
\postdisplaypenalty=500
\hfuzz=1pt
\vfuzz=0.2pt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%   Next, I define output routines, footnotes & related stuff.
%
\def\pagecontents{
   \ifvoid\topins\else\unvbox\topins\vskip\skip\topins\fi
   \dimen@ = \dp255 \unvbox255
   \ifvoid\footins\else\vskip\skip\footins\footrule\unvbox\footins\fi
   \ifr@ggedbottom \kern-\dimen@ \vfil \fi }
%
\def\makeheadline{\vbox to 0pt{ \skip@=\topskip
      \advance\skip@ by -12pt \advance\skip@ by -2\normalbaselineskip
      \vskip\skip@ \line{\vbox to 12pt{}\the\headline} \vss
      }\nointerlineskip}
\def\makefootline{\baselineskip = 1.5\normalbaselineskip
                 \line{\the\footline}}
%
\newif\iffrontpage
%
% +--------------------------------------------------------------------+
% |                                                                    |
% |  Footnote definitions.                                             |
% |                                                                    |
% +--------------------------------------------------------------------+
%
\def\footrule{\dimen@=\prevdepth\nointerlineskip
   \vbox to 0pt{\vskip -0.25\baselineskip \hrule width 0.35\hsize \vss}
   \prevdepth=\dimen@ }
%
\newtoks\foottokens
\foottokens={\Tenpoint\singlespace}
\newdimen\footindent
\footindent=24pt
%
\def\vfootnote#1{\insert\footins\bgroup  \the\foottokens
   \interlinepenalty=\interfootnotelinepenalty \floatingpenalty=20000
   \splittopskip=\ht\strutbox \boxmaxdepth=\dp\strutbox
   \leftskip=\footindent \rightskip=\z@skip
   \parindent=0.5\footindent \parfillskip=0pt plus 1fil
   \spaceskip=\z@skip \xspaceskip=\z@skip
   \Textindent{$ #1 $}\footstrut\futurelet\next\fo@t}
%
\def\Textindent#1{\noindent\llap{#1\enspace}\ignorespaces}
\def\footnote#1{\attach{#1}\vfootnote{#1}}
\def\footattach{\attach\footsymbol}
\def\foot{\attach\footsymbolgen\vfootnote{\footsymbol}}
\let\footsymbol=\star
%
\newcount\lastf@@t           \lastf@@t=-1
\newcount\footsymbolcount    \footsymbolcount=0
\newif\ifPhysRev
%
\def\footsymbolgen{\relax \ifPhysRev \iffrontpage \NPsymbolgen\else
      \PRsymbolgen\fi \else \NPsymbolgen\fi
   \global\lastf@@t=\pageno \footsymbol }
%
\def\NPsymbolgen{\ifnum\footsymbolcount<0 \global\footsymbolcount=0\fi
   {\iffrontpage \else \advance\lastf@@t by 1 \fi
    \ifnum\lastf@@t<\pageno \global\footsymbolcount=0
     \else \global\advance\footsymbolcount by 1 \fi }
   \ifcase\footsymbolcount \fd@f\star\or \fd@f\dagger\or \fd@f\ast\or
    \fd@f\ddagger\or \fd@f\natural\or \fd@f\diamond\or \fd@f\bullet\or
    \fd@f\nabla\else \fd@f\dagger\global\footsymbolcount=0 \fi }
\def\fd@f#1{\xdef\footsymbol{#1}}
%
\def\PRsymbolgen{\ifnum\footsymbolcount>0 \global\footsymbolcount=0\fi
      \global\advance\footsymbolcount by -1
      \xdef\footsymbol{\sharp\number-\footsymbolcount} }
%
\def\space@ver#1{\let\@sf=\empty \ifmmode #1\else \ifhmode
   \edef\@sf{\spacefactor=\the\spacefactor}\unskip${}#1$\relax\fi\fi}
\def\attach#1{\space@ver{\strut:{\mkern 2mu #1} }\@sf\ }
%
%
\def\alphabetic#1{\count255='140 \advance\count255 by #1\char\count255}
\def\Alphabetic#1{\count255='100 \advance\count255 by #1\char\count255}
\def\Roman#1{\uppercase\expandafter{\romannumeral #1}}
\def\roman#1{\romannumeral #1}
\def\Number#1{\number #1}
%
\def\GENITEM#1;#2{\par \hangafter=0 \hangindent=#1
    \Textindent{$ #2 $}\ignorespaces}
\outer\def\newitem#1=#2;{\gdef#1{\GENITEM #2;}}
%
\newdimen\itemsize                \itemsize=30pt
\newitem\item=1\itemsize;
\newitem\sitem=1.75\itemsize;     \let\subitem=\sitem
\newitem\ssitem=2.5\itemsize;     \let\subsubitem\ssitem
%
\outer\def\newlist#1=#2&#3&#4;{\toks0={#2}\toks1={#3}%
   \count255=\escapechar \escapechar=-1
   \alloc@0\list\countdef\insc@unt\listcount     \listcount=0
   \edef#1{\par
      \countdef\listcount=\the\allocationnumber
      \advance\listcount by 1
      \hangafter=0 \hangindent=#4
      \Textindent{\the\toks0{\listcount}\the\toks1}}
   \expandafter\expandafter\expandafter
    \edef\c@t#1{begin}{\par
      \countdef\listcount=\the\allocationnumber \listcount=1
      \hangafter=0 \hangindent=#4
      \Textindent{\the\toks0{\listcount}\the\toks1}}
   \expandafter\expandafter\expandafter
    \edef\c@t#1{con}{\par \hangafter=0 \hangindent=#4 \noindent}
   \escapechar=\count255}
\def\c@t#1#2{\csname\string#1#2\endcsname}
%
\newlist\point=\Number&.&1.0\itemsize;
\newlist\subpoint=(\alphabetic&)&1.75\itemsize;
\newlist\subsubpoint=(\roman&)&2.5\itemsize;
%
\let\spoint=\subpoint             \let\sspoint=\subsubpoint
\let\spointbegin=\subpointbegin   \let\sspointbegin=\subsubpointbegin
\let\spointcon=\subpointcon       \let\sspointcon=\subsubpointcon
%
\def\endpage{\vfil\break}
%
\hsize=6.5in
\vsize=8.9in
\voffset=0.5in
%
%
\catcode`\@=12%  Return `@' to normal use.
%
%
% +--------------------------------------------------------------------+
% |                                                                    |
% |  Verbatim listing macros.                                          |
% |                                                                    |
% +--------------------------------------------------------------------+
%
\newif\ifverbatimmode%
\verbatimmodefalse%
\def\|{|}%
\def\uncatcodespecials{%
   \def\do##1{\catcode`##1=12 }%
   \dospecials%
}%
%
\def\startverbatim{\catcode`\|=13}%
\def\endverbatim{\catcode`\|=12}%
\def\setupverbatim{%
   \tt%
   \def\par{\leavevmode\endgraf}%
   \catcode`\`=13%
   \obeylines%
   \uncatcodespecials%
   \obeyspaces%
}%
%
{\obeyspaces\global\let =\ }%  Let active space=control space.
{\catcode`\`=13\gdef`{\relax\lq}}%  Fix for Spanish punctuation in \tt.
%
{\catcode`\|=13%
\gdef|{%
   \relax%
   \ifverbatimmode %
      \endgroup%
      \verbatimmodefalse%
      \begingroup%
   \else%
      \verbatimmodetrue%
      \begingroup%
      \setupverbatim%
      \parindent=1in%  Set the indentation of verbatim lines.
      \parskip=0pt%  Don't put so much space between the lines.
      \begingroup\aftergroup\relax%  This makes \relax the first token
%                                    scanned after the |;  prevents
%                                    premature association of catcodes.
   \fi%
\endgroup}%
}%  Return | to its normal use.
\def\beginverbatimlisting{\par\begingroup\setupverbatim\doverbatim}
{\catcode`\|=0 \catcode`\\=12 % | is temporary escape character
  |obeylines|gdef|doverbatim^^M#1\endverbatimlisting{#1|endgroup}}
%
%  Macro for verbatim listing of a file.
%
\def\inputverbatimlisting#1{%
   \par%
   \begingroup%
   \parskip0pt%
   \parindent0pt%
   \setupverbatim%
   \input#1 %
   \endgroup%
}%
%
\def\Table#1#2{%
   \setbox0=\hbox to 1.5in{\hfil\it Table~#1.\quad}%
   \par\hangindent1.5in\hangafter1%
   \noindent\box0 #2%
}%
\def\\{\char`\\}
\def\{{\char`\{}
\def\}{\char`\}}
\def\vbar{\char`\|}
\def\Psizzl{%
   P%
   \kern-.30em\lower.70ex\hbox{s}%
   \kern-.08em\lower.0 ex\hbox{i}%
   \kern-.05em\lower.0 ex\hbox{z}%
   \kern-.17em\lower.5 ex\hbox{z}%
   \kern-.09em\lower.2 ex\hbox{l}%
   }%
%
\font\tensltt=cmsltt10%
\footline={\ifnum\count0=1
\rlap{\tensl[From file {\tensltt TABLEDOC.TEX}]}%
\hfil\it\number\count0\hfil\llap{\tensl[Last revision 27--Feb--86]}%
\else\hfil\fi}
\headline={\ifnum\count0=1 \hfil\else\vbox{\baselineskip0pt
 \line{\tenit Page~\number\count0\hfil Making Tables with Macros}
 \line{\leaders\hrule\hfill}}\fi}
\startverbatim
{\thicksize=0.8pt\def\tstrut{\vrule width0pt height18pt depth7pt}
\begintable
\quad\fourteenrm Making Tables with Macros\quad\endtable}
\vskip 0.4in
\centerline{Ray F.~Cowan}
\vskip 0.1in
\centerline{22 February 1985}
\vskip 0.3in
\par
Tables have traditionally been difficult to make using \TeX---especially
ruled tables.  The file |TABLES.TEX| contains macros designed
to prepare both ruled and unruled tables with considerably less effort.
Note that |TABLES.TEX| can be
used with any macro set;
it does not depend upon prior loading of |PHYZZX|
or \Psizzl, for example.
One of the main advantages of this macro set is
that you no longer need to
design a
preamble for the table; the macros will scan your table entries and
construct a suitable preamble for you.
To access the macros, say \hbox{`|\input TABLES|'} in your \TeX\
file, somewhere before the first time you use them.
The macros available are listed in Table~1 and Table~2.
     
\endverbatim
\midinsert
\smallskip
\tablewidth=\hsize
\begintable
\sl Macro name\hfill | \sl Description \hfill \crthick
   \tt\\begintable\hfill | \para{Indicates the start of a new table.} \cr
   \tt\\endtable\hfill  | \para{Ends the current table.  Must be used
                      in place of the last {\tt\\cr}.}\cr
   \tt\\cr  \hfill  | \para{Ends the current row, and starts the next
                      one.  The completed row will be
                      separated from the next with a thin
                      horizontal rule.}   \cr
   \tt\\crthick\hfill | \para{Similar to {\tt\\cr}, but the rows will be
                      separated with a thick horizontal rule.}\cr
\tt\\crnorule \rm or \tt \\nr \hfill | \para{Similar
to {\tt\\cr}, but the rows will not
                      be separated by any rule.}\cr
 \vtop{\noindent\hsize=1.4in\tt\vbar\qquad \rm (vertical bar)\hfil\break
 or \tt\\vb} \hfill
          | \para{Separates one column from the next, and
                      puts a vertical rule between them.}  \cr
  \tt\&\ \rm or\tt\ \\novb \hfill
      | \para{Same as {\tt\vbar}, but does not put in the
                      vertical rule between the columns.}\cr
 \tt \\\vbar     \hfill | \para{Same as {\tt\vbar}, but puts in a
                      thick vertical rule.}
\endtable
\Table{1}{Description of simple table macros.}
\endinsert
\startverbatim
\par
The general idea is that you start your table with the command
|\begintable|, type your entries in one row at a time, then finish
with the command |\endtable|.
To specify a row, enter the individual entries into your \TeX\ file,
separating each column entry with a {\tt \vbar}, an {\tt \&}, or
a {\tt \\\vbar}.  A {\tt \vbar} will separate the adjoining columns
with a thin vertical rule, an {\tt \&} will leave out the vertical rule,
and
a {\tt \\\vbar} will separate the columns with a thick vertical rule.
To end one row and start another, use either a |\cr|, a |\crnorule|, or
a |\crthick|.  A |\cr| separates the rows with a thin
horizontal rule; a |\crnorule| leaves out the horizontal
rule, while |\crthick| inserts a thick horizontal rule.
Then end the last row with an |\endtable|.
\par
Each row of the table must contain exactly the same number of columns,
otherwise unpredictable things will happen.  Again, the {\it last row}
 must {\it not} end
with |\cr|$\ldots\,$, but
{\it must} end with an |\endtable|.  If you put a |\cr|
and an |\endtable| both on the last row, you won't like what happens.
\endverbatim
\pageinsert
\smallskip
\tablewidth=\hsize
\begintable
\sl Macro name\hfill | \sl Description \hfill \crthick
 \tt\\thicksize={\it dimen} \hfill | \para{This
                    dimension specifies the thickness
                    of the thick rules in the table.  The default size
                    is 1.5 points.} \cr
 \tt\\thinsize={\it dimen} \hfill | \para{This dimension specifies the
                     thickness of thin rules in the table.  The default
                     size is 0.8 points.} \cr
  \tt\\tablewidth={\it dimen} \hfill | \para{Specifies how wide to make
                 the next table.  If not specified, the table is made to
                      its natural width.  This value is reset following
                      the construction of each table.} \cr
   \tt\\multispan\{$n$\}\hfill | \para{Makes
                              the next entry span the next $n$
                      columns, where $n$ is an integer, $n>0$.
                See other notes on {\tt\\multispan} below.}\cr
 \tt\\omit \hfill   | \para{This \TeX\ primitive causes the normal
                template for its entry to be omitted, allowing the
                 user to do something else with this entry.} \cr
 \tt\\para\{{\it text}\}\ \hfill | \para{Formats {\it text} into
                a neat little paragraph like this one.  The width of
                the paragraph produced is determined by the dimension
                {\tt \\parasize}.  The default is 4 inches.  } \cr
 \tt\\parasize={\it dimen} \hfill | \para{Sets the width of paragraphs
                produced with the {\tt\\para} macro. } \cr
 \tt\\ctr\{\#\} \hfill | \para{Used in the standard template, this
                          macro centers its argument in the column.  The
                        user can redefine it for special effects.
                     The default definition is
      \par    \tt  \\def\\ctr\#1\{\\hfil\\\ \#1\\\ \\hfil\} } \cr
 \tt\\vctr\{\#\}\hfill | \para{Centers an entry vertically.  The
                          vertical center of the entry is placed on
                          the baseline of the row containing it.  The
                          intended use is to center an entry between
                          two rows.} \cr
 \tt\\centeredtables\hfill | \para{Turns table centering on.  Each table
                            will be centered
                           left-to-right on the page.  This is the
                             default.} \cr
 \tt\\noncenteredtables\hfill | \para{Turns table centering off.  Each
                          table is returned as an {\tt\\hbox}, and it
                           is up to the user to place it as desired.}
\endtable
\smallskip\rightline{\it continued$\ldots$}
\vfill
\endinsert
\topinsert\leftline{\it continued$\ldots$}\smallskip
\tablewidth=\hsize
\begintable
\sl Macro name\hfill | \sl Description \hfill \crthick
\tt\\tableinfotrue\hfill | \para{Turns on the diagnostic message telling
                        you how many rows and colums were found in the
                        table.  This is the default.} \cr
\tt\\tableinfofalse\hfill\ | \para{Turns off the diagnostic messages
                       concerning rows and columns.}
\endtable
\Table{2}{Description of extended table macros.}
\endinsert
\startverbatim
\par
Each
entry will be centered in its column (unless you use |\omit|, a \TeX\
primitive, or |\multispan|.  See notes below).
The table will be centered in an |\hbox| of width the |\hsize|, unless
you have turned table centering off (see the commands |\centeredtables|
and |\noncenteredtables|).
\par
Each time a new table is encountered, a message similar to
`|[Nrows=|$xx$|, Ncols=|$yy$|]|' is
printed on your terminal, where $xx$ is the number of rows
and $yy$ the number of columns discovered in your table.  If you think
they are incorrect, you may have left out some {\tt\|}'s or
{\tt\&}'s or {\tt\\cr}'s.
This diagnostic feature can be disabled by saying |\tableinfofalse|
(and restarted by saying |\tableinfotrue|).
\bigskip
\leftline{\it An example}
\par
  A simple 3-row, 2-column table with a header spanning two
             columns could be specified as (see notes 3 and 4
             below on
             the use of |\multispan|\foot{Note to experienced \TeX\ %
    users:  these macros locally (within the {\tt \\begintable}$\,\ldots%
\,${\tt \\endtable} grouping) redefine {\tt \\multispan} to take as its %
argument %
the number of user entries $n$ to be spanned, and not the total number %
of columns including rules, which would be $2n-1$.}):
\endverbatim
\par\noindent
\line{\vbox{\parskip0pt\baselineskip15pt
\beginverbatimlisting
         \begintable
         \multispan{2}\tstrut\hfil The Top Line\hfil\crthick
         Entry 1 | Entry 2 \cr
         Entry 3 | Entry 4 \endtable
\endverbatimlisting}\hfil}
\par\noindent
These commands produce Table~3.
\midinsert
\medskip
              \begintable
              \multispan{2}\tstrut\hfil The Top Line\hfil\crthick
              Entry 1 | Entry 2 \cr
              Entry 3 | Entry 4 \endtable
\smallskip
\Table{3}{A sample table.}
\medskip\endinsert
\startverbatim
\bigskip
\leftline{\it An example of non-centered tables}
\par
Two or more tables can be placed side-by-side by using the
|\noncenteredtables| command.  Consider the two tables here:
\midinsert
\medskip
\noncenteredtables
\line{
\begintable
Item ABC | Item DEF \cr
Item GHI | Item JKL \endtable
\hfil
\begintable
Data 111 | Data 222 \cr
Data 333 | Data 444 \cr
Data 555 | Data 666 \endtable
}  %  This `}' ends the \line we started above.
\smallskip
\Table{4}{Two non-centered tables aligned side-by-side.}
\medskip
\endinsert
These were produced by saying:
\par\noindent
\endverbatim
\line{\vbox{\parskip0pt\baselineskip15pt
\beginverbatimlisting
         \noncenteredtables
         \line{
         \begintable
         Item ABC | Item DEF \cr
         Item GHI | Item JKL \endtable
         \hfil
         \begintable
         Data 111 | Data 222 \cr
         Data 333 | Data 444 \cr
         Data 555 | Data 666 \endtable
         } %  This `}' ends the \line we started above.
\endverbatimlisting}\hfil}
\centeredtables
\startverbatim
\par\noindent
Notice that tables of unequal height are aligned at the bottom.
\bigbreak
\par\noindent
\leftline{$\underline{\hbox{\bf Usage notes:}}$}
\pointbegin
       Vertical spacing is done with a strut, called |\tstrut|, which is
       initially defined as 3.1ex high and 1.2ex deep.
       If you don't like the way it looks, you can redefine |\tstrut| to
       your own
       liking:|
\def\tstrut{\vrule height |$hh$| depth |$dd$| width 0pt}
|\pointcon where you
 specify your desired height $hh$ and depth $dd$.
\point You can control the thickness of the thin and thick rules
    through the use of |\thicksize| and |\thinsize|.  You can even
    turn off the rules entirely by saying |
\thinsize=0pt
\thicksize=0pt
|\pointcon for example.
 \point If you use a |\multispan|
  or an |\omit| in the first column of a row, you will
       lose the effect of the |\tstrut| within that row and
       must specify it yourself.  See
       the example above.
 \point Use of |\multispan| and |\omit| will
 cause the default centering of
       the entry to be lost; if you want it centered, put an |\hfil| on
       each side of the entry, as in the example above.
 \point To override the default centering action, include an |\hfill| on
       the left or right as desired; the |\hfill| will
        override the default
       |\hfil|.
%
\endverbatim
\endpage
\bye