外へ持ち歩く Windows ノートで前ページと同様のことができる環境を作ろうと思った時、再び苦労したので、ここにまとめることとなった。佐藤卓史さんの「Windows 上での DocBook 編集環境の構築について」を徹底的に参考にしつつ、そこで述べられているXML版 DocBook だけでなく SGML版DocBookの作成も両立できるよう少し工夫をしてみた。私は翻訳する元ドキュメントとの互換性の都合で未だに SGML版の DTD は 4.1、 XML版は 4.2 を使っているが、あなたの環境に応じて適宜読み替えていただきたい。
蛇足であるが、 Cygwin と Meadow について軽く説明しておく。 Cygwin (「シグウィン」と私は呼んでいる) は、 Windows 上で働く DLL の集まりで、 UNIX ライクなシステムコール (API) を扱える環境を作る。例えば、 Cygwin インストールディレクトリをルートディレクトリと見立てた、 ls /etc や cd /usr/bin/hoge などとったスラッシュによるパス指定が可能になる。ただし、エミュレータではなく API を ラップ するだけなので、諸々のユーティリティの実行ファイルやら何やらは win32 用にコンパイルされていなくては動かない。エミュレータでないということの恩恵は、動きが軽いという点だ。また、そうしたライブラリだけでなく、 win32 用にコンパイルされたありとあらゆる UNIX ツールも網羅している。
Meadow (メドウ) は、 元々は Emacs を日本語環境を強化しつつ Windows プラットフォームへ移植しようというプロジェクトだったようだが、今では一個の Windows 版 Emacs クローンとして独自の地位を確立し、さまざまな拡張も加えられ、われわれ日本人には非常にありがたいソフトウェアとなっている。
Cygwin のホームページから setup.exe をダウンロードする。このファイルは以後のパッケージ管理でも度々使用することとなるので、例えば D:\cygwin など、ちゃんとしたディレクトリを作って保存しておくことをお勧めする。また、セットアップを行うと、その時ダウンロードしたパッケージ (*.tar.bz2) がミラーサイト毎にフォルダに分類され、このディレクトリ下にキャッシュされる。この段階ではデフォルトで選ばれているパッケージだけ入れればいいが、その他にひとつだけ;
オプションパッケージ
分類 | パッケージ |
Devel | make |
は、後でどのみち必要になるので選択しておこう。インストーラの View というボタンをクリックすると、分類を無視してパッケージ名がアルファベット順にリストされて見つけやすい。 Cygwin のインストール先はデフォルトの %SYSTEMDRIVE%\cygwin のままとし、間違ってもスペースや日本語を含むパスにはインストールしないように。 C:\cygwin にインストールした場合、そこが Cygwin 上のルートディレクトリとなり、例えば /usr/bin は C:\cygwin\usr\bin を指すことになる。この他に必要となるパッケージは DocBook XML を使うのか DocBook SGML を使うのか両方やりたいのかによって異なるので、後で追加することにする。
「マイコンピュータ」の「プロパティ」の「詳細」の「環境変数」で、 HOME を新規定義、 PATH の値を追加する。 HOME はいつも使用する Windows ユーザのマイドキュメントディレクトリの実体パスがよく用いられるようだが、ここでは例として D:\Home\hoge とする。
環境変数 | 追加する値 |
HOME | D:\Home\hoge |
PATH | C:\cygwin\usr\local\bin;C:\cygwin\usr\bin;C:\cygwin\bin;C:\cygwin\usr\X11R6\bin |
先ほどの Cygwin setup.exe をもう一度起動すると、パッケージの追加や削除ができる。 DocBook XML の編集や変換を行うために必要なパッケージは以下の通り。
分類 | パッケージ |
text | docbook-xml42 |
text | libxml2 |
text | docbook-xsl |
text | lib-xslt |
実は、SGML版 DocBook に関するパッケージは Cygwin 本家にはない。そのため、 setup.exe を最低でもあと 2回実行しなければならない。
まず、本家にあるものからインストールすることにしよう。以下のパッケージにチェックをつけてインストールする。
分類 | パッケージ |
text | OpenSP |
text | openjade |
DocBook SGML 関係のパッケージは、 Cygwin JE プロジェクトが提供してくれている。ファイルエリアから以下のパッケージをダウンロードして (例えば) D:\cygwin\je 下に保存する。そして、 Cygwin setup.exe で `Install from local directory' を選び、 `Local package directory' で D:\cygwin\je を指定してやれば、リストにこれらが現れるはずだ。
パッケージファイル名 |
docbook-sgml41-x.x-x.tar.bz2 |
docbook-dsssl-1.78-x.tar.bz2 |
sgml-common-0.6.3-x.tar.bz2 |
Meadow NetInstall から Meadow 2.xx の setup-ja.exe をダウンロードする。 Cygwin の setup.exe と同様、このファイルは機能の追加や削除で後々使うことになるので、例えば D:\meadow\ など、使い捨てでないディレクトリに保存しておく。インストールでは (完全に佐藤卓史さんの受け売りになるが);
PSGML は Meadow には含まれていないので、別途ダウンロードして加えてやる必要がある。
C:\Meadow\bin\Meadow.exe -batch -f batch-byte-compile C:\Meadow\site-lisp\psgml-1.3.2\*.el
Meadow の設定ファイルである .emacs は、 Windows 上の環境変数 %HOME% に指定されたディレクトリから読み取られる。よって、当例では D:\Home\hoge\.emacs がそれになる。かなり実践的なサンプル dot.emacs.ja が Meadow のインストールディレクトリに用意されているので、それを D:\Home\hoge\ へコピーしてひな形とし、編集してカスタマイズする。 DocBook の XML 4.2 と SGML 4.1 のどちらでも機能するようにしたのが、以下の記述だ。これは DocBook に関係する部分だけなので、適宜ペーストして使っていただきたい。単独ファイルはここに置いておく。 psgml の持つ変数の意味がもう少し詳しく知りたい人は前ページを参照のこと。
1: ;; define sgml mode 2: (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t) 3: (setq auto-mode-alist 4: (append (list 5: (cons "\\.sgml$" 'sgml-mode) 6: (cons "\\.sgm$" 'sgml-mode) 7: ) auto-mode-alist) 8: ) 9: 10: ;; define xml mode 11: (autoload 'xml-mode "psgml" "Major mode to edit XML files." t) 12: (setq auto-mode-alist 13: (append (list 14: (cons "\\.xml$" 'xml-mode) 15: ) auto-mode-alist) 16: ) 17: 18: ;; variables for xml-mode 19: (add-hook 'xml-mode-hook 20: (function (lambda() 21: (setq 22: sgml-catalog-files 23: '("C:\\cygwin\\usr\\share\\xml\\docbook\\4.2\\docbook.cat") 24: sgml-always-quote-attributes t 25: sgml-minimize-attributes nil 26: sgml-omittag t 27: sgml-shorttag t 28: sgml-declaration "/usr/share/sgml/xml.dcl" 29: sgml-xml-declaration "/usr/share/sgml/xml.dcl" 30: sgml-validate-command "onsgmls -wxml -s %s %s" 31: sgml-xml-validate-command "onsgmls -wxml -s %s %s" 32: ) 33: )) 34: ) 35: 36: ;; variables for sgml-mode 37: (add-hook 'sgml-mode-hook 38: (function (lambda() 39: (setq 40: sgml-catalog-files 41: '("C:\\cygwin\\usr\\share\\sgml\\docbook-sgml41\\docbook.cat") 42: sgml-validate-command "onsgmls -s %s %s" 43: ) 44: )) 45: ) 46: 47: ;; psgml common variables 48: (setq 49: sgml-auto-activate-dtd nil 50: sgml-auto-insert-required-elements t 51: sgml-balanced-tag-edit t 52: sgml-indent-data nil 53: sgml-indent-step nil 54: sgml-insert-missing-element-comment nil 55: sgml-live-element-indicator nil 56: sgml-custom-dtd '( 57: ("DocBook XML V4.2 (article)" "<?xml version=\"1.0\" encoding=\"UTF-8\"?> 58: <!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook XML V4.2//EN\" 59: \"/usr/share/xml/docbook/4.2/docbookx.dtd\">\n\r") 60: ("DocBook XML V4.2 (book)" "<?xml version=\"1.0\" encoding=\"UTF-8\"?> 61: <!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook XML V4.2//EN\" 62: \"/usr/share/xml/docbook/4.2/docbookx.dtd\">\n\r") 63: ("DocBook SGML V4.1 (article)" "<?xml version=\"1.0\" encoding=\"EUC-JP\"?> 64: <!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook V4.1//EN\">\n\r") 65: ("DocBook SGML V4.1 (book)" "<?xml version=\"1.0\" encoding=\"EUC-JP\"?> 66: <!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook V4.1//EN\">\n\r") 67: ) 68: )
<説明>
補足だが、 SGML/XML ファイルを Meadow 上で validate (C-x C-v) した時に 「`/etc/sgml/docbook-sgml*.cat' がない」 とウジャウジャうるさい場合には、 C:\cygwin\etc\sgml\catalog ファイルから CATALOG "/etc/sgml/docbook-sgml*.cat" というワイルドカード指定の行を削除すればいい。少なくともここで述べた利用法では削除しても問題は起きていない。