ROFF(7)

名前
roff - roff テキスト整形システムの概観

説明
roff は、テキスト整形プログラムの集合の一般名であり、 troff, nroff, groff などといった名前で知られている。

roff テキスト整形システムは、整形用言語・マクロパッケージ・プリプロセッサ・ 出力デバイス用のポストプロセッサ・利用者用のフロントエンドプログラム・ 変換用ツールから構成される。

最近のもっとも普及している roff システムは、フリーソフトウェアとして 実装された groff (GNU roff) である。 groff 以前の実装は、ここでは「古典的」と呼ぶ (1973 年までさかのぼる)。

groff はその古えの先祖と後方互換性を持つが、数多くの拡張が加えられ、 今なお進化している。 ほとんどすべてのコンピュータシステムで利用できることからも、 今日の roff の事実上の標準と言える。

年月を経ているにもかかわらず、roff は今でも広く使われている。 例えば、UNIX システムのマニュアルページ (man-pages) は roff によって書かれている。 テキストデバイスに対する roff の出力は他の追随を許さず、 グラフィックデバイスへの出力は他のフリーな整形プログラムと同等な品質を持ち、 いくつかの商用システムと比べても勝るとも劣らない。

このドキュメントでは概要のみを示し、さらなるドキュメントへの道標を提供する。 このドキュメントはメンテナンスされておらず、時代遅れかもしれない。 正確なドキュメントとしては、groff の info ファイルを参照してほしい。 詳細かつ最新の情報が簡潔に示されている。

整形用言語
roff システム用の言語に関しては 3 つの用語がある。 roff の古典的な側面が強調される場合は troff 言語、 GNU の拡張を含む場合は groff 言語、 一般的な場合は roff 言語 である。

groff 言語 についての詳細なドキュメントは、groff info ファイルが一次情報源である。 マニュアルページ groff(7) には、すべての定義済み言語要素に対して短い説明が与えられている。

roff を用いるドキュメントは、整形要素で修飾された通常のテキストファイル である。 マクロパッケージのひとつを使用することで、高品質なドキュメントを容易に 記述できる。 マクロパッケージは高水準プログラム言語のようなものであり、一方で素の roff 言語は C やアセンブラのような低水準言語になぞらえられる。

roff 言語は、低水準なリクエスト・マクロ定義・エスケープシーケンス・ 文字列変数・数値レジスタおよびサイズレジスタ・C 言語風の制御構造を提供する 完全なプログラム言語である。

言語要素の説明がいくつか必要だろう。 リクエストとは、整形コマンドのうち、(C や C++ のような) プログラム言語で 定義されているもの である。一方、マクロとは roff 言語で記述された整形コマンドである。 ドキュメントの著者はリクエストとマクロの使用方法の違いについて気をつかう 必要はない。どちらも 1 行にドット を先頭にして記述すればよい。 しかし、必要ならば自分専用のマクロを定義できる。

エスケープシーケンスはバックスラッシュ で始まるインライン要素である。 これらはさまざまな機能を実装するために使用される。 非アスキー文字を挿入するための 文字列の内容の レジスタ変数の フォント変更の 文中のコメントの \" 、 特殊制御文字をエスケープする など、多くの機能がある。

フォーマッタ
フォーマッタは groff ドキュメントを解析するフロントエンドプログラムであり、 groff ドキュメントを特殊デバイスに適した形式に変換する。 伝統的な roff には 2 つのフォーマッタがあり、 nroff はテキストデバイス用、 troff はグラフィックデバイス用である。

