スポンサーリンク

GROFF_OUT

名称
解説
言語のコンセプト
コマンドリファレンス
後処理
使用例
互換性
関連ファイル
関連項目
作者

名称

groff_out − groff の中間出力フォーマット

解説

こ の マニュアルページは、GNU の roff(7) テキスト処理システムの中間出力 フォーマットについて記述しています。この出力は、デバイスの後処理プロ グ ラムに渡される前に、GNU troff(1) プログラムの実行によって生成されます。

GNU の roff 処理系である groff(1) は troff を包むラッパプログラム で あ り、この troff は自動的に後処理プログラムを呼び出すため、通常この出力は 目には触れません。そのため、これは groff システムにおいて 中間的と呼 ば れます。 groff プログラムには後処理を行わないようにする -Z オプションが あり、このオプションをつけることで troff を手動で呼び出した時のように生 成された中間出力を標準出力に送ることができます。

こ の文書において、 troff 出力という用語は GNU troff プログラムによる出 力を指し、 中間出力という用語は後処理プログラム用にこの出力を下ごしらえ す るパーサによって受け付けられる言語を指します。このパーサは空白をうま く処理し、また旧式の要素を互換性を保つために実装しています。そ れ 以 外 は、 ど ち らの形式も同じものです。 groff 以前の版の roff は、 古典的な troff と表記されます。

中間出力のコンセプトの一番の目的は、すべてのデバイスに対して共通のプ ロ グ ラミングインタフェースを提供することによって、後処理プログラムの開発 を容易にすることです。これは、 groff(7) 言語とはまったく異なった独自 の 言語です。 groff 言語は、テキスト処理用の高レベルなプログラミング言語で あるのに対し、中間出力言語は、文字表示や描画のためにページ上のすべて の 位置を指定する、低レベルのアセンブリ言語のような言語です。

groff によって生成される中間出力はかなり読みやすいのですが、一方 古典的 な troff の出力は、奇妙な習慣のために理解しづらいものでした。この 習 慣 は、まだ GNU troff でサポートされてはいますが、もう使われていません。

言語のコンセプト

troff の実行中に、roff への入力は、指定されたデバイスのどの位置に何が印 字されるのかという情報へと細かく分解されます。したがっ て、 中 間 出 力 フォー マットの言語はとても小さなものです。その唯一の要素は、引数あり、 もしくは引数なしのコマンドです。この文書中において、「コマンド」とい う 用 語は、文書整形に使われる roff 言語ではなく、常に中間出力言語を指しま す。これらのコマンドには、テキストの表示や図の描画、デバイスの制御を 行 うものがあります。

区切り

古 典 的な troff 出力には、空白に関して奇妙な要求事項があります。しかし groff 出力のパーサは、空白を最大限に省略可能とすることによって、空白 を よりうまく処理します。空白文字、つまり tab, space, newline 文字は、常に 構文上の意味を持ちます。これらの文字は印字可能ではありません。 な ぜ な ら、 出 力 に含まれる空白は、すべて位置コマンドによって空けられるからで す。

どの spacetab の連続も、1 つの 構文上の 空白として扱われます。こ れ に よってコマンドと引数とが区切られます。しかしこれは、コマンドコードと その引数とが、空白がないためにぶつかり合ってしまう場合のみ必要となり ま す。 ほとんどの場合、これは可変長のコマンド名や引数、引数リスト、コマン ド群が一緒に出てきた時に発生します。固定長の既知のコマンドと引数の場 合 は、構文上の空白によって区切る必要はありません。

改 行も構文上の要素です。すべてのコマンド引数の後には、空白やコメント、 改行文字を続けることができます。したがって 構文上の改行は、省略可能な構 文 上の空白の後に、省略可能なコメントが続き、これに改行文字が続いたもの から構成されると定義されます。

位置指定やテキスト用の普通のコマンドは 1 文字から成り、既定数の引数を取 り ます。歴史的な理由により、パーサはそれらのコマンドを同じ行に重ねるこ とを許しています。しかし幸いなことに、groff の中間出力において、少な く とも 1 つの引数を持つすべてのコマンドの後には改行が続くので、非常に読み やすくなっています。

