Несмотря на многие удобства mdoc
, я считаю, что синтаксис troff все еще слишком насыщен новой строкой или "спагетти" по сравнению с другими языками. Рассмотрим этот пример:
.Sh DESCRIPTION
The
.Nm
utility extracts C interface descriptions from a header file composed
using the SQLite documentation syntax (see
.Sx SYNTAX ) .
It then emits the corresponding set of
.Xr mdoc 7
manpages, one per interface description.
By default,
.Nm
reads from standard input and outputs files into the current directory.
Its arguments are as follows:
Все эти строки для абзаца, начинающего список, для меня довольно странны. Есть ли способ вызывать макросы в строке?
То, что я пробовал, включает использование синтаксиса строк для вызова макросов, поскольку в руководстве groff указано, что строки, диверсии и макросы хранятся в общем пространстве имен. Это дает мне что-то, но условия .if
нав начале макросав конечном итоге не подвергаются обработке и выплевываются сырыми.
.Sh DESCRIPTION
The \*[Nm] utility extracts C interface descriptions from a header file composed
using the SQLite documentation syntax (see \*[Sx SYNTAX]).
It then emits the corresponding set of \*[Xr mdoc 7] manpages, one per interface
description. By default, \*[Nm] reads from standard input and outputs files into
the current directory.
Its arguments are as follows:
Затем я попытался добавить еще одно определение строки, чтобы вставить новую строку. .ds n \!
Это не сработало, и в итоге у меня получилось отвлечение:
.box n
\!
.box
.Sh DESCRIPTION
The \*n\*[Nm] utility extracts C interface descriptions... (see \*n\*[Sx SYNTAX]).
It then...
Теперь .if
спам исчез, но, к сожалению, я получаю случайный, настоящий перевод строки в выводе. Есть ли более совершенный способ вызывать эти макросы? (Мы подумаем о совместимости с mandoc позже.)
Приложение:
- С добавлением бита "see SYNTAX" становится ясно, что новая строка каким-то образом присуща макросу
.Nm
, поскольку.Sx
он создает только случайный конечный пробел. Но можем ли мы избавиться от обоих? - Если я уберу пробел после
\*n\*[Nm]
, то лишняя новая строка исчезнет, но это выглядит... странно в исходнике. Тот, чтоSYNTAX
улучшен вызовом\n*[Sx Syntax ) .]
like в оригинале, но он каким-то образом тоже создает разрыв абзаца.
решение1
Я бы рекомендовал написать sed
для этого сценарий.
Например, для eqn
, у меня есть скрипт, myeqn
, для преобразования .EA
в .EN\n.EQ
:
#!/bin/sed -f
s/^\. *EA\(.*\)$/.EN\n.EQ \1/g
Затем я запускаю это:
myeqn < file.ms | groff -e -ms > main.ps
При необходимости вы можете автоматизировать этот процесс с помощью Makefiles.
P.S. К переносам строк в Groff нужно привыкнуть, но со временем вы начнете их ценить.