儘管 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 中的換行符需要習慣,但過了一段時間你就會開始欣賞它們。