SGML和DocBook的开源编写工具并不多。最常用的工具组合是Emacs/XEmacs编辑器加上适当的编辑模式。在某些系统上,典型的完整安装会包含这些工具。
PSGML是编辑SGML文档最常用、也最强大的模式。正确配置后,可以使用Emacs插入标签并检查标记一致性。它也可以用于HTML。下载、安装说明和详细文档请参阅PSGML 网站。
使用PSGML时有一点需要注意:它的作者假定主SGML DTD目录是/usr/local/lib/sgml。如果像本章示例一样使用/usr/local/share/sgml,就必须作相应调整,可以设置SGML_CATALOG_FILES环境变量,也可以定制PSGML的安装配置(其手册介绍了具体方法)。
将以下内容放入~/.emacs环境文件中(将路径名调整为适合你系统的值):
; ********** for SGML mode (psgml)
(setq sgml-omittag t)
(setq sgml-shorttag t)
(setq sgml-minimize-attributes nil)
(setq sgml-always-quote-attributes t)
(setq sgml-indent-step 1)
(setq sgml-indent-data t)
(setq sgml-parent-document nil)
(setq sgml-exposed-tags nil)
(setq sgml-catalog-files '("/usr/local/share/sgml/catalog"))
(autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t )
并在同一文件中为SGML加入一项,添加到现有的变量定义中。该变量是auto-mode-alist:
(setq
auto-mode-alist
'(("\\.sgml$" . sgml-mode)
))
使用PSGML时,你可能会发现,处理这些分别保存书籍各部分的文件,有一种方便的方式:在编辑时插入适当的DOCTYPE声明。例如,当前这个源码文件是一章附录,因此可以将它指定为 DocBook 文档的“appendix”实例,把第一行写成这样:
<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
这样,所有读取SGML的工具都能正确处理该文档,并且可以用以下命令验证文档:nsgmls -s docguide.sgml。(但在构建整套文档之前,需要移除这一行。)
GNU Emacs自带另一种SGML模式,功能不如PSGML强大,但更容易理解,也更轻量。它还提供语法高亮(font lock),这可能很有帮助。src/tools/editors/emacs.samples包含此模式的示例设置。
Norm Walsh 提供了一种专用于 DocBook 的主模式,也带有 font-lock 和若干减少输入量的功能。