概要
DocBookがあまりにひどいのでほかの文書記述用XML形式を探していたときに見つけたもの。
とりあえず日本語とかは問題ないし、最低限の機能は実装されている。
初期設定の色が派手すぎたり、出力するHTMLやLaTeXの一部が変だったりするのはご愛嬌だと思っている。
最近の文書は大概SmartDoc形式で記述している。
公式サイト
http://www.asahi-net.or.jp/~dp8t-asm/java/tools/SmartDoc/index_ja.html
インストール
http://www.smartdoc.jp/download/beta.zip
sudo java -cp setup.zip setup sudo chmod 755 /usr/local/bin/sdoc
マニュアル
配布物を解凍した中にarchive.jarというjarがあります。これをさらに解凍すると、docフォルダがあります。
この中にリファレンスマニュアルが同梱されていますので、説明を読んでHTMLを作成しておくとよいでしょう。
nxmlで SmartDocを記述する
psgmlは古く、ショートカット類も使いずらいため [[nxml-mode]] に移行しました。
smartdoc.rnc は 川幡様 が作成した物を http://sakito.jp/shared/smartdoc/ にバックアップしてあります。
(load "nxml-mode-20041004/rng-auto.el") (setq auto-mode-alist (cons '("\\.\\(xml\\|xsl\\|rng\\|sdoc\\|xhtml\\|html\\)\\'" . nxml-mode) auto-mode-alist))
smartdoc.rnc を持ってきてschemas.xmlに以下を追加
<uri pattern="*.sdoc" typeId="SDOC"/> <typeId id="SDOC" uri="smartdoc.rnc"/>
PGSMLでSmartDocを記述する
SmartDocModeが同梱されていますが、これがぼくは使いずらいので、psgml-modeで記述できるようにしています。
PSGMLでSmartDoc文書を書くを参考に改造した。
.emacsのsgml-custom-dtdに以下追加
("SmartDoc" "<!DOCTYPE doc PUBLIC \"-//Tomoharu Asami//DTD PureSmartDoc XML V1.0.0//EN\" \"file:////Users/sakito/etc/psgml/PureSmartDoc.dtd\">\n")
CATALOG.txtに以下追加
PUBLIC "-//Tomoharu Asami//DTD PureSmartDoc XML V1.0.0//EN" "PureSmartDoc.dtd"
ECAT.txtに以下追加
PUBLIC "-//Tomoharu Asami//DTD PureSmartDoc XML V1.0.0//EN" cdtd/PureSmartDoc.dtd
PureSmartDoc.dtdを改造してしまいます。
<!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "file:///Users/sakito/etc/psgml/xhtml-lat1.ent"> %HTMLlat1; <!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "file:///Users/sakito/etc/psgml/xhtml-symbol.ent"> %HTMLsymbol; <!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "file:///Users/sakito/etc/psgml/xhtml-special.ent"> %HTMLspecial; <!ATTLIST doc xml:lang NMTOKEN #IMPLIED> <!ATTLIST div xml:lang NMTOKEN #IMPLIED> <!ATTLIST div normalizer (none) #IMPLIED> <!ATTLIST span xml:lang NMTOKEN #IMPLIED> <!ATTLIST a href CDATA #IMPLIED> <!ATTLIST native format (html|latex2e|plain) #IMPLIED> <!ATTLIST native src CDATA #IMPLIED>
を付加し、titleなどの幾つかの要素を属性に変更します。
以下の関数を定義しておくと便利かもしれません。
(setq sdoc-command-line "sdoc") (defun sdoc () (interactive) (let ( (sdocbuf "*SmartDoc*")) (call-process sdoc-command-line nil sdocbuf nil (buffer-file-name)) (display-buffer sdocbuf) )) ;; ぼくはあまりC-cC-c(sgml-show-context)利用しないので以下に設定している。 (define-key xml-mode-map "\C-c\C-c" 'sdoc)
複数のSdocファイルをまとめてあつかう
<p src="hogehoge.sdoc" />
を記述する事で、外部のファイルを読み込む事が可能です。
以下のような方法もあります。
<?xml version='1.0' encoding="iso-2022-jp"?> <!DOCTYPE doc [ <!ENTITY sdocpart1 SYSTEM "/Users/sakito/doc/emacs21/part1.sdoc"> <!ENTITY sdocpart2 SYSTEM "/Users/sakito/doc/emacs21/part2.sdoc"> <!ENTITY sdocpart3 SYSTEM "/Users/sakito/doc/emacs21/part3.sdoc"> ]> <doc xml:lang="ja"> <head> <title>Emacs21</title> <author>sakito</author> <date></date> </head> <body> &sdocpart1; &sdocpart2; &sdocpart3; </body> </doc>
関連
SmartDocTask SourceForge.jp: Project File List