その他のコマンド — 描画やデバイス制御用のもの — は、さらに複雑な構造 を し ています。長いコマンド名のものもありますし、可変個の引数を取るものも あります。したがって、すべての Dx コマンドには、設計上、最後の引 数 の後に 構文上の改行が必要です。ただ 1 つのコマンド ‘x X’ だけは、いくつ かの行に渡って引数を置くことができますが、その他のすべてのコマンド は、 コマンドと同じ行にすべての引数がなければなりません。

空 行、 す なわち空白やコメントだけからなる行は、どこにあっても構いませ ん。それらは単に無視されます。

引数の単位

コマンドの中には、ある測定単位で表された値とみられるけれど、 スケール指 示 子に対応する文字が、出力コマンド引数と一緒に書かれていない整数引数を 取るものがあります。このトピックに関するさらなる情報は、 groff(7) と groff info ファイルを参照してください。ほとんどのコマンドは、デバイスの 基本単位であるスケール指示子 u を想定しており、いくつかのコマンドはデバ イ スの スケールドポイント単位である z を想定していますが、色コマンドな どの他のコマンドは単なる整数を期待しています。これらのスケール 指 示 子 は、 指定されたデバイスに関連したものであることに注意してください。それ らは、デバイスの DESC ファイルで指定されたパラメータによって定義され て います。 groff_font(5) を参照してください。

単 一文字は、8 ビット目が設定されていても構いません。これはフォント名や 特殊文字名も同じです。文字名やフォント名は、任意の長さにできます。印 刷 される文字は、常に現在のフォント中に存在するものです。

文 字列引数は常に、次に続く空白文字 (空白、タブ、改行) によって終了しま す。埋め込まれた # 文字は引数の一部とみなされ、コメントコマンドの始まり と は解釈されません。整数引数は常に、次に続く数字以外の文字によって終了 します。そしてその文字は、次の引数またはコマンドの最初の文字とみなさ れ ます。

文書部分

正しい中間出力の文書は、導入部と本体の 2 つの部分から構成されます。

導 入部の役割は、3 つの正確に指定されたコマンドを用いて、一般的なデバイ スパラメータを設定することです。 groff の導入部は、以下の 3 行から ( こ の順番で) 構成されていることが保証されています:

x T device
x res
n h v
x init

この引数の組は、 デバイス制御コマンドの節で概略が説明されています。しか し、中間出力フォーマット用のパーサは、追加の空白やコメントも同様に受 け 入れることができます。

本 体は、文書データの処理を行う主要な節です。構文上は、導入部で使れたコ マンド以外のコマンドが連続したものとなります。処理は、最初の x stop が あるとすぐに終了します。すべての groff 中間出力の最終行には、このコマン ドが必ずあります。

意味的には、本体はページ指向です。新しいページは p コマンドによって開始 さ れます。位置指定、文字出力、描画コマンドは、常に現在のページに対して 行われます。ですから、それらのコマンドは最初の p コマンドの前には現れま せ ん。 ( HV コマンドによる) 絶対位置指定は、現在のページに相対的に 行われ、それ以外の位置指定は、現在のページの現在位置に相対的に行われ ま す。

コマンドリファレンス

この節では、すべての中間出力コマンドや古典的なコマンド、 groff 拡張につ いて記述しています。

コメントコマンド

#anything⟨end_of_line⟩

コメントです。 # 文字から次の改行文字までのすべての文字を無視し ます。

こ のコマンドは、中間出力内にコメントを記述する唯一の方法です。それぞれ のコメントの前には、任意個の 構文上の 空白があっても構いません。また す べてのコマンドは、コメントによって終了できます。

単純コマンド

こ の小節では、1 文字から成り、既定個の引数を取るコマンドを説明していま す。そのほとんどは、位置指定とテキスト出力のコマンドです。これらのコ マ ンドは、空白をうまく処理します。状況に応じて、 構文上の空白は、コマンド 文字とその引数の前にも、後にも、その間にも挿入できます。これらすべて の コ マンドは、重ねることができます。つまり、同じ行に他の単純コマンドが前 にあってもいいですし、他の任意のコマンドが後に続いても構いません。区 切 り に使われる構文上の空白は、2 つの整数引数が衝突する時や、前に続く引数 が文字列引数で終わる時にのみ必要となります。

C xxx⟨white_space⟩

