使用 tabularx 和 multirow 垂直对齐单元格中的文本

使用 tabularx 和 multirow 垂直对齐单元格中的文本

我正在制作一个有多行的表格,我需要垂直对齐图像中显示的单元格内容。我尝试了一些方法,例如修改\vspace但无法正常工作。有人知道我该怎么办吗?非常感谢!!

\usepackage{tabularx}
\usepackage{multirow}
\usepackage{lipsum}

\begin{document}

\newcolumntype{Y}{>{\centering\arraybackslash}X}

\begin{table}[!ht]
\centering
\begin{tabularx}{\textwidth}{|p{1cm}|Y|m{2cm}|}
\hline
\textbf{Task} & \textbf{Description} & \textbf{Points} \\ \hline
\multirow{2}{1cm}{\textbf{TX.x}} & \multicolumn{1}{Y|}{\textbf{Test Header}} & \multirow[b]{2}{2cm}{\centering Example} \\ \cline{2-2}
 & \multicolumn{1}{X|}{\lipsum[1]} &  \\ \hline
\end{tabularx}
\end{table}

\end{document}

AB

答案1

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{lipsum}

\begin{document}

\newcolumntype{Y}{>{\centering\arraybackslash}X}

\begin{table}[!ht]
\centering
\begin{tabularx}{\textwidth}{|p{1cm}|Y|m{2cm}|}
\hline
\textbf{Task} & \textbf{Description} & \textbf{Points} \\ \hline
\multirow{17}{1cm}{\textbf{TX.x}} & \multicolumn{1}{Y|}{\textbf{Test Header}} & \multirow{17}{2cm}{\centering Example} \\ \cline{2-2}
 & \multicolumn{1}{X|}{\lipsum[1]} &  \\ \hline
\end{tabularx}
\end{table}

\end{document}

答案2

您实际上不需要使用multirow。这是一个更简单的代码,将 X 列类型重新定义为m{}而不是p

\documentclass[twocolumn]{article}

\usepackage{tabularx, ragged2e, caption, lipsum}
\setlength{\extrarowheight}{2pt}
\renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}}
\usepackage{makecell}
\renewcommand{\theadfont}{\normalsize\bfseries}

\begin{document}

\begin{table}[!ht]
\centering
\begin{tabularx}{\textwidth}{|>{\centering\bfseries}p{1cm}|X|>{\centering\bfseries\arraybackslash}m{2cm}|}
\hline
Task & \thead{Description} & Points \\ \hline
 & \thead{Test Header} & \\ \cline{2-2}
TX.x & \lipsum[1] & Example \\
 \hline
\end{tabularx}
\end{table}

\end{document} 

在此处输入图片描述

答案3

使用multirow,您必须计算行数。如果您想指定相对于(表格的)行数的位置,我们可以使用{NiceTabular}及其nicematrix命令\Block。此外,您只需使用 键即可hvlines绘制所有预期的规则。

该列与包的列X类似(需要≥6.0)。X{tabularx}tabularxnicematrix

\documentclass{article}
\usepackage{lipsum}
\usepackage{nicematrix}

\begin{document}

\begin{table}[!ht]
\centering
\begin{NiceTabular}{w{c}{1cm}Xw{c}{2cm}}[hvlines]
\RowStyle{\bfseries}
Task & \centering Description & Points \\ 
\Block{2-1}{TX.x} & \centering \bfseries Test Header & \Block{2-1}{Example} \\ 
 & \lipsum[1] &  \\ 
\end{NiceTabular}
\end{table}

\end{document}

上述代码的输出

答案4

  • multirow单元格的内容位于单元格的垂直中心。它位于相邻表格列中声明的文本行数的中心,这些文本行由它们跨越
  • 在您的 MWE 中,您只声明了两行文本,但实际上有 14 行
  • 单元格的最新版本multirow具有选项=,它超过了声明的列宽(参见下面的 MWE)。

无关:

  • 对于列标题,使用\thead来自包的宏makecell
  • 对于单元格内容周围的额外垂直空间,使用宏,该宏也在包\makegapedcells中定义。makecell
  • 所有multicolumn{1}{...}{...}细胞都被移除了,它们是多余的。
\documentclass{article}
\usepackage{geometry}
\usepackage{makecell, multirow, tabularx} % <---
\renewcommand\theadfont{\normalsize\bfseries} % <---
\renewcommand\theadgape{} % <---
\usepackage{lipsum}

\begin{document}
    \begin{table}[ht]
    \centering
    \setcellgapes{3pt} % <---
    \makegapedcells % <---
\begin{tabularx}{\textwidth}{|p{1cm}|X|p{2cm}|} % <---
    \hline
\thead{Task}    & \thead{Description}   & \thead{Points}  % <---                       \\
    \hline
\multirow{14}{=}{\thead{TX.x}} % <---
                & \thead{Test Header}   & \multirow{14}{=}{\centering Example}  \\ 
    \cline{2-2}
                & \lipsum[1]            &                                       \\ 
    \hline
\end{tabularx}
    \end{table}
\end{document}

在此处输入图片描述

相关内容