我正在尝试使用以下内容在 tabularx 表中将一行跨越两行:
\begin{table}[h]
\caption{Table caption}
\hfill
\begin{tabularx}{\linewidth}{|X|X|X|X|}
\hline \\
\textbf{Column1} & \textbf{Column2} & \textbf{Column3} & \textbf{Column4} \\ \hline
Row1 & Text1 & \multirow{2}{*}{Spanning text that may need to be wrapped in the column} & 500 \\ \hline
Row2 & Text2 & & 500\\ \hline
Row3 & Text3 & SomeOtherText & MoreText \\ \hline
\end{tabularx}
\end{table}
- 跨越的文本溢出
- 跨越单元格之间正在绘制一条水平线
- 周围的线条有些奇怪“列 2”,“第 3 列”,“第 4 栏”
(编译使用pdflatex
)
是什么最簡單解决这个问题的方法是什么?
答案1
以下内容可以帮助您入门:
\multirow{*}
导致单元格的宽度与其内容一样宽,因此溢出。要获得与周围列一样宽的多行单元格,请使用\multirow{=}
。
要去除水平线,请使用\cline{1-2} \cline{4-4}
而不是\hline
。
要修复列标题,请删除\\
第一个\hline
命令后的。
应用这些更改后,您会注意到多行文本溢出到第三个表行。这是因为多行文本占用了 4 行,而您只允许它跨越 2 个表行。为了解决这个问题,我添加了&&&\\
两个空表行。
“第二种情况是条目
\multirow
比周围的正常行高。在这种情况下,多行文本将超出其块。我们现在必须扩大其他行,这是无法\multirow
做到的。”(“3.8 处理高条目”一节,目前位于手册的第 13-15 页multirow
)
\documentclass{article}
\usepackage{tabularx}
\usepackage{multirow}
\begin{document}
\begin{table}[h]
\caption{Table caption}
\begin{tabularx}{\linewidth}{|X|X|X|X|}
\hline
\textbf{Column1} & \textbf{Column2} & \textbf{Column3} & \textbf{Column4} \\ \hline
Row1 & Text1 & \multirow{4}{=}{Spanning text that may need to be wrapped in the column} & 500 \\ &&&\\ \cline{1-2} \cline{4-4}
Row2 & Text2 & & 500\\ &&&\\\hline
Row3 & Text3 & SomeOtherText & MoreText \\ \hline
\end{tabularx}
\end{table}
\end{document}
由于您要求一种更自动化的方法来确保较高的\multirow
文本不会溢出,即使它比它跨越的行高,这里有一种基于相当新的tabularray
包的方法:
“其次,如果多行单元格的高度很大,它将扩大行高,因此它总是避免垂直溢出。”(来自“1.4 多行单元格”一节,目前位于手册的第 4-5 页
tabularray
)
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{table}[h]
\caption{Table caption}
\begin{tblr}{hlines,vlines, colspec={XXXX}}
\textbf{Column1} & \textbf{Column2} & \textbf{Column3} & \textbf{Column4} \\
Row1 & Text1 & \multirow{2}{=}{Spanning text that may need to be wrapped in the column} & 500 \\
Row2 & Text2 & & 500\\
Row3 & Text3 & SomeOtherText & MoreText \\
\end{tblr}
\end{table}
\end{document}
就我个人而言,我会通过调整列宽来解决这个问题。由于只有一列包含较长的文本,而所有其他列仅包含单个单词,因此我会将第 1、2 和 4 列的列说明符更改为l
而不是X
。这将导致以下 MWE 和输出,您不必担心\multirow
文本溢出等,因为它仅占用两行:
\documentclass{article}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{tabularray}
\begin{document}
\begin{table}[h]
\caption{Table caption}
\begin{tabularx}{\linewidth}{|l|l|X|l|}
\hline
\textbf{Column1} & \textbf{Column2} & \textbf{Column3} & \textbf{Column4} \\ \hline
Row1 & Text1 & \multirow{2}{=}{Spanning text that may need to be wrapped in the column} & 500 \\ \cline{1-2} \cline{4-4}
Row2 & Text2 & & 500\\ \hline
Row3 & Text3 & SomeOtherText & MoreText \\ \hline
\end{tabularx}
\end{table}
\begin{table}[h]
\caption{Table caption}
\begin{tblr}{hlines,vlines, colspec={llXl}}
\textbf{Column1} & \textbf{Column2} & \textbf{Column3} & \textbf{Column4} \\
Row1 & Text1 & \multirow{2}{=}{Spanning text that may need to be wrapped in the column} & 500 \\
Row2 & Text2 & & 500\\
Row3 & Text3 & SomeOtherText & MoreText \\
\end{tblr}
\end{table}
\end{document}