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