特殊な groff 文字名 xxx を印字します。任意の長さの文字名を指 定 可 能とするために、その後には構文上の空白または改行が必要となり ます。文字は現在の印字位置に印字され、文字の大きさは フォ ン ト ファイルから読み込まれます。印字位置は変化しません。

c c

現在の印字位置に、文字 c を印字します。文字の大きさはフォ ントファイルから読み込まれます。印字位置は変化しません。

f n

フォントをフォント番号 n (非負整数) に設定します。

H n

現在のページの左端から絶対水平位置 n (非負整数、単位は基本 単位 u) に移動します。

h n

水平方向、右に、基本単位 un (非負整数) だけ移動しま す。 [54] では n に負の値も指定できますが、 groff ではこれは 使 用していません。

m color_scheme [component ...]

異 なるカラースキームを用いて、テキスト (グリフ) や線図、図形オ ブジェクトの輪郭の色を設定します。これと類似した、図形オブ ジェ ク トを色で塗り潰すためのコマンドは DF です。色の成分は、0 から 65536 までの整数で指定します。色の成分数とその意味は、カラー ス キー ムによって異なります。これらのコマンドは、groff のエスケー プシーケンス \m によって生成されます。これによって位置は変更 さ れません。これらのコマンドは groff 拡張です。

mc cyan magenta yellow

シアン、マゼンタ、黄の 3 つの色の成分を持つ CMY カラース キームを用いて、色を設定します。

md

デフォルトの色の値 (ほとんどの場合、黒) に設定し ま す。成分引数はありません。

mg gray

0 (黒) から 65536 (白) までの整数引数を指定して、灰色の 色調に設定します。

mk cyan magenta yellow black

シアン、マゼンタ、黄、黒の 4 つの色の成分を持つ CMYK カ ラースキームを用いて、色を設定します。

mr red green blue

赤、緑、黄の 3 つの色の成分を持つ RGB カラースキームを用 いて、色を設定します。

N n

現在のフォントのインデックス n (整数、通常は非負) を持つ文 字を印字します。 −T html が使用された場合、指定された幅の改行さ れない空白を指示するために、負の値も使用されます。例えば N -193 は、193u の幅を持つ改行されない空白を表します。印字位置は変更し ません。このコマンドは groff 拡張です。

n b a

デバイスに対して改行を通知しますが、このコマンドによって 位置は指定されません。古典的な troff では、何の動作も起こさせず に中間出力をもっと人に読みやすくするために、整数引数 ba に よって、現在行の前 (before) と後 (after) の空白を通知していまし た。 groff では、これらの引数は単に無視されます。しかし、これら は互換性のために提供されなければなりません。

p n

出力において、新しいページを開始します。ページ番号は、 n によって設定されます。このページは、それまでに処理されたペー ジ と は完全に独立しています。たとえそれが同じページ番号を持ってい たとしてもです。出力の垂直位置は、自動的に 0 に設定されます。す べ ての位置指定やテキストの表示、図の描画は、常にページと相対的 に行われます。したがって p コマンドは、これらのコマンドの前に発 行されなければなりません。

s n

ポイントの大きさを n スケールドポイント (GNU troff では、 単位は z ) に設定します。古典的な troff は、かわりに単位として ポイント (p) を使っていました。 互換性の節を参照してください。

t xxx⟨white_space⟩

t xxx dummy_arg⟨white_space⟩

単 語、すなわち空白文字もしくは改行によって終了する連続した文字 xxx を印字します。省略可能である 2 つ目の整数引数は無視されます (これによってフォーマッタは、偶数個の引数を生成することができま す)。最初の文字は現在位置に印字され、現在の水平位置は最初の文字 の 幅 だ けずらされます。同様にして、それぞれの文字も処理されま す。文字幅はフォントファイルから読み込まれ、現在のポイントの 大 き さで拡大された後、水平解像度の倍数に丸められます。特殊文字は このコマンドを用いて印字できません (名前付き文字の印字には C コ マ ンドを使用してください)。このコマンドは groff 拡張です。これ は DESC ファイルに tcommand キーワードを含んでいるデバイスに 対 してのみ使用されます。 groff_font(5) を参照してください。

u n xxx⟨white_space⟩

トラックカーニングを行いながら単語を印字します。これは t コマン ドと同じですが、現在の水平位置が文字幅と n (整数、単位は基本 単 位 u) との和だけずらされるところが異なります。このコマンドは groff 拡張です。これは DESC ファイルに tcommand キーワードを 含 んでいるデバイスに対してのみ使用されます。 groff_font(5) を参照 してください。

