I would like to create a table with some columns' width specified, while the text in those columns should be centered both horizontally and vertically. I found out that
\usepackage{array}
\begin{tabular}{| c | c | m{5cm} |}
vertically centers the text in the last column, but justifies it horizontally (like text in normal paragraphs).
Update: With Jake's method, it seems both \\
and \hline
cause an error. How to fix it?
Best Answer
A comprehensive solution (based on this answer) is to define new column types (say, L, C, and R) that take their width as argument and do the following:
Issue
\raggedright
,\centering
, or\raggedleft
to achieve the desired horizontal alignment,Declare
\let\newline\\
to allow to use\newline
for manual line breaks within a cell (note that\centering
& friends change the meaning of\\
-- this is the problem with Jake's solution),Issue
\arraybackslash
(i.e.,\let\\\tabularnewline
) to allow (again) to use\\
for ending rows,Issue
\hspace{0pt}
to allow the first word in a cell to be hyphenated.In the example below, the new column types are based on (vertically centered) m-columns, but one may use (top- or bottom-aligned) p- or b-columns as well.