在长表中设置宽度不起作用

在长表中设置宽度不起作用

我想创建一个跨越多页的长表,并将列宽设置为cms:

\documentclass[12pt]{article}
\usepackage{longtable}
\usepackage{seqsplit}
\usepackage[a4paper,landscape,margin=1cm]{geometry}
\usepackage[utf8]{inputenc}

\begin{document}
\begin{longtable}{|p{3,53cm}|p{1,60cm}|p{0,80cm}|p{1,11cm}|p{1,16cm}|p{0,94cm}|p{1,11cm}|p{0,96cm}|p{0,57cm}|p{1,21cm}|p{1,04cm}|p{1,32cm}|p{1,26cm}|p{0,99cm}|p{1,27cm}|p{2,71cm}|p{1,41cm}|}
\hline
\textbf{ \seqsplit{one} } & \textbf{ \seqsplit{tow} } & \textbf{ \seqsplit{three} } & \textbf{ \seqsplit{four} } & \textbf{ \seqsplit{five} } & \textbf{ \seqsplit{six} } & \textbf{ \seqsplit{seven} } & \textbf{ \seqsplit{eight} } & \textbf{ \seqsplit{nine} } & \textbf{ \seqsplit{ten} } & \textbf{ \seqsplit{eleven} } & \textbf{ \seqsplit{twelve} } & \textbf{ \seqsplit{thirteen} } & \textbf{ \seqsplit{fourteen} } & \textbf{ \seqsplit{fifteen} } & \textbf{ \seqsplit{sixteen} } & \textbf{ \seqsplit{seventeen} } \\
\hline
\endhead
\hline
\seqsplit{[email protected]} & \seqsplit{Jjjjjj} & \seqsplit{Ccccccccl} & \seqsplit{ttrrw} & \seqsplit{xxxxxxxx\ 83} & \seqsplit{ooooooo} & \seqsplit{2222\ rrrrrrr\ oo\ trr\ bbbbb\ bbbbbbb\ ttttttP\ -\ 2111\ eeeedsee\ prrr\ vvv\ ll\ eeeirrrr\ xxrrrttt} & \seqsplit{20/02/2011\ 11:39:37} & \seqsplit{0} & \seqsplit{0,00} & \seqsplit{0,00} & \seqsplit{07/07/2011\ 09:00:00} & \seqsplit{14/07/2013\ 11:00:00} & \seqsplit{700} & \seqsplit{4} & \seqsplit{xxxxooowwwaaaaaaaaapaaa/srsssssss} & \seqsplit{50,00} \hline
\end{longtable}
\end{document}

这个文本的问题在于,我有 17 列,而第 17 列出现在横向页面之外。但是,如果我们添加列的宽度,则小于 23 厘米。这是怎么回事?

答案1

您会发现,分配给各列的宽度总和小于文本块的宽度(文本块的宽度为\textwidth),但表格太宽,无法放入文本块。发生这种情况的原因是还有空格列之间的间距为。2\tabcolsep默认值为。以毫米表示,默认的列间空白量大约为。由于您有 17 列,因此\tabcolsep6pt4.2mm超过7厘米额外的水平空间。

该怎么办?您可以执行以下一项或两项操作:(i) 减小部分列宽,以及 (ii) 通过指令减少列间空白量\renewcommand,例如\renewcommand\tabcolsep{4pt}。这些指令的组合应该可以让您达到想要的效果。

答案2

您的列宽总和为 23 厘米,转换为 654.13022pt;文本宽度为 788.14136pt,即 27.7 厘米(A4 纸在纵向模式下宽度为 21 厘米,高度为 29.7 厘米)。

但是,TeX 认为你的表格宽度为 858.13022pt。多余的部分从何而来?让我们计算一下

(858.13022-654.13022)/17 = 12

的确每一个tabular或中的列的longtable前面和后面都有一个宽度为 的空格\tabcolsep;该参数的默认值恰好是 6pt。

您可以减少一些列宽或减少以适合您的表格\tabcolsep

(788.14136-654.13022)/34 = 3.9415

这样做

\begingroup\setlength{\tabcolsep}{3.9pt}
\begin{longtable}{
 |p{3,53cm}
 |p{1,60cm}
 |p{0,80cm}
 |p{1,11cm}
 |p{1,16cm}
 |p{0,94cm}
 |p{1,11cm}
 |p{0,96cm}
 |p{0,57cm}
 |p{1,21cm}
 |p{1,04cm}
 |p{1,32cm}
 |p{1,26cm}
 |p{0,99cm}
 |p{1,27cm}
 |p{2,71cm}
 |p{1,41cm}
 |}
 <table body>
 \end{longtable}\endgroup

您将获得适合文本宽度的 786.73001pt 表格宽度。

我如何计算表格宽度?很简单:我写了一个测试文件

\documentclass{article}
\begin{document}
\sbox0{%
\begin{tabular}{
 |p{3,53cm}
 |p{1,60cm}
 |p{0,80cm}
 |p{1,11cm}
 |p{1,16cm}
 |p{0,94cm}
 |p{1,11cm}
 |p{0,96cm}
 |p{0,57cm}
 |p{1,21cm}
 |p{1,04cm}
 |p{1,32cm}
 |p{1,26cm}
 |p{0,99cm}
 |p{1,27cm}
 |p{2,71cm}
 |p{1,41cm}
 |}
0 & 1 & 2 & 3 & 4 & 5 & 6 &7 &8 &9 & A & b & C & D & F & G & H
\end{tabular}}\the\wd0
\end{document}

生成的 PDF 文件具有

858.13022pt

如果我在命令\setlength{\tabcolsep}{3.9pt}前添加\sbox,我会得到值

786.73001pt

在文档中您将添加\begingroup\endgroup如图所示,以避免\tabcolsep在整个文档中进行相同的设置。

相关内容