[Tex/LaTex] Prevent xtab breaking table too soon

page-breakingtablesxtab

Xtab breaks a long table spanning multiple pages too soon — see my screenshot:

Xtab breaking table too soon

The output seems rather unsightly to me. Can I make it take more of the available space?

Alternatively, is there a package for long tables which produces an output in one pass, and uses available paper space more efficently?

A little background

I need a package to do a one-pass compilation of a table which could span multiple pages, for automated report generation. supertabular should be capable of producing a table spanning multiple pages in one pass and, as I understand it, xtab is an improvement over it. longtable package requires multiple passes (the manual mentions 4 passes) to get it right, which might make report generation too slow.

Best Answer

xtabular overestimates the height of each row by 1pt; when the rows contain tall p cells, this is almost negligible; however, when the table has "small" rows, this becomes evident.

A supertabular based "solution" is the following strictsupertabular environment

\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

that needs lines that are never taller than a normal line of text.

Another defect shared by supertabular and xtab is that the column width is not the same across pages (this doesn't happen with longtable).