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の改行は慣れるのに時間がかかりますが、時間が経つとその価値を感じ始めます。

関連情報