1

作为脚本的输出,我为tbl. 但是,当表格似乎到达页面末尾时,表格的边框会遍布整个地方。举个例子:

             │            │                │                 │
             │            │                │                 │
             │            │                │                 │
             │            │        ‐ 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)它很难(由于可能的多行单元格)预测表格的长度。

我想要一个不会强迫我为每个表开始新页面的解决方案。

4

1 回答 1

0

通过给它一个显式的表头来完全指定表可能就足够了,它需要在页面拆分后在下一页的开头重复。您可能还需要使用宏-mm-ms,它们也在进行页尾处理,并且需要与它为此目的创建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 |
     +--+---+---+
于 2018-08-25T18:54:19.943 回答