Могу ли я вызвать макрос mdoc как встроенный?

Могу ли я вызвать макрос mdoc как встроенный?

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

Связанный контент