解説
このマニュアルページは、GNU troff の出力フォーマットについて記述します。 GNU troff が使用する出力フォーマットは、 UNIX のデバイス非依存 troff が使用するものと似ています。 ここでは両者の差のみを記述します。s コマンドへの引数はスケールドポイントです (これは ポイント/n を意味します。 n は DESC ファイル中の sizescale コマンドへの引数です)。 x Height コマンドへの引数もまたスケールドポイントです。
最初の 3 つの出力コマンドは次のようになっていなければなりません:
-
x T device
x res n h v
x init
DESC ファイル中に tcommand 行が存在する場合には、troff は以下の 2 つのコマンドを使用します。
- txxx
- xxx は、任意の文字のシーケンスであり、空白または改行を終端とします; 最初の文字を現在位置で印字し、 現在の水平位置を最初の文字の幅だけ増加させます。 続けて、同じ処理を各文字に対して実行します。 文字の幅は、フォントファイルにおいて与えられたものを 現在のポイントサイズに応じて適切にスケーリングしてから、 水平解像度の倍数となるように丸めます。 特殊文字はこのコマンドでは印字できません。
- un xxx
- t コマンドと同様ですが、各文字の印字後に現在の水平位置に加えられるものが、 文字幅と n の和である点が違います。
単一文字は 8 ビット目がセットされていてもかまわないことに注意してください。 これはフォント名や特殊文字名にもあてはまります。
文字名やフォント名は任意の長さが許されます; ドライバはこれらの長さが 2 文字のみであると仮定してはなりません。
文字を印字する時、その文字は常に現在のフォント中に存在します。 デバイス非依存 troff とは異なり、 ドライバがスペシャルフォントから文字を探す必要はありません。
x デバイス制御コマンドが、拡張されました。
- x u n
- n が~1 の場合、空白の下線付けを開始します。 n が~0 の場合、空白の下線付けを停止します。 これは、nroff モードの cu リクエストで必要であり、他の場合には無視されます。
D 描画コマンドは拡張されています。 -n オプション指定時には、GNU pic はこれらの拡張を使用しません。
- Df n\n
- オブジェクトの塗り潰しに使用する陰影を n に設定します; ここで n は 0 から 1000 の範囲の整数である必要があり、0 は白の塗り潰しを、 1000 は黒の塗り潰しを、 そしてそれらの間の値は中間の陰影を意味します。 この設定は、円の塗り潰し、楕円の塗り潰し、多角形の塗り潰しにのみ適用されます。 デフォルトでは 1000 が使用されます。 塗り潰しオブジェクトが色を持つ場合、 その色でそのオブジェクトの下の全てのものを完全に隠します。 1000 より大きい値や 0 より小さい値も使用される可能性があります: これらの値を指定すると、 現在線やテキストで使用している陰影で塗り潰すことを意味します。 通常はこれは黒ですが、 ドライバによってはこれを変更する手段を提供するものがあります。
- DC d\n
- 現在位置を最左端とする、半径 d の塗り潰された円を描画します。
- DE dx dy\n
- 現在位置を最左端とする、水平半径 dx 垂直半径 dy の塗り潰された楕円を描画します。 delim $$
- Dp $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\n
- $i = 1 ,..., n+1$ に対し、 i 番目の頂点を現在位置 $+ sum from j=1 to i-1 ( dx sub j , dy sub j )$ とする多角形を描画します。 今のところ、GNU pic のみがこのコマンドを使用し、三角形と矩形を生成します。
- DP $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\n
- Dp と同様ですが、多角形の外形のみの描画でなく、塗り潰しも行います。
- Dt n\n
- 現在の線の太さを n マシン単位に設定します。 伝統的に UNIX troff ドライバは、 現在のポイントサイズに比例する線の太さを使用します; Dt コマンドが指定されない場合や、 Dt コマンドに負の n が指定された場合は、ドライバはこの方法を使用する必要があります。 n に 0 を指定すると、利用可能な最小の線の太さを選択します。
これらのコマンドを実行した後、 現在位置をどのように変更するのかという問題が生じます。 GNU pic が生成するコードはこの問題に依存しませんので、 これはたいして重要ではありません。
- \D´c $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$´
の形式、ただし c は c, e, l, a, ~ のいずれでもない描画コマンドが与えられた時、 UNIX troff は各 $x sub i$ を水平の単位で扱い、$y sub i$ を垂直の単位で扱い、 描画されるオブジェクトの幅は $sum from i=1 to n x sub i$ であり、 高さは $sum from i=1 to n y sub i$ であると仮定します。 (高さに関する仮定は、このような D コマンドを \w エスケープシーケンス中で使用した後、 st レジスタおよび sb レジスタを検査することにより確認できます。) この規則は全てのオリジナルの描画コマンドにあてはまりますが、 De は例外です。 Df, Dt コマンドや、影響は少ないですが DE コマンドにおいて、たとえ醜い結果となったとしても、 GNU troff もまた互換性のためにこの規則に従います。 それゆえ、
- Dc $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\n
の形式の D コマンドを実行した後は、現在位置は $( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$ だけ増えます。
x X コマンドへの引数に改行を含めることを許すという、 継続に関する取り決めがあります: x X コマンドへの引数を出力する時、GNU troff は 引数中の + 文字付きの改行を辿ります (通常は改行で引数全体が終端されます); それゆえ、 x X コマンドを含む行の次行が + で開始する場合には、 x X コマンドを含む行の終端となっている改行は x X コマンドへの引数の一部として扱い、 + を無視し、行の + に続く部分を x X コマンドに続く行の部分として扱います。