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 与 tblT# 它为此目的创建的宏。

格式为

.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 |
     +--+---+---+