Kernighan(!) の書いた, "A TROFF Tutorial"
[ps]
をほぼ全部読んでみた。
"August 4, 1978" とあるので, 何とほぼ30年前の文章(!!)だが, 面白い。
troff はKernighanが書いているように, タイプセットのアセンブラのようなもの
なのだと思う。
troff のコマンドは下のように, 必ず行頭の . から始まる小文字で, これをマクロ化したものが
.TL や .NH のような大文字のマクロ。
これは TeX と LaTeX の関係に似ているが, troffはよりミニマリズムに徹して
いて, .sp や .ft のようにコマンドが最小限なのが特徴。
実際, もし自分でタイプセットのプログラムを書け, と言われたら,
まず確実にこういうコマンド体系を考えると思うので, それを完全なシステムに
しているという意味でも貴重だと思う。
*1
実際に使えるかというと,
- 数式が入らないか, 少ない普通の文書には使える
- 複雑な数式や, 多数のフォントを必要とする文書には厳しい
というところ。例えば,
Σ(α×β)
2→∞を(全角文字に頼らずに)組版するには,
\(*S(\(*a\(mu\(*b)\u\s-22\s0\d \(-> \(if
と書く必要がありますが, わかりにくいのと, 現代で使うような複雑な式は
恐らく不可能, という問題がありそうです。
またよく見ると, 時間が経っているだけあって, 普通の組版も微妙にTeXの方が
綺麗な気がします。
*2
まとめると, 組版とはどういうことをするかを知るという意味で, 教養として
知っておく価値はありそう, ということ。
それより, Kernighanが書いた上の文書と
同じ時期(1978年9月)のSIGNLの報告
が平然と手書きだったりする(例えばこれ
[pdf]
)
ことを考えると, 30年前にこれだけの品質の印刷を,
研究所のUnix上では個人で可能だったことが奇跡的な気がします。
また, まず普通に考えそうなこういうシステムを踏まえた上で TeX や LaTeX があると
考えると,
TeX の綺麗でない仕様も, 仕方がないと思えてくるかも。
これで最後に残っていた, man のソースを見た時の .SH や .PP の謎が解けて,
すっきりしました。
これはLispが理解できて, .emacs に含まれる cons や append を自由に使える
ようになった時の感覚に似ているような気がします。
ソース: % groff -ms -Tps alice.rf > alice.ps
.ps 12
.DS C
.ps +2
.ft B
Alice in Wonderland
.ft
.sp 0.4
Lewis Carroll
.ps -2
.DE
.sp -2.5
.ps 12
.vs 13p
.in +0.6i
.ll -0.3i
.ti -0.4i
\v'1'\s36A\s0\v'-1'
lice was beginning to get very tired of sitting by her sister
on the bank, and of having nothing to do: once or twice she had
peeped into the book her
.in -0.4i
sister was reading, but it had no
pictures or conversations in it, `and what is the use of a book,'
thought Alice `without pictures or conversation?'
.sp
So she was considering in her own mind (as well as she could,
...
*1: こういうシンプルな体系のもう一つの特徴として, (La)TeXと違って,
awkやsed等による外部の自動処理が簡潔に書ける点があると思います。
TeXの場合は必ずしもコマンドが行頭に来るわけではなく, 形も自由なので,
一般に特別なパーサを書く必要がありそうです。
*2: 他にも troff の場合はTeXと違い, 明示的に fi などのリガチャを指定しないと
いけなかったりするようです。