Annotation of researchv10dc/vol2/tbl/tbl.pm.bug, revision 1.1

1.1     ! root        1: ....if \nM=0 .RP
        !             2: ....TM 76-1274-5 39199 39199-11
        !             3: .if \n(tm>0 .ND June 11, 1976*
        !             4: .TL
        !             5: Tbl \(em A Program to Format Tables\(dg
        !             6: .AU "MH 2C-569" 6377
        !             7: L. L. Cherry
        !             8: M. E. Lesk
        !             9: .AI
        !            10: .MH
        !            11: .AB
        !            12: .I Tbl
        !            13: is a document formatting preprocessor for
        !            14: .I troff
        !            15: or
        !            16: .I nroff
        !            17: which makes
        !            18: even
        !            19: fairly complex tables easy to specify and enter.
        !            20: Tables are made up of columns which may be independently centered, right-adjusted,
        !            21: left-adjusted, or aligned by decimal points.
        !            22: Headings may be placed over single columns or groups of columns.
        !            23: A table entry may contain equations, or may consist of several rows of text.
        !            24: Horizontal or vertical lines may be drawn as desired
        !            25: in the table,
        !            26: and any table or element may be enclosed in a box.
        !            27: For example:
        !            28: .TS
        !            29: center, box;
        !            30: c  s  s  s
        !            31: c  s  s  s
        !            32: c |c |c |c
        !            33: c |cp-2 |c |c
        !            34: l |n |n |n.
        !            35: U. S. Energy Production/Consumption
        !            36: \s-2(in quadrillion Btu)\s0
        !            37: =
        !            38: Year   Production      Consumption     Net
        !            39: \^     all sources             \^
        !            40: _
        !            41: 1953   36.77   36.27   +0.51
        !            42: 1958   38.81   40.35   \-1.54
        !            43: 1963   45.85   48.32   \-2.47
        !            44: 1968   56.81   61.00   \-4.19
        !            45: 1973   62.06   74.28   \-12.22
        !            46: 1978   61.01   78.09   \-17.08
        !            47: 1983   61.19   70.05   \-8.86
        !            48: 1987   64.55   76.01   \-11.46
        !            49: .TE
        !            50: .AE
        !            51: .tr # 
        !            52: .de e1
        !            53: .nr \\$1 \\$2
        !            54: ..
        !            55: .de e2
        !            56: .if !\\n(\\$1=\\n% .tm Error in example \\$1: referred to page \\n(\\$1, is on page \\n%
        !            57: .rr \\$1
        !            58: ..
        !            59: .di qq
        !            60: .EQ
        !            61: delim $$
        !            62: .EN
        !            63: .di
        !            64: .rm qq
        !            65: .FS
        !            66: \(dg This is version of |reference(v7tbl) revised by Lorinda Cherry.
        !            67: .FE
        !            68: .2C
        !            69: .NH
        !            70: Introduction.
        !            71: .PP
        !            72: .I Tbl
        !            73: turns a simple description
        !            74: of a table into a
        !            75: .I troff
        !            76: or
        !            77: .I nroff |reference(troff reference)
        !            78: program (list of commands) that prints the table.
        !            79: It
        !            80: attempts to isolate a portion of a job that it can
        !            81: successfully
        !            82: handle and leave the remainder for other programs.
        !            83: Thus
        !            84: .I tbl
        !            85: may be used with the equation formatting
        !            86: program
        !            87: .I eqn |reference(latest eqn)
        !            88: or various
        !            89: layout macro packages |reference(msmacros)|reference(lesk kernighan typesetting)|reference(mashey smith documentation),
        !            90: but does not duplicate their functions.
        !            91: .PP
        !            92: This memorandum is divided into two parts.
        !            93: First we give the rules for preparing
        !            94: .I tbl
        !            95: input; then some examples are shown.
        !            96: The description of rules is precise but technical, and
        !            97: the beginning user may prefer to read the examples first,
        !            98: as they show some common table arrangements.
        !            99: A section explaining how to invoke
        !           100: .I tbl
        !           101: precedes the examples.
        !           102: To avoid repetition, henceforth read
        !           103: .I troff
        !           104: as
        !           105: .I
        !           106: ``troff
        !           107: .R
        !           108: or
        !           109: .I
        !           110: nroff.''
        !           111: .R
        !           112: .ds . \^\s14.\s0
        !           113: .PP
        !           114: The input to
        !           115: .I
        !           116: tbl
        !           117: .R
        !           118: is text for a document, with tables preceded by a ``\f(CW.TS\fP''
        !           119: (table start)
        !           120: command and followed by a ``\f(CW.TE\fP''
        !           121: (table end) command.
        !           122: .I Tbl
        !           123: processes the tables, generating
        !           124: .I troff
        !           125: formatting commands,
        !           126: and leaves the remainder of the text unchanged.
        !           127: The
        !           128: .CW .TS
        !           129: and
        !           130: .CW .TE
        !           131: lines are copied, too, so that
        !           132: .I troff
        !           133: page layout macros
        !           134: (such as the memo formatting macros|reference(msmacros)) can use these lines
        !           135: to delimit and place tables as they see fit.
        !           136: In particular, any arguments on the
        !           137: .CW .TS
        !           138: or
        !           139: .CW .TE
        !           140: lines
        !           141: are copied but otherwise ignored, and may be used by document layout
        !           142: macro commands.
        !           143: .PP
        !           144: The format of the input is as follows:
        !           145: .DS
        !           146: \&text
        !           147: .CW .TS
        !           148: \&\fItable\fR
        !           149: .CW .TE
        !           150: \&text
        !           151: .CW .TS
        !           152: \&\fItable\fR
        !           153: .CW .TE
        !           154: \&text
        !           155: \&\&\*. \*. \*.
        !           156: .DE
        !           157: where the format of each table is as follows:
        !           158: .DS
        !           159: .CW .TS
        !           160: \fIoptions \f(CW;\fR
        !           161: \fIformat \f(CW.\fP
        !           162: data
        !           163: .CW .TE
        !           164: .DE
        !           165: .R
        !           166: Each table is independent, and must contain formatting
        !           167: information
        !           168: followed by the data to be entered in the table.
        !           169: The formatting information, which describes the
        !           170: individual columns and rows of the table, may be preceded
        !           171: by a few options that affect the entire table.
        !           172: A detailed description of tables is given in the next section.
        !           173: .NH
        !           174: Input commands.
        !           175: .PP
        !           176: As indicated above, a table contains, first, global options,
        !           177: then a format section describing the layout of the table
        !           178: entries, and then the data to be printed.  The format and data
        !           179: are always required, but not the options.
        !           180: The various parts of the table are entered as follows:
        !           181: .NH 2
        !           182: Options
        !           183: .PP
        !           184: There may be a single line of options
        !           185: affecting the whole table.
        !           186: If present, this line must follow the
        !           187: .CW .TS
        !           188: line immediately
        !           189: and must contain a list of option names
        !           190: separated by spaces, tabs, or commas, and must be terminated by a semicolon.
        !           191: The allowable options are:
        !           192: .IP \f(CW##center\fR 15
        !           193: center the table (default is left-adjust);
        !           194: .IP \f(CW##expand\fR
        !           195: make the table as wide as the current line length;
        !           196: .IP \f(CW##box\fR
        !           197: enclose the table in a box;
        !           198: .IP \f(CW##allbox\fR
        !           199: enclose each item in the table in a box;
        !           200: .IP \f(CW##doublebox\fR
        !           201: enclose the table in two boxes;
        !           202: .IP \f(CW##tab#\fR(\fIx\fR\^)
        !           203: use \fIx\fR instead of tab to separate data items.
        !           204: .IP \f(CW##linesize(\fIn\fP)\fR
        !           205: set lines or rules (e.g. from \f(CWbox\fR\^) in \fIn\fR point type;
        !           206: .IP \f(CW##delim(\fIxy\fP)\fR
        !           207: recognize \fIx\fR and \fIy\fR as the \fIeqn\fR delimiters.
        !           208: .PP
        !           209: .I Tbl
        !           210: tries to keep boxed tables on one page by issuing
        !           211: appropriate
        !           212: .I troff
        !           213: \&``need''
        !           214: .CW .ne ) (
        !           215: commands.
        !           216: These requests are calculated from the number of lines in the tables,
        !           217: and if there are spacing commands embedded in the input, these requests may be inaccurate;
        !           218: use normal
        !           219: .I troff
        !           220: procedures, such as keep-release macros, in that case.
        !           221: The user who must have a multi-page boxed table
        !           222: should use macros designed for this purpose,
        !           223: as explained below under `Usage.'
        !           224: .NH 2
        !           225: Format
        !           226: .PP
        !           227: The format section of the table specifies the layout
        !           228: of the columns.
        !           229: Each line in this section corresponds to one line
        !           230: of the table (except that the last line corresponds to all following
        !           231: lines up to the next
        !           232: .CW .T& ,
        !           233: if any \(em see below),
        !           234: and each line contains a key-letter for each column
        !           235: of the table.
        !           236: It is good practice to separate the key letters for each
        !           237: column by spaces or tabs.
        !           238: Each key-letter is one of the following:
        !           239: .cs B 25
        !           240: .IP "##\f(CWL\fR#or#\f(CWl\fR" 10
        !           241: to indicate a left-adjusted column entry;
        !           242: .IP "##\f(CWR\fR#or#\f(CWr\fR
        !           243: to indicate a right-adjusted column entry;
        !           244: .IP "##\f(CWC\fR#or#\f(CWc\fR
        !           245: to indicate a centered column entry;
        !           246: .IP "##\f(CWN\fR#or#\f(CWn\fR
        !           247: to indicate a numerical column entry, to be aligned with other
        !           248: numerical entries so that the units digits of numbers line up;
        !           249: .IP "##\f(CWA\fR#or#\f(CWa\fR
        !           250: to indicate an alphabetic subcolumn;
        !           251: all corresponding entries are aligned on the left, and positioned
        !           252: so that the widest is centered within the column (see
        !           253: example on page 12);
        !           254: .IP "##\f(CWS\fR#or#\f(CWs\fR
        !           255: to indicate a spanned heading, i.e. to indicate that the
        !           256: entry from the previous column continues across this
        !           257: column
        !           258: (not allowed for the first column, obviously); or
        !           259: .IP ##\f(CW\s+4\v'6p'^\v'-6p'\s0\fR
        !           260: to indicate a vertically spanned heading, i.e. to indicate that
        !           261: the entry from the previous row continues down through this row.
        !           262: (Not allowed for the first row of the table, obviously).
        !           263: .cs B
        !           264: .PP
        !           265: When numerical alignment is specified, a location for the decimal
        !           266: point is sought.  The rightmost dot
        !           267: .CW . ) (
        !           268: adjacent to a digit is used as a decimal point; if there is no
        !           269: dot adjoining a digit, the rightmost digit is used as a units digit;
        !           270: if no alignment is indicated, the item is centered in the column.
        !           271: However, the special non-printing character string
        !           272: .CW \e&
        !           273: may be used
        !           274: to override unconditionally dots
        !           275: and digits, or to align alphabetic data;
        !           276: this string lines up where a dot normally would,
        !           277: and then disappears from the final output.
        !           278: In the example below, the items shown at the left will be
        !           279: aligned (in a numerical column) as shown on the right:
        !           280: .KS
        !           281: .TS
        !           282: center;
        !           283: l6 n.
        !           284: 13     13
        !           285: 4\*.2  4\&\*.2
        !           286: 26\*.4\*.12    26\*.4\&\*.12
        !           287: abc    abc
        !           288: abc\e& abc\&
        !           289: 43\e&3\*.22    43\&3\*.22
        !           290: 749\*.12       749\&\*.12
        !           291: .TE
        !           292: .KE
        !           293: .PP
        !           294: \fBNote:\fR
        !           295: If numerical data are used in the same column with wider
        !           296: .CW L
        !           297: or
        !           298: .CW r
        !           299: type table entries, the widest \fInumber\fR is centered relative
        !           300: to the wider
        !           301: .CW L
        !           302: or
        !           303: .CW r
        !           304: items (\f(CWL\fR is used instead of \f(CWl\fR for readability;
        !           305: they have the same meaning as key-letters).
        !           306: Alignment within the numerical items is preserved.
        !           307: This is similar to the behavior of
        !           308: .CW a
        !           309: type data, as explained above.
        !           310: However,
        !           311: alphabetic subcolumns (requested by the
        !           312: .CW a
        !           313: key-letter)
        !           314: are always slightly indented relative to
        !           315: .CW L
        !           316: items;
        !           317: if necessary, the column width is increased to force this.
        !           318: This is not true for \f(CWn\fR type entries.
        !           319: .PP
        !           320: .ft BI
        !           321: Warning:
        !           322: .ft 1
        !           323: the \f(CWn\fR and \f(CWa\fR items should not be used in
        !           324: the same column.
        !           325: .PP
        !           326: For readability, the key-letters describing each column should
        !           327: be separated by spaces.
        !           328: The end of the format section is indicated by a period.
        !           329: The layout of the key-letters in the format section resembles
        !           330: the layout of the actual data in the table.
        !           331: Thus a simple format might appear as:
        !           332: .P1
        !           333: c  s  s
        !           334: l  n  n .
        !           335: .P2
        !           336: which specifies a table of three columns. The first line
        !           337: of the table contains a heading centered across all three
        !           338: columns; each remaining line contains a left-adjusted item
        !           339: in the first column followed by two columns of numerical
        !           340: data.
        !           341: A sample table in this format might be:
        !           342: .br
        !           343: .ne 6v
        !           344: .br
        !           345: .in +4
        !           346: .TS
        !           347: c s s
        !           348: l n n.
        !           349: Overall title
        !           350: Item-a 34.22   9.1
        !           351: Item-b 12.65   .02
        !           352: Items: c,d,e   23      5.8
        !           353: Total  69.87   14.92
        !           354: .TE
        !           355: .in -4
        !           356: There are some additional features of the key-letter system:
        !           357: .IP "\fI##Horizontal lines#\fR"
        !           358: \(em A key-letter may be replaced by
        !           359: .CW _
        !           360: (underscore) to indicate
        !           361: a horizontal line in place of the corresponding column entry,
        !           362: or by
        !           363: .CW =
        !           364: to indicate a double horizontal line.
        !           365: If an adjacent column contains a horizontal line, or if
        !           366: there are vertical lines adjoining this column,
        !           367: this horizontal line is extended to meet the nearby lines.
        !           368: If any data entry is provided for this column, it is ignored and
        !           369: a warning message is printed.
        !           370: .QQ do the D(x) and M(x) to draw a line of 'x' characters.
        !           371: .QQ D will draw divided lines, M merged lines. thus - is simplh M(\(ru)
        !           372: .IP "\fI##Vertical lines#\fR"
        !           373: \(em A vertical bar may be placed between column key-letters.  This will
        !           374: cause a vertical line between the corresponding columns of the table.
        !           375: A vertical bar to the left of the first key-letter
        !           376: or to the right of the last one produces a line at the
        !           377: edge of the table.
        !           378: If two vertical bars appear between key-letters, a double vertical
        !           379: line is drawn.
        !           380: .IP "\fI##Space between columns#\fR"
        !           381: \(em A number may follow the key-letter.  This indicates the amount of separation
        !           382: between this column and the next column.
        !           383: The number normally specifies the separation in
        !           384: .I
        !           385: ens
        !           386: .R
        !           387: (one
        !           388: en
        !           389: .ne 3
        !           390: is about the width of the letter `n').* 
        !           391: .FS
        !           392: * More precisely, an en is a number of points (1 point = 1/72 inch)
        !           393: equal to half the current type size.
        !           394: .FE
        !           395: If the ``expand'' option is used, then these numbers are multiplied
        !           396: by a constant such that the table is as wide as the current line length.
        !           397: The default column separation number is 3.
        !           398: If the separation is changed the worst case (largest space requested) governs.
        !           399: .IP "\fI##Vertical spanning#\fR"
        !           400: \(em Normally, vertically spanned items extending over several
        !           401: rows of the table are centered in their vertical range.
        !           402: If a key-letter is followed by
        !           403: .CW t
        !           404: or
        !           405: .CW T ,
        !           406: any corresponding vertically spanned item
        !           407: will begin at the top line of its range.
        !           408: .IP "\fI##Font changes#\fR"
        !           409: \(em A key-letter may be followed by a string containing a font
        !           410: name or number
        !           411: preceded by the letter
        !           412: .CW f
        !           413: or
        !           414: .CW F .
        !           415: This indicates that the corresponding column should be in a different
        !           416: font from the default font (usually Roman).
        !           417: All font names are one or two letters; a one-letter font
        !           418: name should be separated from whatever follows by a space or tab.
        !           419: The single letters
        !           420: .CW B ,
        !           421: .CW b ,
        !           422: .CW I ,
        !           423: and
        !           424: .CW i
        !           425: are shorter synonyms for
        !           426: .CW fB
        !           427: and
        !           428: .CW fI
        !           429: and refer to the bold and italic fonts in the current font family.
        !           430: Font change commands given with the table entries
        !           431: override these specifications.
        !           432: .IP "\fI##Point size changes#\fR"
        !           433: \(em A key-letter may be followed by the letter
        !           434: .CW p
        !           435: or
        !           436: .CW P
        !           437: and a number to indicate the point size of the corresponding table entries.
        !           438: The number may be a signed digit, in which case it is taken as
        !           439: an increment or decrement
        !           440: from the current point size.
        !           441: If both a point size and a column separation value are given,
        !           442: one or more blanks must separate them.
        !           443: .IP "\fI##Vertical spacing changes#\fR"
        !           444: \(em A key-letter may be followed by the letter
        !           445: .CW v
        !           446: or
        !           447: .CW V
        !           448: and a number to indicate the vertical line spacing to be used
        !           449: within a multi-line corresponding table entry.
        !           450: The number may be a signed digit, in which case it is taken as an increment
        !           451: or decrement from the current vertical spacing.
        !           452: A column separation value must be separated by blanks or some other
        !           453: specification from a vertical spacing request.
        !           454: This request has no effect unless the corresponding table entry
        !           455: is a text block (see below).
        !           456: .IP "\fI##Column width indication#\fR"
        !           457: \(em A key-letter may be followed by the letter
        !           458: .CW w
        !           459: or
        !           460: .CW W
        !           461: and a width value in parentheses.
        !           462: This width is used as a minimum column width.
        !           463: If the largest element in the column is not as wide as the width value
        !           464: given after the \f(CWw\fR, the largest element is assumed to be that wide.
        !           465: If the largest element in the column is wider than the specified value,
        !           466: its width is used.
        !           467: The width is also used as a default line
        !           468: length for included text blocks.
        !           469: Normal
        !           470: .I troff
        !           471: units can be used to scale the width value; if none are used,
        !           472: the default is
        !           473: ens.
        !           474: If the width specification is a unitless integer
        !           475: the parentheses may be omitted.
        !           476: If the width value is changed in a column, the \fIlast\fR one given controls.
        !           477: .IP "\fI##Equal width columns#\fR"
        !           478: \(em A key-letter may be followed by the letter
        !           479: .CW e
        !           480: or
        !           481: .CW E
        !           482: to indicate equal width columns.
        !           483: All columns whose
        !           484: key-letters are followed by \f(CWe\fR or \f(CWE\fR are made the same width.
        !           485: This permits the user to get a group of regularly spaced
        !           486: columns.
        !           487: .IP "\fI##Staggered columns#\fR"
        !           488: \(em A key-letter may be followed by the letter
        !           489: .CW u
        !           490: or
        !           491: .CW U
        !           492: to indicate that the corresponding entry is to be moved up one half line.
        !           493: This makes it easy, for example, to have a column of differences
        !           494: between numbers in an adjoining column.
        !           495: The
        !           496: .CW allbox
        !           497: option does not work with staggered columns.
        !           498: .IP "\fI##Zero-width item#\fR"
        !           499: \(em A key-letter may be followed by the letter
        !           500: .CW z
        !           501: or
        !           502: .CW Z
        !           503: to indicate that the corresponding
        !           504: data item is to be ignored in calculating column widths.
        !           505: This may be useful, for example, in allowing headings
        !           506: to run across adjacent columns where spanned headings
        !           507: would be inappropriate.
        !           508: .IP "##\f(CWNote:\fR#"
        !           509: The order of the above features is immaterial; they need not be separated
        !           510: by spaces, except as indicated above to avoid ambiguities involving
        !           511: point size and font changes.  Thus
        !           512: a numerical column entry in italic font and 12 point type with a minimum
        !           513: width of 2.5 inches and separated by 6 ens from the next column could
        !           514: be specified as
        !           515: .P1
        !           516: np12w(2.5i)fI  6
        !           517: .P2
        !           518: .IP "\fI##Alternative notation#\fR"
        !           519: \(em Instead of listing the format of successive lines of a table
        !           520: on consecutive lines of the format section,
        !           521: successive line formats may be given on the same line, separated
        !           522: by commas, so that the format for the example
        !           523: above might have been written:
        !           524: .P1
        !           525: c s s, l n n .
        !           526: .P2
        !           527: .IP "\fI##Default#\fR"
        !           528: \(em Column descriptors missing from the end
        !           529: of a format line are assumed to be \f(CWL\fR.
        !           530: The longest line in the format section, however,
        !           531: defines the number of columns
        !           532: in the table;
        !           533: extra columns in the data are ignored silently.
        !           534: .QQ put in the diagnostics.
        !           535: .NH 2
        !           536: Data
        !           537: .PP
        !           538: The data for the table are typed after the format.
        !           539: Normally, each table line is typed as one line of data.
        !           540: Very long input lines can be broken: any line whose last character is
        !           541: .CW \e
        !           542: is combined with the following line (and the
        !           543: .CW \e
        !           544: vanishes).
        !           545: The data for different columns (the table entries) are separated by tabs,
        !           546: or by whatever character has been specified with the option
        !           547: .I tabs .
        !           548: There are a few special cases:
        !           549: .IP "\fI##Troff commands within tables\fR#"
        !           550: \(em An input line
        !           551: beginning with a
        !           552: .CW .
        !           553: followed by anything
        !           554: but a number is assumed to be a command to
        !           555: .I troff
        !           556: and is passed through unchanged, retaining its position in the table.
        !           557: So, for example, vertical space within a table may be produced by
        !           558: .CW .sp
        !           559: commands
        !           560: in the data.
        !           561: .IP "\fI##Full width horizontal lines\fR#"
        !           562: \(em An input
        !           563: .I line
        !           564: containing only
        !           565: .CW _
        !           566: (underscore)
        !           567: or
        !           568: .CW =
        !           569: (equal sign) is taken to be a single or double
        !           570: line, respectively, extending the
        !           571: full width
        !           572: of the
        !           573: .I table.
        !           574: .IP "\fI##Single column horizontal lines\fR#"
        !           575: \(em An input table
        !           576: .I entry
        !           577: containing only the character $fat "\(ul" $ or \f(CW=\fR
        !           578: is taken to be a single or double line extending
        !           579: the full width of the
        !           580: .I column.
        !           581: Such lines are extended to meet horizontal or vertical
        !           582: lines adjoining this column.
        !           583: To obtain these characters explicitly in a column, either
        !           584: precede them by
        !           585: .CW \e&
        !           586: or
        !           587: follow them by a space before the usual tab or newline.
        !           588: .IP "\fI##Short horizontal lines\fR#"
        !           589: \(em An input table
        !           590: .I entry
        !           591: containing only the string
        !           592: .CW \e_
        !           593: is taken to be a single line as wide as the contents of
        !           594: the column.  It is not extended to meet
        !           595: adjoining lines.
        !           596: .IP "\fI##Repeated characters\fR#"
        !           597: \(em An input table
        !           598: .I entry
        !           599: containing only a string of the form
        !           600: .CW \eR \fIx\fR
        !           601: where
        !           602: .I x
        !           603: is any character is replaced by repetitions of the character
        !           604: .I x
        !           605: as wide as the data in the column.
        !           606: The sequence of
        !           607: .I x 's
        !           608: is not extended to meet adjoining columns.
        !           609: .IP "\fI##Vertically spanned items\fR#"
        !           610: \(em An input table entry containing only the
        !           611: character string
        !           612: .CW \e^
        !           613: indicates that the table entry immediately
        !           614: above spans downward over this row.  It is equivalent
        !           615: to a table format key-letter of
        !           616: .CW ^ .
        !           617: .IP "\fI##Text blocks\fR#"
        !           618: \(em In order to include a block of text as a table entry,
        !           619: precede it by
        !           620: .CW T{
        !           621: and follow
        !           622: it by
        !           623: .CW T} .
        !           624: Thus the sequence
        !           625: .P1
        !           626: \&\fR. . .\fP T{
        !           627: .I
        !           628: block of
        !           629: text
        !           630: .CW
        !           631: T}\fR . . .
        !           632: .P2
        !           633: is the way to enter, as a single entry in the table, something
        !           634: that cannot conveniently be typed as a simple string between
        !           635: tabs.
        !           636: Note that the
        !           637: .CW T}
        !           638: end delimiter must begin a line;
        !           639: additional columns of data may follow after a tab on the same line.
        !           640: See the example on page 10 for an illustration of included text blocks
        !           641: .e1 aa 10
        !           642: in a table.
        !           643: If more than fifty or so text blocks are used in a table,
        !           644: various limits in the
        !           645: .I troff
        !           646: program are likely to be exceeded,
        !           647: producing diagnostics such as `too many string/macro names' or `too many
        !           648: number registers.'
        !           649: .IP
        !           650: Text blocks are pulled out from the table, processed separately by
        !           651: .I
        !           652: troff,
        !           653: .R
        !           654: and replaced in the table as a solid block.  If no line length
        !           655: is specified in the
        !           656: .I
        !           657: block of text
        !           658: .R
        !           659: itself, or in the table format,
        !           660: the default is to use
        !           661: $ L times C / (N+1) $
        !           662: where $L$ is the current line length,
        !           663: $C$ is the number of table columns spanned by the text,
        !           664: and $N$ is the total number of columns in the table.
        !           665: The other parameters (point size, font, etc.) used in setting the
        !           666: .I
        !           667: block of text
        !           668: .R
        !           669: are those in effect at the beginning of the table (including
        !           670: the effect of the
        !           671: .CW .TS
        !           672: macro)
        !           673: and any table format specifications of size, spacing and font,
        !           674: using the \f(CWp\fR, \f(CWv\fR and \f(CWf\fR modifiers to the column key-letters.
        !           675: Commands within the text block itself are also recognized, of course.
        !           676: However,
        !           677: .I troff
        !           678: commands within the table data but not within the text block
        !           679: do not affect that block.
        !           680: .br
        !           681: .di RR
        !           682: .     this is going down a rathole
        !           683: .EQ
        !           684: delim off
        !           685: .EN
        !           686: .di
        !           687: .rm RR
        !           688: .IP "##\fBWarnings:\fR#"
        !           689: Although any number of lines may be present in a table,
        !           690: only the first 200 lines are used in calculating
        !           691: the widths of the various columns.
        !           692: A multi-page table,
        !           693: of course, may be arranged as several single-page tables
        !           694: if this proves to be a problem.
        !           695: Other difficulties with formatting may arise because,
        !           696: in the calculation of column widths all table entries
        !           697: are assumed to be in the font and size being used when
        !           698: the
        !           699: .CW .TS
        !           700: command was encountered, except for font and size changes
        !           701: indicated (a) in the table format section and (b)
        !           702: within the table data (as in the entry
        !           703: .CW \es+3\efIdata\efP\es0 ).
        !           704: Therefore, although arbitrary
        !           705: .I troff
        !           706: requests may be sprinkled in a table, care must be taken
        !           707: to avoid confusing the width calculations;
        !           708: use requests such as
        !           709: .CW .ps
        !           710: with care.
        !           711: .tr ##
        !           712: .sp .5v
        !           713: .NH 2
        !           714: Additional Command Lines
        !           715: .PP
        !           716: If the format of a table must be changed after
        !           717: many similar lines, as with sub-headings or summarizations, the
        !           718: .CW .T&
        !           719: (table continue)
        !           720: command can be used
        !           721: to change column parameters.
        !           722: The outline of such a table input is:
        !           723: .DS
        !           724: .ft CW
        !           725: \&.TS
        !           726: .ft I
        !           727: \&options \f(CW;\fP
        !           728: \&format \*.
        !           729: \&data
        !           730: \&\*. \*. \*.
        !           731: .ft CW
        !           732: \&.T&
        !           733: .ft I
        !           734: \&format \*.
        !           735: \&data
        !           736: .ft CW
        !           737: \&.T&
        !           738: .ft I
        !           739: \&format \*.
        !           740: \&data
        !           741: .ft CW
        !           742: \&.TE
        !           743: .DE
        !           744: .R
        !           745: as in the examples on pages 9 and 12.
        !           746: .e1 ab 9
        !           747: .e1 ac 12
        !           748: Using this procedure, each table line can be close to its corresponding format line.
        !           749: .sp 3p
        !           750: .ft BI
        !           751: Warning:
        !           752: .ft R
        !           753: it is not possible to change the number of columns, the space
        !           754: between columns, the global options such as \fIbox,\fR
        !           755: or the selection of columns to be made equal width.
        !           756: Nor is
        !           757: .CW .T&
        !           758: recognized after the first 200 lines of a table.
        !           759: .NH
        !           760: Usage.
        !           761: .PP
        !           762: On
        !           763: .UX ,
        !           764: .I tbl
        !           765: can be run on a simple table with the command
        !           766: .P1
        !           767: tbl input-file | troff
        !           768: .P2
        !           769: but
        !           770: for more complicated use, where there are several input files,
        !           771: and they contain equations and \fIms\fR memorandum layout commands as well
        !           772: as tables, the normal command would be
        !           773: .P1
        !           774: tbl \fIfiles ...\fP | eqn | troff -ms
        !           775: .P2
        !           776: and, of course, the usual options may be used on the
        !           777: .I troff
        !           778: and
        !           779: .I eqn
        !           780: commands. If any of the file names are
        !           781: .CW -
        !           782: the standard input is read at that point.
        !           783: .PP
        !           784: For the convenience of users employing line printers without
        !           785: adequate driving tables or post-filters, there is a special
        !           786: .CW -TX
        !           787: command line option to
        !           788: .I tbl
        !           789: which produces output that does not have fractional line
        !           790: motions in it.
        !           791: .PP
        !           792: Note that when
        !           793: .I eqn
        !           794: and
        !           795: .I tbl
        !           796: are used together on the same file,
        !           797: .I tbl
        !           798: should be used first.
        !           799: If there are no equations within tables,
        !           800: either order works, but it is usually faster
        !           801: to run
        !           802: .I tbl
        !           803: first, since
        !           804: .I eqn
        !           805: normally produces a larger expansion of the input
        !           806: than
        !           807: .I tbl .
        !           808: However, if there are equations within tables
        !           809: (using the
        !           810: .I delim
        !           811: mechanism in
        !           812: .I eqn ),
        !           813: .I tbl
        !           814: must be first or the output will be scrambled.
        !           815: Users must also beware of using equations in
        !           816: \f(CWn\fR-style columns; this is nearly always wrong,
        !           817: since
        !           818: .I tbl
        !           819: attempts to split numerical format items into two parts and this
        !           820: is not possible with equations.
        !           821: The user can defend against this by giving the
        !           822: .I delim(xx)
        !           823: table option;
        !           824: this prevents splitting of numerical columns within the delimiters.
        !           825: For example, if the
        !           826: .I eqn
        !           827: delimiters
        !           828: are
        !           829: .I $$ ,
        !           830: giving
        !           831: .I delim($$)
        !           832: a numerical column such as
        !           833: .CW "1245$+- 16$"
        !           834: will be divided after 1245, not after 16.
        !           835: .PP
        !           836: .I Tbl
        !           837: accepts up to about 35 columns, the exact number
        !           838: depending on the availability
        !           839: of number registers.
        !           840: The user must avoid number register names used
        !           841: by tbl, which include two-digit numbers from 31 to 97,
        !           842: and strings of the form
        !           843: .CW 4\fIx\fR,
        !           844: .CW 5\fIx\fR,
        !           845: .CW #\fIx\fR,
        !           846: \fIx\f(CW+\fR, \fIx\f(CW|\fR, \f(CW^\fIx\fR, and \fIx\f(CW-\fR,
        !           847: where
        !           848: \fIx\fR is any lower case letter.
        !           849: The names
        !           850: .CW ## ,
        !           851: .CW #- ,
        !           852: and
        !           853: .CW #^
        !           854: are also used in certain circumstances.
        !           855: To conserve number register names, the
        !           856: .CW n
        !           857: and
        !           858: .CW a
        !           859: formats share a register;
        !           860: hence the restriction above that they may not be used in the same column.
        !           861: .PP
        !           862: For aid in writing layout macros,
        !           863: .I tbl
        !           864: defines a number register
        !           865: .CW TW
        !           866: which is
        !           867: the table width; it is defined by the time that the
        !           868: .CW .TE
        !           869: macro
        !           870: is invoked and may be used in the expansion of that macro.
        !           871: More importantly, to assist in laying out multi-page boxed tables
        !           872: the macro T# is defined to produce the bottom lines and side lines of a boxed
        !           873: table, and then invoked at its end.  By use of this macro
        !           874: in the page footer a multi-page table can be boxed.
        !           875: In particular, the
        !           876: .I ms
        !           877: macros can be used to print a multi-page boxed table with a repeated heading
        !           878: by giving the
        !           879: argument
        !           880: .CW H
        !           881: to the
        !           882: .CW .TS
        !           883: macro.
        !           884: If the table start macro is written
        !           885: .P1
        !           886:        \&\*.TS H
        !           887: .P2
        !           888: a line of the form
        !           889: .P1
        !           890:        \&\*.TH
        !           891: .P2
        !           892: must be given in the table after any table heading (or at the start if none).
        !           893: Material up to the
        !           894: .CW .TH
        !           895: is placed at the top of each page of table;
        !           896: the remaining lines in the table are placed on several pages as required.
        !           897: Note that this is
        !           898: .I not
        !           899: a feature of
        !           900: .I tbl ,
        !           901: but of the \fIms\fR layout macros.
        !           902: .FC
        !           903: .1C
        !           904: .NH
        !           905: Examples.
        !           906: .PP
        !           907: Here are some examples illustrating features of
        !           908: .I
        !           909: tbl.
        !           910: .R
        !           911: .ds T \|\h'.4n'\v'-.2n'\s6\zT\s0\s10\v'.2n'\h'-.4n'\(ci\|\s0
        !           912: The symbol \*T in the input represents a tab character.
        !           913: .de IN
        !           914: .po \\n(POu
        !           915: .sp |\\n(.hu
        !           916: .sp
        !           917: .NE \\$1
        !           918: .mk
        !           919: .B
        !           920: Input:
        !           921: .R
        !           922: .sp .5
        !           923: .nf
        !           924: .in +3n
        !           925: ..
        !           926: .de OU
        !           927: .br
        !           928: .in -3n
        !           929: .rt
        !           930: .po +3i
        !           931: .B
        !           932: Output:
        !           933: .R
        !           934: .sp .5
        !           935: ..
        !           936: .rm TS
        !           937: .rm TE
        !           938: .nf
        !           939: .KS
        !           940: .IN 2.5i
        !           941: \&\*.TS
        !           942: \&box;
        !           943: \&c c c
        !           944: \&l l r\*.
        !           945: \&Fact\*TLocation\*TStatistic
        !           946: \&
        !           947: \&Largest state\*TAlaska\*T591,004 sq. mi.
        !           948: \&Smallest state\*TRhode Island\*T1,212 sq. mi.
        !           949: \&Longest river\*TMississippi-Missouri\*T3,710 mi.
        !           950: \&Highest mountain\*TMount McKinley, AK\*T20,320 ft.
        !           951: \&Lowest point\*TDeath Valley, CA\*T\-282 ft.
        !           952: \&\*.TE
        !           953: .OU
        !           954: .TS
        !           955: box;
        !           956: c c c
        !           957: l l r.
        !           958: Fact   Location        Statistic
        !           959: 
        !           960: Largest state  Alaska  591,004 sq. mi.
        !           961: Smallest state Rhode Island    1,212 sq. mi.
        !           962: Longest river  Mississippi-Missouri    3,710 mi.
        !           963: Highest mountain       Mount McKinley, AK      20,320 ft.
        !           964: Lowest point   Death Valley, CA        \-282 ft.
        !           965: .TE
        !           966: .IN 2.8i
        !           967: \&\*.TS
        !           968: \&allbox;
        !           969: \&c s s
        !           970: \&c c c
        !           971: \&n n n\*.
        !           972: \&AT&T Common Stock
        !           973: \&Year\*TPrice\*TDividend
        !           974: \&1984\*T15-20\*T$1\*.20
        !           975: \&5\*T19-25\*T1\*.20
        !           976: \&6\*T21-28\*T1\*.20
        !           977: \&7\*T20-36\*T1\*.20
        !           978: \&8\*T24-30\*T1\*.20
        !           979: \&9\*T29-37\*T\*.30*
        !           980: \&\*.TE
        !           981: \&* (first quarter only)
        !           982: .OU
        !           983: .TS
        !           984: allbox;
        !           985: c s s
        !           986: c c c
        !           987: n n n.
        !           988: AT&T Common Stock
        !           989: Year   Price   Dividend
        !           990: 1984   15-20   $1.20
        !           991: 5      19-25   1.20
        !           992: 6      21-28   1.20
        !           993: 7      20-36   1.20
        !           994: 8      24-30   1.20
        !           995: 9      29-37   .30*
        !           996: .TE
        !           997: * (first quarter only)
        !           998: .KE
        !           999: .BP
        !          1000: .KS
        !          1001: .IN 4i
        !          1002: \&\*.TS
        !          1003: \&box;
        !          1004: \&c s s
        !          1005: \&c | c | c
        !          1006: \&l | l | n\*.
        !          1007: \&Major New York Bridges
        !          1008: \&=
        !          1009: \&Bridge\*TDesigner\*TLength
        !          1010: \&\(ul
        !          1011: \&Brooklyn\*TJ\*. A\*. Roebling\*T1595
        !          1012: \&Manhattan\*TG\*. Lindenthal\*T1470
        !          1013: \&Williamsburg\*TL\*. L\*. Buck\*T1600
        !          1014: \&\(ul
        !          1015: \&Queensborough\*TPalmer &\*T1182
        !          1016: \&\*T  Hornbostel
        !          1017: \&\(ul
        !          1018: \&\*T\*T1380
        !          1019: \&Triborough\*TO\*. H\*. Ammann\*T\(ul
        !          1020: \&\*T\*T383
        !          1021: \&\(ul
        !          1022: \&Bronx Whitestone\*TO\*. H\*. Ammann\*T2300
        !          1023: \&Throgs Neck\*TO\*. H\*. Ammann\*T1800
        !          1024: \&\(ul
        !          1025: \&George Washington\*TO\*. H\*. Ammann\*T3500
        !          1026: \&\*.TE
        !          1027: .OU
        !          1028: .TS
        !          1029: box;
        !          1030: c s s
        !          1031: c | c | c
        !          1032: l | l | n.
        !          1033: Major New York Bridges
        !          1034: =
        !          1035: Bridge Designer        Length
        !          1036: _
        !          1037: Brooklyn       J. A. Roebling  1595
        !          1038: Manhattan      G. Lindenthal   1470
        !          1039: Williamsburg   L. L. Buck      1600
        !          1040: _
        !          1041: Queensborough  Palmer &        1182
        !          1042:          Hornbostel
        !          1043: _
        !          1044:                1380
        !          1045: Triborough     O. H. Ammann    _
        !          1046:                383
        !          1047: _
        !          1048: Bronx Whitestone       O. H. Ammann    2300
        !          1049: Throgs Neck    O. H. Ammann    1800
        !          1050: _
        !          1051: George Washington      O. H. Ammann    3500
        !          1052: .TE
        !          1053: .IN 3.0i
        !          1054: \&\*.TS
        !          1055: \&c c
        !          1056: \&np-2 | n | \*.
        !          1057: \&\*TStack
        !          1058: \&\*T\(ul
        !          1059: \&1\*T46
        !          1060: \&\*T\(ul
        !          1061: \&2\*T23
        !          1062: \&\*T\(ul
        !          1063: \&3\*T15
        !          1064: \&\*T\(ul
        !          1065: \&4\*T6\*.5
        !          1066: \&\*T\(ul
        !          1067: \&5\*T2\*.1
        !          1068: \&\*T\(ul
        !          1069: \&\*.TE
        !          1070: .OU
        !          1071: .TS
        !          1072: c c
        !          1073: np-2 | n |.
        !          1074:        Stack
        !          1075:        _
        !          1076: 1      46
        !          1077:        _
        !          1078: 2      23
        !          1079:        _
        !          1080: 3      15
        !          1081:        _
        !          1082: 4      6.5
        !          1083:        _
        !          1084: 5      2.1
        !          1085:        _
        !          1086: .TE
        !          1087: .KE

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.