[HOME]: [Mac OS X]: [MacPython]: [Emacs]: [生存報告記]: [MacEmacs JP Project]: [NTEmacs JP Project]:

概要

DocBookがあまりにひどいのでほかの文書記述用XML形式を探していたときに見つけたもの。

とりあえず日本語とかは問題ないし、最低限の機能は実装されている。

初期設定の色が派手すぎたり、出力するHTMLやLaTeXの一部が変だったりするのはご愛嬌だと思っている。

最近の文書は大概SmartDoc形式で記述している。

公式サイト

http://www.smartdoc.jp/

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

SmartDocTask SourceForge.jp: Project File List

texi2sdoc


CategoryDocumentation