51

This question may look like a duplicate but, none of the answers given to the possible duplicates contain the answer to this specific case.

I have a tabular, say \begin{tabular}{ccc}. While adding a new line to a cell, I want both resulting lines to be horizontally centered. Is there an elegant solution to this? If not is there a solution to this?

1

7 Answers 7

98

How about using \shortstack inside a cell?

\documentclass{article}

\begin{document} 
\begin{tabular}{ccc}
    one & two & three \\
    one & two & \shortstack{a \\ bb \\ c}\\
\end{tabular}
\end{document}
5
  • Well, this worked like a charm, why didn't I see anyone mentioning this before? Simple, straightforward solution.
    – nimcap
    Dec 20, 2011 at 15:55
  • 1
    +1 for \shortstack.
    – Philipp
    Dec 20, 2011 at 16:11
  • 30
    +1 And to align the content, use \shortstack[r]{...} (r = right align, l = left align, c = center align).
    – Rob W
    May 14, 2012 at 10:52
  • 11
    How to vertically align the content using \shortstack?
    – hengxin
    Oct 26, 2013 at 6:28
  • 1
    @hengxin wrap the shortstack in a \multirow and then adjust like you would a multirow Dec 5, 2020 at 22:56
19

This is an old thread, but there is a new solution.

\usepackage{makecell}
%% tablestart
...
\makecell{line 1 \\ line2}
%% tableend
1
10

If you want the cells to be centered horizontally as well as vertically I suggest the following solution:

\documentclass{article}
\usepackage{booktabs}
\newcommand{\bigcell}[2]{\begin{tabular}{@{}#1@{}}#2\end{tabular}}

\begin{document} 

\begin{tabular}{ccc}
\toprule
a & \bigcell{c}{this schould be a longer line \\ this is a shorter one} & c \\ 
\midrule
 0,9892 & 0,9892 & 0,9892  \\
\end{tabular}

\end{document}
2
  • All answers given work, but I prefer this one as it gives adequate spacing at the top of a table cell (instead of touching the cells top line). Jul 13, 2014 at 11:11
  • Is there a way to decrease the vertical space between the lines in the cell? Using \renewcommand{\arraystretch}{0.8} inside the bigcell definition leads to a bad looking vertical alignment.
    – Yannic
    Mar 2, 2021 at 18:32
4

Another way I discovered is to use matrix. Not as simple as Christian's answer but provides vertical alignment along columns.

\documentclass{article}
\usepackage{amsmath}

\begin{document} 
\begin{tabular}{ccc}
    one & two & three \\
    one & two & $\begin{matrix} \text{a} \\ \text{bb} \\ text{c} \end{matrix}$ \\
\end{tabular}
\end{document}
2

An easy solution with tblr environment of the new LaTeX3 package tabularray:

\documentclass{article}

\usepackage{tabularray}

\begin{document}

\begin{tblr}{ccc}
    one & two & three \\
    one & two & {a \\ bb \\ c}\\
\end{tblr}

\end{document}

enter image description here

1

You can also use \parbox like this:

\parbox[c][][c]{width}{\centering very long \\ line}

This has an advantage over \shortstack when also using \rowcolors to color table rows with alternating colors. \parbox results in a cell that has a single consistent color, and the next table row will have the alternative color. However, using \shortstack leads to two consecutive rows with the same color.

1
1

With {NiceTabular} of nicematrix.

\documentclass{article}

\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{ccc}
    one & two & three \\
    one & two & \Block[t]{}{a \\ bb \\ c}\\
\end{NiceTabular}

\end{document}

Output of the above code

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .