LaTeXの文章の中でditaaを使いたい。
LaTeXで文書を書いている時に、図表を入れたい場合がある。表やグラフなら、table
環境やpgfplots
パッケージを使えばよいよね、ということになる。
だがほんのちょっとした図を描きたいときにはどうしたものだろう。
例えば、こんなような。
わざわざ、WordやPowerPointやWriterとかそんなようなツールを立ち上げて描画して、.pngにして、includegraphics
とかめんどくさい。大した図じゃないのに。
さらに問題なのは図表のもとになったファイル(.docとか.pptとか)を別に保存しておかないとならないことだ。でないと変更ができなくなってしまう。私の場合、そういうファイルは極めてしばしばどこかに行ってしまうし、製図したツールのサポートがいつまでもあるとは限らない。MicrosoftやLibreオフィススイートなら大丈夫なようにも思えるが、卒業や転職を気にライセンスが使えなくなったりすることもあるし、オープンソースコミュニティの存続やプロダクトの互換性がどこまで担保されるかというのは一応は未知数のことだ。
さて、冒頭に触れたditaaというのは、アスキーアートで書いた図表を綺麗にレンダリングしてくれるエンジンだ。
実は先ほどの図は、ditaaに以下のアスキーアートを与えた時に得られる図なのだ。
+--------+ +-------+ +-------+ | | --+ ditaa +--> | | | Text | +-------+ |diagram| |Document| |!magic!| | | | {d}| | | | | +---+----+ +-------+ +-------+ : ^ | Lots of work | +-------------------------+
LaTeXのソースファイル中に書いた、上のようなアスキーアートが
こんな風にレンダリングされたら便利ではなかろうか?少なくとも私は使いたい。 ということでそういうものを作ってみた。gistはここにある。
The "ditaa" environment · GitHub
このエントリの以降の部分はこのgistにコメントとして付した使用方法を和訳したものである。
事前条件
- ditaaがインストールされていること。(コマンドラインから
ditaa
が実行できること)。最近のメジャーなUbuntu等Linuxディストリビューションならsudo apt install ditaa
とするだけでインストールできると思う。Macでもbrew
が使えればsudo brew install ditaa
だけでOKだった。Windowsの場合はよくわからないのだがscoop というものがあるらしいので、これで簡単にインストールできるのかも知れない。その辺の最近の情勢がよく分からないので誰か教えて欲しい。 pdflatex
なりlatex
なり、LaTexのソースファイルをコンパイルする時に--enable-write18
オプションを与える必要がある。つまり、残念なことだがOverLeafやShareLaTeX(OverLeafに統合されるらしいが)では使えない。
使用方法
-
ditaa.sty
ファイルを.tex
ファイルと同じディレクトリに置く。 ditaa
ディレクトリをイメージがおいてあるディレクトリ(\graphicspath
コマンドで指定するディレクトリ)の下に作る。ちなみにditaa.sty
はこのディレクトリの下にあるditaa
ディレクトリに.ditaa
ファイルや.png
ファイルを作る..tex
ファイルの冒頭でusepackage[imagepath=IMAGEPATH]{ditaa}
と書く。IMAGEPATH
の部分は前述の\graphicspath
で指定するディレクトリと同じものである。- あとは普段通り、
.tex
をコンパイルすることになるが--enable-write18
オプションを忘れないこと。
後はこんなようなTeXソースが
\begin{ditaa}{ditaa caption example}{ditaaexample} +-----+ +----+ +---+ |Store+---->|This+---->|One| +--+--+ +----+ +---+ | V +-----+ |THIS | +--+--+ | V +-----------+ +--+ |another one+---->|Hi| +-----------+ +--+ \end{ditaa}
こんなふうにレンダリングされることになる。
ちなみに生成される図には\label{fig:ditaaexample}
のように、ラベルが自動で与えられるので\ref{fig:ditaaexample}
とすれば文中からその図を参照できる。
ラベルが衝突すればどちらにせよエラーになる(と思う)ので問題にはならない筈だが、ditaa
環境の第二引数、つまりこの例ではditaaexample
はditaaが.pngを生成する際のファイル名に用いられるので一応注意して欲しい。
ちなみに
\begin{ditaa}[6cm]{ditaa caption example2}{ditaaexample2} +---------+ | cBLU | | | | +----+ | |cPNK| | | | +----+----+ \end{ditaa}
のようにすれば、図の幅を指定できる。本当は\includegraphics
に指定できる全てのオプションを使えるようにしたかったのだが、私のLaTeX力では無理だった。
Tips
近頃はascii-flow みたいなサイトでアスキーアートの作図ができるので、一緒に使うと便利だと思う。
今後の課題
- 内部的に
\write18
という外部プログラムを実行するためのコマンドを使ってditaaの起動を行っている。---enable-write18
を指定する必要があるのもこのためである。従ってOverLeafのようなオンラインLaTeXサービスでの利用はできない。このパッケージが将来的に広く使われるようになればうまい方法があるのかも知れないが(ditaaコマンドを特別扱いするとか)、私がLaTeXを使うのは何年ぶりだろうという話だし、なんなら.sty
ファイルを作るのも\newenvironment
コマンドを使うのも初めてなので一体どうすればいいのか見当もつかない。LaTeX識者のアドバイスをお待ちしたい。 \includegraphics
コマンドに与えられる引数は全てサポートされるべきだが、そうなっていない。keyval
とかそういうのを使うようなのだが、難しすぎてよく分からない。本文中に書いたように私のLaTex力を超えると判断した。いい加減ペーパー自体を書かなきゃいけないし。これについてもLaTeX識者のアドバイスをお待ちしたい。