防止 xtab 过早破坏表格

防止 xtab 过早破坏表格

Xtab 过早地打破了跨越多页的长表格——看我的截图:

Xtab 太快打破表格了

输出结果对我来说不太美观。我可以让它占用更多可用空间吗?

或者,是否存在适用于长表的包,可以一次性产生输出并更有效地利用可用的纸张空间?

一点背景知识

我需要一个包来对一个可以跨越多页的表格进行一次性编译,以便自动生成报告。supertabular应该能够一次性生成一个跨越多页的表格,而且据我所知,这xtab是一个改进。longtable包需要多次传递(手册提到 4 次传递)才能正确完成,这可能会使报告生成太慢。

答案1

xtabular 高估了每行的高度 1pt;当行包含高p单元格时,这几乎可以忽略不计;然而,当表格有“小”行时,这一点就变得明显了。

基于超表格的“解决方案”是以下strictsupertabular环境

\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

要求行的高度不高于正常文本的行。

supertabular 和 xtab 共同存在的另一个缺陷是,不同页面的列宽不一样(longtable 不会出现这种情况)。

答案2

另一个解决方案是使用该\xentrystretch{<decimal-fraction>}命令并将其设置为消极的数字。

来自xtab 手册

该命令\xentrystretch{<decimal-fraction>}可以在表之前使用,以修改后续表中每个条目显然占用的垂直空间量。默认值为\xentrystretch{0.1}指定垂直空间高估 10%。

以下是一个例子:

\documentclass{article}

% The geomery package is used to set the paper size and the margins
\usepackage[a4paper,hmargin={2cm,2cm},vmargin={3cm,3cm}]{geometry}

% The xtab package enables long tables to be automatically broken at page
% boundaries.
\usepackage{xtab}
% prevent tables from being broken too early
\xentrystretch{-0.1}

% increase spacing between table's rows
\renewcommand{\arraystretch}{1.2}

\begin{document}

\section*{List of species}

