为什么 supertabular 在各种情况下都会提前分页?

为什么 supertabular 在各种情况下都会提前分页?

在此 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}

相关内容