Set label name on two lines in CircuiTikZ

Here I provide a different solution from the one suggested by Peter.

Basically, I define a new kind of label lx that accepts two commands: the first one is the component name (for example R_1, C_1) and the second is dedicated to the component value. Its behaviour is similar to the standard l, therefore the followings:

  • lx_=...
  • lx^=...

hold. In conclusion, the command should be used as:

lx_={component_name and component_value}

For instance:

lx^={C$_1$ and \SI{1}{\farad}}

Here is the complete example:

\documentclass{article}
\usepackage[siunitx]{circuitikz}

\makeatletter
\ctikzset{lx/.code args={#1 and #2}{ 
  \pgfkeys{/tikz/circuitikz/bipole/label/name=\parbox{1cm}{\centering #1  \\ #2}}
    \ctikzsetvalof{bipole/label/unit}{}
    \ifpgf@circ@siunitx 
        \pgf@circ@handleSI{#2}
        \ifpgf@circ@siunitx@res 
            \edef\pgf@temp{\pgf@circ@handleSI@val}
            \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
            \edef\pgf@temp{\pgf@circ@handleSI@unit}
            \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
        \else
        \fi
    \else
    \fi
}}

\ctikzset{lx^/.style args={#1 and #2}{ 
    lx=#2 and #1,
    \circuitikzbasekey/bipole/label/position=90 } 
}

\ctikzset{lx_/.style args={#1 and #2}{ 
    lx=#1 and #2,
    \circuitikzbasekey/bipole/label/position=-90 } 
}
\makeatother

\begin{document}
\begin{circuitikz}
\draw (0,-3) to  [R, lx_={R$_1$ and \SI{510}{\ohm}}] (2,-3);
\draw (6,-3) to  [C, lx^={C$_1$ and \SI{1}{\farad}}] (8,-3);
\end{circuitikz}
\end{document}

Result:

enter image description here

Tags:

Circuitikz