Provided by: groff-base_1.22.4-8build1_amd64 bug

NAME

       tbl - format tables for troff

SYNOPSIS

       tbl [-Cv] [file ...]

DESCRIPTION

       This manual page describes the GNU version of tbl, which is part of the groff document formatting system.
       tbl compiles descriptions of tables embedded within troff input files into commands that  are  understood
       by  troff.   Normally,  it  should be invoked using the -t option of groff.  It is highly compatible with
       Unix tbl.  The output generated by GNU tbl cannot be processed with Unix troff; it must be processed with
       GNU  troff.  If no files are given on the command line or a filename of - is given, the standard input is
       read.

OPTIONS

       -C     Enable compatibility mode to recognize .TS and .TE even when followed by a  character  other  than
              space or newline.  Leader characters (\a) are handled as interpreted.

       -v     Print the version number.

LANGUAGE OVERVIEW

       tbl  expects  to  find  table  descriptions  wrapped in the .TS (table start) and .TE (table end) macros.
       Within each such table sections, another table can be defined by using the request .T& before  the  final
       command .TE.  Each table definition has the following structure:

       Global options
              This  is  optional.   This  table  part  can use several of these options distributed in 1 or more
              lines.  The global option part must always be finished by a semi-colon ; .

       Table format specification
              This part must be given, it is not optional.  It determines the number of columns (cells)  of  the
              table.  Moreover each cell is classified by being central, left adjusted, or numerical, etc.  This
              specification can have several lines, but must be finished by a dot .  at  the  end  of  the  last
              line.  After each cell definition, column specifiers can be appended, but that's optional.

       Cells  are  separated  by  a  tab character by default.  That can be changed by the global option tab(c),
       where c is an arbitrary character.

SIMPLE EXAMPLES

       The easiest table definition is.
              .TS
              c c c .
              This is   centered
              Well,     this also
              .TE
       By using c c c, each cell in the whole table will be centered.  The  separating  character  is  here  the
       default tab.

       The result is

              This     is    centered
              Well,   this     also

       This definition is identical to
              .TS
              tab(@);
              ccc.
              This@is@centered
              Well,@this@also
              .TE
       Here, the separating tab character is changed to the letter @.

       Moreover a title can be added and the centering directions can be changed to many other formats:
              .TS
              tab(@);
              c s s
              l c n .
              Title
              left@centers@123
              another@number@75
              .TE
       The result is

                       Title
              left      centers   123
              another   number     75
       Here l means left-justified, and n means numerical, which is here right-justified.

