作为脚本的输出,我为tbl
生成了inut。但是,当表格似乎到达页面的末尾时,表格的边框会遍及整个地方。例如:
│ │ │ │
│ │ │ │
│ │ │ │
│ │ ‐ 1 ‐ │ │
│ │ │ │
│ │ │ │
│ │ │ │
4. The in3 intermediate data structure │
│ │ │ │
In3 is an intermediate language. The goal of the
intermediate language is to provide all the content in the
right │order, in such a way that the output‐filters can
(这是nroff输出)。列边界符合页面底部的表格。
这似乎主要发生在完全指定表格时(例如,对于每一行,在标题中都写了一行),例如:
.TS
allbox,center;
l l l
l l l
l l l
l l l
l l l
^ l l
l l l.
我必须这样做,因为我事先不知道两行何时需要合并的单元格(^
)。
我试图在每个表之前放置一个有条件的新页面,但这并不像看起来那样明显,因为a)nroff(文本输出)和groff(ps输出)似乎不能以相同的方式处理此问题,并且b)由于可能存在多行单元,因此很难预测一张桌子的长度。
我想要一个不强迫我为每个表开始新页面的解决方案。
答案 0 :(得分:0)
通过给它一个显式表头来完全指定该表可能就足够了,在页拆分后下一页的开始处需要重复该表头。您可能还需要使用宏-mm
或-ms
,它们也正在进行页面末尾处理,并且需要与tbl
和T#
宏配合使用为此创建的。
格式为
.TS H
options ;
format .
heading
.TH
data
data
.TE
上面的heading
行可以省略,但是您仍然需要.TH
和.TS H
。
我使用groff 1.22.3和以下示例进行了一些测试,其中14页的强制页面长度(.pl)在-mm
上工作得很好,但在-ms
上却不能很好地工作。
( echo .pl 14
echo .TS H
echo 'allbox,center;'
for ((i=1;i<5;i++)); do echo 'l l l'; done
echo '^ l l'
for ((i=1;i<5;i++)); do echo 'l l l'; done
echo 'l l l.'
echo .TH
for ((i=1;i<11;i++)); do echo -e 'a\tb\tc';done
echo .TE
) >t
tbl t | nroff -mm
这是输出的一部分,删除了空白行:
- 1 -
+--+---+---+
|a | b | c |
+--+---+---+
|a | b | c |
+--+---+---+
- 2 -
+--+---+---+
|a | b | c |
+--+---+---+
- 3 -
+--+---+---+
| | b | c |
|a +---+---+
| | b | c |
+--+---+---+