tbl с groff / ntoff: границы перепутаны при достижении конца страницы - PullRequest
0 голосов
/ 24 августа 2018

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

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

1 Ответ

0 голосов
/ 25 августа 2018

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