0

As can be seen in my MWE below, I'm using tabularx to create a table with alternating colors. For different reasons, I defined three new column types L, C and R that shall automatically fill out the whole \textwidth and are left, center and right-aligned.

However, this MWE constantly fails and I can't figure out a way to get it to work and also don't know what to make of the error messages:

  • Misplaced \noalign. \end{tabularx}
  • Extra alignment tab has been changed to \cr. \end{tabularx}
\documentclass[11pt, oneside, a4paper]{article}
\usepackage{fontspec}
    \setmainfont[BoldFont=Calibri, ItalicFont=CalibriLightItalic]{Calibri Light}
% captions
\usepackage[font={color=red, small}, justification=justified, singlelinecheck=false, tableposition=top]{caption}
% colors
\usepackage[table]{xcolor}
\usepackage{colortbl}
% tables
\usepackage{float}
    \floatstyle{plaintop}
    \restylefloat{table}
\usepackage{xltabular}
\usepackage{tabularx}
    \renewcommand{\tabularxcolumn}[1]{m{#1}}
\usepackage{array}
    \newcolumntype{L}{>{\raggedright}X}
    \newcolumntype{R}{>{\raggedleft}X}
    \newcolumntype{C}{>{\centering}X}
    \renewcommand{\arraystretch}{0.75}
    \setlength\arrayrulewidth{1pt}
    \setlength\tabcolsep{0pt}

\begin{document} \begin{table}[H] \rowcolors{1}{white}{gray!50} \color{red}{ \begin{tabularx}{\textwidth}{C C C} \arrayrulecolor{gray} \hline \textbf{Band No.} & \textbf{Spectral Range} & \textbf{Resolution} \ \hline 1 & 0.435 & 30 \ 2 & 0.452 & 30 \ \hline \end{tabularx} } \caption{Sensor specifications Landsat 8} \label{tab:specs_landsat8} \end{table} \end{document}

I can get it to work using column definitions like this:

\begin{tabularx}{\textwidth}{
    >{\arraybackslash}p{0.35\textwidth}
    >{\raggedright\arraybackslash}p{0.3\textwidth} 
    >{\arraybackslash}p{0.35\textwidth}
    }
...
s6hebern
  • 297
  • 2
    Not quite understood. Besides, you should add \arraybackslash to your definitions of L, C and R. Plus you really shouldn't be using the [H] specifier. – daleif Feb 18 '21 at 13:52
  • Using \arraybackslash in the definition solves the whole issue! Whatever this is used for (I have no clue), it works. Great, thanks! – s6hebern Feb 18 '21 at 13:58
  • See also: https://tex.stackexchange.com/a/12712/134144 – leandriis Feb 18 '21 at 14:11

1 Answers1

1

\raggedright and friends redefines \\ so it no longer means new row, \arraybackslash restores the tabular definition of \\. Thus it is better t use

\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
\newcolumntype{C}{>{\centering\arraybackslash}X}

Technically, you only need the redefinition for the right most column, but it doesn't hurt adding it to all.

daleif
  • 54,450