tbl с groff/ntoff: границы перепутаны при достижении конца страницы

В качестве вывода для скрипта, я выдаю инут для 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) это Трудно (из-за возможных многострочных ячеек) предсказать, какой длины будет таблица.

Я хотел бы решение, которое не заставляет меня начинать новую страницу для каждой таблицы.

1 ответ

Решение

Может быть достаточно просто полностью указать таблицу, задав для нее явный заголовок таблицы, который необходимо повторить в начале следующей страницы после разбиения страницы. Вам также может понадобиться использовать макросы -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 |
     +--+---+---+
Другие вопросы по тегам