最近我想在一个页面上创建一个包含许多列的大型表格。为了简化问题,我有一个最小工作示例,如下所示:
\documentclass{article}
\usepackage[paperheight=20.1cm, paperwidth=60cm]{geometry}
\usepackage{tabularx}
\begin{document}
\begin{table}[h]
\centering
\begin{tabularx}{\linewidth}{XXXXXXXXXXXXX}
a&a&a&a&a&a&a&a&a&a&a&a&a
\end{tabularx}
\end{table}
\end{document}
当我编译此 tex 文件时,我Overfull \hbox (5.00002pt too wide) in paragraph at lines**
多次收到警告。并且输出不是我预期的:
但是,当我将 改为 时XXXXXXXXXXXXX
,p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}p{3cm}
一切又恢复正常。似乎列的宽度X
没有正确确定。你能解释一下为什么会发生这种情况吗?
答案1
正如问题下的评论中所述,tabularx
如果您使用,它会给出提示。debugshow
在这种情况下,它会进行特定测试以防止某些内部计算超出范围\maxdimen
并产生错误和虚假结果。但在这种情况下,它过于谨慎,在没有必要的情况下后退。如果您只是删除测试,它会做正确的事情。
这里可能还有改进的空间,但这适用于您的测试文件
\documentclass{article}
\usepackage[paperheight=20.1cm, paperwidth=60cm]{geometry}
\usepackage[debugshow]{tabularx}
\makeatletter
\def\TX@arith{%
\TX@false
\@tempdimb\maxdimen
\divide\@tempdimb\TX@cols
% \ifdim\TX@col@width>\@tempdimb
% \TX@typeout@{Don't exceed \maxdimen}%
% \wd\@tempboxa\maxdimen
% \fi
\ifdim\TX@old@table=\wd\@tempboxa
\TX@col@width\TX@old@col
\TX@typeout@{Reached minimum width, backing up.}%
\else
\dimen@\wd\@tempboxa
\advance\dimen@ -\TX@target
\ifdim\dimen@<\TX@delta
\TX@typeout@{Reached target.}%
\else
\ifnum\TX@cols>\@ne
\advance\TX@cols\m@ne
\fi
\divide\dimen@\TX@cols
\advance\dimen@ -\TX@col@width
\ifdim \dimen@ >\z@
\PackageWarning{tabularx}%
{X Columns too narrow (table too wide)\MessageBreak}%
\TX@col@width\TX@error@width\relax
\else
\TX@old@col\TX@col@width
\TX@old@table\wd\@tempboxa
\TX@col@width-\dimen@
\TX@true
\fi
\fi
\fi}
\makeatother
\begin{document}
\begin{table}[h]
\centering
X\dotfill X
\setlength\tabcolsep{3pt}
\begin{tabularx}{\linewidth}{XXXXXXXXXXXXX}
a&a&a&a&a&a&a&a&a&a&a&a&a
\end{tabularx}
\end{table}
\end{document}
答案2
显然,您需要至少 215pt 的线宽,这可能是因为您希望某些内容位于 13 列中。此操作没有任何错误:
\documentclass{article}%
\usepackage[paperheight=20.1cm, paperwidth=60cm]{geometry}%
\usepackage{tabularx}%
\begin{document}%
\begin{table}[h]%
\centering%
\begin{tabularx}{215pt}{XXXXXXXXXXXXX}%The maximum without a mistake is exactly {1170pt}. I cannot tell why.
a&a&a&a&a&a&a&a&a&a&a&a&a%
\end{tabularx}%
\end{table}%
\end{document}%
@Steven 提出的观点表明表格内有边距,并且 13 列太多,因为这也是可行的,有 12 列,并且附加了输出。
\documentclass{article}%
\usepackage[paperheight=20.1cm, paperwidth=60cm{geometry}%
\usepackage{tabularx}%
\begin{document}%
\begin{table}[h]%
\centering%
\begin{tabularx}{\linewidth}{XXXXXXXXXXXX}%
a&a&a&a&a&a&a&a&a&a&a&a%
\end{tabularx}%
\end{table}%
\end{document}%