CircuiTikZ —如何创建电化学中使用的恒相元件 (CPE)

CircuiTikZ —如何创建电化学中使用的恒相元件 (CPE)

大家好,有人能帮忙如何在 circuittikz 中创建新组件吗?我正在尝试创建下图所示的 CPE 元件,而不是标准电容器元件。我搜索过,但找不到有关如何创建电路元件的简单指南。在此处输入图片描述

谢谢

答案1

请注意,\pgfcircdeclarebipole所有繁重的工作都由它完成。唯一棘手的部分是使用 PGF 原语进行绘图。

\documentclass[border=1pt]{standalone}
\usepackage{circuitikz}

\makeatletter
% *************************** CPE **********************************

\ctikzset{bipoles/CPE/height/.initial=.6}
\ctikzset{bipoles/CPE/width/.initial=.4}

\pgfcircdeclarebipole{}
 {\ctikzvalof{bipoles/CPE/height}}
 {CPE}
 {\ctikzvalof{bipoles/CPE/height}}
 {\ctikzvalof{bipoles/CPE/width}}
 {
    \pgf@circ@res@step = \ctikzvalof{bipoles/CPE/width}\pgf@circ@Rlen
        \divide \pgf@circ@res@step by 5

        \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
        \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
    \pgfpathlineto{\pgfpoint{\dimexpr \pgf@circ@res@left+2\pgf@circ@res@step}{0pt}}
        \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}

        \pgfpathmoveto{\pgfpoint{\dimexpr \pgf@circ@res@right-2\pgf@circ@res@step}{\pgf@circ@res@up}}
    \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
        \pgfpathlineto{\pgfpoint{\dimexpr \pgf@circ@res@right-2\pgf@circ@res@step}{\pgf@circ@res@down}}
        \pgfusepath{draw}
    
    \pgfsetlinewidth{\pgfstartlinewidth}% connect to circuit
    \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
    \pgfpathlineto{\pgfpoint{\dimexpr \pgf@circ@res@left+2\pgf@circ@res@step}{0pt}}
    \pgfusepath{draw}
}

\pgfcirc@activate@bipole@simple{l={#1}}{CPE}

\makeatother

\begin{document}
\begin{circuitikz}
\draw (0,0) to[CPE] (2,0);
\end{circuitikz}
\end{document}

演示

答案2

如果你想要一个新组件,这里有一个教程circuitikz在手册的最后一部分。不可否认,这并非易事 --- 在这种情况下,我将从一个简单的组件开始,例如电容器或通用矩形双极子,然后对其进行调整。

但作为一种更简单的方法,您只需使用普通的 TiZ 命令来绘制它。在下面的代码中,我绘制了一个水平的 CPE,范围从(in)(in)++(2,0)。它不像真的组件,但您可以轻松地将\draw(大量注释)放入宏中。

\documentclass[border=10pt]{standalone}
\usepackage[siunitx, RPvoltages]{circuitikz}
\begin{document}
\begin{tikzpicture}[]
    \draw (0,0) to[R=$R_s$] ++(2,0) coordinate(n1) -- ++(0,1) coordinate(in);
    % this is the CPE with its wire (it occupies a ++(2,0) horizontal span
    % horizonatl wire; I put it slightly yo the right cause it looks better
    \draw (in) -- ++(1,0) coordinate(cpe1) ++(0.2,0) coordinate(cpe2) 
    -- ++(0.8,0) coordinate(out)
    % "arms"
    (cpe1) -- ++(-0.2,0.4) (cpe1) -- ++(-0.2,-0.4)
    (cpe2) -- ++(-0.2,0.4) (cpe2) -- ++(-0.2,-0.4)
    % label
    (cpe1)  ++(0,0.4) node[above]{CPE};
   % rest of the circuit
\draw (n1) -- ++(0,-1) to[R, l_=$R_{\mathit{ct}}$] ++(2,0)
    -- ++(0,1) coordinate(n2) -- (out) (n2) --++(1,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

您还可以为包准备一个组件请求;但请注意,如果请求与“标准”组件定义有相关链接,可能会有相对尺寸等,我会考虑。要查看一个做得好的组件请求,请查看https://github.com/circuitikz/circuitikz/issues/383例如。

相关内容