V n

現在のページの上端から絶対垂直位置 n (非負整数、単位は基本 単位 u) に移動します。

v n

下に、基本単位 un (非負整数) だけ移動します。 [54] で は n に負の値も指定できますが、 groff ではこれは使用していま せ ん。

w

可読性を上げるためのパディングの空白について通知します。字 間、行間指定自体は、移動コマンドによって明示的に行われなけれ ば なりません。

図形コマンド

中 間 出力内のそれぞれの図形コマンドまたは描画コマンドは、文字 D で始ま り、その後にサブコマンドを表す 1 つもしくは 2 つの文字が続きます。さ ら に その後には、単一の空白文字で区切られた既定個もしくは可変個の整数引数 が続きます。 D コマンドは、同じ行に (コメント以外の) 他のコマンドが続い てはいけません。したがって、それぞれの D コマンドは構文上の改行で終了し ます。

troff 出力は、古典的な空白挿入の規則に従います (コマンドとサブコマン ド 間 に は空白を入れず、すべての引数の前には空白を入れます)。しかしパーサ は、コマンド文字間に空白を入れることを許していますし、最初の引数の前 の 空 白を省略可能にしています。いつもと同様に、それぞれの空白は、タブ文字 と空白文字の任意の連続で構いません。

図形コマンドには、可変個の引数を取るものがあります。この場合、それら は 基 本単位 u を単位とした大きさを表す整数です。 h1, h2, ..., hn と呼ばれ る引数は、水平方向の距離を表しています。正の値は右を、負の値は左を意 味 しています。 v1, v2, ..., vn と呼ばれる引数は、垂直方向の距離を表してい ます。正の値は下を、負の値は上を意味しています。これらの距離はすべ て、 現在位置からの相対的なオフセットです。

特 に 記述がなければ、それぞれの図形コマンドは、 groff の同様の \D エス ケープシーケンスに直接対応しています。 groff(7) を参照してください。

不明な D コマンドは、デバイス固有のコマンドとみなされます。その引数は文 字列としてパースされ、その情報はまるごと後処理プログラムに送られます。

以下のコマンドリファレンスでは、構文要素 ⟨line_break⟩ は、 区切りの節で 定義された 構文上の改行を意味しています。

D~ h1 v1 h2 v2 ... hn vn⟨line_break⟩

現在位置からオフセット (h1, v1) を通り、指 定 さ れ て い た ら (h2, v2) を 通り、 (hn, vn) までの B スプライン曲線を描画しま す。このコマンドは、可変個の引数のペアを取ります。現在位置は 描 画された曲線の最終点に移動します。

Da h1 v1 h2 v2⟨line_break⟩

(h1, v1) を中心として、現在位置から (h1, v1)+(h2, v2) までの円 弧を描画します。現在位置は円弧の最終点に移動します。

DC d⟨line_break⟩

DC d dummy_arg⟨line_break⟩

現在位置を最左端とする、半径 d (整数、単位は基本単位 u) の塗 り 潰 された円を、現在の塗り潰し色で描画します。現在位置は円の最右 端に移動します。省略可能である 2 つめの整数引数は無視されます ( こ れによってフォーマッタは、偶数個の引数を生成することができま す)。このコマンドは groff 拡張です。

Dc d⟨line_break⟩

現在位置を最左端とする、半径 d (整数、単位は基本単位 u) の 円 を、線で描画します。現在位置は円の最右端に移動します。

DE h v⟨line_break⟩

現在位置を最左端とする、水平半径 h と垂直半径 v (どちらも整数、 単位は基本単位 u) の塗り潰された楕円を、現在の塗り潰し色で描 画 し ま す。 現 在 位置は楕円の最右端に移動します。このコマンドは groff 拡張です。

De h v⟨line_break⟩

現在位置を最左端とする、水平半径 h と垂直半径 v (どちらも整数、 単 位は基本単位 u) の楕円の輪郭を描画します。現在位置は楕円の最 右端に移動します。

DF color_scheme [component ...]⟨line_break⟩

