我正在制作一个有多行的表格,我需要垂直对齐图像中显示的单元格内容。我尝试了一些方法,例如修改\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}
答案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}
tabularx
nicematrix
\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}