こう主張しているだけあって , A-TangI e が生成する Ada のコードは , きちんとイン デントをつけてフォーマットされています。 オリジナルの WEB のように「 TANGLE の出 力はどうせ計算機が処理するだけだからべ タ書きてよい」と割り切ってしまうのとどち らがいいかは , 考え方や使い方によるて、し なお , Ada 用の WEB べースのシステムと しては , このほかに AdaWeb CPa90] とい うものもあるようて、すが , ここて、は省略し P DER ーます。 Fig. 14 SPIDER 用の WEB べースのシステム」を出力してく 「 C 言語についての記述」を与えると , 「 C 言語 たとえば , SPIDER コンパイラに対して , す。 cc や lex などと同じ範疇の処理系だといえま ンパイラジェネレータ」て、す。 UNIX 上の ya ステムを生成するシステム」っまり一種の「コ テムそのものて、はなく , 「 WEB べースのシ SPIDER [Ra89) は , WEB べースのシス CW CW ℃ WEB S:SPIDER CW れます。この「言語 X についての記述」を記述 する言語が SPIDER て、す (Fig. 14 ) 。 SPIDER は CWEB をベースとして作られ ているのて、 , SPIDER が出力する WEB ファ イルは , TANGLE て、 Pascal に変換するのて、 はなく , CTANGLE を使って C 言語に変換 するようになっています。厳密には , 前述 した CWEB の WEB ファイルとは少し異なる のて、すが , ここて、はこの SPIDER が出力する WEB ファイルのことを CWEB ファイルと呼 ぶことにします。 この SPIDER を使って , 言語 X 用の TAN GLE(XTANGLE と呼びます ) を作る過程を Fig. 15 に示します。同様の手順て、言語 X 用 の WEAVE(XWEAVE) も生成て、きます。 今のところ , SPIDER に付属している言語 記述ファイルには , ・ C ( 十十 ) ・ AWK ・ SSL ( 構造工デイタの仕様記述言語 ) があります。 ・ Ada ののソースを書き換える必要がある ) ことはて、きない (SPIDER システムそのも ラミングパラダイムの言語に対応させる を作るだけて、は , まったく違ったプログ して書かれているのて、 , SPIDER ファイル ・字旬解析のコードが A1g01 系の言語を想定 ることはて、きない ・ FWEB のように , 途中て、言語を切り換え システムて、す力す , このように , SPIDER はなかなか魅力的な Fig. 15 SPIDER による言語 X 用の TANGLE(XTANGLE) の生成 XTANGLE. SPIDER XTANGLE. WEB XTANGLE. C XTANGLE. EXE CW X CW X CW CW CW CW C C X C CW M S:SPIDER CW:CWEB C ℃言語 M : 機械語 M C コンノヾイラ という不満はあります。 n web cnoweb [ F090 ] という処理系は , 名前か らも想像て、きるとおり , WEB を拡張したシ ステムというよりは , WEB に対するアンチ テーゼとして提唱されたシステムて、す。コ ードとドキュメントの両方をひとつのソー スにまとめて書くという点は WEB と同じて、 すが , WEB とは違って , TANGLE や WEA VE などによる変換なして、そのコードをその まま TeX にも C コンパイラにも通せる , とい う特徴があります。 cnoweb は , 「プログラムとドキュメント をまとめて管理する」というよりは , 「プロ グラムを ( コメントも含めて ) TeX て、清書す る」ためのシステムて、あるといえるかもしれ ません。 cnoweb て、書かれたコードには , / * A cnoweb program *input cnoweb *titIe{A c noweb program} main( ) といったように , 先頭のコメントの一部と して Yinput cnoweb という TeX のコマンド が書かれています。そのため , このソース を TeX に通すと , cnoweb. tex という TeX の マクロファイルが読み込まれます。このソ ースを C コンパイラに通しても , コメントの 部分が無視されるのて、 , やはり問題なくコ ンパイルて、きます。 また , 先頭に限らす , ソース中のあらゆ る箇所のコメント内て、 , TeX のマクロが使 えます ( 逆にいえば , TeX の文法に違反する コメントは使えません ) 。標準の pIainTeX のマクロのほかに , Table 3 に示したマクロ が追加されています。 SPIDER 32 C MAGAZINE 1992 3 CTANGLE
EB から dvi ファイルを作成する手順を Fig. 1 VE. EXE の使い方 3 に示します。 TeX は emTeX を使っていま す。実際には , このあと WEAVE. DVI をプ WEAVE. EXE の起動方法は , 出力ファイ リンタドライバを使ってプリントアウトし ルが . PAS および . POO て、なく . TEX になる ますが , プリンタドライバの使い方はデバ Knuth のオリジナルの WEB システムを発 イスによって大きく異なるのて、 , こて、は 点以外は , TANGLE. EXE の起動方法と同 展させ , ほかの言語に対応させる , などの じて、す。 示しません。 拡張を行ったシステムが数多くあります。 WEAVE. EXE て、作成した TeX ファイルを こて、は , それらのうち代表的なものを取 TeX て、コンパイルするときには , webmac. りあげて解説します。 tex が読み込まれます。オリジナルの webm ac. tex は , レターサイズ用紙 ( 8.5 インチ X11 なお , 本バートて、紹介した以下のファイ インチ ) 用なのて , A4 サイズ用に変更を加 ルは , 今月号の付録ディスクに収録されて えてあります。オリジナルのファイルは we います。 現在汎用プログラミング言語として広く bmac.org という名前にしてあります。 使われている C 言語にも WEB を導入した tangle. web という要求は当然のことといえます。 TANGLE. WEB や WEAVE. WEB をプリ tangle. ch CWEB [Le87] は , ントアウトすると , 頁番号が 1 頁からて、はな こうした要求から生ま tangle. exe く , 途中の番号からになります。これは , れた C 言語版 WEB システムのひとって、す。 weave. web TANGLE. WEB および WEAVE. WEB が論 特徴としては , weave. Ch 文 [Kn83] の付録として印刷することを想 ・ TANGLE で改行位置を変更せず , ューサが weave. exe 定して書かれているためて、す。先頭の頁番 WEB ファイルで指定したままの位置で改 webmac. tex 行する 号を変更するには , TANGLE. WEB や WE webmac.org 本当は , フリーソフトウェアの TeX も収 ・また , # ⅱ ne 文を入れることによって , コ AVE. WEB の *def*contentspagenumber{123} ンパイラで発生したエラー箇所が WEB フ 録て、きるといいのて、すが , TeX の配布ファ ァイルのどこにあたるかがわかる などの行を変更してください イルはフォントまて、含めると IM バイトを超 ・マクロ展開の機能はなく , 、、@d″は #defin この WEAVE. EXE を使って TANGLE. W えるのて、 , 今回は見送りました。 Fig. 13 MS-DOS 版 WEAVE. EXE による TANGLE. WEB の印刷 (DVI ファイルの作成 ) た づテ 基ス l-u カ ファイル EB A 〉 weave tangle. web This is WEAVE for MS-DOS, Version 4. 2 * 1 * 11 * 19 * 29 * 37 * 50 * 65 * 70 * 77 * 94 * 112 * 123 * 143 * 156 * 163 * 171 * 179 * 182 * 188 * 189 . * 1 * 11 * 19 * 29 * 37 * 50 * 65 * 70 * 77 * 94 * 112 * 123 * 143 * 156 * 163 * 171 * Writing the output file. 179 * 182 * 188 * 189 Writing the index. . Done. ()O errors were found. ) A>tex286 &plain tangle. tex This is emTeX, Version 3. 0 C3a] ()o format preloaded) **&plain tangle. tex (tangle. tex (webmac. tex) * 1 [ 124 ] [ 125 ] [ 126 ] * 11 [ 127 ] [ 128 ] [ 129 ] [ 130 ] * 19 [ 131 ] [ 132 ] * 29 [ 133 ] [ 134 ] * 37 〔 135 ] [ 136 ] [ 137 ] * 50 [ 138 ] [ 139 ] [ 140 ] [ 141 ] [ 142 ] * 65 [ 143 ] [ 144 ] * 70 [ 145 ] [ 146 ] [ 147 ] * 77 [ 148 ] [ 149 ] [ 150 ] [ 151 ] [ 152 ] * 94 [ 153 ] [ 154 ] [ 155 ] [ 156 ] [ 157 ] [ 158 ] * 112 [ 159 ] [ 160 ] [ 161 ] [ 162 ] [ 163 ] * 123 [ 164 ] [ 165 ] [ 166 ] [ 167 ] [ 168 ] [ 169 ] [ 170 ] * 143 [ 171 ] [ 172 ] [ 173 ] [ 174 ] * 156 [ 175 ] [ 176 ] [ 177 ] * 163 [ 178 ] [ 179 ] [ 180 ] * 171 [ 181 ] [ 182 ] [ 183 ] * 179 [ 184 ] [ 185 ] * 182 [ 186 ] [ 187 ] * 188 [ 188 ] * 189 lndex: [ 189 ] [ 190 ] (contents. tex) [ 191 ] [ 192 ] Section names: [ 193 ] [ 194 ] Table of contents: [ 123 ] ) Output written on tangle. dvi ( 72 pages, 330876 bytes). Transcript written on tangle. 10g. 30 C MAGAZINE 1992 3
ルに出力されます。 ログラムとプールファイルとの間の整合性 いても TANGLE の場合のような間題はあり 長さが 2 以上の文字列については , 前述の をチェックて、きます。 ません。 WEAVE. WEB を TANGLE に通し ような置き換え処理が行われますが , 効率 TANGLE が行う処理はここまて、て、 , 実際 て作った WEAVE. PAS から WEAVE. EXE 化のために長さ 1 の文字列定数については , の整合性のチェックやプールファイルの読 を作り , その WEAVE. EXE を使って , WE その唯一の文字の文字コードがそのまま文 み込みなどの処理は , すべてアプリケーシ AVE. WEB から WEAVE. TEX を作ることに 字列定数の番号として使われます。そのた ョンにまかされています。 なります (Fig. 10 ) 。図そのものはちょっと め , プールファイルに登録される文字列定 TeX などて、は , 実際にこのプールファイ 複雑て、すが , TANGLE. EXE のようにルー 数の番号は , 先頭から順に 256 , 257 , ルを使った文字列の管理が行われています。 プがあるわけて、はないのて、 , 手作業て、ソー となります。古いバージョンの TANGLE て、 スを変換する羽目にはなりません。 は , 使われる文字コードが 0 から 127 の範囲 VE WEAVE でのドキュメント生成 だけて、あると考えて , これが 128 , 129 , ・ となっていましたが , 現在て、は , 8 ビットの TANGLE が WEB から Pascal への変換を WEAVE て、は , WEB ファイルのうち , T 符号に対応するために 256 からに変更されて 行うのに対して ,WEAVE は WEB から TeX eX て、書かれた部分については , ほとんどそ います。 への変換を行います。 TANGLE の場合と同 のまま TeX ファイルに出力しますが , Pasc プールファイルの中身は , 様に , WEAVE そのものの図を Fig. 8 に , W al て、書かれた部分については , 高度なプリテ llbuffer size EAVE による WEB ソースの印刷方法を Fig. イプリンティングを行います。 09P06 size 9 に示します。 プリテイプリンティング COp8()] とは , 17number of strings 実際に , WEB て、書かれたファイルを WE プログラムのソースコードをより読みやす のように , テキストファイルの各行の先頭 AVE を通して印刷するには , くするために , 構文を意識して , インデン に , その行の長さが 10 進数 2 桁て、入った形に WEAVE FILE. WEB トや改行位置などを変史する , という処理 なっています。この各行が , それぞれひと TEX FILE. TEX TabIe 1 WEAVE での演算子の変換 つの文字列定数に対応します。 DVlxx FILE. DVI WEB ファイル Pascal ファイル プールファイルの最後の行には , などとします。 DVIxx として何を使うか * 238369450 は , 出力デバイスによって異なります。 という形て、 , 文字列のチェックサムが入っ さて , TANGLE の場合と異なり , WEA ています。 WEB のソース中て、は , @$ とい VE そのものの実行形式を作る場合には , 「ニ うコントロールコードて、 , このチェックサ ワトリと卵」に悩む必要はありません。 WE ムをソースに組み込むことがて、きます。し AVE. WEB から WEAVE. PAS を作るには , たがって , 実行時に読み込んだプールファ TANGLE を使えばいいのて、すから。 イルに書かれていたチェックサムと , TAN むしろ複雑なのは , WEAVE. WEB からド GLE が@$ の位置に展開しておいたチェック キュメントを作ってプリントアウトしたい サムの定数とを比較することによって , プ というときて、す。とはいっても , これにつ Fig. 8 WEAVE Fig. 9 WEAVE による WEB ソースの印刷 * . WEB * . TEX く < > not 0 「 * . DVI 第 W W:WEB T:TeX →プリンタへ W:WEB T:TeX D:DVI W W → 第 D D WEAVE TeX 24 C MAGAZINE 1992 3
特集 ドキュメント作成支援システム e に変換される といった点があげられます。 そのほか , 予約語の扱いなど , PascaI に 依存した部分の書き換えも当然行われてい ます。 CWEB は , UNIX 用の TeX の配布ファイ ルの中に入っていることもあり , かなり出 回っているようて、すが , 実際にどの程度使 われているかは不明て、す。 EB FWEB CKr91] の、、 F 〃は , FWEB が CW 略します。 ているため , CA090] の紹介はここて、は省 CKr91) のほうが機能が高く , 広く使われ 処理系 CA090) がもうひとつありますが , 以外に , まったく同じ FWEB という名前の 実は , ここて、紹介する [Kr91) の FWEB いうのは WEB の欠点といえます。 ュメントをテキスト端末上て見られないと て大きな長所となっています。実際 , ドキ = 番目の点は標準の WEB システムに対し という点が異なります。 結果を見ることができる 力が可能なので , テキスト端末上で出力 ・ nroff によるテキストファイル形式での出 がインストールする必要がない ンドなので , TeX のようにあとからユーザ ・ troff は多くの UN Ⅸシステムの標準のコマ りやや劣る ・ troff による印刷結果は , 機能的には TeX よ ため , WEB と比べて , troff/nroff を使っている点が特徴て、す。その cweb は , タイプセッタとして TeX て、なく のて、 , 注意してください 6 ] 。これは CWEB とはまったく別のものな て , cweb という処理系もあります [Th8 語を採用した WEB べースのシステムとし CWEB 以外に , プログラム言語として C 言 EB をベースとして FORTRAN への対応を行 ったことから来ていますが , 現在て、は , C, C 十十 , FORTRAN 77 , FORTRAN 90 , Ratfor, TeX という多くの言語に対応した システムに拡張されています。 , こて、注目してほしいのは , プログラミ ング言語として TeX を扱うことがて、きる点 て、す。つまり , TeX のマクロファイルをプ ログラミング言語のソースと見なして , Te X のソースを WEB 方式て、書いて , マクロと そのマクロについてのドキュメントとをい っしょに管理することがて、きるわけて、す。 TeX のマクロはわかりにくいことて、有名て、 すから , これは大きな意味があります。た だし , この FWEB の TeX モードを使うと , TANGLE の出力も WEAVE の出力も TeX のコードになるのて、 , どちらがマクロて、ど ちらがドキュメントなのかをよく考えてお かないと混乱が生じます。 将来的には , UNIX の make コマンドて、読 み込まれる MakefiIe をプログラミング言語 として扱えるように拡張する予定もあるそ うて、す。 さらに , WEB ファイルの途中て、言語を切 り換える機能があるのて、 , これらの言語の うちいくつかを混在させて , 文芸的プログ ラミングを行うこともて、きます。 MWEB CSe87] は Modula-2 用の WEB べ ースシステムて、す。 PascaI て、は , さきほどの case 文のデフォ ルト分岐のように , 標準 PascaI て、定義され ておらず , 実用的なプログラムを書くため には処理系ごとに互換性のない機能を使う 必要があります。また , モジュール ( WEB のモジュールて、はなく , 識別子の名前の隠 蔽などを行う , プログラミングにおけるモ ジュールて、す ) の概念もありません。 これらの問題を解決するために , WEB の PascaI を ModuIa-2 て、置き換えたのが MWE B て、す。 EB Modula-2 は , Pascal の設計者て、もある N iklaus Wirth が設計した言語て、 , Pascal が べースになっていますが , モジュールによ る分割コンパイル , 割り込み , コルーチン , ユーティリティモシュールによるファイル 入出力といった機能があります。システム 記述言語としてかなり強力ぞすが , なぜか あまり利用されていない言語て、す。 MWEB は , Modula-2 に対応させるため ・識別子の長さの延長 ・コメント記号の変更 ・大文字・小文字の区別 〃の処理の変更 などの自然な変更が行われているほかは , ほとんど WEB と同じて、す。 eb A-Web [WB89] は Ada 用の WEB べー スシステムて、す。 Ada は , 軍事用途などの , 大規模リアルタ イムソフトウェアの開発用の言語て、 , やは り Pascal を基礎としています。 Modula ー 2 の モジュールに対応する「パッケージ」という 概念があるほか , リアルタイム処理をサポ ートするため , タスクや delay 文などの機能 が盛り込まれています。 A-Web システムのうち , A-Web から Te X への変換を行う A ーⅥ ave は , オリジナル の WEAVE をもとに WEB て、 ( つまりプログ ラム部分は PascaI て、 ) 書かれています。それ に対して , A - Web から Ada への変換を行う A-Tangle は , WEB て、書かれたオリジナル の TANGLE を使わずに , 新たに A ー Web て、 ( つまりプログラム部分は Ada て、 ) 作ったもの を使っています。これは , 「オリジナルの TA NGLE が , 文脈依存文法を使って書かれて いるのて、 , ほかの言語への移植が難しい上 , ( 先ほどの TANGLE. PAS のリストを見ても わかるとおり ) ソースコードを圧縮してし まうから」と CWB89] の論文は主張してい ます。 特集 ドキュメント作成支援システム 31
ドキュメント作成支援システム 特集 Fig. IO WEAVE 自身の印刷 WEAVE. WEB W ダ→ W W ントロールコード WEB のコントロールコードは , 、、 @ 〃十文 字という形になっています。そのため , 覚 えるのはなかなかたいへんて、す。 Table 2 に コントロールコードの一覧を示します。 WEAVE. EXE M M WEAVE. PAS ーⅣ 、ジファイル TANGLE Pasca ロンバイラ WEAVE. TEX WEAVE. DVI WEAVE. WEB D →プリンタへ D W 、Ⅳ → T T T W:W E B P:Pascal M : 機械語 T:TeX D:DVI UNIX の diff というユーティリティは , ふ たつのテキストファイルを比較して , それ らの相違点を出力する , ということがて、き ます。この相違点を記述したファイルのこ とを「差分ファイル」と呼びます。 また , patch というフリーソフトウェアを 使うと , この比較の際に使われたふたつの ファイルのうち , 一方のファイルだけしか ないときに , diff が生成した差分ファイルを もとに もう一方のファイルを復元すると いうことがて、きます。 のことて、す。 UNIX 上て、はこの機能を利用して , ソフト ウェアのバージョンアップや , 特定の機種 WEAVE て、は , これらの変更だけて、な く , TeX の機能を活用して , フォントを , への移植情報などを , この diff を使ったパッ 予約語 ポールド WEB ファイルの全体の構造について説明 チの形式て、配布するのが一般的て、す。最近 識別子 . は MS-DOS 上て、もこの方式が使われるよう イタリック します。 文字列定数 . タイプライタ体 WEB ファイルは , モシュールによって構 になってきました。 さて , WEB て、は , この diff の差分ファイ と使い分けるほか , 演算子については Tabl 成されています。各モジュールには , ルと同じ考え方て、 , 「チェンジファイル」と e 1 のような変換を行います。 ① TeX 部 . コメントを書く このほか WEAVE て、は , ドキュメントの ②定義部 : マクロを定義する いう機能を導入しています。 索引の生成も行います。 ③ PascaIÉß . プログラムを書く チェンジファイルの中には , が , この順序て、現れますが , どれも省略可 能て、す。 ( 変更前の内容 ) モジュールの先頭には、、 @ 凵クという記号を 書きます ( 編注 : 本稿て、は凵という記号は空 ( 変更後の内容 ) WEB の文法のすべてを紹介するのは頁数 白スペースの意味て、用いています ) 。いくっ @z の都合て、無理なのて、 , より詳しく知りたい かのモジュールをまとめて , グループとし という形式て、 , いくつかの変更内容が書か 方は , WEB のマニュアルて、もある論文 [ K てタイトルをつけることがて、きます。グル れています。 n83 ] を参照してください。この論文はスタ ープの先頭のモジュールには , 、、 @ 凵クの代わ これらのチェンジファイルによる変更を クと書きます。 ンフォード大学のテクニカルレポートて、す りにヾ @ * ・ ・・〃がグル 行ってから , プログラムやドキュメントの が , UNIXTeX などの配布ファイルに , w ープのタイトルーとして使われます。 生成を行いたいときには , TANGLE や WE ebman. tex という名前てこの論文の TeX のソ AVE を起動する際に ースが入っています。 TANGLE FILE. WEB FILE ℃ H 特集ドキュメント作成支援システム 25 WEAVE. EXE TeX の構造 WE の文法
ドキュメント作成支援システム 特集 ん。これは大きな問題て、す。 これを解決するには , ドキュメント部分 内容 の記述に , 一般の TeX のコマンドを直接使 プログラムのタイトルの指定 節の指定。節の名前 ( ) は目次と各頁の頭に印刷される うのて、はなく , テキストファイルにも変換 小節の指定。小節の名前 ( ) は目次に印刷される て、きるような形て、ドキュメントを書いてお 小小節の指定 という方式が考えられます。この方式 強制的に改頁を行う は , TeXinfo( 詳しくは Part 2 を参照 ) のア cnoweb のコードの終わりを示す ・・・をホールド体で印字する プローチと共通するものて、す。 ・・・をイタリック体で印字する つまり , Fig. 16 のように , ひとつの WE ・・・をタイプライタ体で印字する B ファイルから , をそのまま ( ve 「 batim ) 印字する。 C のコードをコメントの中に入れる ときに使う ① Pasc 引などのプログラムのソース ② TeX で書かれたドキュメント * く > * といった , ③テキストファイル形式のドキュメント 言葉を使わないて、短い記号だけて、定義した マクロをわざわざ用意したのは , cnoweb て、 の三つを生成て、きるようなシステムが , 将 ( ノ 来のプ召グラム・ドキュメント管理システ 書かれたソースが , TeX に通さなくてもそ ムとして望ましいのて、はないて、しようか。 のまま工デイタ上て、読む場合に読みにくく CWEB の項て、も書きましたが , WEB はド ならないようにという配慮と思われます。 キュメントの記述に TeX を使っているの [ 参考文献 ] て、 , WEB システムて、生成したドキュメント コメント以外の箇所に書かれた C のソース コードは , タイプライタ体 (cmtt) て、印刷さ この記事て、参照した文献のほか , 文芸的 は , ・プリントアウトする プログラミングおよび WEB に関連するおも れます。 WEB のように , 複数文字からなる ・グラフィック端末上で TeX のプレビューア な文献をまとめておきます。このほかにも , 演算子をほかの記号に置き換えたり , 予約 CSS91] に紹介されているものなど , 多く を使う 語のフォントを変えるといった高度な ( ある という方法て、しか見ることがて、きません (T の文献が発表されています。 いは「お節介な」 ) 処理は行いません。ただ COp80] "Prettyprinting", Derek C. Op eX のソースをそのまま読む気があれば別て、 し , 字下げだけは cnoweb が判断して変更し すが ) 。 pen, ACM Transactions on Progra ます。 前者は森林資源の浪費を招きますし , 後 mming Languages and Systems, VO もちろん , マクロなど , プログラミング 者を実用的に使うには , 高解像度かつ高速 言語を支援する機能は一切用意されていま 1. 2 , No. 4 , October 1980. CNa81] 「コンパイラ』 , 中田育男 , 産業図 な端末を必要とします。 せん。 また , これはいずれの方法についてもい 書 , 1981. 一般性の低いトリッキーな方法て、ある , CKn83] "The WEB System of Structu えることて、すが , ドキュメントの中て、必要 と cnoweb を批判することは可能て、すが , T red Documentation", Department Of な部分を探すときに , 索引を使うことしか ANGLE や WEAVE による変換がいらない て、きず , せつかく計算機て、ドキュメントを Computer Science, Stanford Univer という特徴から生じる , ・変換に要する時間がかからない 管理しているのにもかかわらず , 文字列サ sity, Technical Report CS980 , 1983. CKn84] "Literate Programming", Don ・変換によってエラー箇所がわかりにくく ーチなどの恩恵にあずかることがて、きませ なることがない Fig. 1 6 WEB と TeXinfo の融合 ・どんな環境でも , C コンパイラと TeX さえ あれば使える ( 移植性が高い ) といった点は評価て、きます。また , WEAV E に通す前の WEB ソースがそれほど読みや すいとはいえないのに対して , cnoweb のソ ース &(TeX のマクロをそれほど使わなけれ ば ) そのままて、も読みやすい形式になってい るといえます。 Table 3 cnoweb のマクロ マクロ *title{ ・・ *section{•• %subsection{ ・・ %subsubsection{ *newpage %endc W の課題 プログラムのソース → TeX のドキュメント →テキストファイル形式の ドキュメント 共通のソース ここは WEB で実現されている ここは TeXinfo で実現されている 特集 ドキュメント作成支援システム 33
ドキュメント作成支援システム 特集 ため , MS-DOS て、はかなり小さいドキュメ るために特化しています。 QuickHelp はプ ントて、もメモリが足りなくなってしまうと リントアウトすることは考えていません。 いうふたつの欠点があるために日本語の , また , 普通の整形プログラムが当然持って かっ MS ー DOS 環境の上て、は非実用的て、す。 いる索引やクロスリファレンス , 目次など の機能もありません。しかし画面を制御す プリントアウト るための命令は豊富て、 , テキストに色をつ TeXinfo に近いシステムについて調べてみ 一方 , TeXinfo ファイルからプリントアウ ましよう。前にあげた UNIX の man は TeX けることがて、きます。 ⅲ fo の直接ライバルとなるものて、すが ( とは また , 画面の一部をスクロールさせない トするときは普通 TeX を使います。 TeX は とくに UNIX の世界て、広く使われている高性 いっても TeXinfo が一方勝ちて、すが ) , それ以 ようにすることもて、きます。プ化ダウンメ ーを使うこともて、き , どのようなメニ 能テキスト整形 / 印刷システムて、す。 TeX は 外にもヘルプシステムはいくつもあります。 ハイバーテキストに , テキストだけて、なく 一項目を表示するかを指定することもて、 強力なマクロ機能を持っており ,texinfo. te x というマクロセットを使うことて、 TeXinf 絵や音が表現て、きるようにしたものをハイ きます。さらに , マウスを使ってある特定 0 て、書かれたソーステキストを直接 , 整形し パーメディアというそうて , 最近進歩の著 の単語をクリックしたとき , 別のトヒ。ックに ジャンプすることもて、きます。 しい分野て、す。ハイバーメディアは単体て、 てプリントアウトて、きます。 ひとつの作品として成立していることも多 しかし , TeX は最近は MS ー DOS て、も使わ これらは , Emacs の最低限の画面上の表 いのて、すが , それをオンラインマニュアル 現能力の下て、使うことを前提にした info には れるようになってきたというものの , フォ の一種と考えることもて、きます。しかしそ ない機能て、す。逆に inf 。は貧弱な画面の下て、 ントなどて、ディスクを圧迫すること , また こまて、範囲を広げると話が拡散してしまう も使うことがて、きるためにポータビリティ 処理速度の問題から , MS-DOS て、使うには のて、 , テキストべースて、 , MS-DOS て、一般 多少勇気がいります。 は非常に高くなっています。 に利用て、きるものという条件に限定するこ Quick Help のヘルプファイル本体は圧縮 finfo とにしました。そのような経緯て、取り上げ のかかった特殊な形式となっており , Quic たのは Quick HeIp と TTHELP て、す。 kHeIp 形式という人間が読める形のファイ TeXinfo それ自身は決して複雑なシステム ルから helpmake というプログラムを使って て、はないのて、すが , それを処理するソフト •ck Help 圧縮された形式に変換します。 ウェアが UNIX ( 並に大きなシステム ) プロバ ーなものばかりだったために , MS-DOS て、 本記事は Quick HeIp にこだわるのが主目 マイクロソフトの開発環境に使われてい の利用は困難て、した。 的てはないのて、 , Quick HeIp のサンカレを提 示するだけにします ( List 7)。前に UNIX の るヘルプシステムを Quick HeIp といいま 今回紹介する finfo というシステムは , 小 man のところて、も使った Uni ライプラリて、 規模なコンピュータて、も TeXinfo を利用て、き す。 Quick HeIp もハイバーテキストて、す るように , GNUEmacs や TeX を使わずに が , TeXinfo とは多少考え方が違います。 す 0Fig. 18 がヘルプを見ているときの画面 て、す。なお , ヘルプファイルを作るには , info ファイル / プリントアウトを作成て、きる QuickHelp はオンラインマニュアルを作 Fig. 19 幵 HELP のサンプル画面 Fig. 18 Quick He ゆのサンプル画面 ようにしたシステムて、す。 Te ー fO に近いシステム くくく TTHELP > > > Ver 1. Ccpynght (C) 19 O 戸田プロダクション 面 1 ライプラリで提供されるライプラリ関数を説明します . これらの関数を 使う場合には , ソースファイルの頭で下のように um. h を取り込んで下 さい . #lnclude く unl. れ > ライプラリ詳説 : 物 1 ライプラリで提供 使う場合には , ソースファ #lnclude く unl. h 〉 wtd 」 説明します . これらの関数を に um. h を取り込んで下さ 参照 く urll—lnitlallze> く unl—draw> く um—erase> くす 描消 - しをを 初ウウ i—lnltla11Z unl—draw unl—era* 51 ライプラリ インストール 利用方法 特集 ドキュメント作成支援システム 37
特集 ドキュメント作成支援システム ・プログラムの可読性の向上 ・プログラムとドキュメントの間の一貫性 の向上 といった大きなメリットが得られます。 しかし , それだけて、はありません。文芸 的プログラミングの提唱者て、ある DonaldE rvinKnuth は , 文芸的プログラミングは , 「作品として鑑賞できるプログラム」を 作ること て、ある , と主張しています。 従来のプログラムは , 基本的に「計算機に 読ませるため」に書かれていました。もちろ ん , あとから保守がしやすいように , ある この 程度人間が読みやすいようにすることはあ りましたが , それはあくまて、二次的なもの て、した。 文芸的プログラミングて、は , 「プログラム は計算機と人間の双方が読むためのものだ」 ということを意識します。そのため , 文芸 的プログラミングによって作られた「文芸的 プログラム」からは , 機械が実行て、きるプロ グラムと , 人間が作品として鑑賞て、きる文 芸作品としてのドキュメントの両方を生成 することがて、きます。 したがって , 文芸的プログラミングを実 現する言語は , その中に , ドキュメントを 記述する言語と , プログラムを記述する言 語を含んて、いなければいけません。また , それらの間の調整などを行うための , 文芸 的プログラミングそのもののための言語要 素も必要て、す。 以上のことから , 実際の文芸的プログラ ミングはとつつきにくく , プログラムだけ を単純に書く場合と比べて , 記述中の労力 は確実に増えます。 しかし , 保守管理まて、も含めた総合的な 労力を考えると , 決してその苦労はムダに はなりませんし , 「他人に鑑賞してもらえる プログラム」が書けたときの喜びはなにもの にも代えがたいて、しよう。 もっとも , 落語の『寝床』のように , 自 作の「芸術作品」を無理やり人に押しつける 人が出てくると困りますが・・ W の概要 この文芸的プログラミングを実現する言 語の一例として , Knuth は「 WEB 」という言 語を設計しました。さらに , WEB て、書かれ たソースをプログラムおよびドキュメント に変換するシステムとして , WEB システム を作りました。 TeX ( 文書整形システム ) , METAFONT ( フォント生成システム ) など , Knuth が近年 文書整形言語として TeX が選ばれたの の三つが混在することになります。 ・ WEB 独自の命令 ・ PascaI の命令 ・ TeX の文書整形コマンド す。そのため , WEB のソースて、は , ログラミング言語に Pascal を使っていま WEB は , 文書整形言語に TeX を使い , プ WEB を使って記述されています。 作成したソフトウェアのほとんどは , 前の由来 て使われていない数少ない単語のひとつ ・ 3 文字単語の中て、 , コンピュータ用語とし tes の頭文字 ・ Knuth の義母の名前 WiIda Ernestine Ba ・「織物・編み物」を意味する英単語が web すが , 83 ] , [ Kn84 ] などにいろいろ書かれていま WEB という名前の由来については , CKn 度しかありませんて、した。 ング言語というと , FORTRAN と Pascal 程 は , 多くの計算機上て、動く汎用プログラミ B の最初のバージョンが設計された当時に れていた」という理由によるものて、す。 WE の汎用プログラミング言語として広く使わ のは , 「 WEB の設計当時 ( 1981 年 ) , 教育用 プログラム言語として Pascal が選ばれた たからて、しよう。 は , やはり Knuth が自分自身て、設計・制作し という理由のようて、す。「織物・編み物」と いうのは , プログラムとドキュメントを縦 糸と横糸のように編んて、いくという WEB の 特徴を表しています。 また , WEB システムを構成するツールて、 ある WEAVE および TANGLE という名前 は , それぞれ「織る・編む」「からませる・も つれさせる」いう意味の動詞て、す。 初めに , 以下て、使う表記法について説明 します。 WEB のように , 多くの言語を扱うシステ ムて、は , 「コンパイラ」や「トランスレータ」 といっても , それがどの言語からどの言語 への変換を行う処理系なのか , また , その 処理系自身はどのような言語て、書かれてい るのか , という点を常に意識していないと 頭が混乱してしまいます。 こて、は CNa81] に紹介され そのため , ている表記法をアレンジした表記法を使っ て , 言語や処理系間の関係を表します。 こて、採用する表記法て、は , 言語 X て、書か れたプログラムを Fig. 1 のように表現しま す。 また , ソース言語 SL からオプジェクト言 語 OL への変換を行う , 言語 X て、書かれたト ランスレータ ( またはコンパイラ ) を Fig. 2 て、 表します。とくに必要がなければ , X は省略 することがあります。 たとえば , Pascal から機械語へのトラン スレータ ( つまり Pascal コンパイラ ) を使っ て , PascaI て、書かれたソースを機械語へ変 換するという過程は , これらを組み合わせ て , Fig. 3 のように表現します。 さらに , この PascaI コンパイラ自体が C 言 語て、書かれていた場合 , その Pascal コンパ イラを C コンパイラを使ってコンパイルする 過程は , Fig. 4 のように表します。 この表記法は , 複雑な生成関係を表すの にたいへん便利なのて、すが , 図を計算機上 表記法 特集ドキュメント作成支援システム て、書いていると一見テトリスをやっている 21
List 8 つまり TeXinfo は , 派手な , つまり字に色 をつけたり反転したりあるいは図を入れた りといったドキュメントを作ることを苦手 とします。逆にいえば , 派手さが必要ない 専門的なプログラムのマニュアル ( GNU のソ フトウェアは総じて専門的て、すね ) を書くた めのものて、あるということがて、きます。 とはいえ , このように表示能力が貧弱て、 あることによる利点もあります。それはポ ータビリティが極めて高いという点て、す。 たとえば MS ー DOS 上て、も簡単に動かすこと がて、きますし , またマクロ機能を持った工 デイタて、あればマクロを作れば工デイタの 中から info ファイルを見ることもて、きます。 実際に今月の付録ディスクの中には , Br ief のマクロて、書かれた info プラウザが入っ ています。自分の好きな環境の上て、使える ということはヘルプシステムとしては重要 て、す。 ##HE LPC OLOR=GREEN & & Uni ライブラリ & & インストール & & ライブラリ詳説 ライブラリ詳説 FUNCTIONS Un i ライプラリで提供されるライブラリ関数を説明します . これらの関数を 使う場合には , ソースファイルの頭で下のように un i. h を取り込んで下 ##HE LPCOLOR =WH IT E #include く uni. h> ##HELPCOLOR =GREEN &&uni initialize & & izdraw &&un i_erase & & Uni ライブラリ & & インストール & & 利用方法 unl_initialize UNI_INITIALIZE ##HELPCOLOR=WHITE void uni initialize(); ##HE LPCOLORZGREEN プログラムが起動した時にこの関数を必ず Un i ライブラリを使う場合には , 呼んで下さい . &&uni_initialize &&un i_d raw &&uni erase & & Uni ライブラリ & & 利用方法 uni_draw UN I_DRAW ##HELPC OLOR =WH ITE int C010r , int attr) : int uni draw(int x, int Y, ##HELPC OLOR=GR EEN ピクセル座標 ( x , y ) に色 C010r , 属性 attr でウニを描きます . C010r , attr の 意味は次の通りです . どうたらこうたら . 描いたウニを消したい時には uni—erase を使って下さい . &&uni initialize &&un i d raw &&uni erase & & Uni ライブラリ & & インストール & & 利用方法 um_erase UN I_ERA SE ##HELPCOLOR=WHITE int uni_erase(int x, int y) : ##HE LPCOLOR =GR EEN ピクセル座標 ( x , y) に , uni ー draw を用いて書かれたウニを画面上から消去し ます . &&uni initialize &&un i _d raw &&uni erase & & Uni ライブラリ & & インストール & & 利用方法 fin 0 TeXinfo の概論はこれくらいにして , 具体 的な話を始めましよう。 finfo は , MS-DOS て、使うために作られた TeXinfo 整形プログラ ムて、す。 finfo は ( 何と ! ) すべて perl て、書かれ ています。内部のことについてはあとて、述 finfo も , TeXinfo と同様に info ファイルと プリントアウト両方を作ることがて、きます。 どちらの場合ても finfo は fin を裏て、起動しま す (finfo は fin と info から作った合成語て、す ) 。 fin は MS-DOS て、広く使われているテキスト 整形プログラムて、す ( 付録ディスクに efin に 合わせて収録 ) 。 fin は TeX に比べるとずっと軽いシステム なのて、小さな計算機にもインストールする ことがて、きるて、しよう。プリントアウトの 品質は fin の品質というわけて、すが , 正直に いって TeX て、出力したものと比べるとその 差は歴然としています。しかし , ノヾソコン て使われている一般的なワープロて、出力し 40 C MAGAZINE 1992 3
ドキュメント作成支援システム 特集 List 7 参照 初期化 く uni_initialize> ウニを描く く uni draw 〉 ウニを消す く uni_erase> . context uni_initialize . freeze 3 Up: }aFunctions*vFunctions#v Next uni initialize VOid uni_initialize();}p Uni ライブラリを使う場合には , プログラムが起動した時にこの関数を必ず 呼んで下さい . . context uni_draw . freeze 3 prev:*auni_initia Up•.}aFunctions*vFunctions}v Next:*auni_erase*vuni_erase un i _draw lize}vuni_initialize*v #bint uni_draw(int X, int y, int C010r , int attr) ;*p ピクセル座標 (*bx}p, }by}p) に色 \ bcolor \ p , 属性 #battr*p で ウニを描きます . }bcolor#p, \ battr \ p の意味は次の通りです . どうた らこうたら . 描いたウニを消したい時には }buni—erase}vuni_erase%v}p を使って下さい . . context uni_erase . freeze 3 prev : i _eras e}vun i _erase#v Up:*aFunctions}vFunctions}v unl_erase }bint uni_erase(int X, int y) ;*p ピクセル座標 (}bxyp, }by*p) に , #buni_draw*vuni—draw*v}p を用いて書かれたウニを画面上から 消去 します . . context h. title UniLib Reference Manual Te nfo の弱点 TeXinfo にも弱点はあります。 Quick H elp と比較してみればすぐにわかるのて、す が , とにかく画面上て、の表現能力が低いの て、す。文字の強調表示や下線引き , 反転表 示などは普通の端末て、あればて、きます。実 際に UNIX の man て、使われる nroff て、もその 程度のことはやっています。 しかし , info は Emacs という文字をそのま ま表示するしか能力のないエデイタの上て、 使われるものなのて、 , すべてが目に見える テキストになっています。たとえば強調表 示は , このように * 強調 * します 、、 * 〃と、、 * 〃の間にテキストを書くだけ て、す。 もちろん , このようなテキストを表示す るときパーズしなおし , たとえば * の部分は強調表示に直すとか , クロスリフ ァレンスの項目は色を変えるなどの努力を info プラウザの中て、行えば , それなりに美し い画面を作ることも可能て、す。 実際 ,Epoch という Emacs の X ウインドウ インタフェイスを強化したエデイタがあり ます ( これは近い将来リリースされる Emac s 19 版のプロトタイプて、あるともいわれてい ます ) 。この Epoch に含まれている hyper-m an というパッケージを使って info ファイルを 見ると , マルチウインドウを駆使してノー ドごとにウインドウを切って , さらにノー ドへッダやメニュー項目などは色を変えて 表示します。 プリントアウトするときはフォントの切 り換えくらいはて、きますが , 絵や図を入れ ることはて、きません。また , オンラインマ ニュアルのほうに合わせるためか , TeX が 本来持っている数式の整型機能もあえて捨 てています (TeX にエスケープするという技 を使えばて、きることはて、きるのて、すが , うして書いた部分は info て、は見えません ) 。 特集ドキュメント作成支援システム 39 幵 HELP 形式のサンプル ) 形式 List Un i ライブラリ UNILIBRARY Uni ライブラリは MS ー DOS の画面にウニを描くことを可能にするスーパーなラ イブラリセットです . うんぬんかんぬん . & & インストール & & 利用方法 & & ライブラリ詳説 インストール I NSTALL libuni. lib を標準ライブラリディレクトリに置いて下さい . 標準ライブラ リディレクトリとは環境変数 LIB の指すディレクトリです . また , uni. h を標準インクルートディレクトリ ( 環境変数 INCLUDE の指すディ レクトリ ) に置いて下さい . 以上でインストールは完了です . &&Un i ライブラリ & & 利用方法 ライブラリ詳説 利用方法 USAGE ソースプログラム中に Un i ライブラリ関数を呼び出すコード を書き , リンク時に *. obj ファイルに加えて 1 ibun i. 1 i b を指定して下さい . ##HELPCOLOR=WHITE link f00. obj bar. obj libuni. lib