7
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Asymptoteで回路図を描く

これは「TeX & LaTeX Advent Caleandar 2014」の22日目の記事でした.
(21日目は termoshtt さんです.23日目は ti5942 さんです.)

3年前に作成していた文書で回路図を描く必要があり,Asymptoteで回路図を頑張って書こうとしたお話です.

LaTeXにおける図形描画

本題に入る前にAsymptoteとTikZの説明をします.テキストベースで,LaTeXまわりで図形を描画するツールとして,Asymptote,TikZがあります (ちなみにAsymptoteは美文書5版,TikZは美文書6版で取り上げられています).それぞれの特徴を簡単に挙げます.

  • Asymptote
    • asy コマンドで実行
    • 内部でLaTeXコマンドを呼びだすが,インターフェイスとしては独立
      • LaTeXコードに埋め込めるようなパッケージも存在していたはず
    • C++のようなソースコード,独立した画像を出力
  • TikZ
    • tikzパッケージをインクルードして実行
      • e-TeX拡張の処理系が必要
    • LaTeXソースコードに埋め込む
    • ソースコードはTeXマクロ
    • beamerのアニメーションを描く時に便利

私個人的には,

  • ベタなTeXマクロでなく,Asymptoteの方が書きやすい/読みやすい
  • TeXと分離して処理できる
    • 例えば,TeXに出力するのではなくHTMLに埋め込む時にも取り回しが楽

という理由で好きだったのですが,最近はTikZの方が流行っているように見えます.そもそもAsymptoteがどれほど流行ったのか知りませんが.

とても簡単なサンプル

どちらも長方形を描く例です.サンプルなのでまどろっこしく書いています.

Asymptoteの例

void drawRectangle(real x, real y, real w, real h) {
  draw((x,y)--(x+w,y)--(x+w,y+h)--(x,y+h)--cycle);
}

drawRectangle(0, 0, 100, 100);

TikZの例

\begin{tikzpicture}
  \draw (0, 0) -- (100, 0) -- (100, 100) -- (0, 100) -- cycle;
\end{tikzpicture}

なぜAsymptoteで描いた?

当時TikZはあったかもしれないですが,私は存在を知りませんでした.どのみち,e-TeX拡張非対応の処理系(TeXLive 2010)も使っていたので使用できなかったと思います.

実装

ソースをこちらに置きました : circuit.asy

確か長方形や円などはプリミティブで書くコマンドがあったかと思いますが関数で自前で書きなおしています.抵抗やら電圧源などは,パラメータがあって少し複雑に見えますが,ただひたすらベタに書いてます.なんとなく読めるでしょうか?
垂直・水平方向にもパラメータで対応するようにしています.関数では描画の終了した点を返すようにしてパスを書きやすくしています.

実際の回路図の描画では,あまり流れるように図形の描画が宣言できていません.もうちょっと良い設計はあったんでしょうか...

circuit.png

ちなみにTikZでは?

tikz-circuit.tex

なんと,回路図を描くパッケージがいくつかあります.この例では circuitikz を利用しています.
...簡単ですね.

tikz-circuit.png

おわりに

確かにTikZの方がパッケージも充実しているのですが,記述性の方はAsymptoteの方が良いように感じるんですが,どうでしょうか.

結論として,

  • 図形描画ツールとしてTikZと対比しつつAsymptoteを紹介した
  • さくっと図形の構造化ができるAsymptoteで回路図を描いてみた
  • その結果,オブジェクトを抽象化して描くことはできた

というお話でした.
昔作ったものをせっかくだからアップしておきたい,と思って書きだしたんですが,書きながら今一つだと感じていますhi
回路図描く時って普通は専用のツール(無料のやつだとQt-Bschとか)使う人がほとんどなんでしょうか.気になります.

ちゃんと確認していないのですが,この記事を書こうと思って探してみたらAsymptoteにもそれっぽいパッケージがありました.車輪の再発明はよくないですねぇ...

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
7
Help us understand the problem. What are the problem?