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