美しい印刷を目指して

エンゲルバートのNLS はコンピューターを計算以外の処理に使うという道を示し、アラン・ケイはそこから Alto という「道具としてのコンピューター」を作りだしました。

しかし、NLS の意志を受け継いだのは、Alto だけではありません。むしろ、Alto は傍流となるシステムに過ぎません。


NLS の本来の目的は、文章を処理し、人間の「思考」を補佐することです。そして、NLS の直後に、偉大な2つの文章処理システムが産声を上げています。

ここで、時代が逆になりますが、後で考案したシステムを先に紹介しようと思います。なぜなら、先に考えられたシステムはその後幾度もの壁に突き当たり、いまだ実現されていないためです。

我々の前に先に現れたシステム・・・それは、美しい文章を作成し、印刷するためのシステムでした。

目次

Knuth教授の悩み

TeX システム

TeX の機能

もっと美しく

TeX の開発終了と、新しい論理記述言語

文芸的プログラミング


Knuth 教授の悩み

1976年のある日、Knuth 教授は悩んでいました。

Donald E. Knuth スタンフォード大学教授は、1974 年にチューリング賞を受賞したコンピューター数学者です。チューリング賞というのはチューリング機械を考案したアラン・チューリングにちなんだもので、コンピューター学者に贈られる非常に権威ある賞です。

教授はコンピューター数学の聖典となるような本を執筆していました。プログラム技法やアルゴリズムなどを、1つの話題ごとに1冊にまとめ全7巻刊行する予定の「The Art of Computer Programing」シリーズで、すでに 1968 年に1巻が、1969 年には2巻が、そして 1973 年には第3巻と、第1巻の第2版が出ていました。


しかし、問題はこの次の出版予定でした。次には第2巻の第2版を出版予定だったのですが、この活字組みで問題が出ていたのです。

The Art of Computer Programing は非常に高度な数学の本で、数式一つ間違えれば内容がまったく意味をなさなくなってしまいます。しかし、活版工には数学的な深い知識を持つ人などほとんどおらず、何度校正を繰り返しても間違いがなくならない、と言う状態だったのです。

そこで、第2巻の第2版は、コンピューター植字で出版することが検討されました。これは、コンピューターによって活字を組みあわせ、活版を作り上げるシステムです。

しかし、出来上がりは教授の期待を裏切るものでした。

・・・活字の組み方が、美しくないのです。そこにあるのは、ただ「文字を並べただけ」の本であり、職人の技には遠く及ばないものでした。


教授を悩ましていたのは、この部分です。本を出版するからには、みんなに愛される美しい本を作りたい。しかし、職人の手に頼る以上、数学的な間違いが入る可能性がある。愛されるためには、美しさも、信頼性も、両方必用だ。


そして、教授は決断します。

自分の手で、職人以上の組版が出来るコンピューター組版システムを作ろう、と。


まだ誰も作ったことの無いシステムですが、それができ上がるまでは安心して執筆活動が出来ません。何年かかるかわかりませんが、完成するまでは本の出版は延期です。

