Posso chamar uma macro mdoc in-line?

Posso chamar uma macro mdoc in-line?

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 .ifcondiçõ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 .ifspam 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 à .Nmmacro, já que .Sxproduz 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. Aquele SYNTAXé 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 sedscript para fazer isso.

Por exemplo, para eqn, eu tenho um script, myeqnpara converter .EAem .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.

informação relacionada