ditaa で遊ぶ

ditaa とは何?

ditaa (DIagrams Through Ascii Art) とは Java で書かれたコマンドラインユーティリティーであり、ascii art で描かれた図を bitmap 画像に変換してくれる。

+--------+   +-------+    +-------+
|  cRED  | --+ ditaa +--> |       |
|  Text  |   +-------+    |diagram|
|Document|   |!magic!|    |  cGRE |
|     {d}|   | cYEL  |    |       |
+---+----+   +-------+    +-------+
    :                         ^
    |       Lots of work      |
    +-------------------------+

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_example_2a578a2afbe23cddee9e49d09a9b94b027759b201.png

例は ditaa のページから。

例えばこうして遊ぶ。

/--------------------+                                    /------+ /------+
|                    |                                    |cBLK  | |cBLK  |
|                    | /--------------+ /---------------+ +------+ +------+
|       +------+     | |              | |               |
|       |      |     | |      +-------+ |               | +------+ +------+
|  cRED |      |     | |      |         |      +--------+ |      | |      |
|       +------+     | |      +-------+ |      |          |      | |      |
|                    | |              | |  cYEL|          |      | |      |
|                    | +--------+     | |      |          |      | |      |
|       +------+     |          |     | |      +--------+ |cBLK  | | cBLK |
|       |      |     | +--------+     | |               | |      | |      |
|       |      |     | |              | |               | |      | |      |
|       |      |     | |              | |               | |      | |      |
+-------+      +-----+ +--------------+ +---------------+ +------+ +------+
                       /--------------------+                   /------+
                       |                    |                   |      |
                       |                    |                   |      |
                       |       +------+     | /------+   +------+      +------+
                       |       |      |     | |      |   |        cYEL        |
                       |  cRED |      |     | |      |   +------+      +------+
                       |       +------+     | |      +--------+ |      |
                       |                    | |               | |      |
                       |       +------+     | |               | |      |
                       |       |      |     | |      +--------+ |      |
                       |       |      |     | |      |          |      |
                       |       |      |     | |      |          |      |
                       +-------+      +-----+ +------+          +------+

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_ascii_art_797e8f90a14f734481b0f0ef18aedf4574dd3fc2.png

Download

http://sourceforge.net/projects/ditaa/ からダウンロードするか、次のように svn でチェックアウトする。

$ svn co https://ditaa.svn.sourceforge.net/svnroot/ditaa ditaa

Emacs の Org-mode には同梱されている。そのままでは日本語の扱いに問題があるので 屯遁さんの jditaa を代わりに使用させていただいている。

使用法

コマンドラインから、

$ java -jar ditaaXXX.jar

ただし Mac OS X 10.6 では JDK6 のデフォルトのエンコーディングが SJIS となっており UTF-8 を扱う場合注意が必要。私は日本語を扱う場合次のようにしている。

$ java -Dfile.encoding=UTF-8 -jar jditaa.jar

構文

丸角

「/」や「」で丸角になる。

/-------+
|       |
|       |
+-------/

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_demo_01_ce82848f9a9849a084671465946361646e98e9e5.png

タグ

いくつかのタグが利用出来る。タグは「{ }」で括る。

            +-----------+
            |           |
            | Document  |
            |   {d}     |
            +-----------+   

+-----------+           +------------+
|           |           |            |
| Storage   |           |Input/Output|
|   {s}     |           |     {io}   |
+-----------+           +------------+

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_demo_02_fc58560fd1b621f193f8ec40e074832130445140.png

破線

横線の場合「=」、縦線の場合「:」をある要素のラインの どこか一箇所に 入れるとすべてが破線になる。

               +------------------=-------+   
               |                          |   
               |                          |   
               |                          |   
               +------------+-------------+
                            :
           /----------------+-----------------
           |                                  |
           v                                  v 
+---=------+-----------+             +--------+-------------+
|                      |             |                      |
|                      |             :                      |
|                      |             |                      |
+----------------------+             +----------------------+

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_demo_03_9ec707bf7835bee5f782efccf01591812245a575.png

ポイントマーカー

「*」をラインのどこかに入れることでその位置が特別にマークされる。

               *------------*-------------*   
               |                          |   
               *                          *
               |                          |   
               *------------*-------------*
                            |
           /-------*--------*---------*-------
           |                                  |
           v                                  v 
*----------*-----------*             *--------*-------------*
|                      |             |                      |
|                      |             |                      | 
|                      |             |                      |
*----------*-----------*             *----*-----------*-----*

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_demo_04_fec914e18af17cfd918fc5b4974165d1a24f85cc.png