異なるカラースキームを用いて、塗り潰された描画オブジェクト用 の 塗 り潰し色を設定します。これと類似した、テキストや線図、図形オ ブジェクトの輪郭の色を設定するコマンドは m です。色の成分 は、0 か ら 65536 までの整数で指定します。色の成分数とその意味は、カ ラースキームによって異なります。これらのコマンドは、groff の エ スケープシーケンス \D’F ...’\M (他の対応する図形コマンドが ない場合) によって生成されます。これによって位置は変更されま せ ん。このコマンドは groff 拡張です。

DFc cyan magenta yellow⟨line_break⟩

シアン、マゼンタ、黄の 3 つの色の成分を持つ CMY カラース キームを用いて、塗り潰された描画オブジェクト用の塗り潰し 色を設定します。

DFd ⟨line_break⟩

塗り潰された描画オブジェクト用の塗り潰し色を、デフォルト の色の値 (ほとんどの場合、黒) に設定します。成分引数はあ りません。

DFg gray⟨line_break⟩

0 (黒) から 65536 (白) までの整数引数を指定して、塗り潰 された描画オブジェクト用の塗り潰し色を、灰色の色調に設定 します。

DFk cyan magenta yellow black⟨line_break⟩

シ アン、マゼンタ、黄、黒の 4 つの色の成分を持つ CMYK カ ラースキームを用いて、塗り潰された描画オブジェクト用の塗 り潰し色を設定します。

DFr red green blue⟨line_break⟩

赤、緑、黄の 3 つの色の成分を持つ RGB カラースキームを用 いて、塗り潰された描画オブジェクト用の塗り潰し色を設定し ます。

Df n⟨line_break⟩

引数 n は、-32767 から 32767 までの整数でなければなりません。

0 ≤ n ≤ 1000

塗り潰された描画オブジェクト用の塗り潰し色を、灰色の色調 に設定します。ここで 0 は塗り潰された白に対応し、1000 ( デフォルト) は塗り潰された黒に対応します。この間の値は、 中間的な灰色の色調に対応します。これは、コマンド DFg に よって旧式のものとなっています。

n < 0 or n > 1000

塗り潰された描画オブジェクト用の塗り潰し色を、現在、テキ ストや輪郭に使われている色に設定します。コマンド m を 参 照してください。例えば、コマンド列

       mg 0 0 65536
       Df -1

は、すべての色を青に設定します。

こ れ に よって位置は変更されません。このコマンドは groff 拡張で す。

Dl h v⟨line_break⟩

現在位置からオフセット (h, v) (整数、単位は基本単位 u) まで線を 引きます。現在位置は描画した線の最終点に移動します。

Dp h1 v1 h2 v2 ... hn vn⟨line_break⟩

現 在 位 置 か らオフセット (h1, v1) を通り、 (h2, v2) を通り、 (hn, vn) を通って最初の点に戻るような多角形を、線で描画します。 歴 史的な理由により、位置は、奇数番目の引数の和を水平位置に、偶 数番目の引数の和を垂直位置に加算したところに移動します。これ は 理 にかなったものではありませんが、互換性のためにそのままになっ ています。このコマンドは groff 拡張です。

DP h1 v1 h2 v2 ... hn vn⟨line_break⟩

対応する Dp コマンドと同じ引数を持つ同様のマクロですが、多角 形 の 外枠を描画するのではなく、塗り潰された多角形を描画します。位 置は Dp と同様に変更されます。このコマンドは groff 拡張です。

Dt n⟨line_break⟩

n>0 の場合、現在の線幅を n (整数、単位は基本単位 u) に設定し ま す。 n=0 の場合、線幅を可能な最小の細さに設定します。 n<0 の場 合、線幅をポイントサイズに比例するようにします (これは、最初 に Dt コマンドが指定されるまでのデフォルトです)。垂直位置は変更さ れませんが、歴史的な理由により水平位置は、引数を実際の水平位 置 に 足したところに変更されます。これは理にかなったものではありま せんが、互換性のためにそのままになっています。このコマ ン ド は groff 拡張です。

デバイス制御コマンド

各 々のデバイス制御コマンドは、文字 x で始まり、ひとつの空白文字 (groff では省略可能であり、任意個の空白やタブも使えます) とサブコマンドの文 字 ま たは単語が続きます。 (もし引数がある場合) それぞれの引数の前には、構 文上の空白がなければなりません。すべての x コマンドは 構文上の 改 行 に よって終了します。デバイス制御コマンドの後には、(コメントを除いて) 同じ 行に他のコマンドが続いてはなりません。

