使用动态单元格内容防止多行单元格溢出

使用动态单元格内容防止多行单元格溢出

我有以下表格布局: 布局示意图

该表由 3 列组成 - 一列宽 25%,另外两列占据相同数量的剩余空间(因此每列占 37.5%)。

这些列的内容是从程序变量中获取的,这些变量的长度可能会有很大差异。因此,每个表格单元格都应该能够处理传入的变量字符串中的手动换行符,以及基于内容长度的自动换行符。

我尝试了几种不同的方法,下面提供了一个最接近工作示例的方法,在 tabularx 中使用多行和嵌套表格环境来确定宽度:MWE:

\documentclass[11pt,a4paper]{report}
\usepackage[margin=0.5cm]{geometry}
\usepackage{array,multirow,tabularx,lipsum}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}{|p{4cm}|X|X|}
    \hline
    \multicolumn{1}{|l|}{
        \begin{tabular}[l]{@{}l@{}}
            One Line\\
            Two Lines
        \end{tabular}
    } & 
    \multirow{3}{*}{
        \begin{tabular}[l]{@{}l@{}}
            Lots of text goes here\\
            Lots of text here indeed lel lel lol aaa ss bzxbg
        \end{tabular}
    } & 
    \multirow{3}{*}{
        \begin{tabular}[l]{@{}l@{}}
            Lots of text go here\\
            In fact, tons of text go here\\
            So much text, in fact, that you'd have to do weird cell padding things to fix it\\
            AAAA\\
            BBBB\\
            CCCC\\
            DDDD\\
            EEEE
        \end{tabular}
    } \\
    \cline{1-1}
    \begin{tabular}[l]{@{}c@{}}
        This line here will overlap \\
        AA
    \end{tabular} & & \\ 
    \cline{1-1}
    \begin{tabular}[l]{@{}c@{}}
        One Line\\
        Two Lines\\
        Three Lines
    \end{tabular} & & 
    \\ \hline
\end{tabularx}
\end{document}

此布局存在一些问题,如下所示: 带注释的 LaTeX 问题

虽然手动换行有效,但是较长的行在填满单元格后不会自动中断,而是会溢出到侧面。

右侧的两个单元格也不会导致多行单元格调整大小,而是溢出到底部。(多行内的单元格确实会导致调整大小 - 如果它们更长,则最右边的两个单元格会正确地向下调整大小)

对齐 + 填充也不是 100%。

我的 MWE 中是否存在可以轻松修复的简单错误,或者可以动态调整大小的多行内容的不同方法?通常的答案是将多行内容与最大单元格中的行数相匹配。我无法在这里做到这一点,因为我事先不知道最终会是哪个单元格,因为字段包含动态内容。

答案1

这就是你喜欢的吗?

在此处输入图片描述

您的问题是嵌套表和列multirow中的 s tabularx,它们会覆盖定义的列类型。删除嵌套表格并使用新语法multirow(参见下面的代码)MWE 与您的表一起使用是:

\documentclass[11pt,a4paper]{report}
\usepackage[margin=0.5cm]{geometry}
\usepackage{array,multirow,tabularx,lipsum}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}{|p{4cm}|X|X|}
    \hline
One Line

Two Lines   
    &   \multirow[t]{8}{=}{Lots of text goes here
                           Lots of text here indeed lel lel lol aaa ss bzxbg
                        }
    &   \multirow[t]{8}{=}{Lots of text go here In fact, tons of text go here
                        So much text, in fact, that you'd have to do weird cell padding things to fix it\newline
                        AAAA\newline
                        BBBB\newline
                        CCCC\newline
                        DDDD\newline
                        EEEE\newline
                        }   \\
    \cline{1-1}
 This line here will overlap 

        AA
    &   &               \\
    \cline{1-1}
One Line 

Two Lines

Three Lines
    &   &               \\ \hline
\end{tabularx}
\end{document}

附录: 另一种可能性是不使用\multirow单元格,而是tabular在第一列嵌套表格:

\documentclass[11pt,a4paper]{report}
\usepackage[margin=0.5cm]{geometry}
\usepackage{array,multirow,tabularx,lipsum}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}{|@{} p{4cm}  |X|X|}
    \hline
\begin{tabular}[t]{ >{\raggedright\arraybackslash}p{\dimexpr\hsize-\tabcolsep} }
One Line    \\
Two Lines   \\  \hline
This line here will overlap (no longer) \\
AA          \\ \hline
One Line    \\
Two Lines   \\
Three Lines 
\end{tabular} 
    &   Lots of text goes here
        Lots of text here indeed lel lel lol aaa ss bzxbg
    &   Lots of text go here In fact, tons of text go here So much text, in fact, that you'd have to
        do weird cell padding things to fix it

        AAAA

        BBBB

        CCCC

        DDDD

        EEEE    \\ \hline
\end{tabularx}
\end{document}

在此处输入图片描述

相关内容