# Center text vertically in a table with minimum row height

How can I center a text vertically in a table? I've looked into the documentation that suggests to use tabular m{} or b{} tag, but it doesn't work for me.

MWE:

\documentclass[a4paper]{article}

\usepackage{array}
\usepackage{multirow}
\begin{document}
\begin{tabular}{| m{0.2in} | m{0.6in} | m{0.91in} |}
\hline
Lit & Page & Pages\\
\hline
1 & 2 & 5\\
\hline
\end{tabular}
\end{document}


Produced output:

Expected output:

I have read about \raisebox but I don't know how to apply it to the whole table and applying it manually to every cell is tedious.

Update 1: User @Mico suggested to use \setlength\extrarowheight{2pt}, but it changes the row height, so this solution is not precise.

Is it possible to do so without changing the row height?

• To me the expected and actual outputs look the same. Could you perhaps mark the differences? – user121799 Dec 16 '18 at 19:09
• do you need exactly that kind of tabular? – user2478 Dec 16 '18 at 19:11
• Please -- as ususal here -- make your code snippet compilable! – Mensch Dec 16 '18 at 19:11
• Ok, sanitized code and made difference more distinct - the text in expected output is 2px lower than on produced, thus appearing more "centered" to the viewer. – Jzuken Dec 16 '18 at 19:23

Using m or b column types instead of the p type usually only makes a difference if the cell heights are larger than the minimum required height. For your sample table, actually, p, m, and b produce the exact same output.

I think that what you're looking for is the \extrarowheight length parameter. For the tabular environment at hand, executing \setlength\extrarowheight{2pt} seems to deliver roughly the right or desirable vertical centering effect. I say "roughly" deliberately, as what's optimal depends importantly on the words in the cells: are their lots of capital letters, and how many characters have ascenders and/or descenders? Visual formatting is as much an art as it is a craft...

\documentclass[a4paper]{article}
\usepackage{array} % 'multirow' package is not needed
\begin{document}
\begin{tabular}{| m{0.3in} | m{0.6in} | m{0.91in} |}
\hline
Lay & Page & Pages\\
\hline
1 & 2 & 5\\
\hline
\end{tabular}

\medskip
\setlength\extrarowheight{2pt}
\begin{tabular}{| p{0.3in} | p{0.6in} | p{0.91in} |}
\hline
Lay & Page & Pages\\
\hline
1 & 2 & 5\\
\hline
\end{tabular}
\end{document}

• Is it possible to do that without increasing the row height? – Jzuken Dec 16 '18 at 19:53
• @Jzuken - Not that I know of. Sorry. – Mico Dec 16 '18 at 20:04

Do not use \multirow if the text appears exactly between empty lines:

\documentclass[12pt,a4paper]{article}
\usepackage{array,ragged2e}
\let\MC\multicolumn
\newcolumntype{M}[1]{>{\Centering}m{#1}}
\begin{document}

\def\arraystretch{1.25}
\begin{tabular}{| m{0.36in} | m{0.25in} | m{0.2in} | m{0.3in} | m{0.4in} | m{0.39in} | M{0.2in} |
M{0.2in} | M{0.2in} | M{0.6in} | M{0.91in} |}\hline
& & & & & \MC{6}{c|}{}\\\cline{1-5}
& & & & & \MC{6}{c|}{\large Work name}\\\cline{1-5}
& & & & & \MC{6}{c|}{}\\\hline
\MC{2}{|c|}{} & & & & & & Lit & & Page & Pages\\\cline{1-5}\cline{7-11}
\MC{2}{|c|}{} & & & & & & &  & 1 & 5  \\\cline{1-5}\cline{7-11}
\MC{2}{|c|}{} & & & & text & \MC{5}{c|}{} \\\cline{1-5}
\MC{2}{|c|}{} & & & & & \MC{5}{c|}{\large IN-8192} \\\cline{1-5}
\MC{2}{|c|}{} & & & & & \MC{5}{c|}{} \\\hline
\end{tabular}
\end{document}


The cellspace package lets you define minimal vertical spacing at the top and bottom of cells in columns with specifier prefixed with the letter S(or C if you load siunitx):

\documentclass[a4paper]{article}

\usepackage{array}
\usepackage{multirow}
\usepackage{cellspace}
\setlength{\cellspacetoplimit}{4pt}
\begin{document}

\begin{tabular}{| m{0.2in} | m{0.6in} | m{0.91in} |}
\hline
Lit & Page & Pages\\
\hline
1 & 2 & 5\\
\hline
\end{tabular}
\bigskip

\begin{tabular}{| S{m{0.2in}} | S{m{0.6in}} | S{m{0.91in}} |}
\hline
Lit & Page & Pages\\
\hline
1 & 2 & 5\\
\hline
\end{tabular}

\end{document}