[Tex/LaTex] Tabularx and multicolumn

tables

When I try to use multicolumn inside a tabularx environment, I get this weird behaviour; where the column doesn't fill the whole width.

Anyone know why this is happening, and how I can fix it?

\documentclass[12pt]{article}
\usepackage{tabularx,lipsum}

\begin{document}

\begin{tabularx}{\textwidth}{|X|X|}

    \hline
    \multicolumn{2}{|X|}{\sffamily Lorem ipsum dolor sit amet,}\\\hline
    \multicolumn{2}{|X|}{\lipsum[2]}\\\hline

    \sffamily Lorem av:&\sffamily Ipsum:\\
    foo&bar\\\hline

\end{tabularx}

\end{document}

tabularx with multicolumn

Best Answer

You have to specify \hsize like |>{\hsize=2\hsize}X|. If it is for three columns 3\hsize and so on. To be precise, take the \tabcolsep and one \arrayrulewidth in to account like

>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}

Code:

\documentclass[12pt]{article}
\usepackage{tabularx,lipsum}
\usepackage[table]{xcolor}

\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|X|X|}

    \hline
    \multicolumn{2}{|>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{\sffamily Lorem ipsum dolor sit amet, }\\\hline
  \rowcolor{blue!40}
    \multicolumn{2}{|>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{\lipsum*[2]}\\\hline

    \sffamily Lorem av:&\sffamily Ipsum:\\
    foo&bar \\\hline

\end{tabularx}

\end{document}

enter image description here

As an example, for three columns you have to use

>{\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}

as in

\documentclass[12pt]{article}
\usepackage{tabularx,lipsum}
\usepackage[table]{xcolor}

\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|X|X|X|}

    \hline
    \multicolumn{3}{|>{\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{\sffamily Lorem ipsum dolor sit amet, }\\\hline
  \rowcolor{blue!40}
    \multicolumn{3}{|>{\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{\lipsum*[2]}\\\hline

    \sffamily Lorem av:&\sffamily Ipsum:&\sffamily Ipsum:\\
    foo&bar &bar\\\hline

\end{tabularx}

\end{document}

Here there are three columns, six \tabcolseps and 4 \arrayrulewidths. Of these 2 outer \tabcolseps and 2 outer \arrayrulewidths are retained (inside multi column) while the space for 4 \tabcolseps and 2 \arrayrulewidths have to be used.