### How to alter the alignment of tabular cells

One often needs to alter the alignment of a tabular `p` (‘paragraph’) cell, but problems at the end of a table row are common. With a `p` cell that looks like:

>     ... & \centering blah ... \\

one is liable to encounter errors that complain about a “misplaced `\``noalign`” or “extra alignment tab”, or the like. The problem is that the command `\\` means different things in different circumstances: the `tabular` environment switches the meaning to a value for use in the table, and `\``centering`, `\``raggedright` and `\``raggedleft` all change the meaning to something incompatible. Note that the problem only arises in the last cell of a row: since each cell is set into a box, its settings are lost at the `&` (or `\\`) that terminates it.

The simple (old) solution is to preserve the meaning of `\\`:

>     \newcommand\PBS[1]{\let\temp=\\%
>       #1%
>       \let\\=\temp
>     }

which one uses as:

>     ... & \PBS\centering blah ... \\

(for example).

The technique using `\``PBS` was developed in the days of LaTeX 2.09 because the actual value of `\\` that the `tabular` environment uses was only available as an internal command. Nowadays, the value is a public command, and you can in principle use it explicitly:

>     ... & \centering blah ... \tabularnewline

which may be incorporated into a simple macro as:

>     \newcommand{\RBS}{\let\\=\tabularnewline}

and used as

>     ... & \centering\RBS blah ... \\

(note, you Preserve backslash with `\``PBS` before the command that changes it, and Restore it with `\``RBS` after the command; in fact, `\``RBS` is marginally preferable, but the old trick lingers on).

The `\``PBS` and `\``RBS` tricks also serve well in array package “field format” preamble specifications:

>     \begin{tabular}{... >{\centering\RBS}p{50mm}}
>     ...

or

>     \begin{tabular}{... >{\PBS\centering}p{50mm}}
>     ...

In the tabularx and tabulary packages, there’s a command `\``arraybackslash` that has same effect as `\``RBS` (above); so in those packages, one might say:

>     \begin{tabular}{... >{\centering\arraybackslash}p{50mm}}
>     ...

in place of the example above; in fact, the very latest (2003/12/01) release of array.sty also provides a `\``tabularnewline` command, that has the “basic tabular/array” meaning of ‘\\’. The command does rather lack brevity, but at least you don’t have to define it for yourself.

`array.sty`
  Distributed as part of macros/latex/required/tools (gzipped tar, browse)
`tabularx.sty`
  Distributed as part of macros/latex/required/tools (gzipped tar, browse)
`tabulary.sty`
  macros/latex/contrib/tabulary (gzipped tar, browse)

This question on the Web: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=tabcellalign