Roffの文法

RoffはUNIXの標準文章成型ソフトである。 しかし、いかんせん古い。機能も劣る。 同目的の後発のソフト(言語)である、TeX(LaTeXを含む)や htmlを使うべきである。しかし、UNIXのmanは未だにroffで書くことになっている。 私自身、manのソースでしかroffのファイルは見たことがない。 しかも、roffの文法書というのが(今や簡単に入手できるところには)ないのだ。 仕方がないので、ここにまとめた。私が書いた超簡単なhtml文法書と並ぶ 「迷著」となるかも。
なお、この文章は、manで実験しながらメモしているので、本来の文法とは 異なっているかも知れない。誤りを指摘してもらえれば幸いである。
roffは行を認識している。改行を無視してつなげる本文記述が大部分を占めるので 誤解しがちであるが、コマンドなどは改行の影響を受ける。 行の先頭(1カラム目)が何であるかで以下の表示が変わる。
「.」で始まる行はコマンド行である。 そうでなければ記述本文である。

コマンド行

コマンド行には後に述べるだけの種類がある。 コマンド行は引き数を空白で区切る。 したがって、空白で区切れていたり、全角文字を渡したい場合は、 1つの引き数全体を2重引用符「""」でくくる。 行末まで1つとして扱うならば「"」は閉じなくてもよい。 コマンド行は文章の体裁を変えるものと、印字の修飾を変えるものとがあるが、 後者は、後述の本文中コマンドでも変更できる。
.\
コメント
.TH
文章のタイトル、manのページ見だしに使用される。
.SH
節のタイトル
.PP
改行して1行空
.IP "題名" 字下幅
字下げ項目題名。字下幅は数字+単位。 単位はiだと1タブ(標準は半角10文字)、単位指定がないと半角文字幅。 題名に続けて本文が付けられる場合は題名と本文を改行しない。
.TP 字下幅
字下げ項目題名。字下幅は数字+単位。 .IPと異なるのは、題名を次の行から採用すること。
.B "対象文字列"
強調
.I "対象文字列"
下線付
.R "対象文字列"
(不明)
.UC 数
(不明)
.iX
(不明)
.TS
表の先頭(表については次項を参照)
.TE
表の最後(表については次項を参照)
文字修飾コマンドについては、 例えば、.BIとすると2つの引数に対して、順に.Bと.Iとを操作したように処理する。

表は特殊な文法になっている。 表を含むものはファイルの先頭に「'\" t」が書かれていなければならない。 「.TS」コマンド行の次の行は、配置、対象、区切り記号の3つを 並べる。
 配置は行内での表の位置を示す。空白だと左寄せ。centerだと 中央寄せ。center以外の指定は不明。
 枠描画は空白ならばカラム区切のみ、allboxだと全体を線文字で囲む。 allbox以外の指定は不明。
 tabの()内がデータ記述行で区切記号として利用される半角文字。
 続いて、書式の雛形行が続く。 雛形行は、枠内書式指定文字列を表のように 区切文字「|」または空白で区切って書く。 以下、同じ書式で続く場合は、行の最後に「.」を書く。 枠内書式指定文字列は、bが強調文字、lは平文字。sを付加すると 「sの個数+1」コラムに股がる。 cをつけると、コラム内部でセンタリングされる。 例えば、
cetner, allbox, tab(;);
cbss
cb | cb | cb
l | l | l .
とすると、全体が枠で区切られた、 3コラムの表となり、1行目は3コラムに股がった強調文字で、 2行目は1コラムずつ強調文字で、3行目以降は平文字で書かれた 表になる。
枠にいれる項目ごとに.TS行の次の行で指定した区切記号で区切る。 1項目がroffソースで複数行に股がってしまう場合は、「T{」「T}」で くくる。

本文中コマンド

印字の修飾を変えるには、本文中コマンドを使う。 次の文字からが対象となる。
\fI
下線付
\fB
強調
\fP
1つ以前の指定に戻す
\fR
標準

本文行

先頭が空白でない本文は、前の行も本文行の場合、その継続と見なされ、成型時に 前の行の続きとして出力される。 逆に言えば、先頭が空白ならば、そこで改行される。 1行丸々空白の行も本文行と見なされる。 先頭の空白の数は調整されない。すなわち、空白をいれた数だけ先頭の印字文字は 右にずれる。
 ハイフン「-」は、コマンドなどと解釈される恐れがあるので、 そのまま表示したい場合は、直前にバックスラッシュ「\」を置く。