0%

LaTeX circuitikz简易食用指南

写前的扯淡

今天下午在做电路作业,画电路把自己画累了,不想拿格子一笔一笔画电路,于是看看能不能用LaTeX来写。

就没听说过由于懒得手写作业而来用TeX画电路的,属实离谱

circuitikz是tikz的超集,是在tikz的基础上添加了专属画电路的语法内容。

import

1
\usepackage{circuitikz}

不需要\usepackage{tikz}

hello world

摘自overleaf的tutorial%E2%80%94Circuit_Diagrams_Using_Circuitikz)

我们直接拿一段hello world难度的代码来分析下,看看你要写的内容表示了啥:

1
2
3
4
5
6
7
8
9
\begin{circuitikz}
\draw (0,0) to[battery] (0,4)
to[ammeter] (4,4)
to[C] (4,0) -- (3.5,0)
to[lamp, *-*] (0.5,0) -- (0,0)
(0.5,0) -- (0.5,-2)
to[voltmeter] (3.5,-2) -- (3.5,0)
;
\end{circuitikz}

对hello world的分析

代码的最外层框架是这个样子:

1
2
3
4
5
\begin{circuitikz}
\draw (0, 0)
<your-code>
;
\end{circuitikz}

这里其实可以像tikz那样在里面写多个\draw语句,如果有很多并联电路可以自己用到。

每条具体的语句中有几个重点的地方:

  • to后面中括号可以填内容,第一个表示了元件的种类,后面的是可选参数,关于可选参数后面再分析。
  • 中括号后可以紧跟一个坐标,这代表着从当前的起点到该坐标居中绘出上面指定的电路元件。
  • 两个坐标可以直接用--来连接,这代表着用直的导线来连接这两个点。
  • 在我自己认为,一个\draw语句最好是描述一个网孔的电路元件分布情况,如果有并联的,虽然也可以在同一个\draw语句中完成,不过我倾向于另起几个\draw来完成。

基本电路元件

这部分是填在中括号的第一个参数中的:

  • current source: I
  • voltage source: V
  • capacitance: C
  • voltmeter: voltmeter
  • ammeter: ammeter
  • lamp: lamp
  • resistor: R
  • battery: battery
  • wire: short

电路元件自然有不同的样式风格,就比如电阻可以是一个矩形也可以是折线,一般我们通过选用american或者european来确定电路的样式。

可选参数

标节点

  • o-o:在连线的起始段和末端都画一个空心点
  • *-*:在连线的起始段和末端都画一个实心点
  • o-*
  • *-o

加样式

  • l=
  • i=
  • v=:一个弧线的箭头
  • f=:一个浮在旁边的箭头,经常用来标电流,及其常用
  • f_=:数据或者标识符通过加一个下划线可以换一边

加单位

  • <\ampere>
  • <\volt>
  • <\frad>
  • <\ohm>
  • <\kilo>, <\milli>, …
  • 当然,传统套行内公式的方法也是可以的

加颜色

  • color=red

调大小

一般其实是不用调的,挤的话直接调大一点就好了,不过想调元件大小也不是不可以啦(

  • \ctikzset{bipoles/resistor/height=0.15}:斜杠分隔出若干个想调大小参数的元件名称,这一行调高
  • \ctikzset{bipoles/resistor/width=0.4}:也可以调宽

特殊的

  • V<=10V:如果想要画的电压源的方向跟默认相反,就手动调整
  • f>^=i:在流入方向加一个箭头,标志为i

examples

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\begin{circuitikz}[european]
\draw (0, 0)
to [R=$R_2$] (0, 2) -- (0, 6)
to [I=$i_{s1}$] (6, 6) -- (6, 2)
to [V<=$v_s$] (6, 0)
to [short, f=i] (3, 0) -- (0, 0)
(6, 4.5)
to [R=$R_1$] (0, 4.5)
(6, 3)
to [R=$R_3$] (3, 3) -- (2, 3)
to [I_=$i_{s2}$] (0, 3)
(2, 3)
to [R=$R_4$, f>^=$i_4$] (2, 0)
;
% \draw (5, 0) to [open, i=$i$] (4, 0);
% \draw (2, 3) to [open, i=$i_4$] (2, 2);
\end{circuitikz}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\begin{circuitikz}[european]
\draw (0, 0)
to [V=9V] (0, 4)
to [short] (4, 4)
to [R=2<\ohm>] (5, 4) -- (6, 4)
to [V<=3V] (7, 4) -- (8, 4)
to [R=3<\ohm>] (9, 4) -- (10, 4)
to [V=4V] (11, 4) -- (12, 4)
to [R=6<\ohm>, f>^=i] (12, 0) -- (0, 0)
;
\draw (2, 4)
to [R=9<\ohm>] (2, 0);
\draw (3, 4)
to [R=3<\ohm>] (3, 2)
to [I<=2A] (3, 0);
\draw (7.5, 4)
to [R=2<\ohm>] (7.5, 2)
to [V<=10V] (7.5, 0);
\end{circuitikz}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
\begin{circuitikz}[european]
\draw (0, 0)
to [R=2<\ohm>] (0, 2) -- (0, 3)
to [R=1<\ohm>] (0, 4) -- (0, 5)
to [short] (4, 5) -- (5, 5)
to [R=2<\ohm>, f>=i] (8, 5)
to [V<=10V] (8, 0) -- (0, 0)
(5, 0)
to [R=2<\ohm>] (5, 2) -- (5, 3)
to [R=4<\ohm>] (5, 4) -- (5, 5)
(0, 2.3)
to [I=9A] (5, 2.3)
;
\end{circuitikz}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

\begin{circuitikz}[european]
\draw (0, 0)
to [short] (0, 6)
to [R=4<\ohm>] (3, 6)
to [R=6<\ohm>] (6, 6)
to [short] (6, 0)
to [V=10V] (0, 0)
(0, 3)
to [R=6<\ohm>] (3, 3)
to [R=4<\ohm>] (6, 3)
;
\draw
(3, 6) node[label={[font=\footnotesize]above:a}] {}
to [R=$R_x$, f=i, *-*] (3, 3) node[label={[font=\footnotesize]below:b}] {}
;
\end{circuitikz}

推荐

  • 不会就google
  • 不过有时去google还不如直接翻官方的manual
  • 多手贱,多写,多写就会了