我可以內聯呼叫 mdoc 巨集嗎?

我可以內聯呼叫 mdoc 巨集嗎?

儘管 troff 有很多便利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 ) .]但它也會以某種方式產生段落中斷。

答案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

如果需要,您可以使用 Makefile 自動執行此操作。

PS Groff 中的換行符需要習慣,但過了一段時間你就會開始欣賞它們。

相關內容