我想创建一个电流源,就像许多荷兰电路书籍中提到的那样。标准的欧洲组件不是我想要的。我想要这样的东西:
\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage[european]{circuitikz}
\begin{document}
\begin{figure}[!ht]
\begin{circuitikz}
\draw (0,0) to[I, l=$I_B$] (0,2);
\draw [->] (-0.5,0.65) -- (-0.5,1.35);
\end{circuitikz}
\end{figure}
\end{document}
在代码中,我自己绘制了箭头(作为电流源符号的一部分)。但我希望有一个完整的circuitikz符号。另外,我希望箭头和箭头旁边的符号$I_B$稍微靠左一点。我试图研究电流源的circuitikz代码,但我认为我的知识太贫乏了。
答案1
我从 circuitikz 中获取了当前源,并添加了来自这个答案(或多或少)。
标签位置由组件和的边框决定[inner sep]
,因此移动标签的最简单方法就是在标签内添加空间。
\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage[european]{circuitikz}
\makeatletter
\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isource}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
\pgfpointorigin
\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
\pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
\pgfusepath{draw}
\pgfscope
\pgfsetarrowsend{latex'}
\pgfpathmoveto{\pgfpoint{0.8\pgf@circ@res@left}{1.2\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@right}{1.2\pgf@circ@res@up}}
\pgfusepath{draw} %draw arrow
\endpgfscope
}
\makeatother
\begin{document}
\begin{figure}[!ht]
\begin{circuitikz}
%\tikzset{every node/.style={inner sep=1em}}
\draw (0,0) to[I, l={$I_B$~},name=A] (0,2);
%\draw[red] (A.sw) rectangle (A.ne);
\end{circuitikz}
\end{figure}
\end{document}
为了获得更多控制,请用节点替换标签:
\begin{document}
\begin{circuitikz}
\draw (0,0) to[I, name=A] (0,2);
\node[left=2pt] at (A.n) {$I_A$};
\draw (0,0) to[I, name=B] (2,0);
\node[above=2pt] at (B.n) {$I_B$};
\end{circuitikz}
\end{document}