TeX Alchemist Online

TeX のこと,フォントのこと,Mac のこと

Illustratorで描いた図をTikZに変換

TikZでマグネチックスターラー(下写真*1)の図を描きたいと思いました。

f:id:doraTeX:20140422092215j:plain

しかしこれをTikZを使って座標で一からゴリゴリ描いていくのは流石に辛い……というわけで,若干チートして,まずは Adobe Illustrator を使って普通に描き,それからTikZに変換するという手法を試みてみました。

まずはIllustratorで描く

まずはIllustratorでこんな感じに描きます。

f:id:doraTeX:20140422093008p:plain
そして,これをSVG形式で保存します。

SVGをTikZに変換

【追記】現在はこの変換を行うためのスクリプトとそれを動かすための Python 2 環境をDockerコンテナ化してあります。詳細は以下の記事をご覧ください。

qiita.com

準備

次に,このSVGをTikZに変換することを試みます。Stack Exchange で変換法を調べた結果,こうすればよさそうだと分かりました。

  1. ここから inkex.py, simplepath.py, simplestyle.py をダウンロード。
  2. ここから tikz_export.py をダウンロード。
  3. 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ソースをコンパイルした結果は次の通り。

f:id:doraTeX:20140422104504p:plain

概ね雰囲気は再現できているものの,

  • 塗りがブラック100%のオブジェクトがなぜか消えている。
  • グラデーション塗りが飛んでいる。
  • クリッピングマスクが適用されていない。

など,細かいところが色々と不十分です。

変換結果(2回目)

そこで,

  • フォントまわりのトラブルを避けるためテキストオブジェクトは全てアウトライン化。
  • 塗りがブラック100%のオブジェクトは99%にする。
  • グラデーション塗りは使わない。
  • クリッピングマスクは解除し手動でクリップ。

など,変換しやすいように整えて再チャレンジした結果が以下の通り。

f:id:doraTeX:20140422105435p:plain

今度はいい感じに再現されました!

生成ソース

この変換で生成されたTikZソースは,以下のように,1000行以上もの \path の羅列となりました。

  • はたしてそこまでしてTikZで描く必要があるのか?
  • Illustratorで描いたのであれば初めからそのPDFを直接 \includegraphics で貼ればよいのでは?

といったツッコミはご容赦ください(^^; 単にやってみたかっただけです……。
それに,TikZソース化しておけば,パラメータを動かしてアニメーション化するといった応用も考えられますね。

( pLaTeX + dvipdfmx でPDF化するときには,先頭行を

\documentclass[dvipdfmx]{article}

に変更のこと。)

変換前の SVG

変換後の TikZ ソース

*1:Wikimedia Commons よりRuhrfisch氏のGFDLの画像を引用。