multicol环境下tabularx宽度超出columnwidth的技术求助
在multicol环境中让表格匹配列宽的解决方案
问题原因
表格超宽的核心原因是**\framebox会给内部内容添加额外的内边距(\fboxsep)和边框宽度(\fboxrule)**,你直接将tabularx的宽度设为1.0\columnwidth,导致表格本身宽度加上framebox的额外空间后,总宽度超出了列宽。
解决方案
有两种简单的修复方式:
方式一:手动扣除framebox的额外空间
将tabularx的宽度设置为列宽减去两倍的(内边距+边框宽度),让总宽度刚好匹配列宽:
\documentclass{scrartcl} \usepackage{tabularx} \usepackage{multicol} \usepackage{showframe} \usepackage{blindtext} \setlength{\parindent}{0mm} \begin{document} \begin{multicols}{2} \framebox{% % 扣除framebox的内边距和边框宽度 \begin{tabularx}{\dimexpr\columnwidth - 2*(\fboxsep+\fboxrule)\relax}{Xrr} \blindtext & Max & Moritz \end{tabularx} } left \hrulefill right \framebox{% \begin{tabularx}{\dimexpr\columnwidth - 2*(\fboxsep+\fboxrule)\relax}{Xrr} \blindtext & Moritz & Max \end{tabularx} } left \hrulefill right \end{multicols} \end{document}
方式二:利用\linewidth自动适配
在\framebox(或\fbox)内部,\linewidth已经自动扣除了内边距和边框的空间,直接将tabularx的宽度设为\linewidth即可:
\documentclass{scrartcl} \usepackage{tabularx} \usepackage{multicol} \usepackage{showframe} \usepackage{blindtext} \setlength{\parindent}{0mm} \begin{document} \begin{multicols}{2} \framebox{% \begin{tabularx}{\linewidth}{Xrr} \blindtext & Max & Moritz \end{tabularx} } left \hrulefill right \framebox{% \begin{tabularx}{\linewidth}{Xrr} \blindtext & Moritz & Max \end{tabularx} } left \hrulefill right \end{multicols} \end{document}
补充说明
两种方式都能让表格外框和left \hrulefill right的宽度完全匹配,其中方式二更简洁,无需手动计算尺寸,依赖LaTeX内部长度变量自动适配。
内容的提问来源于stack exchange,提问作者ipofanes
相关产品推荐
相关产品推荐

