Cygwin+Meadow環境でのDocBook

外へ持ち歩く Windows ノートで前ページと同様のことができる環境を作ろうと思った時、再び苦労したので、ここにまとめることとなった。佐藤卓史さんの「Windows 上での DocBook 編集環境の構築について」を徹底的に参考にしつつ、そこで述べられているXML版 DocBook だけでなく SGML版DocBookの作成も両立できるよう少し工夫をしてみた。私は翻訳する元ドキュメントとの互換性の都合で未だに SGML版の DTD は 4.1、 XML版は 4.2 を使っているが、あなたの環境に応じて適宜読み替えていただきたい。

蛇足であるが、 Cygwin と Meadow について軽く説明しておく。 Cygwin (「シグウィン」と私は呼んでいる) は、 Windows 上で働く DLL の集まりで、 UNIX ライクなシステムコール (API) を扱える環境を作る。例えば、 Cygwin インストールディレクトリをルートディレクトリと見立てた、 ls /etccd /usr/bin/hoge などとったスラッシュによるパス指定が可能になる。ただし、エミュレータではなく API を ラップ するだけなので、諸々のユーティリティの実行ファイルやら何やらは win32 用にコンパイルされていなくては動かない。エミュレータでないということの恩恵は、動きが軽いという点だ。また、そうしたライブラリだけでなく、 win32 用にコンパイルされたありとあらゆる UNIX ツールも網羅している。

Meadow (メドウ) は、 元々は Emacs を日本語環境を強化しつつ Windows プラットフォームへ移植しようというプロジェクトだったようだが、今では一個の Windows 版 Emacs クローンとして独自の地位を確立し、さまざまな拡張も加えられ、われわれ日本人には非常にありがたいソフトウェアとなっている。

Cygwinのインストール

基本インストール

Cygwin のホームページから setup.exe をダウンロードする。このファイルは以後のパッケージ管理でも度々使用することとなるので、例えば D:\cygwin など、ちゃんとしたディレクトリを作って保存しておくことをお勧めする。また、セットアップを行うと、その時ダウンロードしたパッケージ (*.tar.bz2) がミラーサイト毎にフォルダに分類され、このディレクトリ下にキャッシュされる。この段階ではデフォルトで選ばれているパッケージだけ入れればいいが、その他にひとつだけ;

オプションパッケージ

分類 パッケージ
Devel make

は、後でどのみち必要になるので選択しておこう。インストーラの View というボタンをクリックすると、分類を無視してパッケージ名がアルファベット順にリストされて見つけやすい。 Cygwin のインストール先はデフォルトの %SYSTEMDRIVE%\cygwin のままとし、間違ってもスペースや日本語を含むパスにはインストールしないように。 C:\cygwin にインストールした場合、そこが Cygwin 上のルートディレクトリとなり、例えば /usr/binC:\cygwin\usr\bin を指すことになる。この他に必要となるパッケージは DocBook XML を使うのか DocBook SGML を使うのか両方やりたいのかによって異なるので、後で追加することにする。

Windowsの環境変数の整備

「マイコンピュータ」の「プロパティ」の「詳細」の「環境変数」で、 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

DocBook XML を使う場合に必要なオプションパッケージ

先ほどの Cygwin setup.exe をもう一度起動すると、パッケージの追加や削除ができる。 DocBook XML の編集や変換を行うために必要なパッケージは以下の通り。

分類 パッケージ
text docbook-xml42
text libxml2
text docbook-xsl
text lib-xslt

DocBook SGML を使う場合に必要なオプションパッケージ

実は、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

Meadowのインストール (DocBook XML/SGML共通)

Meadow NetInstall から Meadow 2.xx の setup-ja.exe をダウンロードする。 Cygwin の setup.exe と同様、このファイルは機能の追加や削除で後々使うことになるので、例えば D:\meadow\ など、使い捨てでないディレクトリに保存しておく。インストールでは (完全に佐藤卓史さんの受け売りになるが);

PSGMLのインストール

PSGML は Meadow には含まれていないので、別途ダウンロードして加えてやる必要がある。

ドットemacsの編集

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" というワイルドカード指定の行を削除すればいい。少なくともここで述べた利用法では削除しても問題は起きていない。