¿Puedo llamar a una macro mdoc en línea?

¿Puedo llamar a una macro mdoc en línea?

A pesar de las muchas ventajas de mdoc, encuentro que la sintaxis de troff todavía es demasiado rica en nuevas líneas o "espagueti" en comparación con otros lenguajes. Considere este ejemplo:

.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 estas líneas para un párrafo que comienza una lista me resultan bastante extrañas. ¿Hay alguna manera de llamar macros en línea?


Lo que he intentado implica usar la sintaxis de cadenas para invocar las macros, ya que el manual de groff establece que las cadenas, desvíos y macros se almacenan en un espacio de nombres compartido. Esto me lleva a alguna parte, pero las .ifcondiciones enal inicio de las macrosterminan sin procesar y escupidos crudos.

.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:

Luego intenté agregar otra definición de cadena para insertar una nueva línea. .ds n \!no funcionó del todo, y lo que terminé teniendo fue una distracción:

.box n
\!
.box

.Sh DESCRIPTION
The \*n\*[Nm] utility extracts C interface descriptions... (see \*n\*[Sx SYNTAX]).
It then...

Ahora el .ifspam desapareció, pero desafortunadamente aparece una nueva línea perdida en el resultado. ¿Existe una forma más perfecta de llamar a estas macros? (Pensaremos en la compatibilidad con mandoc más adelante).

Apéndice:

  • Con el bit "ver SYNTAX" agregado, parece que la nueva línea es de alguna manera inherente a la .Nmmacro, ya que .Sxsolo produce un espacio final perdido. Aún así, ¿podemos deshacernos de ambos?
  • Si elimino el espacio después \*n\*[Nm], la nueva línea adicional desaparece, pero eso parece... extraño en la fuente. Este SYNTAXse mejora llamando \n*[Sx Syntax ) .]como en el original, pero de alguna manera también produce un salto de párrafo.

Respuesta1

Recomendaría escribir un sedguión para hacer esto.

Por ejemplo, para eqn, tengo un script myeqnpara convertir .EAen .EN\n.EQ:

#!/bin/sed -f

s/^\. *EA\(.*\)$/.EN\n.EQ \1/g

Luego ejecuto esto:

myeqn < file.ms | groff -e -ms > main.ps

Puede automatizar esto con Makefiles si es necesario.

PD: Es necesario acostumbrarse a las nuevas líneas en Groff, pero empiezas a apreciarlas después de un tiempo.

información relacionada