カラーコードを挿入することでカラーリングができる。文法は「cXXX」だが「XXX」の部分は 16 進数 3 桁のカラーコード (Hexadecimal Triple Color Codes, Wikiここ など参照) で書く。人間が読めるコードでは「RED」「BLU」「GRE」「PNK」「BLK」「YEL」(赤・青・緑・ピンク・黒・黄) の六色が用意されている。

               /--------------------------   
               |                          |   
               |          cBLK            |   
               |                          |   
               ------------+-------------/   
                            |
           /----------------+-----------------
           |                                  |
/----------+-----------             /--------+-------------
|                      |             |                      |
|       c33F           |             |        cC02          |
|                      |             |                      |
----------------------/             ----------------------/

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_demo_05_a2602b555749619942f56ae853edaab0f32c6e70.png

テキスト挿入

ditaa 環境にはテキストを挿入できるが、日本語などの扱いには工夫が必要 (jditaa を使用)。Emacs のフォントの設定で日本語と ascii 文字の幅が揃うようにしておくと編集しやすい (carbon-font.el を利用すると手軽に実現される)。「o」を使って箇条書きの中黒を表現することもできる。「o」の前後には半角スペースが必要。

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_2daideshi12.png

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_demo_06_286140d67092dcb7a394b7522db9a52cdc75b383.png

Org Export

私は Emacs の Org-Mode を使用し始めたことをきっかけに ditaa の存在を知ったので、もっぱら Org-Mode からの利用がほとんどである。使用に際しては 屯遁さんの Emacs picture-mode の拡張日本語化 ditaa を利用させていただいている。Emacs 設定ファイルには次のように書いておく。

(setq org-ditaa-jar-path
      "/usr/local/share/emacs/site-lisp/org-mode/contrib/scripts/jditaa.jar") ; 適宜変更

ただし先にも書いたように OS X 10.6 では UTF-8 の扱いに問題があるので、退避作として Org-Mode 同梱の org-exp-blocks.el を以下のように修正して使用している (patch file)。なお Emacs 22.3 と org-mode 7.4 が使用環境である。

--- org-exp-blocks.el.orig  2011-04-24 10:54:26.000000000 +0900
+++ org-exp-blocks.el   2011-07-06 23:08:49.000000000 +0900
@@ -256,8 +256,8 @@
          (directory-files (or (file-name-directory out-file)
                               default-directory)))
         (with-temp-file data-file (insert body))
-        (message (concat "java -jar " org-ditaa-jar-path " " args " " data-file " " out-file))
-        (shell-command (concat "java -jar " org-ditaa-jar-path " " args " " data-file " " out-file)))
+        (message (concat "java -Dfile.encoding=UTF-8 -jar " org-ditaa-jar-path " " args " " data-file " " out-file))
+        (shell-command (concat "java -Dfile.encoding=UTF-8 -jar " org-ditaa-jar-path " " args " " data-file " " out-file)))
       (format "n[[file:%s]]n" out-file))
      (t (concat
     "n#+BEGIN_EXAMPLEn"
EDIT: 2011/07/07
常に UTF-8 で利用する場合 ~/.bashrc (or ~/.bash_profile) に
 export _JAVA_OPTIONS="-Dfile.encoding=UTF-8"
と書いておけば良い。ただ、その場合 Emacs を Dock や LaunchBar などのランチャから起動した場合反映されないので、設定ファイルにも
 (setenv "_JAVA_OPTIONS"
     (concat '"-Dfile.encoding=UTF-8" (getenv "_JAVA_OPTIONS")))

と書いておく。

HTML

HTML へのエクスポートに関しては、今書いている この記事 がすでに org2blog.el を使用して書いているので、表示結果は上来の ditaa の図で確認されるだろう。CSS ファイルを指定する場合次のように書いておく。

#+STYLE: <link rel="stylesheet" type="text/css" href="org.css">

LaTeX

LaTeX へエクスポートする場合、日本語を含む文章では次のように適宜 LaTeX_Class を指定しておく。こちらの記事 も参照。

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_latex_src1.png

C-c C-e d (org export as LaTeX, process to PDF and open PDF file) を実行。

https://skalldan.files.wordpress.com/2011/07/wpid-ditaa_latex1.png

One thought on “ditaa で遊ぶ

  1. I do trust all the ideas you have offered to your post.

    They are very convincing and will certainly
    work. Still, the posts are very brief for novices.
    May just you please lengthen them a little from next time?
    Thank you for the post.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s