tbl with groff/ntoff: 到达 end-of-page 时边界 messed-up
tbl with groff/ntoff: borders messed-up when reaching end-of-page
作为脚本的输出,我为 tbl
生成输入。但是,当 table 似乎到达页面末尾时,table 的边框会到处都是。例如:
│ │ │ │
│ │ │ │
│ │ │ │
│ │ ‐ 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-output)。 column-borders符合页面底部的table。
这似乎主要发生在完全指定table时(即对于每一行,在header中写一行),例如:
.TS
allbox,center;
l l l
l l l
l l l
l l l
l l l
^ l l
l l l.
我必须这样做,因为我事先不知道两行何时需要合并单元格 (^
)。
我试图在每个 table 之前放入一个有条件的新页面,但这没有看起来那么明显,因为 a) nroff(文本输出)和 groff (ps-output) 不似乎以同样的方式处理这个问题,并且 b) 很难(由于可能存在 multi-line 个单元格)预测 table 的长度。
我想要一个不强迫我为每个 table 开始一个新页面的解决方案。
通过给它一个明确的 table header 来完全指定 table 可能就足够了,这需要在一页之后的下一页的开头重复分裂。您可能还需要使用宏 -mm
或 -ms
,它们也在进行 end-of-page 处理,并且需要 co-operate 与 tbl
和 T#
它为此目的创建的宏。
格式为
.TS H
options ;
format .
heading
.TH
data
data
.TE
上面的heading
行可以省略,但是你还需要.TH
和.TS H
.
我用 groff 1.22.3 和以下示例进行了一些测试,强制页面长度 (.pl) 为 14 行在 -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 |
+--+---+---+
作为脚本的输出,我为 tbl
生成输入。但是,当 table 似乎到达页面末尾时,table 的边框会到处都是。例如:
│ │ │ │
│ │ │ │
│ │ │ │
│ │ ‐ 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-output)。 column-borders符合页面底部的table。
这似乎主要发生在完全指定table时(即对于每一行,在header中写一行),例如:
.TS
allbox,center;
l l l
l l l
l l l
l l l
l l l
^ l l
l l l.
我必须这样做,因为我事先不知道两行何时需要合并单元格 (^
)。
我试图在每个 table 之前放入一个有条件的新页面,但这没有看起来那么明显,因为 a) nroff(文本输出)和 groff (ps-output) 不似乎以同样的方式处理这个问题,并且 b) 很难(由于可能存在 multi-line 个单元格)预测 table 的长度。
我想要一个不强迫我为每个 table 开始一个新页面的解决方案。
通过给它一个明确的 table header 来完全指定 table 可能就足够了,这需要在一页之后的下一页的开头重复分裂。您可能还需要使用宏 -mm
或 -ms
,它们也在进行 end-of-page 处理,并且需要 co-operate 与 tbl
和 T#
它为此目的创建的宏。
格式为
.TS H
options ;
format .
heading
.TH
data
data
.TE
上面的heading
行可以省略,但是你还需要.TH
和.TS H
.
我用 groff 1.22.3 和以下示例进行了一些测试,强制页面长度 (.pl) 为 14 行在 -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 |
+--+---+---+