25

My main goal is to disable text justification in tables and just have left-aligned text. I've loaded the array package and defined a custom \newcolumntype like so:

\usepackage{array}
\newcolumntype{x}[1]{>{\raggedright}p{#1}}

When using this in the tabular environment, everything works fine until the last column, when it throws this error:

./temp.tex:96: Misplaced \noalign.
\midrule ->\noalign 
                     {\ifnum 0=`}\fi \@aboverulesep =\aboverulesep \global \@...
l.96     \midrule

?

Using \begin{tabular}{@{} x{28mm} x{20mm} x{20mm} p{25mm} @{}} works fine (but throws an underfull \hbox warning) but using \begin{tabular}{@{} x{28mm} x{20mm} x{20mm} x{25mm} @{}} throws the error above.

Why am I not allowed to use my custom column type on the last column? It seems as if I'm missing something obvious to a trivial solution.

With \begin{tabular}{@{} x{28mm} x{20mm} x{20mm} p{25mm} @{}}:

table with underfull \hbox

user2473
  • 3,108

3 Answers3

31

It's a known issue. When you say \raggedright, the command \\ is redefined. This causes no harm until you want to terminate a table row: LaTeX finds the \\ as defined by \raggedright which doesn't mean the same thing as normally in tabular. Write

\newcolumntype{x}[1]{>{\raggedright\arraybackslash}p{#1}}

and use \newline if you want to terminate a line in one of the cells. Or use your definition and terminate table rows with \tabularnewline.

egreg
  • 1,121,712
12

In addition to the answer by egreg - the command \RaggedRight from ragged2e package does not have this issue. This works:

\usepackage{array},
\usepackage[originalparameters]{ragged2e}  % The option prevents hyphentation rather than making it rare 
\newcolumntype{x}[1]{>{\RaggedRight}p{#1}}
Boris
  • 38,129
1

The simplest solution: add an empty column. Depending on how you've built your table, you can either make it minimal width (with p{size}, for instance) or just let LaTeX figure it out. I used both in a recent paper and it fixed this problem. The only down side is that one of the tables uses \hline and vertical rules, and there's an 'overhang' on the right side of the table. I said, deal with it, life's short.