TikZでマグネチックスターラー(下写真*1)の図を描きたいと思いました。
しかしこれをTikZを使って座標で一からゴリゴリ描いていくのは流石に辛い……というわけで,若干チートして,まずは Adobe Illustrator を使って普通に描き,それからTikZに変換するという手法を試みてみました。
SVGをTikZに変換
【追記】現在はこの変換を行うためのスクリプトとそれを動かすための Python 2 環境をDockerコンテナ化してあります。詳細は以下の記事をご覧ください。
準備
次に,このSVGをTikZに変換することを試みます。Stack Exchange で変換法を調べた結果,こうすればよさそうだと分かりました。
- ここから inkex.py, simplepath.py, simplestyle.py をダウンロード。
- ここから tikz_export.py をダウンロード。
- tikz_export.py を実行するためには,Python 2.7 の lxml ライブラリが必要なので,たとえば以下の手順でインストール(以下は OS X Mavericks 10.9.2 で確認)。
$ sudo easy_install pip $ sudo bash # export CFLAGS=-Qunused-arguments # pip install lxml
(またはMacPortsで
$ sudo port install python27 $ sudo port install py27-lxml
という手も。)
変換実行
先程ダウンロードした inkex.py, simplepath.py, simplestyle.py と同じディレクトリに MagneticStirrer.svg を保存し,次のコマンドで変換を実行。
$ python -B tikz_export.py MagneticStirrer.svg -o MagneticStirrer.tex
(MacPorts から python27 をインストールした場合は
$ python2.7 -B tikz_export.py MagneticStirrer.svg -o MagneticStirrer.tex
で。)
変換結果(1回目)
とりあえず変換して生成されたTikZソースをコンパイルした結果は次の通り。
概ね雰囲気は再現できているものの,
- 塗りがブラック100%のオブジェクトがなぜか消えている。
- グラデーション塗りが飛んでいる。
- クリッピングマスクが適用されていない。
など,細かいところが色々と不十分です。
変換結果(2回目)
そこで,
- フォントまわりのトラブルを避けるためテキストオブジェクトは全てアウトライン化。
- 塗りがブラック100%のオブジェクトは99%にする。
- グラデーション塗りは使わない。
- クリッピングマスクは解除し手動でクリップ。
など,変換しやすいように整えて再チャレンジした結果が以下の通り。
今度はいい感じに再現されました!
生成ソース
この変換で生成されたTikZソースは,以下のように,1000行以上もの \path の羅列となりました。
- はたしてそこまでしてTikZで描く必要があるのか?
- Illustratorで描いたのであれば初めからそのPDFを直接 \includegraphics で貼ればよいのでは?
といったツッコミはご容赦ください(^^; 単にやってみたかっただけです……。
それに,TikZソース化しておけば,パラメータを動かしてアニメーション化するといった応用も考えられますね。
( pLaTeX + dvipdfmx でPDF化するときには,先頭行を
\documentclass[dvipdfmx]{article}
に変更のこと。)
変換前の SVG
変換後の TikZ ソース
*1:Wikimedia Commons よりRuhrfisch氏のGFDLの画像を引用。