电路 (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)作为类选项指定。若只想制作一张独立电路图并导出为图片,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) 画一条线,在途中放置一个电阻符号,并在上方加上 “R₁” 标签。基本形式是在专用的 circuitikz 环境 中写绘图命令。其内部遵循普通 TikZ 语法;你也可以加载 circuitikz 的库后使用 \begin{tikzpicture},但先掌握这个环境就足够了。

核心写法:用 to[…] 放置部件

circuitikz 的核心都浓缩在这一行里。在 TikZ 路径操作 to 的方括号中写入部件键,就会在连接两点的导线 中途插入一个该部件。例如 \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}

这会画出一条 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]

电源会按用途使用不同符号: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₁,其余部分用 to[short] 导线闭合。右侧电阻带有两个箭头:一个表示流过它的电流 i₁,另一个表示其两端电压 u₁。关键在于用 to[short] 把剩余两边变成普通导线来闭合回路。

若要在标签中写带单位的数值,可用 [siunitx] 选项加载包(\usepackage[siunitx]{circuitikz});随后可使用 number<\unit> 形式,如 l=5<\ohm>l=3<\micro\farad>,并正确排成 “5 Ω” 和 “3 µF”。

节点型部件与样式设置

三个或更多端子的部件,如晶体管、运算放大器、接地,不能放进 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{…}。这是 circuitikz 版的 TikZ \tikzset,可写在导言区,也可写在代码中途。例如可以把线条加粗,或把电压箭头习惯固定为美国式(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 库缓存各图。