PlantUMLなどでditaaを使用してみたが、ditaaは便利そうなのに日本語が非対応で残念。 しかし、日本語に対応したditaaも存在する。
これをpandocのフィルタと組み合わせて、pandocのマークダウンから直接、日本語ditaaを使用してみる。
作業ディレクトリ
jarファイルなどパスが通っているところに置かれていれば、どこでも良いと思うが、今回は~/bin
にパスを通して使用する。
jditaa.jarの入手
$ cd ~/bin $ wget https://github.com/luozengbin/dot.emacs.d/raw/master/extra/org-ditaa/jditaa.jar
pandoc filter(codeblock-diagrams.pl)の入手
$ cd ~/bin $ wget https://gist.githubusercontent.com/bpj/5454765371a4e3c1a8354fedced1cc6b/raw/0802b99341be3ca5abb3e1d49b1e6f5f79d367f3/codeblock-diagrams.pl $ chmod +x ./codeblock-diagrams.pl
フィルタをjditaaに対応するために修正する。
--- codeblock-diagrams.pl~ 2016-10-31 11:20:08.963133308 +0900 +++ codeblock-diagrams.pl 2016-10-31 11:21:13.333003211 +0900 @@ -93,7 +93,7 @@ my %ditaa; { my $loc = dirname(abs_path($0)); my $home = abs_path($ENV{HOME}); - my %jar = (png => "ditaa0_6b.jar", pdf => "DitaaEps.jar"); + my %jar = (png => "jditaa.jar"); JAR: while ( my($fmt, $name) = each %jar ) { PATH:
Pandoc::Elemntsの入手
$ cpan install Pandoc::Elements
実行コマンド
次のように使用する。
$ pandoc -F codeblock-diagrams.pl [-M dia_format=pdf|png] [PANDOC-OPTIONS] [FILE-NAME ...]
実行例
サンプル
```{.ditaa .no-separation scale=1.2 .fig_}
+----------+ +--------+ +--------+ +-----+ +-----+ +-----+
| | | | | | | | | | | |
| markdown |----->| pandoc |---->| output | | img | | img | | img |
| {d} | | | | {d} | | {d} | | {d} | | {d} |
| | +--------+ | | | | | | | |
+----------+ | ^ +--------+ +-----+ +-----+ +-----+
v | ^ ^ ^
+--------+ +--------+ | | |
| |-->| ditaa |-------+ | |
| filter | +--------+ | |
| |-->| dot |----------------+ |
| | +--------+ |
| |-->| rdfdot |-------------------------+
+--------+ +--------+
```
次のようになる。
[f:id:mickey_happygolucky:20161101033910p:plain]
日本語
```{.ditaa .no-separation scale=1.0 .fig_}
+----------+ +--------+ +--------+ +-----+ +-----+ +-----+
| | | | | | | | | | | |
| マーク | | | | | | | | | | |
| ダウン |----->| pandoc |---->| output | | img | | img | | img |
| {d} | | | | {d} | | {d} | | {d} | | {d} |
| | | | | | | | | | | |
+----------+ +--------+ +--------+ +-----+ +-----+ +-----+
| ^ ^ ^ ^
v | | | |
+--------+ +--------+ | | |
| |-->| ditaa |-------+ | |
| filter | +--------+ | |
| |-->| dot |----------------+ |
| | +--------+ |
| |-->| rdfdot |-------------------------+
+--------+ +--------+
```
次のようになる。
[f:id:mickey_happygolucky:20161101033916p:plain]
ditaaで絵を書くときはRictyなどの等幅フォントがよい。
「->classes is deprecated. Use [ split ‘ ’, $e->class ] instead」のエラー (2017/06/12 追記)
Ubuntu 16.04.2 LTS
でこれを実行すると、当時とはPerlのバージョンが異なっているせいか、上記のようなエラーが発生する。
指示に従って次のように修正する。
--- codeblock-diagrams.pl.old 2017-06-12 23:08:06.907006140 +0900 +++ codeblock-diagrams.pl 2017-06-12 23:24:31.336718744 +0900 @@ -162,7 +162,7 @@ print $document->to_json; sub codeblock_dia { my($code_block) = @_; # 'CodeBlock' eq $code_block->name or return; - my($type, @classes) = @{ $code_block->classes }; + my($type, @classes) = @{ [ split ' ', $code_block->class ] }; return unless $type; return unless $diagramtypes{$type}; my $kvs = $code_block->attr->[2];
これでエラーが回避できる。