Apesar das muitas conveniências do mdoc
, acho que a sintaxe do troff ainda é um pouco rica em novas linhas ou "espaguete" em comparação com outras linguagens. Considere este exemplo:
.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:
Todas essas linhas para um parágrafo que inicia uma lista são bastante estranhas para mim. Existe uma maneira de chamar macros inline?
O que tentei envolve o uso da sintaxe de strings para invocar as macros, já que o manual do groff afirma que strings, desvios e macros são armazenados em um namespace compartilhado. Isso me leva a algum lugar, mas as .if
condiçõesno início das macrosacabam não processados e cuspidos crus.
.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:
Tentei então adicionar outra definição de string para inserir uma nova linha. .ds n \!
não funcionou muito bem, e o que acabei tendo foi uma diversão:
.box n
\!
.box
.Sh DESCRIPTION
The \*n\*[Nm] utility extracts C interface descriptions... (see \*n\*[Sx SYNTAX]).
It then...
Agora o .if
spam acabou, mas infelizmente recebo uma nova linha perdida na saída. Existe uma maneira mais perfeita de chamar essas macros? (Pensaremos na compatibilidade do mandoc mais tarde.)
Termo aditivo:
- Com o bit "ver SYNTAX" adicionado, parece que a nova linha é de alguma forma inerente à
.Nm
macro, já que.Sx
produz apenas um espaço à direita perdido. Ainda assim, podemos nos livrar de ambos? - Se eu remover o espaço depois de
\*n\*[Nm]
, a nova linha extra desaparecerá, mas isso parece... estranho na fonte. AqueleSYNTAX
é melhorado chamando\n*[Sx Syntax ) .]
como no original, mas de alguma forma também produz uma quebra de parágrafo.
Responder1
Eu recomendaria escrever um sed
script para fazer isso.
Por exemplo, para eqn
, eu tenho um script, myeqn
para converter .EA
em .EN\n.EQ
:
#!/bin/sed -f
s/^\. *EA\(.*\)$/.EN\n.EQ \1/g
Então eu executo isso:
myeqn < file.ms | groff -e -ms > main.ps
Você pode automatizar isso com Makefiles, se necessário.
PS: É preciso se acostumar com as novas linhas de Groff, mas você começa a apreciá-las depois de um tempo.