B.4. 文档写作

SGMLDocBook 没有受到过多的开放源码写作工具的影响. 最常用的工具集是带有合适编辑模式的 Emacs/Xemacs 编辑器. 在一些系统上 这些工具在典型的完全安装时是一并安装的.

B.4.1. Emacs/PSGML

PSGML 是最常用和最强大的编辑 SGML 文档的工具. 如果正确的做了配置,它将允许你使用 Emacs 插入标签和检查标记一致性。 你也可以把它用于 HTML.看看 PSGML web 站点 获取下载,安装指导,以及详细文档.

关于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-default-dtd-file "./reference.ced")
(setq sgml-exposed-tags nil)
(setq sgml-catalog-files '("/usr/local/share/sgml/catalog"))
(setq sgml-ecat-files nil)

(autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t )

并且在同一个文件里增加一条记录,把 SGML 加入(现存的)自动模式别名的定义中 (auto-mode-alist):

(setq
  auto-mode-alist
  '(("\\.sgml$" . sgml-mode)
   ))

目前,每个 SGML 源文件在末尾都有下面的块:

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"./reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:("/usr/lib/sgml/catalog")
sgml-local-ecat-files:nil
End:
-->

这些东西会给你设置一些编辑模式参数--即使你没有设置你的 ~/.emacs 文件,不过有点糟糕的是, 因为你遵循的是上面的安装步骤,那么此目录路径将和你的位置不匹配. 因此你可能需要关闭本地变量:

(setq inhibit-local-variables t)

PostgreSQL 的发布版包含一个已经分析好了的 DTD 定义文件 reference.ced. 当使用 PSGML 时,有一个让自己在这些分离的文件上干活方便些的办法: 就是你在编辑它们的时候插入合适的DOCTYPE 定义. 例如,如果你在这个源文件上干活, 这是一个附录章节,因此你将通过把第一行标记成象下面的样子 从而把这个文档声明为一个 DocBook 文档的"附录"(appendix):

<!doctype appendix PUBLIC "-//OASIS//DTD DocBook V3.1//EN">

这意味着任何或所有读取 SGML 的软件将能正确读取这份文件,并且我可以用 nsgmls -s docguide.sgml 校验此文档. (不过你在制作整个文档集的时候要把这行拿走.)

B.4.2. 其他 Emacs 模式

GNU Emacs 带有不同的 SGML 模式, 不过并不象 PSGML 那么强大, 但是它比较少让人混淆的东西而且比较小巧.同样, 它也提供语法高亮(字体锁),也是很有帮助的.

Norm Walsh 提供一个 用于 DocBook 的主模式,也有字体锁和一些可以减少击键的特性.