Kann ich ein Mdoc-Makro inline aufrufen?

Kann ich ein Mdoc-Makro inline aufrufen?

Trotz der vielen Annehmlichkeiten von mdocfinde ich, dass die Syntax von troff im Vergleich zu den anderen Sprachen immer noch ein bisschen zu viele Zeilenumbrüche oder „Spaghetti“ enthält. Betrachten Sie dieses Beispiel:

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

All diese Zeilen für einen Absatz, der eine Liste einleitet, finde ich ziemlich seltsam. Gibt es eine Möglichkeit, Makros inline aufzurufen?


Ich habe versucht, die Zeichenfolgensyntax zum Aufrufen der Makros zu verwenden, da in Groffs Handbuch steht, dass Zeichenfolgen, Umleitungen und Makros in einem gemeinsamen Namespace gespeichert sind. Das bringt mich zwar weiter, aber die .ifBedingungen fürzu Beginn der Makroswerden am Ende nicht verarbeitet und roh ausgespuckt.

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

Ich habe dann versucht, eine weitere Zeichenfolgendefinition hinzuzufügen, um eine neue Zeile einzufügen. .ds n \!Das hat nicht ganz funktioniert und führte letztendlich zu einer Umleitung:

.box n
\!
.box

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

Jetzt ist der .ifSpam weg, aber leider bekomme ich in der Ausgabe einen verirrten, tatsächlichen Zeilenumbruch. Gibt es eine perfektere Möglichkeit, diese Makros aufzurufen? (Über die Mandoc-Kompatibilität werden wir später nachdenken.)

Nachtrag:

  • Mit dem hinzugefügten „siehe SYNTAX“-Bit scheint es, dass die neue Zeile irgendwie dem Makro innewohnt .Nm, da das .Sxeine nur ein verirrtes Leerzeichen am Ende erzeugt. Können wir trotzdem beides loswerden?
  • Wenn ich das Leerzeichen danach entferne \*n\*[Nm], ist die zusätzliche neue Zeile weg, aber das sieht in der Quelle ... seltsam aus. Die SYNTAXeine wird durch den Aufruf wie im Original verbessert \n*[Sx Syntax ) .], erzeugt aber irgendwie auch einen Absatzumbruch.

Antwort1

Ich würde empfehlen, sedhierzu ein Skript zu schreiben.

Beispielsweise eqnhabe ich für ein Skript myeqnzum Konvertieren .EAin .EN\n.EQ:

#!/bin/sed -f

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

Dann führe ich Folgendes aus:

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

Sie können dies bei Bedarf mit Makefiles automatisieren.

PS: An die Zeilenumbrüche in Groff muss man sich erst gewöhnen, aber nach einer Weile fängt man an, sie zu schätzen.

verwandte Informationen