8.23 tabular


  column 1 entry  &column 2 entry  ...  &column n entry \\


  column 1 entry  &column 2 entry  ...  &column n entry \\

Produce a table, a box consisting of a sequence of horizontal rows. Each row consists of items that are aligned vertically in columns. This illustrates many of the features.

  \textit{Player name}  &\textit{Career home runs}  \\ 
  Hank Aaron  &755 \\
  Babe Ruth   &714

The output will have two left-aligned columns with a vertical bar between them. This is specified in tabular’s argument {l|l}. Put the entries into different columns by separating them with an ampersand, &. The end of each row is marked with a double backslash, \\. Put a horizontal rule below a row, after a double backslash, with \hline. After the last row the \\ is optional, unless an \hline command follows to put a rule below the table.

The required and optional arguments to tabular consist of:


Optional. Specifies the table’s vertical position. The default is to align the table so its vertical center matches the baseline of the surrounding text. There are two other possible alignments: t aligns the table so its top row matches the baseline of the surrounding text, and b aligns on the bottom row.

This only has an effect if there is other text. In the common case of a tabular alone in a center environment this option makes no difference.


Required. Specifies the formatting of columns. It consists of a sequence of the following specifiers, corresponding to the types of column and intercolumn material.


A column of left-aligned items.


A column of right-aligned items.


A column of centered items.


A vertical line the full height and depth of the environment.

@{text or space}

Insert text or space at this location in every row. The text or space material is typeset in LR mode. This text is fragile (see \protect).

If between two column specifiers there is no @-expression then LaTeX’s book, article, and report classes will put on either side of each column a space of width \tabcolsep, which by default is 6pt. That is, by default adjacent columns are separated by 12pt (so \tabcolsep is misleadingly named since it is only half of the separation between tabular columns). In addition, a space of \tabcolsep also comes before the first column and after the final column, unless you put a @{...} there.

If you override the default and use an @-expression then LaTeX does not insert \tabcolsep so you must insert any desired space yourself, as in @{\hspace{1em}}.

An empty expression @{} will eliminate the space. In particular, sometimes you want to eliminate the space before the first column or after the last one, as in the example below where the tabular lines need to lie on the left margin.


The next example shows text, a decimal point between the columns, arranged so the numbers in the table are aligned on it.

  $3$ &$14$  \\
  $9$ &$80665$

An \extracolsep{wd} command in an @-expression causes an extra space of width wd to appear to the left of all subsequent columns, until countermanded by another \extracolsep. Unlike ordinary intercolumn space, this extra space is not suppressed by an @-expression. An \extracolsep command can be used only in an @-expression in the cols argument. Below, LaTeX inserts the right amount of intercolumn space to make the entire table 4 inches wide.

  Seven times down, eight times up \ldots 
  &such is life!

To insert commands that are automatically executed before a given column, load the array package and use the >{...} specifier.


Each item in the column is typeset in a parbox of width wd, as if it were the argument of a \parbox[t]{wd}{...} command.

A line break double backslash \\ may not appear in the item, except inside an environment like minipage, array, or tabular, or inside an explicit \parbox, or in the scope of a \centering, \raggedright, or \raggedleft declaration (when used in a p-column element these declarations must appear inside braces, as with {\centering .. \\ ..}). Otherwise LaTeX will misinterpret the double backslash as ending the tabular row. Instead, to get a line break in there use \newline (see \newline).


Equivalent to num copies of cols, where num is a positive integer and cols is a list of specifiers. Thus the specifier \begin{tabular}{|*{3}{l|r}|} is equivalent to the specifier \begin{tabular}{|l|rl|rl|r|}. Note that cols may contain another *-expression.


Required for tabular*, not allowed for tabular. Specifies the width of the tabular* environment. The space between columns should be rubber, as with @{\extracolsep{\fill}}, to allow the table to stretch or shrink to make the specified width, or else you are likely to get the Underfull \hbox (badness 10000) in alignment ... warning.

Parameters that control formatting:


A length that is the thickness of the rule created by |, \hline, and \vline in the tabular and array environments. The default is ‘.4pt’. Change it as in \setlength{\arrayrulewidth}{0.8pt}.


A factor by which the spacing between rows in the tabular and array environments is multiplied. The default is ‘1’, for no scaling. Change it as \renewcommand{\arraystretch}{1.2}.


A length that is the distance between the vertical rules produced by the || specifier. The default is ‘2pt’.


A length that is half of the space between columns. The default is ‘6pt’. Change it with \setlength.

The following commands can be used inside the body of a tabular environment, the first two inside an entry and the second two between lines:

Unofficial LaTeX2e reference manual