我正在处理一个长表格,但遇到了一些问题。我无法在最后一列中换行,因为最后一列使用了多列。因此,文本超出了边距。这是我的代码:
\usepackage{multirow}
\usepackage{makecell}
\begin{tabularx}{\textwidth}{XXXXXX}%[H]
\hline
Header that can be wrapped & Header 2 & Header 3 & Header 4 & Header 5 & Header 6\\
\hline
Data1 & 0.111 & 0.112 & 0.113 & 0.114 & \multirow{3}{*}{This text is too long and can not be wrapped}\\
Data2 & 0.221 & 0.222 & 0.223 & 0.224 & \\
Data3 & 0.331 & 0.332 & 0.333 & 0.334 & \\
\hline
\end{tabularx}
我尝试强制最后一列的线断开,但它会侵入下面的单元格。这是我尝试过的方法:
\usepackage{multirow}
\usepackage{makecell}
\begin{tabularx}{\textwidth}{XXXXXX}%[H]
\hline
Header that can be wrapped & Header 2 & Header 3 & Header 4 & Header 5 & Header 6\\
\hline
Data1 & 0.111 & 0.112 & 0.113 & 0.114 & \multirow{3}{*}{This text is too long and can not be wrapped}\\
Data2 & 0.221 & 0.222 & 0.223 & 0.224 & \\
Data3 & 0.331 & 0.332 & 0.333 & 0.334 & \\
\hline
Data4 & 0.111 & 0.112 & 0.113 & 0.114 & \multirow{2}{*}{Cell bellow}\\
Data5 & 0.221 & 0.222 & 0.223 & 0.224 & \\
\hline
\end{tabularx}
我知道该如何解决这种情况吗?
答案1
当左侧行的高度小于右侧文本的高度时,将它们放在tabular
内的子行中\multicolumn
。
当左侧的行比右侧的文本高时,您可以简单地在命令中使用=
而不是,来自包手册:*
\multirow
这宽度可以指定参数以
=
使用出现的列的定义宽度\multirow
。
我还向您建议了一些改进:使用booktabs
规则和siunitx
数字对齐。
X 列垂直居中文本的代码\renewcommand\tabularxcolumn[1]{m{#1}}
来自Zarko 的这个回答。
\documentclass{book}
\usepackage{array}
\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{U}{S[table-format=1.3,table-column-width=4em]}
\usepackage{booktabs}
\usepackage{tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}% for vertical centering text in X column code from https://tex.stackexchange.com/a/343329/101651
\usepackage{multirow}
\usepackage{siunitx}
\begin{document}
\begin{table}
\begin{tabularx}{\textwidth}{P{1.5cm} *4{U} X}
\toprule
Header that can be wrapped & {Header 2} & {Header 3} & {Header 4} & {Header 5} & Header 6\\
\midrule
\multicolumn{5}{@{}c@{}}{\begin{tabular}{P{1.5cm}*4{U}}
Data1 & 0.111 & 0.112 & 0.113 & 0.114 \\
Data2 & 0.221 & 0.222 & 0.223 & 0.224 \\
Data3 & 0.331 & 0.332 & 0.333 & 0.334 \\
\end{tabular}} &
This text is too long and can not be wrapped long long long long text\\
\midrule
Data4 & 0.111 & 0.112 & 0.113 & 0.114 & \multirow{2}{=}{Cell below}\\
Data5 & 0.221 & 0.222 & 0.223 & 0.224 & \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}