Tabularx 和多行溢出

Tabularx 和多行溢出

我正在尝试使用以下内容在 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}

相关内容