G.4. 文檔寫作

SGMLDocBook 沒有受到過多的開放源碼寫作工具的影響. 最常用的工具集是帶有合適編輯模式的 Emacs/Xemacs 編輯器. 在一些系統上 這些工具在典型的完全安裝時是一並安裝的.

G.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 校驗此文檔. (不過你在制作整個文檔集的時候要把這行拿走.)

G.4.2. 其他 Emacs 模式

GNU Emacs 帶有不同的 SGML 模式, 不過並不象 PSGML 那麼強大, 但是它比較少讓人混淆的東西而且比較小巧.同樣, 它也提供語法高亮(字體鎖),也是很有幫助的.

Norm Walsh 提供一個 用于 DocBook 的主模式,也有字體鎖和一些可以減少擊鍵的特性.