为 lX 列计算多列宽度

为 lX 列计算多列宽度

我有下表:

\documentclass{article}
\usepackage{tabu, longtable}

\begin{document}
\begin{longtabu} to \textwidth {|l|l|l|lX|}

 1 & Column 2 & 3 & \multicolumn{2}{l|}{Description} \\ \hline
 1 & 2 & 3 & A: & Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eget est id enim vehicula sodales et quis ipsum. \\ \hline

 & & & \multicolumn{2}{p{8cm}|}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eget est id enim vehicula sodales et quis ipsum.} \\ \hline

\end{longtabu} 
\end{document}

最后一行使用固定的段落宽度(8cm)。虽然不太合适,但显示了结果应该是什么样子。

我的问题是:是否可以用其他值替换固定值,以便 Latex 为我计算最后两列的正确宽度?

答案1

在此处输入图片描述

实际上我在评论中所说的并不完全正确,tabularx只真正知道列的宽度X和总表格宽度。longtable另一方面知道(并记录在辅助文件中)所有列的宽度,tabu是使用两者的混合,因此我们可以使用数据longtable

这可以包含在一个更好的界面中,但基本上你需要做的是:

\documentclass{article}
\usepackage{tabu, longtable}

\begin{document}
\makeatletter
\newdimen\zzz
\ifx\LT@i\@undefined
\zzz=8cm
\else
\global\zzz\z@
\begingroup
\@tempcnta\z@
\def\LT@entry#1#2{%
\advance\@tempcnta\@ne
\ifnum\@tempcnta=4 \global\advance\zzz#2\relax\fi
\ifnum\@tempcnta=5 \global\advance\zzz#2\relax\fi
}
\LT@i
\endgroup
\advance\zzz-2\tabcolsep
\advance\zzz-\arrayrulewidth
\begin{longtabu} to \textwidth {|l|l|l|lX|}

 1 & Column 2 & 3 & \multicolumn{2}{l|}{Description} \\ \hline
 1 & 2 & 3 & A: & Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eget est id enim vehicula sodales et quis ipsum. \\ \hline

 & & & \multicolumn{2}{l|}{%
\rlap{\parbox[t]{\zzz}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eget est id enim vehicula sodales et quis ipsum.}}}\\ \hline

\end{longtabu} 
\end{document}

相关内容