には多くの利便性があるにもかかわらず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 の互換性については後で検討します。)
補遺:
- 「構文を参照」ビットが追加されると、改行はマクロに何らかの形で固有のものであるように見えます
.Nm
。これは、.Sx
1 つの改行によって、末尾に余分なスペースが生成されるだけだからです。それでも、両方を削除することはできますか? - の後のスペースを削除すると
\*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 の改行には慣れが必要ですが、しばらくするとその便利さがわかってきます。