Julia言語なのにほぼLaTeXのTikZテイストな今日この頃,今回はLaTeXで電気回路を描く時に 役に立つCircuiTikZをJulia言語から使おうというものです。
ここで,TikzPictures.jlのバージョンが最新の3.5.0であることを確認して下さい。
3.2
とかだとenvironment
オプションに対応してないので使えません。
ただ,TikzPictures.jlのバージョンを最新にするとPlots.jlのバージョンが落ちたりして
周りのパッケージへの悪影響がありそうなのでTikzPictures.jlは
独立した環境で試す方がいいでしょう。
使い方がうろ覚えなので毎度のごとくマニュアルを参照しながらサンプルを作ります。
using TikzPictures my_preamble = """ \\usepackage{luatexja} \\usepackage{circuitikz} """ src = """ \\draw (0, 0) to[sinusoidal voltage source] (0, 3) to[short] (2, 3) to[rmeter, t=A] (5, 3) to [R, l=R] (5, 0) to (0,0) (2, 3) to[rmeter, t=V, *-*] (2, 0); """ tp = TikzPicture( src, preamble=my_preamble, environment="circuitikz", width="6cm", height="4cm" ) save(SVG("circuitikz"), tp) run(`inkscape -w 768 -o circuitikz.png circuitikz.svg`)
luatexja
をプリアンブルに追加しているのは単なる気分です。今回の動作には関係ありません。
ポイントは「LaTeXStrings
を使わないこと」です。L"ほげほげ"
とすると
文字列の両端に$
を挿入しようとするのでかなりうっとおしいです。
面倒でも普通の文字列でバックスラッシュを\\
と重ねる方が分かりやすいかもしれません。
environment="circuitikz"
とするのがミソで,こうすることでLaTeXのソースでいうところの,
\begin{circuitikz} ここはソース文字列の内容 \end{circuitikz}
を実現しています。
上の長い方のソースの出力結果です。
CircuiTikZのマニュアルを見ると以前見たより機能がてんこもりです。 7セグの表示とかあるんですね。サンプルを作ってみました。
using TikzPictures my_preamble = """ \\usepackage{luatexja} \\usepackage{circuitikz} """ cmds = ["\\draw($k, 0) node[seven segment val=$k dot none box off] {};\n" for k in 1:9] tp = TikzPicture( string(cmds...), preamble=my_preamble, environment="circuitikz", width="11cm", height="3cm" ) save(SVG("circuitikz-2"), tp) run(`inkscape -w 768 -o circuitikz-2.png circuitikz-2.svg`)
TikZにもforeach
文がありますが,Julia言語の方が数値は扱いやすいので,
繰り返しやある数値から自動で画像を生成する時に便利に使えそうな気がします。