Roff

roff とは UNIX に於ける文書整形を行うコマンド、ただし今日ではこの名称のコマンドは廃棄されており、主に troff、nroff の総称として使われる。また GNU による groff がある。
概要.
roff とは文書の整形、清書を行うコマンドである。roff の名称の由来は「to run off a copy（コピーを取り出す）」の略である。
roff は通常のテキストファイルに整形用要素を加えたファイルを読み込み、ドキュメントを生成する。roff 自身の基本機能は非常に単純であるが幾つかの機能を組み合わせたマクロパッケージを生成することが出来る。この考え方は UNIX のシステム記述言語でもあるC言語などの考え方とも共通する。roff の機能には変数、制御構造といったものも存在するため最初期のマークアップ言語ということもできる。チューリング完全性を備えている。
歴史.
roff の起源は古く最初期の UNIX から存在しており、概念に関しては1960年代にまでさかのぼる。1961年に初めて実演された CTSS に既に RUNOFF と呼ばれる文書整形プログラムが存在していた。UNIX の前身でもある Multics ではこの RUNOFF を参考にして runoff というプログラムを作成し、文書整形やヘルプファイルの記述に使用された。roff はこの runoff を参考にしてにより UNIX 上で動作するように開発されたものである。
1973年に最初の roff がリリースされた。このプログラムは PDP-11 アセンブラで記述されていたが、後にC言語で書き直されたバージョンが1975年にリリースされている。最初期の roff は3つのフォーマットプログラムを持ち、それぞれ nroff、troff、roff というコマンド名であった。この内 nroff は画面上での表示、troff は印刷文書上での表示形式であり roff というコマンドは Multics の runoff の再実装として開発されていた。しかし後のバージョンで roff コマンドは廃棄されており、現在では roff という単語は nroff、troff とこのシステムの派生作品を含めた総称として主に使われている。
nroff.
 は new roff の略である。roff で作る文書を端末ディスプレイ等にテキストデータで表示する際の書式を設定する目的でジョー・オサンナにより開発された。nroff が最も使用される場面として UNIXの man コマンドが挙げられる。このコマンドは各コマンドの説明文書を画面上に呼び出す機能であるが、各文書は nroff 形式で保存されており、man コマンドが実行されると nroff によって整形されページャを通して画面に出力されるという動作が行われている。主なnroffコマンドの機能としては、左づめ、右づめ、中央揃え、ページ変え、改行、インデント、一行の長さ指定、指定行送り、タイトル行指定、アンダーライン設定などがある。
troff.
troff は主に写植機（あるいはプリンタ）に文書を印刷する際の書式設定を行う roff である。もともとは C/A/T という写植機用の印刷データを生成する目的で開発されており、この写植機上で使用する特有のコマンドセットが数多く定義されている。初期のバージョンはジョー・オサンナを中心に開発が行われていたが、1977年にジョー・オサンナが心臓麻痺で他界して後は主にブライアン・カーニハンが中心になって開発が継続された。1979年に C/A/T 以外のフォトタイプセットを扱えるようにしたり、一般的なインターフェイスを備えるなど大幅に改良を施したバージョンが発表された。
roff のプリプロセッサ.
roff におけるプリプロセッサとは roff のフォーマットに変換し出力を生成するプログラムの事を指す。各プリプロセッサはそれぞれ独自の言語で策定されており、ファイルをプリプロセッサに通すと、roff のフォーマットに変換を行う。このような言語で記述された部分は一般に roff の文書に埋め込み、プリプロセッサを通してから roff に通すことで文書を作成する、ほとんどのプリプロセッサはファイルの内容の中で自分自身のものと判断した部分のみを抽出して変換を行い、それ以外の場所は無視するので命令等が一致しないなら複数のプリプロセッサの書式を同一ファイル内に記述することができる。以下に代表的な roff のプリプロセッサを挙げる。