電気回路(circuitikz)

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 クラスが便利です。

document.tex
\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₁ を経由して進め」という意味です。これを数珠つなぎにすれば、配線と部品が交互に並んだ回路ができます。

latex
\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]

電源は用途で記号が分かれます。Vvsource)は丸に正弦波などの汎用電圧源、battery1 は電池の記号、交流向きには sV(正弦波電源)もあります。スイッチは状態を区別して closing switch(閉じる向きの開スイッチ)と opening switch があります。ダイオードは既定の D のほか、発光ダイオードやツェナーなどの種類も部品キーで選べます。

ラベルと電圧・電流の注釈

部品の脇に値や名前を添えるのが ラベル です。基本は l=…to[R=$R_1$] の略記と同じ結果になります。ラベルを部品の どちら側に置くか は記号で指定でき、l_=… は反対側(線の下や内側)、l^=… は逆側(上や外側)に寄せます。配線が縦か横かで「上下」「左右」が変わるので、見栄えに応じて ll_ を使い分けます。

回路図では、部品の値だけでなく 流れる電流かかる電圧 を矢印付きで示したいことがよくあります。これには専用キーがあり、**i=… は電流(部品に沿った向きの矢印)、v=…** は電圧(部品をまたぐ向きの矢印)を描きます。向きを反転したいときは i_=…v_=… のように下線を付けます。

latex
\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) {};vccvee で電源レールの記号も置けます。
  • MOSFET\node[nmos] (q1) {};\node[pmos] {};。バイポーラは npnpnp
  • オペアンプ\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 のようにキーで指定します。同様にインダクタにも cuteamericaneuropean の別があります。

回路全体の見た目をまとめて整えるには **\ctikzset{…}** を使います。TikZ の \tikzset に相当する circuitikz 専用の設定命令で、プリアンブルでもコード途中でも書けます。たとえば線を太めにしたり、電圧矢印の流儀を米国式(american voltages)に固定したりできます。

document.tex
\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 ライブラリで各図をキャッシュできます。