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