circuitikz(サーキットティクス)は、電気回路・電子回路の回路図を LaTeX の中にコードで描くためのパッケージです。TikZ/PGF の上に作られていて、抵抗・コンデンサ・電源・トランジスタといった部品を「記号」として知っているのが特徴。配線をパスとして書き、その途中に to[R=…] のように部品を差し込むだけで、本文と同じ品質の回路図が組み上がります。
circuitikz とは——導入
TikZ は汎用の作図システムで、線・円・ノードといった「素の図形」を扱います(基本は別ページ「TikZ の基本」を参照)。circuitikz はその TikZ を土台に、電気記号の語彙 を足したものです。抵抗を描くのにジグザグ線を手で引く必要はなく、R という部品キーを指定すれば、向き・端子・線の太さまで整った記号が自動で配置されます。作者は Massimo A. Redaelli ら。
使い始めるには、プリアンブルで \usepackage{circuitikz} と読み込みます(TikZ も一緒に読み込まれます)。pdfLaTeX・LuaLaTeX・XeLaTeX ではそのまま動きます。pLaTeX・upLaTeX のように DVI を経由する場合は、TikZ と同じくドライバ(通常 dvipdfmx)をクラスオプションで指定します。回路図を 1 枚だけ作って画像に書き出したいなら、standalone クラスが便利です。
\documentclass{article} % 回路図1枚なら \documentclass[border=3pt]{standalone}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz}
\draw (0,0) to[R=$R_1$] (2,0);
\end{circuitikz}
\end{document}これは原点 (0,0) から右へ (2,0) まで配線を引き、その途中に抵抗の記号を 1 個置き、上に「R₁」というラベルを添えたものです。circuitikz という専用の環境の中に作図コマンドを書くのが基本形。中身は TikZ と同じ文法なので、\begin{tikzpicture} に circuitikz のライブラリを読み込んで使うこともできますが、まずはこの環境を覚えれば十分です。
核心のイディオム——to[…] で部品を置く
circuitikz のすべてはこの一行に詰まっています。TikZ のパス操作 **to の角括弧の中に部品キーを書くと、その 2 点を結ぶ配線の 途中にその部品を 1 個** 挿入できます。たとえば \draw (0,0) to[R=$R_1$] (2,0); は「(0,0) から (2,0) へ、抵抗 R₁ を経由して進め」という意味です。これを数珠つなぎにすれば、配線と部品が交互に並んだ回路ができます。
\begin{circuitikz}
\draw (0,0) to[R=$R_1$] (2,0)
to[C=$C_1$] (2,-2);
\end{circuitikz}この絵は、(0,0) から右へ進む途中に抵抗 R₁ を置き、続いて (2,0) から下へ進む途中にコンデンサ C₁ を置いた、L 字型の配線です。**部品キーに続けて =ラベル と書くと、それがその部品のラベルになる** という略記が効いていて、to[R=$R_1$] は to[R, l=$R_1$](後述)の短い書き方です。配線そのものを引きたいだけで部品を置かないときは、**to[short]**(ただの導線)を使います。
座標の指定は TikZ そのままで、直交座標 (x,y)(既定の単位はセンチメートル)や、配線を直角に折るときの便利な記法 (a -| b)(a の x 座標と b の y 座標が交わる点)も使えます。部品の置かれる向きは、パスの進行方向に自動で合います。
よく使う二端子部品(バイポール)
to[…] に置けるのは、端子を 2 つもつ バイポール(bipole) 部品です。下の表は頻出のもの. 部品キーは覚えやすい頭文字(抵抗 R、コンデンサ C、インダクタ L)が中心で、電源やダイオードには別名もあります。
| 部品キー | 部品 | 使用例 |
|---|---|---|
R | 抵抗 | to[R=$R_1$] |
C | コンデンサ | to[C=$C_1$] |
L | インダクタ(コイル) | to[L=$L_1$] |
battery / battery1 | 電池(複数セル/単セル) | to[battery1] |
V / vsource | 電圧源 | to[V=$U_q$] |
I / isource | 電流源 | to[I=$I_0$] |
D | ダイオード | to[D] |
short / open | 導線/断線(開放) | to[short] |
closing switch | スイッチ(開/閉) | to[closing switch] |
電源は用途で記号が分かれます。V(vsource)は丸に正弦波などの汎用電圧源、battery1 は電池の記号、交流向きには sV(正弦波電源)もあります。スイッチは状態を区別して closing switch(閉じる向きの開スイッチ)と opening switch があります。ダイオードは既定の D のほか、発光ダイオードやツェナーなどの種類も部品キーで選べます。
ラベルと電圧・電流の注釈
部品の脇に値や名前を添えるのが ラベル です。基本は l=…。to[R=$R_1$] の略記と同じ結果になります。ラベルを部品の どちら側に置くか は記号で指定でき、l_=… は反対側(線の下や内側)、l^=… は逆側(上や外側)に寄せます。配線が縦か横かで「上下」「左右」が変わるので、見栄えに応じて l と l_ を使い分けます。
回路図では、部品の値だけでなく 流れる電流 や かかる電圧 を矢印付きで示したいことがよくあります。これには専用キーがあり、**i=… は電流(部品に沿った向きの矢印)、v=…** は電圧(部品をまたぐ向きの矢印)を描きます。向きを反転したいときは i_=… や v_=… のように下線を付けます。
\begin{circuitikz}
\draw (0,0) to[V=$U_q$] (0,2)
to[short] (2,2)
to[R=$R_1$, i=$i_1$, v=$u_1$] (2,0)
to[short] (0,0);
\end{circuitikz}この絵は、左の縦辺に電圧源 Uq、上辺は導線、右の縦辺に抵抗 R₁ を置いた一巡の閉回路(ループ)です。右辺の抵抗には、流れる電流 i₁ を表す矢印と、両端の電圧 u₁ を表す矢印が添えられます。to[short] で残りの 2 辺をただの導線にして輪を閉じているのがポイントです。
ラベルに単位付きの数値を書きたいときは、[siunitx] オプションを付けて読み込むと(\usepackage[siunitx]{circuitikz})、l=5<\ohm> や l=3<\micro\farad> のように 数値<\単位> の記法が使え、5 Ω・3 µF のように正しく組まれます。
ノード型部品とスタイル設定
端子が 3 つ以上ある部品——トランジスタやオペアンプ、接地(グランド)など——は to[…] では置けません。これらは TikZ の ノード として、\node[部品名] (名前) at (座標) {}; の形で配置します。中身は空でも **波括弧 {} を必ず付ける のが約束です。配置したノードは、端子ごとに アンカー** をもち、(名前.出力端子) のように名前で参照して配線をつなげます。
- 接地 —
\node[ground] at (0,0) {};。vcc/veeで電源レールの記号も置けます。 - MOSFET —
\node[nmos] (q1) {};、\node[pmos] {};。バイポーラはnpn/pnp。 - オペアンプ —
\node[op amp] (oa) {};。端子はoa.+(非反転入力)、oa.-(反転入力)、oa.out(出力)で参照します。 - パスの途中にノードを置くときは、座標のあとに
node[nmos]{}のように書きます(例:(0,0) node[nmos]{} (2,0))。
記号の流儀は国・分野で異なります。抵抗を 長方形(IEC/ヨーロッパ式) で描くか ジグザグ(米国式) で描くかは選べて、環境オプションに [american]/[european](あるいは個別に [american resistors]/[european resistors])を渡すか、resistor=american のようにキーで指定します。同様にインダクタにも cute/american/european の別があります。
回路全体の見た目をまとめて整えるには **\ctikzset{…}** を使います。TikZ の \tikzset に相当する circuitikz 専用の設定命令で、プリアンブルでもコード途中でも書けます。たとえば線を太めにしたり、電圧矢印の流儀を米国式(american voltages)に固定したりできます。
\usepackage[siunitx, american]{circuitikz}
\ctikzset{bipoles/length=1cm} % 部品の長さをそろえる
\begin{circuitikz}
\draw (0,0) node[ground]{} to[V=$U_q$] (0,2)
to[R=$R_1$] (2,2)
to[C=$C_1$] (2,0) -- (0,0);
\end{circuitikz}この絵は、左下を接地し、左辺に電圧源 Uq、上辺に米国式(ジグザグ)の抵抗 R₁、右辺にコンデンサ C₁ を置いた閉回路です。最後の -- (0,0) は TikZ そのままの直線で、底辺を導線として閉じています(to[short] と同じ役割)。\ctikzset で部品の長さを 1 cm にそろえているので、記号の間隔が整って見えます。
circuitikz は TikZ の上に乗っているので、TikZ の作図機能(座標計算の calc、相対配置の positioning、ラベル用の \node、色やスタイル)をそのまま併用できます。複雑な回路は TikZ の流儀でレイアウトを組み立て、部品だけ circuitikz に任せる——という分担が自然です。コンパイルが重くなったら、TikZ と同じく external ライブラリで各図をキャッシュできます。