・・・天才の考えることは、どこかちょっとずれています (^^;;


TeX システム

Knuth 教授は完璧主義者です。作ると決めたら中途半端なことはしません。

いきなりプログラムを作り始めたりせずに、古今東西の印刷物を調べ、「美しい印刷」とはどういうものかを調べます。そして、その中で良いと思ったものを取り入れ、プログラムしていくのです。

こうして、最初のシステムが出来、TeX (テフ)と名付けられました。TeX には多くの特徴がありますが、最も大きな特徴は、システムが3つに分離していることです。

  • フォント作成ソフト METAFONT
  • 組版ソフト TeX
  • 印刷ドライバ

このように分離しておくことで、多くのメリットが得られます。


METAFONT は、ベクトルでフォントの形をデザインすれば、さまざまな大きさ・さまざまな解像度のフォントを生成してくれるソフトです。フォントのデザイン方法は公開されていますし、TeX システムには普通 METAFONT が用意されていますので、ソースだけ配付すればよいと思えば、自作フォントの配付も簡単です。


 現在のコンピューターでは、ベクトルデータを表示の瞬間に計算(レンダリング)して表示するのが普通です。
 しかしレンダリングは非常にややこしい処理で、当時のコンピューターでは時間がかかりました。そこで、あらかじめレンダリングしたデータをディスクに保存しておく方法が取られました。

 また、ベクトルフォントはドット数が小さくなるとフォントの形が綺麗にレンダリングできないという問題もあります。
 現代のパソコンでは、「画面表示用の小さなフォントは、ベクトルフォントとは別にビットマップとしてデザインする」という手法がとられていますが、METAFONTではそのようなことはしていません。
 METAFONTプログラムが自動的にさまざまな手法を試し、最も見た目がよくなる方法でレンダリングを行うのですが、これはレンダリングの時間を余計に延ばすことになります。もっとも、それをするだけの価値はある見栄えとなります。

教授は、 TeX のために、Computer Modern Font と呼ばれるフォントをデザインしています。このフォントの出来は非常に良く、中にはKnuth 教授の最大の功績は、 TeX の作成よりも CM Font の作成だ、という人もいます。(事実、10年の開発期間のうち7年を CM Font開発に費やしたそうです)


また、印刷ドライバを分離し、しかも TeX システムには含めなかったことも、良い選択でした。印刷ドライバは、プリンタを使用する人が自分の責任で開発するのです。

もちろん、大抵のプリンタは有志によってドライバが開発されています。それでも、情報を公開して勝手に作らせることで、世の中に5万とある印刷機に、自由に対応が可能となったのです。


たとえば、TeX のデータを印刷するのは、10年前のプリンタでも可能です。その一方、1千万円もする業務用印刷機でも可能なのです。

違いは、速度や解像度の細かさだけ。おおまかな見た目は変わりませんから、家で納得いくまで試し刷りをして、最後に印刷所に持ち込むことが可能です。


教授は、このシステムを使って 1981 年に、第2巻の第2版を出版します。そして、TeX の更なる改良を行い、1982 年には現在の TeX と同じものを完成させました。


TeX の機能

本稿では、実は TeX の威力というのは、あまり取り上げません。TeX はいまだに最高の組版システムであり続けていますが、その分参考書も多数出版されていますので、本屋さんに行けば詳しい情報を入手できるでしょう。それらの本自体も TeX で作成されているでしょうから、良いサンプルを見ることが出来ますし。

しかし、まったく無視するのもなんですので、機能の「ほんの一部」を紹介しておきます。


TeX では、文字や線を自由に配置することが出来ます。配置する位置や線の太さは、1/65536 ポイント刻みで変えることができます。(ポイントは印刷で使われる単位で、1ポイント = 1/72.27 インチ)

文字の配置などは、簡単なプログラムで指示します。TeX システムは、これらの情報を「コンパイル」することで、印刷ドライバが処理するデータを生成します。

この方法によって、何十ページにも渡る文章を、全体で最も美しくなるように組版することが可能なのです。


たとえば、我々は小学校で、原稿用紙の行の先頭に「。」や「、」が来るときは、前の行の最後に、はみ出して書いてしまって構わない、と教わります。これを「禁則処理」と呼びます。美しくないので、適当に処理を加えるわけです。

TeX も、同じことを教えられています。あらかじめ、1行は40文字、と教えてあったとしても、行の先頭に「。」が来てしまえば、前の行の文字間を少しづつ詰めて、41文字入るように調整します。


しかしまぁ、この程度の処理であれば、Macintosh やWindows ワープロでもやってくれるでしょう。TeX の真価はここからです。


例えば、1行40文字、1ページ50行と決められた文章があるとします。

文章を書いて割り付けたら、最後のページに8文字しかなかったと考えて下さい。


・・・TeX では、こういう「ちょっとしか印刷されないページ」は、美しくないと見なします。つまり、禁則処理を行うのです。

そこで、自動的に「1ページ50行」という禁を破り、前のページを51行にして、最後のページが出来ないようにします。

しかし、「1ページ50行」という禁を破るのも美しくないのです。そこで、今度は「1行40文字」という禁を破って、なんとか1ページを50行に保とうとします。


この努力の甲斐あって、1ページの50行のうち、たった8行を41文字に詰めることで、「1ページに8文字だけ」という状況は回避されました。

1行が40文字から41文字になるのは通常の「禁則処理」の範囲内ですから、これならそれほど美しさは損なわれません。


ワープロなどでは、ここまでの処理は出来ません。上の例は2ページを操作するだけで終わりましたが、このようなページをまたがる処理は、場合によっては連鎖反応を引き起こし、とても時間のかかるものになってしまうからです。

TeX は「文章の入力」と「割り付け」をわけて考えるので、時間がかかっても構わないのですが、ワープロでは入力と割り付けを同時に行うので、美しさを求めすぎると使いにくいものになってしまうのです。


もう一つの例を上げましょう。

もし、手元にパソコン雑誌があれば、「Office」という単語が無いか探してみて下さい(きっと MS-Officeの記事とかあるでしょう?)。

見つかったら、今度は手元の英和辞典で、同じ単語を探してみて下さい。

文字はどのように組まれているでしょう? おそらく、それぞれが下の絵のようになっているのではないでしょうか。

合字の例

上がパソコン雑誌のもの、下が英和辞典のものです。

英和辞典はもちろん、「英語」に関してはこだわりをもって作られています。下のような活字の組み方は「合字」(ligature)と言って、英語の組版では当たり前の組み方です。


合字が出来ていない例として「パソコン雑誌」を例にしたのは、パソコン雑誌は普通 DTP ソフトで作成されているためです。ワープロより高度な組版を可能としている DTP ソフトであっても、合字までは処理できないのです。

しかし、TeX は当たり前のように処理します。「合字にせよ」と、人間が指示するような必用もありません。


実は、TeX と言う書き方も、本当は正しい表記ではありません。TeX を表記するには、普通のソフトで書けない、TeX でないと正確に表わせない書き方をするのです。

ここは、文字で表わせないので絵で示しておきます。TeX を正式に書くと

TeX

となります。(このように正式に書けないときは TeX と書くように、とKnuth 教授は指示しています。本稿ではそれにしたがっています)

「E をずらしただけじゃん」とか思ってはいけません。これは、英語ではなくラテン語の、正しい表記方法に由来しているのですから。

英語のために作られているコンピューターでは、ラテン語を正しく表記することは出来ません。しかし、どんな組版でも出来るように設計された TeX なら出来るのです。


ちなみ、ラテン語の TeX とは、英語の「text」の意味だそうです。


もっと美しく

しかし、美しい印刷の出来る TeX ですが、その舞台裏は実は目を覆いたくなるような汚さでした。

いちいち、「各ページの始まりは、上から何ポイント、左から何ポイントの所から書き始める」「ページ左右の余白は何ポイント」「文章の見出しは何ポイントの〜フォントで、本文は何ポイントの〜フォント」・・・などという情報を書いてやらないといけないのですから。

Knuth 教授は美しい印刷をするためにいろいろな調査を行い、印刷の知識を持っていましたからこれで良いでしょう。しかし、これでは誰でもが使えるシステムではありません。


そこで、DEC 社(現Compaq Computer)の科学者、Leslie Lamport が TeX の改良を試みます。改良とはいっても、TeX システムには一切手を加えません。もともと TeX にはプログラム機能がありましたので、それを利用するだけで大幅な機能拡張を行ったのです。


そこまで作れる機能を持たしていた Knuth 教授にも驚きますが、それをやってしまった Lamport さんにも驚きます (^^;

こうして生まれ変わった LaTeX (以下 LaTeXと表記します)は、「印刷の知識が無くても、非常に美しい論文が印刷できる」システムでした。論文用という制限を加えることで、TeX を使いやすくしたのです。


しかし、この制限が、結果的には大ヒットでした。論文という、元々「論理構造のしっかりした」文章を扱うことで、便利な副作用が多数生じたのです。


LaTeX では、文章を「タイトル」「著者」「作成日」「章の見出し」「節の見出し」「引用開始」「引用終わり」「脚注」・・・などなど、論理的な「意味」構造として捕らえます。

そして、章の見出しは目立つ大きな文字、節の見出しはそれよりも小さい文字、脚注は、それが出てきたページの一番下に小さい文字で書く・・・等の処理をします。

これにより、いちいちフォントの大きさや種類をしらなくても、綺麗な印刷が出来るようになったのです。


そして、ここからが便利な副作用です。論理構造を明確に記述することで、どの章が何ページから始まっている、等という情報をコンピューターが管理できるようになり、自動的に目次を作ることが可能になったのです。

さらに、必用であれば単語を元に索引を作ることも出来ます。このような作業は、手作業で行うと間違いも多いうえに、文章の変更などでページ数が変わると、調べ直すのが大変でした。LaTeX は、そういうことも自動で行ってくれるのです。


LaTeX の登場により TeX は爆発的に普及し、同じ方法で高度な数学論文用に拡張された AMS-TeX や絵を扱えるようにした PIC-TeX 、参考文献などをデータベース化して扱える BIB-TeX などのシステムも登場します。

こうして、TeX は印刷だけでなく、その元原稿まで美しく作れるようになっていったのです。


TeX の開発終了と、新しい論理記述言語

Knuth 教授は、このような TeX プログラムの発展のためには、TeX 自身の不用意な変更を避けなくてはいけない、と考えました。

TeX の上で動くプログラムは、TeX 自身のバージョンアップによって動かなくなる可能性があるからです。すでにTeX 自身よりも、その上で動くプログラムの方が重要になっているのですから、バージョンアップは本末転倒になりかねません。


そこで、1990 年、TeX バージョン 3.1 の発表とともに、「今後、バグフィックス以外のバージョンアップはしない」という、終結宣言を出します。

同時に、TeX を作った際のノウハウを、すべて文章化して公開します。今後、TeX に更なる機能を求める人は、TeX には手を加えずに、ノウハウを元に1から自分で作るべきだ、ということです。

このときに、教授は面白いことを決めました。次にバグフィックスを行ったら、バージョンを 3.14 にするというのです。その次は 3.141 です。次々と、円周率の桁を増やすのです。

もし自分が死んだら、バージョンは「π」として、それ以降はバグを見つけても誰も手を加えてはならない、とも決めています。確か、現在のバージョンは 3.14159 だったはずです。


一方、LaTeX によって有用性が認められた「論理記述」ですが、TeX に頼らず、どんなソフトでも使える一般的な文法が望まれ始めました。

実は、論理記述という考え方は 1960年代にはすでにでき上がっており、IBM が Generalized Markup Language (汎用マーク付け言語:略称 GML)と言うものを作っていました。

LaTeX の登場で、時代がやっと GML に追いついてきたのです。


1986 年に ISO (国際標準化機構)で GML が認められ、国際規格となります。同時に、名前にも「標準」をしめす Standard がつけられ、SGML となります。

もっとも、当初は、SGML は文法だけあって処理するソフトが無い、と言う状態でした。せいぜい、SGML で書かれたものを LaTeX に変換し、LaTeX で印刷する程度です。これではなんのための SGML かわかりません。

しかし、1993 年、とあるブームがきっかけで SGML が注目を集めることになります。

これは、また別の話しですので、近いうちに紹介しましょう。


文芸的プログラミング

本稿の趣旨とは外れますが、最後にちょっと面白い話も紹介しておきましょう。

Knuth 教授は、TeX の開発に「文芸的プログラミング」という手法を使っています。これは(そのうち詳しくやりますが)構造化プログラミングとも、オブジェクト指向プログラミングとも別の手法です。

そして、この手法を行うために、TeX を使用しています。

C が C によってプログラムされ、Squeak が Squeak によってプログラムされているように、TeX は TeX によってプログラムされているのです。

え? でも、TeX って、いわゆる「プログラム言語」じゃないじゃん。

そう思ったあなたは正しい。実は、「文芸的プログラミング」とは、プログラムそのものに対する技法ではなく、「プログラムの仕様書を、プログラムと一緒に保存することで保守性を高め、生産性を上げる」ための技法なのです。

そして、その仕様書部分は、TeX によって書かれている、と言うだけです。

それじゃぁ、注釈と一緒じゃないの?

という人もいるかもしれません。しかし、文芸的プログラムは、やっぱりプログラムスタイルそのものに影響を与える「思想」なのです(詳しくは、長くなるので書きませんが)。その意味では、やはりこれは TeX によってプログラムされている、と言っても過言ではありません。

ちなみに、アセンブラでも構造化プログラミングは出来、Cでもオブジェクト指向プログラミングが出来るように、TeX を使わないでも文芸的プログラミングを行うことは出来ます。


OpenSource がもっと一般的になり、多くの人がプログラムソースへのアクセスを行うようになったときには、ソースと仕様書を合理的に管理できる「文芸的プログラミング」への注目度が上がるのではないかと、筆者は思っています。

そして、文芸的プログラミングをされたプログラムから、仕様書をとりだして TeX コンパイルまで済ませるためのツールを「WEB」と呼びます。これは、美しいレース編みのような編み物を意味する言葉です。

プログラムを編み物に例える・・・同じようなことを、世界最初のプログラマーと呼ばれるラブレイス伯爵夫人エイダも言っています。

解析エンジンは、ジャカールの織機が花や葉を織るように、代数のパターンを織るのです

と。

Knuth 教授もまた、プログラムを編み物のような仕事だと考えたのでしょう。ソフトの名前一つをとっても、そんな思想が見えてきます。

そういえば、当の解析エンジンを作ったチャールズ・バベジも完璧主義者でしたし、「エンジン」と言う名前を、当時の発明品と、そのラテン語の意味(エンジン=創造力、創造力によって作られた機械、の意味)から取ったと言います。

そして、エンジンの最大の目的は、「数表を間違いなく印刷すること」でした。

完璧主義者、編み物のようなプログラム、印刷目的の発明、ラテン語から取った発明品の名前・・・

天才というのは、どこか似たところを持っているのかもしれませんね。



参考文献
マッキントッシュとウィンドウズユーザのための ホームページのつくり方電視郎1996エーアイ出版
バベッジのコンピューター新戸雅章1996筑摩書房

(ページ作成 1999-12-13)
(最終更新  2001-09-12)

戻る

トップページへ

このページの誤字脱字発見・情報提供・意見などありましたら、下の一行掲示板へどうぞ。樫樹の広場から全体を見ることも出来ます。

名前 内容

Google


Web 当サイト内