5

I have the following sample code in overleaf to generate a table.

\documentclass[hidelinks,a4paper,12pt,oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[margin=1in]{geometry}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{array}
    \newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
    \newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}

\usepackage{stackengine}
    \newcommand\xrowht[2][0]{\addstackgap[0.5\dimexpr#2\relax]{\vphantom{#1}}}
    
\title{table}
\begin{document} 
\maketitle


\begin{table}[ht]
\footnotesize
    \centering
    \begin{tabular}{|P{0.75cm}|P{1.25cm}|P{0.75cm}|P{0.75cm}|P{0.75cm}|P{0.75cm}|P{0.75cm}|P{1cm}|P{1cm}|P{1cm}|P{1cm}|P{0.75cm}|}
    \hline\xrowht[()]{15pt}
         \multirow{2}{*}{Test} & \multirow{2}{*}{Name} & \multicolumn{3}{c|}{Domain} & \multirow{2}{*}{Cell} & \multicolumn{4}{c|}{MLR} & \multirow{2}{*}{$C_1$} & \multirow{2}{*}{$C_2$}\\
         \cline{3-5}\cline{7-10}\xrowht[()]{15pt}
         No & & x & y & z & Size & $\dot{m_t}$ & $\dot{m}_{in}$ & $\dot{m}_{out}$ & $\dot{m}_{avg}$ & & \\
         \hline\xrowht[()]{15pt}
         1 & Mass1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 \\
         \hline\xrowht[()]{15pt}
         2 & Mass2 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & \multicolumn{2}{c|}{0.1}  & 0.1 & 0.1 & 0.1 \\
         \hline
         \end{tabular}
         \vspace{0.5cm}
    \caption{Tests}
\end{table}


\end{document}

This gives me,

enter image description here

Problem: I cannot get the vertical alignement of the texts inside the table to center or any other position for that matter. For example, the texts "Test No", "Name", "Cell Size", "C1" and "C2", are supposed to be vertically center aligned. Further I see that using \hline\xrowht[()]{15pt} gives me different box width ,see "Domain" and "MLR" boxes. Can anybody please help me setup this table in a proper way?

Thanks everyone

Emotional Damage
  • 138
  • 1
  • 1
  • 9

2 Answers2

7

Instead of manually messing with the row height of your table, you could change the \arraystretch and all your cells will automatically be centred

Some other points:


\documentclass[hidelinks,a4paper,12pt,oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[margin=1in]{geometry}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{array}
    \newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
    \newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}

\usepackage{caption}
    
\title{table}
\begin{document} 
\maketitle



\begin{table}[ht]
\renewcommand{\arraystretch}{2}
\footnotesize
    \centering
    \begin{tabular}{|P{0.75cm}|P{1.25cm}|P{0.75cm}|P{0.75cm}|P{0.75cm}|P{0.75cm}|P{0.75cm}|P{1cm}|P{1cm}|P{1cm}|P{1cm}|P{0.75cm}|}
    \hline
         \multirow{2}{0.75cm}{\centering Test\\ No} & \multirow{2}{*}{Name} & \multicolumn{3}{c|}{Domain} & \multirow{2}{0.75cm}{\centering Cell\\ Size} & \multicolumn{4}{c|}{MLR} & \multirow{2}{*}{$C_1$} & \multirow{2}{*}{$C_2$}\\
         \cline{3-5}\cline{7-10}
          & & x & y & z & & $\dot{m_t}$ & $\dot{m}_{in}$ & $\dot{m}_{out}$ & $\dot{m}_{avg}$ & & \\
         \hline
         1 & Mass1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 \\
         \hline
         2 & Mass2 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & \multicolumn{2}{c|}{0.1}  & 0.1 & 0.1 & 0.1 \\
         \hline
         \end{tabular}
%         \vspace{0.5cm}
    \caption{Tests}
\end{table}


\end{document}

enter image description here

  • If I look closely, the cells content is not exactly vertically centered (visible in rows 1 and 2), this is an issue with `\arraystretch` :-( worth a mention: https://tex.stackexchange.com/a/166370/32813 – escalator May 20 '21 at 14:31
1

With the tabularray package it is now much easier to merge cells and have them centred automatically:

\documentclass[hidelinks,a4paper,12pt,oneside]{article}
\usepackage[margin=1in]{geometry}
\usepackage{caption}
\usepackage{tabularray}
\title{table}
\begin{document} 
\maketitle

\begin{table}[ht]
\footnotesize
    \begin{tblr}{
      colspec = {*{12}{X}},
      cells={halign=c},
      vlines,
      hlines,
      stretch=2
    }
    \SetCell[r=2]{} Test No & \SetCell[r=2]{} Name & \SetCell[c=3]{} Domain && & \SetCell[r=2]{} Cell Size & \SetCell[c=4]{} MLR &&&& \SetCell[r=2]{} $C_1$ & \SetCell[r=2]{} $C_2$\\
    & & x & y & z & & $\dot{m_t}$ & $\dot{m}_{in}$ & $\dot{m}_{out}$ & $\dot{m}_{avg}$ & & \\
    1 & Mass1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 \\
    2 & Mass2 & 0.1 & 0.1 & 0.1 & 0.1 & 0.1 & \SetCell[c=2]{} 0.1 &  & 0.1 & 0.1 & 0.1 \\
    \end{tblr}
    \caption{Tests}
\end{table}

\end{document}

enter image description here