サブコマンドは基本的に 1 文字ですが、読みやすくするために 1 語で書く 事 も できます。つまり次のタブ、空白、改行文字で終了する任意の文字列を使用 する事ができます。サブコマンドの単語に含まれる最初の文字以外のすべて の 文 字 は、 単 に 無視されます。例えば troff は初期化コマンド x i として x init を、解像度コマンド x r として x res を出力 し ま す。 し か し、 x i_like_groffx roff_is_groff resp. のような記述も、同様に同じコマ ンドとして受け付けられます。

以下では、構文要素 ⟨line_break⟩ は、 区切りの節で定義された 構文上の 改 行を意味しています。

xF name⟨line_break⟩

(Filename control command)
name
を、現在のファイルに対して指定した名前として、エラーレポー ト中で使用します。これは、groff が内部的なパイプ機構を使用し て い る 場 合、元のファイル名を記憶しておくのに役に立ちます。入力 ファイルは、このコマンドで変更されません。このコマンドは groff 拡張です。

xf n s⟨line_break⟩

(font control command)
フォ ント位置 n (非負整数) に、フォント名 s (テキストの 1 単語) のフォントを組み込みます。 groff_font(5) を参照してください。

xH n⟨line_break⟩

(Height control command)
文字の高さを n (正整数、単位はスケールドポイント z)に設定 し ま す。 古典的な troff は、かわりに単位としてポイント (p) を使用し ていました。 互換性の節を参照してください。

xi⟨line_break⟩

(init control command)
デバイスを初期化します。これは、導入部の 3 番目のコマンドです。

xp⟨line_break⟩

(pause control command)
解釈されますが、無視されます。古典的な文書には、「 デバイスを停 止します。 リスタート できます」とあります。

xr n h v⟨line_break⟩

(resolution control command)
n
は解像度を表し、 h はそのデバイスの最小水平移動量、 v は最 小 垂直移動量を表します。すべての引数は正整数で、単位は 1 インチ当 たりの基本単位 u です。これは、導入部の 2 番目のコマンドです。

xS n⟨line_break⟩

(Slant control command)
傾斜を n 度 (整数、単位は基本単位 u) に設定します。

xs⟨line_break⟩

(stop control command)
現在のファイルの処理を終了します。すべての troff 中間出力の最後 のコマンドとして発行されます。

xt⟨line_break⟩

(trailer control command)
もしあれば、トレイラ情報を生成します。 groff では、実際には単に 無視されます。

xT xxx⟨line_break⟩

(Typesetter control command)
デバイスの名前を xxx に設定します。これは後に続く空白文字で終了 す る文字列です。可能なデバイス名は、groff の -T オプションのも のと同じです。これは、導入部の最初のコマンドです。

xu n⟨line_break⟩

(underline control command)
スペースの下線を設定します。 n が 1 の場合、スペースの下線を 引 き 始 め、 n が 0 の場合、スペースの下線を終了します。これは nroff モードにおける cu リクエストに必要であり、その他の場合 は 無視されます。このコマンドは groff 拡張です。

xX anything⟨line_break⟩

(X-escape control command)
文 字列 anything を解釈せずにデバイスに送ります。後に続く行が + 文字で始まっている場合、その行は継続行として以下のように解釈 さ れます。 + は無視され、かわりに改行文字がデバイスに送られます。 そして、行の残りは解釈されずに送られます。同様にして、最初の 文 字が + 文字でない行まで、後に続くすべての行に適用されます。この コマンドは groff エスケープシーケンスである \X によって生成され ます。この行の継続機能は groff 拡張です。

旧式のコマンド

古 典的な troff の出力では、ほとんどの場合、水平移動と 1 文字の印字とが 組合わさったとても奇妙なコマンドを用いて、1 文字の出力が行われます。 こ の コマンドにはコマンドコードがなく、厳密に 2 つの数字と 1 つの文字から なる、3 文字の引数によって表現されます。

ddc

右へ、基本単位 udd (厳密に 2 桁の 10 進数) だ け 移 動 し、文字 c を印字します。

