2

MWE

\documentclass[12pt]{article}

\usepackage[
    a4paper,
    left = 5mm,
    right = 5mm,
    landscape,
    %showframe,
    ]
    {geometry}

\usepackage{tabularx}
\usepackage{multirow}

% Thicker table lines for screenshot
\setlength{\arrayrulewidth}{1.5pt}
\setlength{\parindent}{0pt}

\usepackage[table]{xcolor}
\definecolor{myTableColor}{gray}{0.80}

% Nice sf font for screenshot
\usepackage[sfdefault]{cabin}

% https://tex.stackexchange.com/questions/163061
% https://tex.stackexchange.com/questions/89166
\newcolumntype{Y}{>{\centering\arraybackslash}X} 

\begin{document}

\section*{Red Text Causes Strange Column}

\begin{tabularx}{\textwidth}{lc|l|Y|Y|Y|Y}
& & & \multicolumn{3}{c}{\multirow{2}{*}{\parbox{130mm}{\centering Text}}} & \\ 
% New Row
& & & \multicolumn{3}{l}{} & \\ 
% New Row
Text & Text & & & & & \\ \hline
% New Row
\rowcolor{myTableColor}
Text & Text & & & & \textcolor{red}{Problem Column} & \\ \hline
% New Row
Text Text Text Text \textcolor{red}{Text} & Text & Text Text Text Text Text \textcolor{red}{Text} & & & & \\ \hline
% New Row
Text & Text & & & & & \\ \hline
\end{tabularx}

\section*{Red Text Removed}

\begin{tabularx}{\textwidth}{lc|l|Y|Y|Y|Y}
& & & \multicolumn{3}{c}{\multirow{2}{*}{\parbox{130mm}{\centering Text}}} & \\ 
% New Row
& & & \multicolumn{3}{l}{} & \\ 
% New Row
Text & Text & & & & & \\ \hline
% New Row
\rowcolor{myTableColor}
Text & Text & & & & \textcolor{blue}{No Problem Column} & \\ \hline
% New Row
Text Text Text Text & Text & Text Text Text Text Text & & & & \\ \hline
% New Row
Text & Text & & & & & \\ \hline
\end{tabularx}

\end{document}

MWE Output

enter image description here

Problem

  • I have a table in which I use tabularx and multirow.
  • When I add the red text in the MWE then I get a shift in one of the X columns.
  • I don't understand what happens.

Update

After the chat in the comments, I think that this may be the better question:

Can I use a multirow and multicolumn with automatic line break without having to specify the width explicitly (here 120mm)?

"Real" Table

This is the "real" table.

enter image description here

  • 1
    it seems that the width of \parbox in multirow cell is wider than sum of column width below of multicol cell in which you have multirow. If you will reduce its width from 130 mm to 90 mmm (as example), your problem will disappear. Or I misunderstanding your problem? – Zarko Apr 22 '17 at 23:48
  • @Zarko I thought that X columns have all the same width. I am confused that it affects only one column. Question: Can I use a multirow with automatic line break without having to specify the width explicitly (here 120mm)? And thanks for the comment. – Dr. Manuel Kuehner Apr 22 '17 at 23:51
  • 1
    you have used \multicolumn which by design replaces the column specification from the table preamble by the specification for this cell, so here you have a fixed width p column with a fixed width that is wider than the natural width of the columns being spanned, in such a case the tex \halign primitive always adds the excess width to the last spanned column. – David Carlisle Apr 22 '17 at 23:55
  • 1
    meanwhile I will try to find the answer of @Mico, where he solve similar problem. – Zarko Apr 23 '17 at 0:05
  • 1
    @Zarko see below:-) – David Carlisle Apr 23 '17 at 0:06
3

You want to use a Y column for your spanning entry

enter image description here

\documentclass[12pt]{article}

\usepackage[
    a4paper,
    left = 5mm,
    right = 5mm,
    landscape,
    %showframe,
    ]
    {geometry}


\usepackage{tabularx}
\usepackage{multirow}

% Thicker table lines for screenshot
\setlength{\arrayrulewidth}{1.5pt}
\setlength{\parindent}{0pt}

\usepackage[table]{xcolor}
\definecolor{myTableColor}{gray}{0.80}

% Nice sf font for screenshot
\usepackage[sfdefault]{cabin}

% https://tex.stackexchange.com/questions/163061
% https://tex.stackexchange.com/questions/89166
\newcolumntype{Y}{>{\centering\arraybackslash}X} 

\begin{document}

\section*{Red Text Causes Strange Column}

\begin{tabularx}{\textwidth}{lc|l|Y|Y|Y|Y}
& & & 
\multicolumn{3}{>{\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}Y}
{\multirow{2}{=}{\centering Text 
text text text text text text text text text text
text text text text text text text text text text
text text text text text text text text text text
}} & \\ 
% New Row
& & & \multicolumn{3}{l}{} & \\ 
% New Row
Text & Text & & & & & \\ \hline
% New Row
\rowcolor{myTableColor}
Text & Text & & & & \textcolor{red}{Problem Column} & \\ \hline
% New Row
Text Text Text Text \textcolor{red}{Text} & Text & Text Text Text Text Text \textcolor{red}{Text} & & & & \\ \hline
% New Row
Text & Text & & & & & \\ \hline
\end{tabularx}

\section*{Red Text Removed}

\begin{tabularx}{\textwidth}{lc|l|Y|Y|Y|Y}
& & & \multicolumn{3}{c}{\multirow{2}{*}{\parbox{130mm}{\centering Text}}} & \\ 
% New Row
& & & \multicolumn{3}{l}{} & \\ 
% New Row
Text & Text & & & & & \\ \hline
% New Row
\rowcolor{myTableColor}
Text & Text & & & & \textcolor{blue}{No Problem Column} & \\ \hline
% New Row
Text Text Text Text & Text & Text Text Text Text Text & & & & \\ \hline
% New Row
Text & Text & & & & & \\ \hline
\end{tabularx}

\end{document}
  • Thanks! So in order to have a parbox with the natural length of the multicolumns I have to use\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}Y? – Dr. Manuel Kuehner Apr 23 '17 at 12:24
  • 1
    @Dr.ManuelKuehner yes three X columns would be 3\hsize but you are spanning two column separators each of which is a space or tabcolsep, a rule of width arrayrulewidth and another tabcolsep space – David Carlisle Apr 23 '17 at 15:03
  • @DavidCarlisle, it should be pointed that text in multirow cells should not be longer then two lines, otherwise it will protrude into rows below this cell. – Zarko Apr 23 '17 at 15:58
  • @Zarlo well the multi row entry has to be smaller than the rows spanned – David Carlisle Apr 23 '17 at 16:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.