CircuiTikZ — create new component

How can I create a new component and include it in CircuiTikZ? For example a 4 bit adder?

-

Components in CircuiTikz are defined in the pgfcirc*poles.sty files via pretty much low-level pgf commands. You can either

1. try looking at the *sty files, in particular pgfcirctripoles.sty there most ports are defined, and cut&paste your way to a new component. If you manage to code it, please send it to me so I can add it for everyone to use :)
2. send me a PNG of how you want the adder to look, and wait for me to code it ^^ I have a few requests in queue, and it is time I updated the package afterall...
-
I don’t understand anything in the .sty files :( Couldn’t you make a Tutorial ? Thanks for your help, your package is very nice ! – Calixte May 28 '11 at 21:09

There is an easy way. Use an existing component as a base, such as to[generic,color=white,n=myname] and draw anything you want in the space.

\newcommand{\speaker}[2] % #1 = name from to[generic,n=#1], #2 = rotation angle
{\draw[thick,rotate=#2] (#1) +(.2,.25) -- +(.7,.75) -- +(.7,-.75) -- +(.2,-.25);}
\begin{circuitikz}
\draw (0,2) to[C, l_=$C$, o-*] (2,2) to[short, -*] (3.5,2) to[short] (5,2);
\draw (0,0) to[short, o-*] (2,0) to[short, -*] (3.5,0) to[short] (5,0);
\draw (2,2) to[L=$L$] (2,0);
\draw (3.5,2) to[R=$R$] (3.5,0);
\draw (5,2) to[generic, n=S1](5,0);
\speaker{S1}{0}
\end{circuitikz}


I have improved on my technique since then, as explained in the following tutorials.

http://www.elfsoft2000.com/projects/speaker.pdf

http://www.elfsoft2000.com/projects/multipole.pdf

http://www.elfsoft2000.com/projects/bipole.pdf

-
I just want to note that \speaker{S1}(0} should be \speaker{S1}{0}, but it won't let me do a single character edit. Great example! – ackey Mar 2 '14 at 4:30
Thank you. Change made. (These small fonts kill me.) – John Kormylo Mar 2 '14 at 22:30