groff では、このコマンドの前後や中に、任意個の構文上の空白を入れ ることができます。唯一、同じ行の前にあるコマンドが可変長の引数を 持っ て い る場合にのみ、区切りの空白が必須となります。 古典的な troff では、これらのコマンドやその他のコマンドの大きなかた ま り が、ほとんどの場合空白なしに使用されていました。そのためこのよう な出力は、ほとんど解読不能でした。

現代の高解像度デバイスにとって、このコマンドは理にかなったものではあ り ません。というのは、文字の移動幅が 2 桁の 10 進数で表現できないほど大き くなり得るからです。 groff では、これらは以下のデバイスでのみ使用されま す。 X75, X75-12, X100 そして X100-12 。その他のデバイスには、コマンド tu が、より適した機能を提供します。

後処理

roff の後処理プログラムは、中間出力を、デバイスに送られる「作用」に変換 す る働きを持つプログラムです。デバイスは、プリンタのようなハードウェア でもいいですし、あるソフトウェアの、画像またはテキスト処理に適した ファ イル形式でも構いません。 groff の処理系は、これらの後処理プログラムの作 成が簡単になるような、強力な手法を提供しています。

それぞれのデバイスに共通のインタフェースを持つクラスのメソッド を 介 し て、 中間出力をパースしたり、得られた情報をデバイスに送るライブラリ関数 があります。 groff の後処理プログラムがしなければならないのは、このクラ スのメソッドを再定義することだけです。詳細は、 関連ファイル節のリファレ ンスを参照してください。

使用例

この節では、同一の入力から 3 つの異なるデバイス用に生成された中間出力を 示します。この入力は、コマンドラインから groff に与えた hell world とい う文です。

高解像度デバイス ps

shell> echo hell world | groff -Z -T ps

x T ps
x res 72000 1 1
x init
p1
x font 5 TR
f5
s10000
V12000
H72000
thell
wh2500
tw
H96620
torld
n12000 0
x trailer
V792000
x stop

この出力を後処理プログラム grops(1) に与えること で、 そ の PostScript ファイル形式が得られます。

低解像度デバイス latin1

