在此 MWE 中,supertabular
提前分页(或列,如果使用twocolumn
)。实际上,第一页仅包含 5 行,而第二页包含 7 行。
\documentclass[twocolumn]{article}
\usepackage[paperheight=2in]{geometry}
\usepackage{supertabular}
\begin{document}
\begin{supertabular}{p{3mm}}
1\\ 2( 3\\ 4( 5\\
1\\ 2\\ 3\\ 4\\ 5\\ 6\\ 7\\
\end{supertabular}
\end{document}
我认为这可能与括号的存在有关,但我可以在没有括号的情况下重现一个不太严重的问题(6 行对 7 行):
\documentclass[twocolumn]{article}
\usepackage[paperheight=2in]{geometry}
\usepackage{supertabular}
\begin{document}
\begin{supertabular}{p{1.7mm}}
1 2\\ 3 4\\ 5 6\\
1\\ 2\\ 3\\ 4\\ 5\\ 6\\ 7\\
\end{supertabular}
\end{document}
在我的文档中,我甚至可以在单元格中不带括号或换行符的情况下重现该问题。然而,作为 MWE,重现这个问题有点困难。
我已经尝试过防止 xtab 过早破坏表格和防止 supertabular* 过早崩溃没有成功。
编辑:这是另一个不涉及单元格换行符的示例,但在\tablehead
:
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{supertabular}
\def\heads{Head Head Head Head Head Head }
\edef\mycont{\heads\heads\heads\heads\heads\heads\heads}
\tablehead{\multicolumn{1}{p{\dimexpr \columnwidth - 12pt}}{\mycont}\\}
\begin{document}
\lipsum[1-2]
\begin{supertabular}{p{1cm}}
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
\end{supertabular}
\end{document}
下面是一个使用\tablefirsthead
(在这种情况下,似乎第二列很长,而不是第一列太短 - 但无论如何它们应该具有相同的长度,并且我也没有收到框警告):
\documentclass[twocolumn]{article}
\usepackage{supertabular}
\tablefirsthead{}
\tablehead{Continued\\}
\begin{document}
\begin{supertabular}{p{1cm}}
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
\end{supertabular}
\end{document}
下面是一个使用\tablecaption
:
\documentclass[twocolumn]{article}
\usepackage{supertabular}
\tablecaption{Caption}
\begin{document}
\begin{supertabular}{p{1cm}}
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
\end{supertabular}
\end{document}
编辑2: 我还发现xtab(或 supertabular)的底部边距太大和长表格(跨越多页),并排放置并尝试了他们的解决方案。
我需要twocolumn
,所以longtable
不起作用;并且第一个链接的最佳解决方案甚至更糟糕:
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{xtab}
\usepackage[nofoot]{geometry}
\tablefirsthead{}
\tablehead{H\\}
\begin{document}
\begin{xtabular}{p{1cm}}
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
\end{xtabular}
\end{document}
我认为我的总结问题是:这是否可以修复,或者如果我希望我的表格正确分解,我应该避免使用supertabular
/吗?xtab
答案1
supertabular
通过删除每行增加 1pt 的错误启发式方法,我获得了稍微好一点的结果。
当然,这并不是一根在所有情况下都能起作用的魔杖。
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{supertabular}
\usepackage{showframe}
% https://www.guitex.org/home/forum/5-tex-e-latex/26889-supertabular-e-twocolumn-riempimento-parziale-altezza-testo?lang=it#26893
\makeatletter
\def\mod@estimate@lineht{%
\ST@lineht=\arraystretch \baslineskp
%\global\advance\ST@lineht by 1\p@
\ST@stretchht\ST@lineht\advance\ST@stretchht-\baslineskp
\ifdim\ST@stretchht<\z@\ST@stretchht\z@\fi
\ST@trace\tw@{Average line height: \the\ST@lineht}%
\ST@trace\tw@{Stretched line height: \the\ST@stretchht}%
}
\newenvironment{strictsupertabular}
{\let\estimate@lineht\mod@estimate@lineht\supertabular}
{\endsupertabular}
\makeatother
\begin{document}
\tablefirsthead{}
\tablehead{H\\}
\begin{strictsupertabular}{p{1cm}}
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
1\\2\\3\\4\\5\\6\\7\\8\\9\\0\\
\end{strictsupertabular}
\end{document}