如何在保持正确宽度的同时正确地对 tabularx 进行多列处理?
当将相对较短的内容插入 时\multicolumn
,可以使用l
、c
或来完成r
。但是,如果内容不适合多列的宽度,则需要 或X
,p
并且必须计算正确的宽度。这个问题问如何做到这一点。
平均能量损失
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\pagestyle{empty}
\newcommand{\sbl}{\tiny Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.}
\begin{tabularx}{0.95\textwidth}{X|X|X|X|X}
\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & c\hfill 4 & c\hfill 5\\\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & c\hfill 4 & \sbl\\\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & c\hfill 4 & \multicolumn{1}{X}{\sbl}\\\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & \multicolumn{2}{X}{\sbl}\\\hline
c\hfill 1 & c\hfill 2 & \multicolumn{3}{X}{\sbl}\\\hline
c\hfill 1 & \multicolumn{4}{X}{\sbl}\\\hline
\multicolumn{5}{X}{\sbl}\\\hline
\end{tabularx}
\end{document}
2\hsize
正如许多地方所建议的那样,使用并没有起到作用。
c\hfill 1 & c\hfill 2 & c\hfill 3 &
\multicolumn{2}{>{\hsize=2\hsize}X}{\sbl}\\\hline % <--- does not work
正确的方法是什么?
答案1
从我找到的各种信息中,我能想到的最好的办法是引入一个新的宏(\Xwdth
)来预先计算大小,同时考虑额外的宽度变量。然后我创建了一个多列包装器\multiX
以方便使用。
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\pagestyle{empty}
\newcommand{\Xwdth}[1]{\dimexpr#1\hsize+#1\tabcolsep+#1\tabcolsep+#1\arrayrulewidth-2\tabcolsep-\arrayrulewidth\relax}
\newcommand{\multiX}[2]{\multicolumn{#1}{>{\hsize=\Xwdth{#1}}X}{#2}}
\newcommand{\multiXr}[2][1]{\multicolumn{#1}{>{\hsize=\Xwdth{#1}\raggedright\arraybackslash}X}{#2}}
\newcommand{\sbl}{\tiny Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante.}
\begin{tabularx}{0.95\textwidth}{X|X|X|X|X}
\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & c\hfill 4 & c\hfill 5\\\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & c\hfill 4 & \sbl\\\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & c\hfill 4 & \multiX{1}{\sbl}\\\hline
c\hfill 1 & c\hfill 2 & c\hfill 3 & \multiX{2}{\sbl}\\\hline
c\hfill 1 & c\hfill 2 & \multiX{3}{\sbl}\\\hline
c\hfill 1 & \multiX{4}{\sbl}\\\hline
\multiX{5}{\sbl}\\\hline
\end{tabularx}
\end{document}