こ れは、位置指定が小さなスケールで行われることを除いて、高解像度デバ イスの時と同じです。いくつかのコメント ( # で始まる行) は、意味を明確 に するために追加しました。これらはフォーマッタによって生成されたもの ではありません。

shell> echo hell world | groff -Z -T latin1

# 導入部
x T latin1
x res 240 24 40
x init
# 新しいページの開始
p1
# フォントの設定
x font 1 R
f1
s10
# ページの初期位置指定
V40
H0
# テキスト ’hell’ の出力
thell
# 空白を通知し、それを水平ジャンプによって行います
wh24
# テキスト ‘world’ の出力
tworld
# 改行を通知します。しかし何もしません。なぜなら ...
n40 0
# ... 文書の終りに達したからです。
x trailer
V2640
x stop

この出力を後処理プログラム grotty(1) に与えることで、整形されたテキスト 文書が得られます。

古典的形式の出力

現 在 の プリンタに比べて、コンピュータのモニタはとても解像度が低いの で、 X のデバイスへの中間出力には、2 桁の数字の移動量を伴う飛び 書 き (jump-and-write) コマンドが使用できます。

shell> echo hell world | groff -Z -T X100

x T X100
x res 100 1 1
x init
p1
x font 5 TR
f5
s10
V16
H100
# 旧式の飛び書きコマンドでテキストを出力
ch07e07l03lw06w11o07r05l03dh7
n16 0
x trailer
V1100
x stop

こ の 出 力を後処理プログラム xditview(1x) や gxditview(1) に与えること で、X に表示することができます。

旧式の飛び書きコマンドのために、古典的な出力中のテキスト群は、ほとん ど 解読不能です。

互換性

古典的な troff の中間出力言語は、 [97] で初めて文書化されました。 groff の中間出力フォーマットは、以下の特徴を除いてこの仕様書と互換性があり ま す。

古典的な準デバイス非依存性は、まだ実装されていません。

古いハードウェアは、現在我々が使用しているものとは非常に異なって います。そのため、groff のデバイスも、古典的な troff のものと基本 的 に異なっています。例えば、古典的な PostScript デバイスは post と呼ば れており、1 インチ当たり 720 単位の解像度を持ってい ま し た。 一 方 groff の ps デバイスは、1 インチ当たり 72000 単位の解像度を持ってい ます。おそらく古典的な準デバイス非依存性に似た、スケールしなおす機構 を 実装すれば、これらは現代の groff に統合することができるかもしれま せん。

B スプラインコマンド D~ は中間出力のパーサによって正しく扱われ ま す が、 いくつかの後処理プログラムには描画ルーチンが実装されていませ ん。

groff では、コマンド sx H の引数の単位は、暗黙的にスケール ド ポ イント z ですが、古典的な troff の単位はポイント (p) です。これは 非互換なのではなく、互換性のある拡張です。というのも、古典的なテキス ト デ バ イスや groff のテキストデバイスを含むすべてのデバイスにおい て、 sizescale パラメータなしでどちらの単位も一致す る か ら で す。 sizescale パ ラメータを持つ数少ない groff のデバイスも、存在しない か、違う名前をしているか、異なる解像度を持っているように見えます。し たがって、古典的なデバイスとの衝突はほとんど起こらないでしょう。

コマンド Dp, DP, Dt の後に発生する位置の変更は非論理的ですが、古 いバージョンの groff がこの機能を使用しているので、互換性のために 残 してあります。

groff と 古典的な troff との違いは、 groff_diff(7) に文書化されていま す。

関連ファイル

/usr/share/groff_font/devname/DESC

デバイス name 用のデバイス記述ファイルです。

⟨groff_source_dir⟩/src/libs/libdriver/input.cpp

中間出力のパーサと後処理プログラムを定義しています。このファ イ ル は、 groff ソー ス ツ リー の トッ プディレクトリ (例えば @GROFFSRCDIR@ ) から相対的に置かれます。このパーサは、 groff の 中間出力フォーマットの最終的な仕様書となります。

関連項目

groff(7) の よ う な 表 記 は、 マ ニュアルページを指しています。これ は、man-page 文書システムのセクション 7 にある groff を指しています。こ の 例のマニュアルページを読む場合は、デスクトップのヘルプシステムのセク ション 7 を探すか、シェルプロンプトから以下のように呼び出してください。

shell> man 7 groff

詳細は man(1) を参照してください。

groff(1)

オプション -Z についてと、groff のさらなる読み物。

groff(7)

数値の単位やエスケープシーケンスのような groff 言語の詳細につい て。

groff_font(5)

DESC ファイルのデバイススケールパラメータの詳細について。

troff(1)

デバイス非依存の中間出力を生成します。

roff(7)

歴史的な側面と、roff システムの一般的な構造について。

groff_diff(7)

groff の中間出力と古典的な troff の中間出力との違いについて。

grodvi(1), grohtml(1), grolbp(1), grolj4(1), grops(1), grotty(1)

groff の後処理プログラム。

1 つの文書で groff システムのすべての側面を扱っているもの と し て は、 groff info ファイルを参照してください。これは統合されたヘルプシステムで 読むことができ、 emacs(1) の中で、もしくはシェルプロンプトから以下の よ うにして参照できます。

shell> info groff

古典的な troff の出力言語は、AT&T ベル研究所の 2 つの CSTR 文書に記述さ れており、 CSTR から、オンラインで入手できます。

[CSTR #97]

Brian Kernighan によって書かれた A Typesetter-independent TROFF は、 出力言語に関する最初の文書であり、最も簡潔なものです。 CSTR #97を 参照してください。

[CSTR #54]

J. F. OsannaBrian Kernighan によって書かれた 1992 年 版 の Nroff/Troff User’s Manual は、出力言語に関しては [CSTR #97] ほ ど簡潔ではありません。 CSTR #54を参照してください。

作者

Copyright (C) 1989, 2001, 2002, 2003 Free Software Foundation, Inc.

この文書は、FDL (GNU Free Documentation License) バージョン 1.1 かそ れ 以 降のものに基づいて配布されています。あなたは、このパッケージとともに FDL のコピーを受け取っているはずですが、これは GNU からもオンラインで入 手 可能です。

こ の文書は GNU の roff ディストリビューションである groff の一部です。 これは、出力言語の groff 拡張部分のみを記述した以前の版 − GPL にて公 開 − に基づいています。これは 2002 年に Bernd Warkenによって書き直され、 Werner Lembergによって保 守されています。

スポンサーリンク