% specify table's header
\tablehead{%
  \hline%
   \textbf{\#} & \textbf{Latin name} & \textbf{Comment} \\%
}

% specify table's tail
\tabletail{%
  % NOTE: it is necessary to manually end a table with a \hline
  \hline%
}

\begin{xtabular}{|p{0.02\textwidth}|p{0.5\textwidth}|p{0.4\textwidth}|}
  \hline
  1 & \emph{Anemone ranunculoides} L. & \\
  \hline
  2 & \emph{Stellaria nemorum} L. (s. str.)  [\emph{S. nemorum} L. subsp. \emph{nemorum}] & \\
  \hline
  3 & \emph{Stellaria media} (L.) Vill. (s. str.) & \\
  \hline
  4 & \emph{Silene latifolia} Poiret & \\
  \hline
  5 & \emph{Saponaria officinalis} L. & \\
  \hline
  6 & \emph{Polygonum lepathifolium} L. & \\
  \hline
  7 & \emph{Filipendula vulgaris} Moench  [\emph{F. Hexapetala} Gilib.] & \\
  \hline
  8 & \emph{Agrimonia eupatoria} L. & \\
  \hline
  9 & \emph{Geum urbanum} L. & \\
  \hline
  10 & \emph{Potentilla reptans} L. & \\
  \hline
  11 & \emph{Potentilla sterilis} (L.) Garcke & \\
  \hline
  12 & \emph{Rubus caesius} L. & \\
  \hline
  13 & \emph{Ononis spinosa} L. & \\
  \hline
  14 & \emph{Melilotus officinalis} (L.) Lam. & \\
  \hline
  15 & \emph{Medicago sativa} L. & \\
  \hline
  16 & \emph{Trifolium campestre} Schreb. & \\
  \hline
  17 & \emph{Trifolium dubium} Sibth. [\emph{T. Filiforme} L. subsp. \emph{dubium} (Sibth.) Gams] & \\
  \hline
  18 & \emph{Lotus corniculatus} L. & \\
  \hline
  19 & \emph{Anthyllis vulneraria} L. & \\
  \hline
  20 & \emph{Vicia cracca} L. & \\
  \hline
  21 & \emph{Vicia sepium} L. & \\
  \hline
  22 & \emph{Lathyrus sylvestris} L. & \\
  \hline
  23 & \emph{Oenothera biennis} L. & \\
  \hline
  24 & \emph{Oxalis fontana} Bunge & \\
  \hline
  25 & \emph{Impatiens parviflora} DC. & \\
  \hline
  26 & \emph{Impatiens glandulifera} Royle  [\emph{I. roylei} Walp.] & \\
  \hline
  27 & \emph{Euphorbia peplus} L. & \\
  \hline
  28 & \emph{Astrantia major} L. & \\
  \hline
  29 & \emph{Angelica sylvestris} L. & \\
  \hline
  30 & \emph{Pastinaca sativa} L. & \\
  \hline
  31 & \emph{Heracleum sphondylium} L. subsp. \emph{sphondylium}   [\emph{H. sphondylium} L., \emph{H. sphondylium} L. subsp. \emph{Australe} (Hartm.) Neuman] & \\
  \hline
  32 & \emph{Daucus carota} L. & \\
  \hline
  33 & \emph{Hypericum maculatum} L. & \\
  \hline
  34 & \emph{Hypericum perforatum} L. & \\
  \hline
  35 & \emph{Viola tricolor} L. & \\
  \hline
  36 & \emph{Arabidopsis thaliana} (L.) Heynh. & \\
  \hline
  37 & \emph{Barbarea vulgaris} L. & \\
  \hline
  38 & \emph{Sinapis arvensis} L. & \\
  \hline
  39 & \emph{Anagallis arvensis} L. & \\
  \hline
  40 & \emph{Lysimachia vulgaris} L. & \\
  \hline
  41 & \emph{Valeriana officinalis} L.  [\emph{V. o.} L. var. \emph{latifolia} Vahl] & \\
  \hline
  42 & \emph{Knautia longifolia} (Waldst. \& Kit.) Koch & \\
  \hline
  43 & \emph{Knautia arvensis} (L.) Coulter & \\
  \hline
  44 & \emph{Galium mollugo} L. & \\
  \hline
  45 & \emph{Solanum nigrum} L. & \\
  \hline
  46 & \emph{Convolvulus arvensis} L. & \\
  \hline
  47 & \emph{Echium vulgare} L. & \\
  \hline
  48 & \emph{Symphytum officinale} L. & \\
  \hline
  49 & \emph{Verbascum nigrum} L. & \\
  \hline
  50 & \emph{Cymbalaria muralis} Gaertner, Meyer \& Scherbius [\emph{L. Cymbalaria} (L.) Miller] & \\
  \hline
  51 & \emph{Melamphyrum pratense} L.  [\emph{M. Vulgare} Hill] & \\
  \hline
  52 & \emph{Verbena officinalis} L. & \\
  \hline
  53 & \emph{Ajuga genevensis} L. & \\
  \hline
  54 & \emph{Galeopsis speciosa} Mill. & \\
  \hline
  55 & \emph{Salvia pratensis} L. & \\
  \hline
  56 & \emph{Solidago gigantea} Aiton  [\emph{S. gigantea} Aiton subsp. \emph{serotina} (O. Kuntze) Mc Neill] & \\
  \hline
  57 & \emph{Aster amellus} L. & \\
  \hline
  58 & \emph{Conyza canedensis} (L.) Cronq.  [\emph{Erigeron canedensis} (L.) Cronq.] & \\
  \hline
  59 & \emph{Achillea millefolium} L. & \\
  \hline
  60 & \emph{Chamomilla recutita} (L.) Rauschert  [\emph{Matricaria recurita} L., \emph{M. Chamomilla} L. p.p.] & \\
  \hline
  61 & \emph{Matricaria perforata} Mrat [\emph{M. inodora} L., nom. Illeg.,\emph{Tripleurospermum inodorum} Schultz Bip.] & \\
  \hline
  62 & \emph{Tanacetum vulgare} L.  [\emph{Chrysethemum vulgare} (L.) Bernh., non (Lam.) Gaterau] & \\
  \hline
  63 & \emph{Senecio vulgaris} L. & \\
  \hline
  64 & \emph{Cirsium vulgare} (Savi) Tenore  [\emph{C. Lanceolatum} (L.) Scop., non Hill] & \\
  \hline
  65 & \emph{Cirsium arvense} (L.) Scop. & \\
  \hline
  66 & \emph{Centaurea jacea} L. & \\
  \hline
  67 & \emph{Hypochoeris radicata} L. & \\
  \hline
  68 & \emph{Picris hieracioides} L. & \\
  \hline
  69 & \emph{Sonchus arvensis} L. & \\
  \hline
  70 & \emph{Lolium perenne} L. & \\
  \hline
  71 & \emph{Cynosurus cristatus} L. & \\
  \hline
  72 & \emph{Poa trivialis} L. & \\
  \hline
  73 & \emph{Phragmites australis} (Cav.) Trin. ex Steud.  [\emph{P. Communis} Trin.] & \\
  \hline
  74 & \emph{Setaria pumila} (Poir.) Roem. \& Schult.  [\emph{S. lutescens} (Weig.) F. T. Hubb., \emph{S. Glauca} auct., non (L.) PB.] & \\
  \hline
  75 & \emph{Echinochloa crus-galli} (L.) PB.  [\emph{Panicum} c.-g. L.] & \\
  \hline
\end{xtabular}

\end{document}

输出为:

  • \xentrystretch{-0.1}注释掉 这一行:在此处输入图片描述

  • \xentrystretch{-0.1}使用如上例中的 行:在此处输入图片描述

答案3

如果你更喜欢表格(就我而言,\tablehead already defined使用 supertabular 时出现错误)

\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\xtabular} 
  {\endxtabular} 
\makeatother

相关内容