[Tex/LaTex] Centering mutirow text in a table whose cells contain several lines of text

multirowtablesvertical alignment

I'd appreciate advise in centering a multirow text. In the MWE below the multirow text "spring" is NOT centered over the three rows that it spans.

\documentclass[10pt,a4paper,twoside,open=right,headinclude,footinclude]{scrreprt}
\usepackage{classicthesis-ldpkg}
\usepackage{multirow}

\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}

\begin{document}

\begin{table}[htbf]
 \centering
    \begin{tabular}{|M{20mm}|M{20mm}|M{20mm}|} \hline
        Type & Specs & Uses\\ \hline
        -- & Model 1 & blah blah blah blah blah blah blah blah \\ \hline
        \multirow{3}*{spring} & Model 2 & blah blah blah blah blah blah blah blah \\ \cline{2-3}
        & Model 3 & blah blah blah blah blah blah blah blah \\ \cline{2-3}
        & Model 4 & blah blah blah blah blah blah blah blah \\ \hline
    \end{tabular}
\end{table}

\end{document} 

multirow text not centered

However, in the trivial case where each entry in the table contains only one line, the multirow text is correctly centered as the following MWE shows:

\documentclass[10pt,a4paper,twoside,open=right,headinclude,footinclude]{scrreprt}
\usepackage{classicthesis-ldpkg}
\usepackage{multirow}

\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}

\begin{document}

\begin{table}[htbf]
\centering
    \begin{tabular}{|M{20mm}|M{20mm}|M{20mm}|} \hline
        Type & Specs & Uses \\ \hline
        -- & Model 1 & blah \\ \hline
        \multirow{3}*{spring} & Model 2 & blah \\ \cline{2-3}
        & Model 3 & blah  \\ \cline{2-3}
        & Model 4 & blah \\ \hline
    \end{tabular}

\end{table}

\end{document}

multirow image centered

Best Answer

I suggest that you also load the array package, as it'll help center (vertically) the contents of a cell; in fact, if you load this package, you needn't bother with multirow at all.

Separately, and identical to the thrust of egreg's answer, I would strongly recommend you use the booktabs package to get (much!) better vertical spacing above and below "rules" (horizontal lines), resulting in a much more "professional" look of your tables. In the code and image below, observe the use of the command \cmidrule{1-3} to draw a line across the entire width of the table with a thickness of "cmidrule" rather than the thickness of "midrule". Finally, for the the layout of your tabular material, I'd recommend using the ordinary "p" column type for columns 1 and 2 to get their contents left-justified. :-)

\documentclass{scrreprt}
\usepackage{classicthesis}    % I don't have "classicthesis-ldpkg" on my system...
\usepackage{array,booktabs}
\newcommand{\bla}{blah blah blah blah blah blah blah blah}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\begin{table}[ht]
  \centering
    \begin{tabular}{p{20mm}p{20mm}M{20mm}} \toprule
        Type   & Specs   & Uses \\ \midrule
        --     & Model 1 & \bla \\ \cmidrule{1-3}
               & Model 2 & \bla \\ \cmidrule(l){2-3}
        Spring & Model 3 & \bla \\ \cmidrule(l){2-3}
               & Model 4 & \bla \\ \bottomrule
    \end{tabular}
\end{table}
\end{document} 

enter image description here