# I had a problem with spacing of tabular columns combined with \multicolumn. I found an inelegant solution. Perhaps someone knows of a better one?

Consider a table with several columns. Three consecutive columns are thin. These three thin columns have a long \multicolumn{c}{3}{??} heading over them. If nothing is done to specify how these should be spaced then the default behaviour is to make the first two columns as thin as they can be to accommodate the contents of the first two columns and the final column is made up to the size required to line up with the end of the heading.

One solution, is to manually add space between columns using @{} or manually specify the width of columns using p{??} or S[table-column-width=??] (in the case of the siunitx package).

I was hoping there would be some kind of automated solution, or that this could be a possible development project. It has occurred to me thought that in the more general case, where there might be multiple overlapping \multicolumn commands on different lines then this might range from awkward to impossible.

Here is some code to produce a table with the problem (first) and a slightly awkward solution the problem that I implemented (second). I used the siunitx package to implement columns as I prefer the layout and it provides me with some more options.

\documentclass{article}
\usepackage{siunitx}
\usepackage{booktabs}

\begin{document}

\begin{table}
\centering
%  \sisetup{table-alignment=center,table-column-width=2.8cm}
\sisetup{table-alignment=center}
\begin{tabular}{ S S S S }
\toprule
\multicolumn{3}{c}{k-points in lattice vector and here's some more words} & \\
$\mathbf{a}$  &  $\mathbf{b}$  &  $\mathbf{c}$  &  {total k-points}\\
\midrule
1             &  1             &  1             &   1    \\
2             &  1             &  2             &   4    \\
3             &  2             &  3             &  18    \\
4             &  2             &  4             &  32    \\
5             &  3             &  5             &  75    \\
5             &  4             &  5             & 100    \\
6             &  4             &  6             & 144    \\
7             &  5             &  7             & 245    \\
8             &  6             &  8             & 384    \\
10             &  6             & 10             & 600    \\
10             &  8             & 10             & 800    \\
\bottomrule
\end{tabular}
\end{table}

\begin{table}
% try to determine correct column spacing for 3 thin columns under a long heading.
\def\tempHeading{k-points in lattice vector and here's some more words} % this is the heading
\newlength{\tempHeadingLen}                          % a length is a type of object and must be defined
%
\centering
\sisetup{table-alignment=center}
S }
\toprule
$\mathbf{a}$  &  $\mathbf{b}$  &  $\mathbf{c}$  &  {total k-points}\\
\midrule
1             &  1             &  1             &   1    \\
2             &  1             &  2             &   4    \\
3             &  2             &  3             &  18    \\
4             &  2             &  4             &  32    \\
5             &  3             &  5             &  75    \\
5             &  4             &  5             & 100    \\
6             &  4             &  6             & 144    \\
7             &  5             &  7             & 245    \\
8             &  6             &  8             & 384    \\
10            &  6             & 10             & 600    \\
10            &  8             & 10             & 800    \\
\bottomrule
\end{tabular}
\end{table}

\end{document}

-
Instead of having a \multicolumn header spanning the three data columns, why not having only one column, with the first row containing the header, and the second row being a \multirow containing a nested table with three columns? –  DevSolar Aug 23 '11 at 19:45

Use a combination of your example (with the siunitx package) and Gonzalo's answer:

\documentclass{article}
\usepackage{siunitx}% http://ctan.org/pkg/siunitx
\usepackage{tabularx}% http://ctan.org/pkg/tabularx
\usepackage{booktabs}% http://ctan.org/pkg/booktabs

\newcolumntype{L}{>{\centering}X}% Centered fully stretched column

\begin{document}
\begin{table}
\centering
\sisetup{table-alignment=center,table-figures-decimal=0}
\begin{tabularx}{\linewidth}{%
S[table-figures-integer=2]%
S[table-figures-integer=1]%
S[table-figures-integer=2]%
S[table-figures-integer=3]%
}
\toprule
\multicolumn{3}{c}{$k$-points in lattice vector and here's some more words} & \\
\multicolumn{1}{L}{$\mathbf{a}$}  &  \multicolumn{1}{L}{$\mathbf{b}$}  &
\multicolumn{1}{L}{$\mathbf{c}$}  &  \multicolumn{1}{L}{total $k$-points}\\
\midrule
1             &  1             &  1             &   1    \\
2             &  1             &  2             &   4    \\
3             &  2             &  3             &  18    \\
4             &  2             &  4             &  32    \\
5             &  3             &  5             &  75    \\
5             &  4             &  5             & 100    \\
6             &  4             &  6             & 144    \\
7             &  5             &  7             & 245    \\
8             &  6             &  8             & 384    \\
10             &  6             & 10             & 600    \\
10             &  8             & 10             & 800    \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}


The use of \multicolumn{1}{X}{...} in the table header allows for the last column to also stretch as a column of type X, yet still maintain the S column alignment from siunitx.

For each of the columns you are required to specify the (maximum) number of digits it will hold via the table-figures-integer key value. Additionally, since all columns carry integers, table-figures-decimal=0 and table-alignment=center is set globally for the table via \sisetup.

-