Tables are common elements in most scientific documents, LaTeX provides a large set of tools to customize tables, change the size, combine cells, change the colour of cells and so on. This article explains how.
Contents |
Below you can see the simplest working example of a table
\begin{center} \begin{tabular}{ c c c } cell1 & cell2 & cell3 \\ cell4 & cell5 & cell6 \\ cell7 & cell8 & cell9 \end{tabular} \end{center}
The tabular
environment is the default LaTeX method to create tables. You must specify a parameter to this environment, {c c c}
tells LaTeX that there will be three columns and that the text inside each one of them must be centred.
The tabular environment is more flexible, you can put separator lines in between each column.
\begin{center} \begin{tabular}{ |c|c|c| } \hline cell1 & cell2 & cell3 \\ cell4 & cell5 & cell6 \\ cell7 & cell8 & cell9 \\ \hline \end{tabular} \end{center}
It was already said that the tabular environment is used to type tables. To be more clear about how it works below is a description of each command.
{ |c|c|c| }
c
means that the contents of the column will be centred, you can also use r
to align the text to the right and l
for left alignment.
\hline
\hline
.
cell1 & cell2 & cell3 \\
&
is a cell separator and the double-backslash \\
sets the end of this row.
Below you can see a second example.
\begin{center} \begin{tabular}{||c c c c||} \hline Col1 & Col2 & Col2 & Col3 \\ [0.5ex] \hline\hline 1 & 6 & 87837 & 787 \\ \hline 2 & 7 & 78 & 5415 \\ \hline 3 & 545 & 778 & 7507 \\ \hline 4 & 545 & 18744 & 7560 \\ \hline 5 & 88 & 788 & 6344 \\ [1ex] \hline \end{tabular} \end{center}
This example shows double vertical and horizontal lines, when properly used help to keep the information within the table well organized.
When formatting a table you might require a fixed length either for each column or for the entire table. In the example below a fixed column width is established.
\begin{center} \begin{tabular}{ | m{5em} | m{1cm}| m{1cm} | } \hline cell1 dummy text dummy text dummy text& cell2 & cell3 \\ \hline cell1 dummy text dummy text dummy text & cell5 & cell6 \\ \hline cell7 & cell8 & cell9 \\ \hline \end{tabular} \end{center}
First, to use the parameters shown in the example, you must import the package array in the preamble of your LaTeX file with the next command
\usepackage{array}
In the tabular
environment, the parameter m{5em}
sets a length of 5em for first column (1cm for the other two) and centres the text in the middle of the cell. The aligning options are m
for middle, p
for top and b
for bottom. In standard tables new lines must be inserted manually so the table won't stretch out of the text area, when using this parameters the text is automatically formatted to fit inside each cell.
If you don't need to control the width of each cell, but of the entire table and then distribute the space within evenly, use the package tabu. See the example below:
\begin{tabu} to 0.8\textwidth { | X[l] | X[c] | X[r] | } \hline item 11 & item 12 & item 13 \\ \hline item 21 & item 22 & item 23 \\ \hline \end{tabu}
The environment tabu
is similar to tabular but more flexible, it's available after adding the line \usepackage{tabu}
to the preamble. Notice that the environment opening statement is different, in the example the table width is set to 0.8 the width of the text. You can use any of the LaTeX units for such length.
The parameter inside braces | X[l] | X[c] | X[r] |
sets the alignment of each column: the first one to left, the second one to center and the third one to right.
Rows and columns can be combined in a bigger cell. The example below is an example of the \multicolumn
command to combine columns.
\begin{tabular}{ |p{3cm}||p{3cm}|p{3cm}|p{3cm}| } \hline \multicolumn{4}{|c|}{Country List} \\ \hline Country Name or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 Code&ISO numeric Code\\ \hline Afghanistan & AF &AFG& 004\\ Aland Islands& AX & ALA &248\\ Albania &AL & ALB& 008\\ Algeria &DZ & DZA& 012\\ American Samoa& AS & ASM&016\\ Andorra& AD & AND &020\\ Angola& AO & AGO&024\\ \hline \end{tabular}
Let's see each part of the command \multicolumn{4}{|c|}{Country List} \\
:
{4}
{|c|}
{Country List}
To combine rows the package multirow must be imported with
\usepackage{multirow}
in your preamble, then you can use the \multirow
command in your document:
\begin{center} \begin{tabular}{ |c|c|c|c| } \hline col1 & col2 & col3 \\ \hline \multirow{3}{4em}{Multiple row} & cell2 & cell3 \\ & cell5 & cell6 \\ & cell8 & cell9 \\ \hline \end{tabular} \end{center}
The command multirow
takes three parameters. The first one is the number of rows to be combined, 3 in the example. The second parameter is the width of the column, 4em in the example. Finally, the third parameter is the content of the cell.
If you have to insert a very long table, which takes up two or more pages in your document, use the longtable
package. First, add to the preamble the line
\usepackage{longtable}
This will make the command longtable available.
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{longtable} \begin{document} \begin{longtable}[c]{| c | c |} \caption{Long table caption.\label{long}}\\ \hline \multicolumn{2}{| c |}{Begin of Table}\\ \hline Something & something else\\ \hline \endfirsthead \hline \multicolumn{2}{|c|}{Continuation of Table \ref{long}}\\ \hline Something & something else\\ \hline \endhead \hline \endfoot \hline \multicolumn{2}{| c |}{End of Table}\\ \hline\hline \endlastfoot Lots of lines & like this\\ Lots of lines & like this\\ Lots of lines & like this\\ Lots of lines & like this\\ Lots of lines & like this\\ Lots of lines & like this\\ Lots of lines & like this\\ Lots of lines & like this\\ ... Lots of lines & like this\\ \end{longtable}
longtable
behaviour is similar to the default tabular, but generates tables that can be broken by the standard LaTeX page-breaking algorithm. There are four elements long-table specific.
\endfirsthead
\endhead
endfirsthead
will be displayed at the top of the table in every page except the first one.
\endfoot
\endhead
and before this command will appear at the bottom of the table in every page except the last one.
\endlastfoot
\endfoot
and before this command will be displayed at the bottom of the table but only in the last page where the table appears.
Positioning a table is easy if they're inside a float table
environment.
\begin{table}[h!] \centering \begin{tabular}{||c c c c||} \hline Col1 & Col2 & Col2 & Col3 \\ [0.5ex] \hline\hline 1 & 6 & 87837 & 787 \\ 2 & 7 & 78 & 5415 \\ 3 & 545 & 778 & 7507 \\ 4 & 545 & 18744 & 7560 \\ 5 & 88 & 788 & 6344 \\ [1ex] \hline \end{tabular} \end{table}
The parameter h!
passed to the table environment declaration establishes that this table must be placed here, and override LaTeX defaults. Other positioning parameters can be passed also:
h
t
b
p
!
H
For further examples on table positioning see the Positioning images and tables article.
In this example there are a few more commands.:
\centering
\[1ex]
Tables can be captioned, labelled and referenced by means of the table
environment.
The table \ref{table:1} is an example of referenced \LaTeX elements. \begin{table}[h!] \centering \begin{tabular}{||c c c c||} \hline Col1 & Col2 & Col2 & Col3 \\ [0.5ex] \hline\hline 1 & 6 & 87837 & 787 \\ 2 & 7 & 78 & 5415 \\ 3 & 545 & 778 & 7507 \\ 4 & 545 & 18744 & 7560 \\ 5 & 88 & 788 & 6344 \\ [1ex] \hline \end{tabular} \caption{Table to test captions and labels} \label{table:1} \end{table}
There are three important commands in the example:
\caption{Table to test captions and labels}
\label{table:1}
\ref{table:1}
Note: The document may need to be compiled more than once for the labels to work.
To create a list of tables is straightforward.
\documentclass{article} \usepackage[utf8]{inputenc} \begin{document} \listoftables ... \end{document}
The caption of each table will be used to generate this list. For languages supported by the babel package, the title "List of tables" will be translated accordingly. See the article about International language support for more info.
Several table elements can be modified to achieve a good-looking document. Below you will learn how to modify the line thickness, the line colour and the background colour of the cells in your table.
The readability of the table sometimes is improved by incrementing the column spacing and row stretch.
\documentclass{article} \usepackage[utf8]{inputenc} \setlength{\arrayrulewidth}{1mm} \setlength{\tabcolsep}{18pt} \renewcommand{\arraystretch}{1.5} \begin{document} \begin{tabular}{ |p{3cm}|p{3cm}|p{3cm}| } \hline \multicolumn{3}{|c|}{Country List} \\ \hline Country Name or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\ \hline Afghanistan & AF &AFG \\ Aland Islands & AX & ALA \\ Albania &AL & ALB \\ Algeria &DZ & DZA \\ American Samoa & AS & ASM \\ Andorra & AD & AND \\ Angola & AO & AGO \\ \hline \end{tabular} \end{document}
A description of the commands is provided below:
\setlength{\arrayrulewidth}{1mm}
\setlength{\tabcolsep}{18pt}
\renewcommand{\arraystretch}{1.5}
It is a common practice to use two colours for alternating rows in a tables to improve readability. This can be achieved in LaTeX with the package xcolor and the table parameter.
\documentclass{article} \usepackage[table]{xcolor} \setlength{\arrayrulewidth}{1mm} \setlength{\tabcolsep}{18pt} \renewcommand{\arraystretch}{2.5} {\rowcolors{3}{green!80!yellow!50}{green!70!yellow!40} \begin{tabular}{ |p{3cm}|p{3cm}|p{3cm}| } \hline \multicolumn{3}{|c|}{Country List} \\ \hline Country Name or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\ \hline Afghanistan & AF &AFG \\ Aland Islands & AX & ALA \\ Albania &AL & ALB \\ Algeria &DZ & DZA \\ American Samoa & AS & ASM \\ Andorra & AD & AND \\ Angola & AO & AGO \\ \hline \end{tabular} }
Notice the braces right before the command
\rowcolors{3}{green!80!yellow!50}{green!70!yellow!40}
and after the tabular environment. The command \rowcolors
takes three parameters each passed inside braces:
See the xcolor package documentation (at the further reading section) for a list of available colours and how to create your own. In the example the colours green and yellow are mixed in different proportions.
For the command to work make sure to add
\usepackage[table]{xcolor}
to the preamble of your LaTeX file.
All elements in a table can be customized to use a specific colour. Again, this functionality is provided by xcolor so you must add
\usepackage[table]{xcolor}
to the preamble. Below you can see an example.
\documentclass{article} \usepackage[utf8]{inputenc} \usepackage[table]{xcolor} \setlength{\arrayrulewidth}{1mm} \setlength{\tabcolsep}{18pt} \renewcommand{\arraystretch}{2.5} \newcolumntype{s}{>{\columncolor[HTML]{AAACED}} p{3cm}} \arrayrulecolor[HTML]{DB5800} \begin{tabular}{ |s|p{3cm}|p{3cm}| } \hline \rowcolor{lightgray} \multicolumn{3}{|c|}{Country List} \\ \hline Country Name or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\ \hline Afghanistan & AF &AFG \\ \rowcolor{gray} Aland Islands & AX & ALA \\ Albania &AL & ALB \\ Algeria &DZ & DZA \\ American Samoa & AS & ASM \\ Andorra & AD & \cellcolor[HTML]{AA0044} AND \\ Angola & AO & AGO \\ \hline \end{tabular}
Below is a description about how to change the colour of each element in the table:
\arrayrulecolor
is used for this. In the example an HTML format is used, but other formats are available too, see the xcolor documentation for a complete list (link provided at the further reading section).
\cellcolor
. You can either enter the name directly inside the braces (red, gray, green and so on) or pass a format parameter inside brackets (HTML in the example) and then set the desired colour inside the braces using the established format.
\rowcolor
will accomplish that. The same observations about colour selection mentioned in the two previous commands are valid for this one.
\newcolumntype{s}{>{\columncolor[HTML]{AAACED}} p{3cm}}
tabular
environment.
quick description of parameters in the tabular
environment
Tables can be created using tabular
environment.
\begin{tabular}[pos]{cols} table content \end{tabular}
where options can be:
pos
: Vertical position. It can assume the following values:
t |
the line at the top is aligned with the text baseline |
b |
the line at the bottom is aligned with the text baseline |
c or none |
the table is centred to the text baseline |
cols
: Defines the alignment and the borders of each column. It can have the following values:
l |
left-justified column |
c |
centred column |
r |
right-justified column |
p{'width'} |
paragraph column with text vertically aligned at the top |
m{'width'} |
paragraph column with text vertically aligned in the middle (requires array package)
|
b{'width'} |
paragraph column with text vertically aligned at the bottom (requires array package)
|
| |
vertical line |
|| |
double vertical line |
*{num}{form} |
the format form is repeated num times; for example *{3}{|l}| is equal to |l|l|l|
|
To separate between cells and introducing new lines use the following commands:
& |
column separator |
\\ |
start new row (additional space may be specified after \\ using square brackets, such as \\[6pt] )
|
\hline |
horizontal line between rows |
\newline |
start a new line within a cell (in a paragraph column) |
\cline{i-j} |
partial horizontal line beginning in column i and ending in column j |
For more information see