该表由 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}
虽然手动换行有效,但是较长的行在填满单元格后不会自动中断,而是会溢出到侧面。
右侧的两个单元格也不会导致多行单元格调整大小,而是溢出到底部。(多行内的单元格确实会导致调整大小 - 如果它们更长,则最右边的两个单元格会正确地向下调整大小)
对齐 + 填充也不是 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}