ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

Plots.jlのAttributeの模式図をTikzPuctures.jlで描く

少しネタを含んでいます。

LaTeX歴が長いので,結構Tikzで図を描くのですが, 手軽に試せるものってありませんでした。

TikzがJuliaで使えればと思っていたのですが,ありました。 TikzPictures.jlパッケージです。

とりあえずTeXLiveをインストールしてパスを通して実行できる状況なら 多分使えると思います。(ざっくばらん)

using TikzPictures

tp = TikzPicture(
L"""
% Plot
\draw[draw,red, fill=red!30, thick] (0,0) rectangle (10, 6);
% Subplot
\draw[magenta, fill=magenta!10, thick] (0.5,0.5) rectangle (4.75, 5.5);
\draw[magenta, fill=magenta!10, thick] (5.25,0.5) rectangle (9.5, 5.5);
% Axis
\draw[gray] (1.0, 1.0) grid (4.0, 5.0);
\draw[ black, thick] (1.0, 5.0) -- (1.0,1.0) -- (4.0, 1.0);
\draw[gray] (6.0, 1.0) grid (9.0, 5.0);
\draw[black, thick] (6.0, 5.0) -- (6.0,1.0) -- (9.0, 1.0);
% Series
\draw[blue, very thick] (1, 3) sin (2, 4) cos (3, 3) sin (4, 2);
\draw[blue, very thick] (6, 1) -- (9, 4);
%
\node[draw,red, fill=red!30] at (5, 6) {Plot};
\node[draw,magenta, fill=magenta!10] at (2.625, 5.5) {Subplot};
\node[draw,magenta, fill=magenta!10] at (7.375, 5.5) {Subplot};
\node[black, fill=gray!80] at (2.625, 1.0) {Axis};
\node[black, fill=gray!80] at (7.375, 1.0) {Axis};
\node[blue, fill=blue!30] at (2.625, 2.5) {Series};
\node[blue, fill=blue!30] at (7.375, 3.2) {Series};
\node at (5, 6.5) {\Large PlotsのAttributeの模式図};
"""
    , preamble=raw"\usepackage{luatexja}"
)

save(PDF("test"), tp)
run(`inkscape -w 768 -o test.png test.pdf`)

Julia言語のソースなのにほとんどがTikZのソースという訳の分からないソースリストです。 注意点としては,LaTeXStringの中で空行があるとエラーが発生するので, 空コメント等で空行を無くすのがポイントでしょうか。

出力結果は次の通りです。

PlotsのAttributeのイメージ図(png)です。 本当は明調体とかなのですが,Inkscapeがpdfからpngに変換する時に勝手に変えているようです。

pdf出力でいいなら,WindowsならSumatrapdfで開きっ放しにするとプレビューしながら 図が描けてなかなかいいかもしれません。

追記

TikzPictures.jlでCircuiTikZを使うを書きながら気付いたのですが, LaTeXStringsを使ったL"ほげほげ"の書き方は,両端に$を自動で入れるので避けた方がいいかもしれません。 普通の文字列で,\\drawといった感じでエスケープしながら書く方が意味不明なエラーが防げていいかもしれません。