Appendix A. 付録

Table of Contents
Emacsen+psgmlな環境
日本のDocBook情報源

Emacsen+psgmlな環境

Emacs系のエディタを利用している方は多いと思われますが, Emacs系のエディタにはpsgmlと呼ばれるSGML/XMLの入力をサポートしたモードが用意されています. これは,既に [桐山先生の最後のアプリケーションガイド] で紹介されていますが, 今回はショートカットによる利用や筆者が利用してきて便利だなと思った設定について, いくつか説明させて頂きます.

もともとDocBookのDTDは巨大で300以上のタグがあり, その親子関係も覚えるのは絶対無理な世界です. psgmlはDTDを読み込み,その場所に書いても良いタグや属性だけを補間してくれることで, ユーザのドキュメント作成の負担を大幅に軽減してくれます.

ここでは,私が良く使う設定や利用法を中心に話を進めますが, 詳細はinfoを参照してください.

インストール

インストールはports/packagesを利用するのが便利でしょう. editors/psgml-*に各種Emacs対応のものが用意されていますので, これをインストールします. XEmacsなどでは標準でのインストールもされていますが, こちらの方が新しいので,こちらを入れておきましょう.

キーバインド

良く用いられるキーバインドをTable A-1に示します. XEmacsではマウスの右クリックで, タグや属性の候補の表示も可能です.

Table A-1.

キー対応する関数機能
Ctrl-c, Ctrl-e sgml-insert-element開始/終了タグを補間して挿入.
Ctrl-c, + sgml-insert-attribute属性を補間して挿入.必要に応じてその値の入力も求められる.
Ctrl-c, = sgml-change-element-nameタグを対応を取って変更する.
Ctrl-c, Ctrl-f, Ctrl-r sgml-fold-regionタグペアを折り畳む.アウトラインモードに相当.
Ctrl-c, Ctrl-s, sgml-unfold-line折り畳まれたタグを展開.

カスタマイズ

psgmlのカスタマイズは,普通のEmacsのカスタマイズ方法である, ‾/.emacsなどで変数を定義する方法と, コメント部分に変数の値を入れておく方法の2通り存在します. 毎回使う設定は前者で,特に個別に設定したい場合は後者を使うといいでしょう.

標準では,Tabによる自動インデントは効いていません. これを‾/.emacsによる設定で行った場合,次のようになります.

	  (setq sgml-indent-step 2)
	  (setq sgml-indent-data t)
	
また,文章の末尾にコメントを入れる場合は以下のようになります.
	  <!-- Keep this comment at the end of the file
	  Local variables:
	  mode: sgml
	  sgml-indent-step:2
	  sgml-indent-data:t
	  -->
	

特にコメントを入れる方法で対応したいのが, エンティティによるファイルの挿入時の親ドキュメントの明示です. これは,例えば以下のようになります.

	  <--
	  Local variables:
	  sgml-parent-document: ("index.sgml" "part" "sect1")
	  -->
	
この場合,エンティティで参照されたこのドキュメントのトップのタグはsect1 であり,親ドキュメントはindex.sgmlとなります.

TIPS

ここではいくつか知っておくと便利な機能を御紹介します.

DTDの変更

DOCTYPE宣言を書き換えるなどして,DTDが変更された場合,DTDの再読み込みが必要です. これにはSGMLメニュー中のReset Bufferを使います.

XHTMLでの利用

psgmlではファイルの拡張子が.htmlであれば, 自動的にSGMLモードになってしまいます. XHTMLで利用する場合,これを避けるためには以下のような方法があります.

  1. 明示的に M-x xml-mode として,変更する. HTMLで記述することがが中心で,XHTMLが少ない場合はこちらがよい.

  • 以下のような設定を‾/.emacsに入れておきます.

    		  (setq auto-mode-alist (cons '("¥¥.html$" . xml-mode) auto-mode-alist))
    		
    これは,.htmlな拡張子は全てXMLだと言っているので, 過去を忘れたい人向け.

  • 個別の設定はコメントで行う. つまり,次のように設定する.

    		  <!-- Keep this comment at the end of the file
    		  Local variables:
    		  mode: xml
    		  -->