これらのプログラムは groff の実装でもまだ存在するが、通常これらは groff というプログラムを通して処理を行う。 このプログラムは、古い機能はひとつのプログラムへと結合・拡張したものである。 groff には多くのコマンドラインオプションがあるが、そのほとんどは troff から継承されている。 オプションの混乱を緩和するために、ユーザフレンドリなユーティリティ grog (`groff guess' にちなんでいる) が作られた。 このユーティリティは、ドキュメントからどのオプション引き数を使えばいいのか 推測し、適切なコマンドラインを表示する。 まだまだ完璧とは言い難いが、出発点としてはなかなかなものだ。

プリプロセッサ
古典的なプリプロセッサのうち、 groff でも使えるものを示す。

    eqn 数式用
    grap
        画像要素構築用 (このプリプロセッサは groff には入っていない。別パッケージである)
    grn gremlin 画像用
    pic 図形作成用
    refer
        参考文献目録用
    soelim
        他の roff ファイル参照用
    tbl 表作成用

それぞれのプリプロセッサは独自の言語を定義していて、その言語は プリプロセッサが処理することで roff コードへと変換される。 したがって、それらの言語で記述された部分は roff ドキュメントに含める ことができる。 そのような拡張されたドキュメントは、本来のフォーマッタで処理される 前に該当するプリプロセッサを経由することになる。

プリプロセッサは、それぞれに割り当てられたドキュメントの一部を展開・変換する。 プログラム名を UNIX パイプラインでつないで呼び出すことも、 groff のオプションで自動的に呼び出すこともできる。

プリプロセッサ | groff オプション
eqn | -e
grap | -G
grn | -g
pic | -p
refer | -R
tbl | -r
soelim | -s

マクロパッケージ
マクロパッケージとは、特殊な種類のドキュメントを簡単に整形するのに 適したマクロの集合である。 これは roff の使い方を著しく簡便化する。 パッケージにおけるマクロ定義は tmac.name というファイルに格納される。 ここで name はそのパッケージの内部 roff 名である。 すべての tmac ファイルは標準的な場所にある、単一または少数の ディレクトリに保存される。

ドキュメントで使われているマクロパッケージは、コマンドラインオプション でフォーマッタに指定する。例えば、 や のように。 マクロパッケージ命名法やパッケージの場所についての詳細な記述は tmac(5) にある。

名の知れた古典的マクロパッケージには、マニュアルページ用の man, mandoc, mdoc などがあり、書籍・記事・メモ用にはそれぞれ me, ms, mm がある。 これらの他にも、groff はさまざまなアプリケーション向けに たくさんの新しいマクロパッケージを提供している。 例えば、他のファイルフォーマットを統合するものやそれに変換するものなどがある。

ファイル名拡張子
マニュアルページ (man-pages) はファイル名の拡張子としてセクション番号を とる。例えばこのドキュメントのファイル名は roff.7 である。つまり、マニュアルページの に格納されているということである。

古典的なマクロパッケージは、そのパッケージ名を拡張子に持つ。 例えば、 me マクロパッケージを使用するドキュメント用には file.me、 mm には file.mm、 ms には file.ms、 pic には file.pic といった具合である。

編集方法
多くのテキストエディタは、roff 用のドキュメントの編集をサポートする 機能を提供している。 特に、Emacs エディタの仲間における nroff-mode は使い勝手が良い。

環境変数

GROFF_TMAC_PATH
    コロン区切りの、マクロファイル検索ディレクトリのリスト。 tmac(5) を参照。

GROFF_TYPESETTER
    デフォルトのデバイス。

GROFF_FONT_PATH
    コロン区切りの、 devname 検索ディレクトリのリスト。 troff は、このリストの前に オプションで指定されたディレクトリを検索し、 標準ディレクトリ (.:/usr/local/share/groff/font:/usr/lib/font) はこのリストの後に検索する。

ファイル
デフォルトでは groff はライブラリファイルを /usr/local/share/groff ディレクトリツリーの配下にインストールする。 この場所は、システムごとに異なるだろう。 以下では、このディレクトリを <groff_dir> で表す。

<groff_dir>/tmac/troffrc
    troff の初期設定ファイル

<groff_dir>/tmac/tmac.name
    マクロファイル

<groff_dir>/font/devname/DESC
    デバイス name 用のデバイス記述ファイル

<groff_dir>/font/devname/F
    デバイス name 用のフォント F のためのフォントファイル

バグ
groff のドキュメントは、現在は発展途上にある。 いろいろなドキュメントの間には、一時的に小さな矛盾が見受けられるかもしれない。

著者
このドキュメントは、groff (GNU roff パッケージ) の一部である。 Bernd Warken <bwarken@mayn.de> によって記述された。

このドキュメントは FDL (GNU Free Documentation License) バージョン 1.1 およびそれ以降の条件の もとに配布される。FDL のコピーはあなたのシステムにもあるはずである。 以下でもオンラインで参照できる。

    <http://www.gnu.org/copyleft/fdl.html>.

関連項目
主要な情報源は、 groff info(1) ファイルである。

groff 言語の定義済み要素はマニュアルページ groff(7) にも記述されている。

フォーマッタとそのラッパープログラムについては: groff(1), grog(1), nroff(1), troff(1)

出力デバイス用のポストプロセッサについては: grodvi(1), grohtml(1), grolbp(1), grolj4(1), grops(1), grotty(1)

標準的なプリプロセッサは: eqn(1), grn(1), grap(1), pic(1), refer(1), soelim(1), tbl(1)

マクロパッケージのマニュアルページは: groff_tmac(5), groff_man(7), groff_markup(7), groff_mdoc(7), groff_mdoc.samples(7), groff_me(7), groff_mm(7), groff_mmroff(7), groff_ms(7), groff_msafer(7)

利用できるユーティリティ: addftinfo(1), afmtodif(1), hpftodit(1), indxbib(1), lookbib(1), pfbtops(1), tfmtodit(1), gxditview(1)

roff システムの、GNU の実装についての詳細は: groff_char(7), groff_font(7), groff_out(7) それから、groff ソースパッケージのメインディレクトリにある README ファイルも参照のこと。 これらには、 groff 開発者グループへの連絡方法や参加方法についても示してある。

多くの古典的 troff ドキュメントはまだオンラインで参照できる。 特に有益なものは、かのフリーな UNIX 7 を生みだしたもともとのベル研にある http://cm.bell-labs.com/cm/cs/cstr.html であり、故 Richard S. Stevens が収集した http://www.kohala.com/start/troff/ である。