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)를 클래스 옵션으로 지정합니다. 회로도 한 장만 만들어 이미지로 내보내고 싶다면 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)까지 배선을 그리고, 그 중간에 저항 기호 하나를 놓으며, 위에 “R₁” 라벨을 붙인 것입니다. 기본 형태는 전용 circuitikz 환경 안에 작도 명령을 쓰는 것입니다. 내용은 일반 TikZ 문법을 따르므로 circuitikz 라이브러리를 읽은 \begin{tikzpicture}를 사용할 수도 있지만, 우선 이 환경을 익히면 충분합니다.
핵심 관용구: to[…]로 부품 배치
circuitikz의 모든 핵심은 이 한 줄에 들어 있습니다. TikZ의 경로 연산 to의 대괄호 안에 부품 키를 쓰면, 두 점을 잇는 배선 중간에 그 부품 하나가 삽입됩니다. 예를 들어 \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}이는 L자형 배선을 그립니다. (0,0)에서 오른쪽으로 가는 경로 중간에 저항 R₁을 두고, 이어서 (2,0)에서 아래로 가는 경로 중간에 콘덴서 C₁을 둡니다. 여기서 쓰인 축약은 부품 키 뒤에 =label을 쓰면 그것이 그 부품의 라벨이 된다는 것입니다. 따라서 to[R=$R_1$]는 to[R, l=$R_1$](아래 설명)의 짧은 형태입니다. 부품 없이 배선 자체만 그리고 싶을 때는 to[short](그냥 도선)를 사용합니다.
좌표 지정은 TikZ 그대로입니다. 직교 좌표 (x,y)(기본 단위는 센티미터)와, 배선을 직각으로 꺾을 때 편리한 (a -| b) 표기(a의 x 좌표와 b의 y 좌표가 만나는 점)를 사용할 수 있습니다. 부품의 방향은 경로가 진행하는 방향에 자동으로 맞습니다.
자주 쓰는 두 단자 부품(bipoles)
to[…]에 놓을 수 있는 것은 단자가 두 개인 바이폴(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 외에도 LED, 제너 등 종류를 부품 키로 선택할 수 있습니다.
라벨과 전압/전류 주석
라벨은 부품 옆에 값이나 이름을 붙입니다. 기본 키는 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]로 나머지 두 변을 그냥 도선으로 만들어 고리를 닫는 것이 핵심입니다.
라벨에 단위가 붙은 값을 쓰고 싶다면 [siunitx] 옵션으로 패키지를 읽습니다(\usepackage[siunitx]{circuitikz}). 그러면 l=5<\ohm>이나 l=3<\micro\farad>처럼 number<\unit> 형식을 사용할 수 있고, “5 Ω”, “3 µF”처럼 올바르게 조판됩니다.
노드형 부품과 스타일 설정
단자가 3개 이상인 부품, 즉 트랜지스터, 오퍼앰프, 접지(그라운드) 등은 to[…]로 놓을 수 없습니다. 이들은 TikZ의 노드로 \node[part] (name) at (coordinate) {}; 형태로 배치합니다. 내용이 비어 있어도 중괄호 {}는 반드시 붙이는 것이 약속입니다. 배치된 노드는 단자마다 앵커를 가지며, (name.output-pin)처럼 이름으로 참조해 배선을 연결합니다.
- 접지 —
\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 위에 있으므로 좌표 계산의 calc, 상대 배치의 positioning, 라벨용 일반 \node, 색과 스타일 같은 TikZ의 작도 기능을 그대로 함께 사용할 수 있습니다. 복잡한 회로에서는 TikZ 방식으로 레이아웃을 만들고 부품만 circuitikz에 맡기는 분담이 자연스럽습니다. 컴파일이 무거워지면 TikZ와 마찬가지로 external 라이브러리로 각 그림을 캐시할 수 있습니다.