USAGE

   Global options
       The  line  immediately  following the .TS macro may contain any of the following global options (ignoring
       the case of characters – Unix tbl only accepts options with all characters lowercase  or  all  characters
       uppercase), separated by spaces, tabs, or commas:

       allbox Enclose each item of the table in a box.

       box    Enclose the table in a box.

       center Center  the  table  (default  is  left-justified).   The  alternative  keyword name centre is also
              recognized (this is a GNU tbl extension).

       decimalpoint(c)
              Set the character to be recognized as the decimal point in numeric columns (GNU tbl only).

       delim(xy)
              Use x and y as start and end delimiters for eqn(1).

       doublebox
              Enclose the table in a double box.

       doubleframe
              Same as doublebox (GNU tbl only).

       expand Make the table as wide as the current line length (providing a column separation factor).  Ignored
              if one or more ‘x’ column specifiers are used (see below).

              In case the sum of the column widths is larger than the current line length, the column separation
              factor is set to zero; such tables extend into the right margin, and there is no column separation
              at all.

       frame  Same as box (GNU tbl only).

       linesize(n)
              Set lines or rules (e.g. from box) in n-point type.

       nokeep Don't  use  diversions  to  prevent  page breaks (GNU tbl only).  Normally tbl attempts to prevent
              undesirable breaks in boxed tables by using diversions.  This can sometimes  interact  badly  with
              macro packages' own use of diversions—when footnotes, for example, are used.

       nospaces
              Ignore leading and trailing spaces in data items (GNU tbl only).

       nowarn Turn off warnings related to tables exceeding the current line width (GNU tbl only).

       tab(x) Use the character x instead of a tab to separate items in a line of input data.

       The  global  options  must  end  with  a  semicolon.  There might be whitespace between an option and its
       argument in parentheses.

   Table format specification
       After global options come lines describing the format of each line of the table.  Each such  format  line
       describes  one  line  of  the  table  itself, except that the last format line (which you must end with a
       period) describes all remaining lines of the table.  A single-key character describes each column of each
       line of the table.  Key characters can be separated by spaces or tabs.  You may run format specifications
       for multiple lines together on the same line by separating them with commas.

       You may follow each key character with  specifiers  that  determine  the  font  and  point  size  of  the
       corresponding item, that determine column width, inter-column spacing, etc.

       The longest format line defines the number of columns in the table; missing format descriptors at the end
       of format lines are assumed to be L.  Extra columns in the  data  (which  have  no  corresponding  format
       entry) are ignored.

       The available key characters are:

       a,A    Center  longest  line  in  this column and then left-justifies all other lines in this column with
              respect to that centered line.  The idea is to use such alphabetic subcolumns (hence the  name  of
              the  key character) in combination with L; they are called subcolumns because A items are indented
              by 1n relative to L entries.  Example:

                     .TS
                     tab(;);
                     ln,an.
                     item one;1
                     subitem two;2
                     subitem three;3
                     .T&
                     ln,an.
                     item eleven;11
                     subitem twentytwo;22
                     subitem thirtythree;33
                     .TE

              Result:

                     item one                 1
                      subitem two             2
                      subitem three           3
                     item eleven             11
                      subitem twentytwo      22
                      subitem thirtythree    33

       c,C    Center item within the column.

       l,L    Left-justify item within the column.

       n,N    Numerically justify item in the column: Units positions of numbers  are  aligned  vertically.   If
              there  is  one or more dots adjacent to a digit, use the rightmost one for vertical alignment.  If
              there is no dot, use the rightmost digit for vertical alignment; otherwise, center the item within
              the  column.   Alignment  can  be forced to a certain position using ‘\&’; if there is one or more
              instances of this special (non-printing) character present within the data, use the  leftmost  one
              for alignment.  Example:

                     .TS
                     n.
                     1
                     1.5
                     1.5.3
                     abcde
                     a\&bcde
                     .TE

              Result:

                       1
                       1.5
                     1.5.3
                      abcde
                       abcde

              If  numerical  entries  are  combined with L or R entries – this can happen if the table format is
              changed with .T& – center the widest number (of the data entered under  the  N  specifier  regime)
              relative  to the widest L or R entry, preserving the alignment of all numerical entries.  Contrary
              to A type entries, there is no extra indentation.

              Using equations (to be processed with eqn) within columns which use the N specifier is problematic
              in  most  cases  due  to  tbl's  algorithm for finding the vertical alignment, as described above.
              Using the global delim option, however, it is possible to make tbl  ignore  the  data  within  eqn
              delimiters for that purpose.

       r,R    Right-justify item within the column.

       s,S    Span previous item on the left into this column.  Not allowed for the first column.

       ^      Span down entry from previous row in this column.  Not allowed for the first row.

       _,-    Replace  this  entry  with  a horizontal line.  Note that ‘_’ and ‘-’ can be used for table fields
              only, not for column separator lines.

       =      Replace this entry with a double horizontal line.  Note that ‘=’ can  be  used  for  table  fields
              only, not for column separator lines.

       |      The  corresponding column becomes a vertical rule (if two of these are adjacent, a double vertical
              rule).

       A vertical bar to the left of the first key letter or to the right of the last one produces a line at the
       edge of the table.

       To  change  the data format within a table, use the .T& command (at the start of a line).  It is followed
       by format and data lines (but no global options) similar to the .TS request.

   Column specifiers
       Here are the specifiers that can appear in suffixes to column key letters (in any order):

       b,B    Short form of fB (make affected entries bold).

       d,D    Start an item that vertically spans rows, using the ‘^’ column specifier or ‘\^’ data item, at the
              bottom of its range rather than vertically centering it (GNU tbl only).  Example:

                     .TS
                     tab(;) allbox;
                     l l
                     l ld
                     r ^
                     l rd.
                     0000;foobar
                     T{
                     1111
                     .br
                     2222
                     T};foo
                     r;
                     T{
                     3333
                     .br
                     4444
                     T};bar
                     \^;\^
                     .TE

              Result:

                     ┌─────┬────────┐
                     │0000 │ foobar │
                     ├─────┼────────┤
                     │1111 │        │
                     │2222 │        │
                     ├─────┤        │
                     │   r │ foo    │
                     ├─────┼────────┤
                     │3333 │        │
                     │4444 │    bar │
                     └─────┴────────┘
       e,E    Make  equally-spaced  columns.   All  columns  marked with this specifier get the same width; this
              happens after the affected column widths have been computed (this means  that  the  largest  width
              value rules).

       f,F    Either  of  these  specifiers  may be followed by a font name (either one or two characters long),
              font number (a single digit), or long name in parentheses (the last form is a GNU tbl  extension).
              A one-letter font name must be separated by one or more blanks from whatever follows.

       i,I    Short form of fI (make affected entries italic).

       m,M    This  is  a GNU tbl extension.  Either of these specifiers may be followed by a macro name (either
              one or two characters long), or long name  in  parentheses.   A  one-letter  macro  name  must  be
              separated by one or more blanks from whatever follows.  The macro which name can be specified here
              must be defined before creating the table.  It is called just before  the  table's  cell  text  is
              output.  As implemented currently, this macro is only called if block input is used, that is, text
              between ‘T{’ and ‘T}’.  The macro should contain only simple troff requests  to  change  the  text
              block  formatting,  like  text  adjustment, hyphenation, size, or font.  The macro is called after
              other cell modifications like b,  f  or  v  are  output.   Thus  the  macro  can  overwrite  other
              modification specifiers.

       p,P    Followed  by  a  number,  this  does  a point size change for the affected fields.  If signed, the
              current point size is incremented or decremented (using a signed number instead of a signed  digit
              is  a  GNU  tbl extension).  A point size specifier followed by a column separation number must be
              separated by one or more blanks.

       t,T    Start an item vertically spanning rows at the top of its range rather  than  vertically  centering
              it.

       u,U    Move the corresponding column up one half-line.

       v,V    Followed  by  a  number, this indicates the vertical line spacing to be used in a multi-line table
              entry.  If signed, the current vertical line spacing is incremented or decremented (using a signed
              number  instead  of  a  signed  digit  is a GNU tbl extension).  A vertical line spacing specifier
              followed by a column separation number must be separated by one or more blanks.  No effect if  the
              corresponding table entry isn't a text block.

       w,W    Minimum column width value.  Must be followed either by a troff(1) width expression in parentheses
              or a unitless integer.  If no unit is given, en units are used.  Also used  as  the  default  line
              length  for  included  text  blocks.  If used multiple times to specify the width for a particular
              column, the last entry takes effect.

       x,X    An expanded column.  After computing all column widths without an x specifier, use  the  remaining
              line  width  for this column.  If there is more than one expanded column, distribute the remaining
              horizontal space evenly among the affected columns (this is a GNU extension).   This  feature  has
              the same effect as specifying a minimum column width.

       z,Z    Ignore  the corresponding column for width-calculation purposes, this is, don't use the fields but
              only the specifiers of this column to compute its width.

       A number suffix on a key character is interpreted as a column  separation  in  en  units  (multiplied  in
       proportion  if  the  expand  option  is  on  –  in  case of overfull tables this might be zero).  Default
       separation is 3n.

       The column specifier x is mutually exclusive with e and w (but e is not mutually exclusive  with  w);  if
       specified  multiple  times  for  a particular column, the last entry takes effect: x unsets both e and w,
       while either e or w overrides x.

   Table data
       The format lines are followed by lines containing the actual data for the table, followed finally by .TE.
       Within  such  data lines, items are normally separated by tab characters (or the character specified with
       the tab option).  Long input lines can be broken across multiple lines if the last character on the  line
       is ‘\’ (which vanishes after concatenation).

       Note  that  tbl  computes  the  column  widths line by line, applying \w on each entry which isn't a text
       block.  As a consequence, constructions like

              .TS
              c,l.
              \s[20]MM
              MMMM
              .TE

       fail; you must either say

              .TS
              cp20,lp20.
              MM
              MMMM
              .TE

       or

              .TS
              c,l.
              \s[20]MM
              \s[20]MMMM
              .TE

       A dot starting a line, followed by anything but a digit is handled as a  troff  command,  passed  through
       without changes.  The table position is unchanged in this case.

       If  a  data  line consists of only ‘_’ or ‘=’, a single or double line, respectively, is drawn across the
       table at that point; if a single item in a data line consists of only ‘_’  or  ‘=’,  then  that  item  is
       replaced  by  a  single  or double line, joining its neighbours.  If a data item consists only of ‘\_’ or
       ‘\=’, a single or double line, respectively, is drawn across the field at that point which does not  join
       its neighbours.

       A  data  item consisting only of ‘\Rx’ (‘x’ any character) is replaced by repetitions of character ‘x’ as
       wide as the column (not joining its neighbours).

       A data item consisting only of ‘\^’ indicates that the field immediately above spans downward  over  this
       row.

   Text blocks
       A  text  block  can  be  used  to enter data as a single entry which would be too long as a simple string
       between tabs.  It is started with ‘T{’ and closed with ‘T}’.  The former must end a line, and the  latter
       must  start  a  line, probably followed by other data columns (separated with tabs or the character given
       with the tab global option).

       By default, the text block is formatted with the settings which were active before  entering  the  table,
       possibly  overridden  by  the  m,  v, and w tbl specifiers.  For example, to make all text blocks ragged-
       right, insert .na right before the starting .TS (and .ad after the table).

       If either ‘w’ or ‘x’ specifiers are not given for all columns of a text block span, the default length of
       the text block (to be more precise, the line length used to process the text block diversion) is computed
       as L×C/(N+1), where ‘L’ is the current line length, ‘C’ the number of columns spanned by the text  block,
       and  ‘N’  the  total  number  of columns in the table.  Note, however, that the actual diversion width as
       returned in register \n[dl] is used eventually as the text block  width.   If  necessary,  you  can  also
       control the text block width with a direct insertion of a .ll request right after ‘T{’.

   Miscellaneous
       The number register \n[TW] holds the table width; it can't be used within the table itself but is defined
       right before calling .TE so that this macro can make use of it.

       tbl also defines a macro .T# which produces the bottom and side lines of a boxed table.  While  tbl  does
       call  this  macro  itself  at  the end of the table, it can be used by macro packages to create boxes for
       multi-page tables by calling it within the page footer.  An example of this is shown by  the  -ms  macros
       which  provide  this  functionality  if a table starts with .TS H instead of the standard call to the .TS
       macro.

INTERACTION WITH EQN

       tbl(1) should always be called before eqn(1) (groff(1) automatically takes care of the correct  order  of
       preprocessors).

GNU TBL ENHANCEMENTS

       There  is  no limit on the number of columns in a table, nor any limit on the number of text blocks.  All
       the lines of a table  are  considered  in  deciding  column  widths,  not  just  the  first  200.   Table
       continuation (.T&) lines are not restricted to the first 200 lines.

       Numeric and alphabetic items may appear in the same column.

       Numeric and alphabetic items may span horizontally.

       tbl  uses  register,  string,  macro  and diversion names beginning with the digit 3.  When using tbl you
       should avoid using any names beginning with a 3.

GNU TBL WITHIN MACROS

       Since tbl defines its own macros (right before each table) it  is  necessary  to  use  an  ‘end-of-macro’
       macro.  Additionally, the escape character has to be switched off.  Here an example.

              .eo
              .de ATABLE ..
              .TS
              allbox tab(;);
              cl.
              \$1;\$2
              .TE
              ...
              .ec
              .ATABLE A table
              .ATABLE Another table
              .ATABLE And "another one"

       Note,  however,  that  not  all  features  of  tbl can be wrapped into a macro because tbl sees the input
       earlier than troff.  For example, number formatting with vertically aligned decimal points fails if those
       numbers  are  passed  on as macro parameters because decimal point alignment is handled by tbl itself: It
       only sees ‘\$1’, ‘\$2’, etc., and therefore can't recognize the decimal point.

BUGS

       You should use .TS H/.TH in conjunction with a supporting macro package for all multi-page boxed  tables.
       If  there  is  no header that you wish to appear at the top of each page of the table, place the .TH line
       immediately after the format section.  Do not enclose a multi-page table within keep/release  macros,  or
       divert it in any other way.

       A text block within a table must be able to fit on one page.

       The bp request cannot be used to force a page-break in a multi-page table.  Instead, define BP as follows

              .de BP
              .  ie '\\n(.z'' .bp \\$1
              .  el \!.BP \\$1
              ..

       and use BP instead of bp.

       Using  \a  directly  in  a  table  to  get leaders does not work (except in compatibility mode).  This is
       correct behaviour: \a is an uninterpreted leader.  To get leaders use a real leader, either  by  using  a
       control A or like this:

              .ds a \a
              .TS
              tab(;);
              lw(1i) l.
              A\*a;B
              .TE

       A leading and/or trailing ‘|’ in a format line, such as

              |l r|.

       gives  output  which  has a 1n space between the resulting bordering vertical rule and the content of the
       adjacent column, as in

              .TS
              tab(#);
              |l r|.
              left column#right column
              .TE

       If it is desired to have zero space (so that the rule touches the  content),  this  can  be  achieved  by
       introducing extra “dummy” columns, with no content and zero separation, before and/or after, as in

              .TS
              tab(#);
              r0|l r0|l.
              #left column#right column#
              .TE

       The  resulting  “dummy”  columns  are invisible and have zero width; note that such columns usually don't
       work with TTY devices.

REFERENCE

       Lesk, M.E.: "TBL – A Program to Format Tables".  For copyright reasons it cannot be included in the groff
       distribution, but copies can be found with a title search on the World Wide Web.

SEE ALSO

       groff(1), troff(1)